From 20c021660a705b4f3bb1f8ece4ff9c1829495c8a Mon Sep 17 00:00:00 2001 From: yabwon Date: Fri, 29 May 2020 16:04:03 +0200 Subject: [PATCH] version 2.0 2020-05-29, bug fix for the WORK and USER library --- SQLinDS/001_macro/dssql_inner.sas | 40 ++++++++++++++++++++++++++---- SQLinDS/999_test/test1.sas | 10 ++++++++ SQLinDS/999_test/test2.sas | 29 ++++++++++++++++++++++ SQLinDS/description.sas | 2 +- sqlinds.zip | Bin 10853 -> 11123 bytes 5 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 SQLinDS/999_test/test1.sas create mode 100644 SQLinDS/999_test/test2.sas diff --git a/SQLinDS/001_macro/dssql_inner.sas b/SQLinDS/001_macro/dssql_inner.sas index 31c78f8..a992051 100644 --- a/SQLinDS/001_macro/dssql_inner.sas +++ b/SQLinDS/001_macro/dssql_inner.sas @@ -17,15 +17,45 @@ /*** HELP END ***/ /* inner macro */ -%MACRO dsSQL_Inner() / SECURE; - %local query; +%MACRO dsSQL_Inner() / secure; + %local query tempfile1 tempfile2; %let query = %superq(query_arg); %let query = %sysfunc(dequote(&query)); %let viewname = dsSQL.dsSQLtmpview&UNIQUE_INDEX_2.; - proc sql; - create view &viewname as - &query + + %let tempfile1 = A%sysfunc(datetime(), hex7.); + %let tempfile2 = B%sysfunc(datetime(), hex7.); + + filename &tempfile1. temp; + filename &tempfile2. temp; + proc printto log = &tempfile1.; + run; + /* get the query shape i.e. the executed one */ + proc sql feedback noexec; + &query ; quit; + proc printto; + run; + + %put *** executed as ***; + data _null_; + infile &tempfile1. FIRSTOBS = 2; /* <- 2 to ignore header */ + file &tempfile2.; + /* create the view name */ + if _N_ = 1 then + put " create view &viewname. as "; + input; + put _infile_; + putlog ">" _infile_; + run; + %put *****************; + + proc sql; + %include &tempfile2.; /* &query */ + ; + quit; + filename &tempfile1. clear; + filename &tempfile2. clear; %MEND dsSQL_Inner; diff --git a/SQLinDS/999_test/test1.sas b/SQLinDS/999_test/test1.sas new file mode 100644 index 0000000..8cde321 --- /dev/null +++ b/SQLinDS/999_test/test1.sas @@ -0,0 +1,10 @@ +proc sort data=sashelp.class out=test1; + by age name; +run; + +data class; + set %SQL(select * from sashelp.class order by age, name); +run; + +proc compare base = test1 compare = class; +run; diff --git a/SQLinDS/999_test/test2.sas b/SQLinDS/999_test/test2.sas new file mode 100644 index 0000000..d016da2 --- /dev/null +++ b/SQLinDS/999_test/test2.sas @@ -0,0 +1,29 @@ +data class_work; + set sashelp.class; +run; + +data test_work; + set %sql(select * from class_work); +run; + +options dlcreatedir; +libname user "%sysfunc(pathname(work))/user"; +%put *%sysfunc(pathname(user))*; + +data cars_user cars_user2; + set sashelp.cars; +run; + +data test_user; + set %sql(select * from cars_user); +run; + +data test_user2; + set %sql(select * from user.cars_user2); +run; + +libname user clear; +%put *%sysfunc(pathname(user))*; + +proc datasets lib = work; +run; diff --git a/SQLinDS/description.sas b/SQLinDS/description.sas index c30b1c2..3f33618 100644 --- a/SQLinDS/description.sas +++ b/SQLinDS/description.sas @@ -6,7 +6,7 @@ Type: Package :/*required, not null, constant value*/ Package: SQLinDS :/*required, not null, up to 24 characters, naming restrictions like for a dataset name! */ Title: SQL queries in Data Step :/*required, not null*/ -Version: 1.0 :/*required, not null*/ +Version: 2.0 :/*required, not null*/ Author: Mike Rhoads (RhoadsM1@Westat.com) :/*required, not null*/ Maintainer: Bartosz Jablonski (yabwon@gmail.com) :/*required, not null*/ License: MIT :/*required, not null, values: MIT, GPL2, BSD, etc.*/ diff --git a/sqlinds.zip b/sqlinds.zip index b7f563198ce74f6cc0b3e86d05e5c473899d5d3e..3cc3362b628c5ddbb0da904e6a3a138806aa5796 100644 GIT binary patch delta 6794 zcmY*eWmFu>k{%oa1b2sEgG*p=x53>V0tB}}ATYT5;1Yrc3GVLhZowfCEI1Q%Z|>W( z`%?e9Pj&U_I`wtQx36`jgR7>9fQSzO08jy>0Uc^OSmq&#xI)Nm8ua3?-y~|Xvz^Sj zSqg9C@hJ)To+=Te0*zoYuJlg-gGYOrT8B4bzMQRyh@Zq z0~^;iAhZ)H%m|$r_3qd`_g#ljgFv(A9yPBj9U(*i=1rg`Z-6uHM9h!b0?n(j{X5+> zUfy#YhCEZJcLgDnbqbQ?*Wx=$ijM9voJDK!N3(= zm<<1ia2X_!-D}*(zQxzhuWj|0E!`*SLw@mIbXyg;Hm`Oqq7IT5B~JGqh0AG8piMAp z%!O9mo|-u16cx*1Q@M4Ui=Sp;19M-8cUA(UD}JUBX=BtVCnUZT`=*7If(5Y_9GBFD zaFbF}N8;Ub33 z8D&$5zWP!X zL*(y!c|^gVZ(V&R0)9qhnp#N z2ub|KcVGsLbLD86SNwm)THP~34Ls_fpfl*}T!A(rOGEAzn1Ypyztjgcs&vH~`g+LC zDLQIcJ^L&b3o=8ICE@Sd)ArD;Y;pKznHtcx9x*huUX6EtBYimYB`8MvaUDYcQPZU_ zxNi}?L*bmNvv{?dFpYQ!ukonq3DoIuqOv3+7AH4sfdyS12Kh6VPU>A&zJMs*z!r!7 zn#Zz&c@Ux~*2jxw!|b6cnla#OWcgo}Qk6DoeQpOw%W$HkWf>UN-DOWB%NlRTLFVju zt`g_9bLk}K>!ikP8^e0_by{gqb65%1k0w1s$IdOBCU7(}@uP^7SOe=Nu71w=3(Nrv zqI~8Yc4P9T?Yq=$s-ffN-yZpmLI;ob$0O&J2spb?`d2KFRe9`Z5sl~YQcZR~dPLhS z6A3N)K-m__EkJ373ZvBty&jiIZQJDT^L^G03txOcGHH%V!#r}()5ODC1`XaAL!2nx z^aJedt`2;KzD!8e@YL}nGCW}nm$q(xjQakfN!wO)y*`^I{dlm!U&id*X3Z@#82&r% zAls36ksc62og_i7^2MF&n*=U(?$lWL)*$^jEjcSnX6v*$^{|nDdix9NWTaF&dxSnx zJCI5!mMTS~NQ*63OR?zap(*-~--xS7Y2ScAaPe*6GydBjU+%?(_NO*ciCURRJ&M^x z*Jjw{w#0VCAZ0ufzs1hOMH@@|s@T-1t}iG&MNKCl9%CkG>WZCDgRBzN2b}EbnPYaE z7E`{R$MfBuq)JQ(T=ZtRPMr4a)3FVV>LOIH$)3y)tDicu_lXxd`*Cd!?@MmKQp|hOkrip8jadN(R%sO(RjWP8TODM-sIQL-$Kp;WDW?NI?!ni&e50<-Gcs&7|2)dQF!KfCKjUgc zx3^6auDW8;mL;6BP*s2bR((|g& z1JifKc^RtWExgP0UAbmi3*A`hEc9qWrK~=7AKc5JrLE)H=ORV!y|?&fz?U&%f<8ri!O3W5Xj%2Gol=n<;@5tw!6ndD zvmYiKDM`rcF>YYdf#>KYTclx!|AnAn2#QYmYotDN!XtPl#m8KAA3IgM?Q&R(m0kSA zpbztr@O@*))ZVka+jo^-eUeZY)d8M23$j&9tqzOYmV863;%6-dCkB}z9jv)q&JC*u zQe}`FPoLB1xh@)mAex%rkYTtl#S4T@!PUlzg(dm6v79ijgf$!s(4lozXn)(}+WOq>ecNX{pjXfHio?}@;4$i$ zj^R2-d1GZ;3bI==qLM+&9{YyR+u{vnG&;`|G7pubC=ZK*3UARANWXU4vx67egihTO z=wTJ)jEPUavX>AGteOWgOyt5+X@eY($pkaLa3hr@gSkbUT2GUd$+5v}XE7r{M}eo~ z9^__|J!uC$>%6;XI{Px6r zc>)#|e4IK~u2Lxk)h`Jy)QiCbNW2D!p=&L?LcJ@{MHj|^kxdexojj5;8t8l`QCj!tfcf-`t2id z-?XS*V|6SW)>)rM6RWm5c9$3VN!SRS*f#*~y*rrVl=+0@ddRq0Hm}%S%zMATJLP)o zQySsWaWeeI@d>rH#}t>od#@7>#q1Y{Sz-1Tx~BlI@0&!i)UGF@zmlPvcSoJD0#po# z4We$}%ZVSliS*JZqhl*mw5V(|CeGhfW6u8-X$9JUyNYZ%OaD_E^0X?rl3XK>%72%A zb)G|DJv@SJKHJsa=`M@aT{3IZpivQ!_>R=XB=~{ByGxE}(5fpq!WN!|hK7DSvmdpt ziEF<=A3;cE`Ys48Ve#ak+5yLqaw~C)BdHVNug>pJd&pB5S_z_JJ4wBv@1}hd7*%9jmvF4CZ8)j@C zeoOkQf=#QHS6Dj9uB^}gz>eM+KrdlF}-{?Ork7SspJHKAU!L^<=$50dZwcsk$HL75gM)g@G#M&2I! z9@6k?SHYb(k7ZXxg%)eRqFW4L(rY{+(ZKs+I{(Zl+g8r%|@%w;ayiy@8di z_rO~z>K+U2M%iA&LsUw)QkqNzf$-^@BnT>@(IukPHP0KrKJ&P2_$z|XPNed@OUdQL ztOzt_gFQnfu1|szVR+#UL-Hr}Lc|`j)u(+XcsPSsm-3u(6*$SXaMeG@Qv4-Aya6{^ z6*CD0$T;H|MOJzJm5nkZDmzUe{>A9+lFe++VGaZD1q!2U#sTN(6``7u1R{(LG3i0e z4=AUuKTewQv#0RV*NK)VWfNzBg-3jtC5F}V#_6M45v9zwVnJF*;(EQ>t*O5nVk1X& z4rEjo?fkuvbjLdCpI()1yO9HY)9JAb zuJ5dHbd7JrsC-nbxJR$>Uzcudpc?iu|FpO9Hva`z-#yY#%5oeQ-Tc7@`I|K*8ENWe zemXy~`r-*!A2oqa@bWQc)~U)v*~cUFc3Z-V-EVw<`WGTzkWfw**pLLaahqv49jie9YGJHj2cDR!!Z z=I)-=!He~l##cAre;mP>(!l6c8m9%8WY1x9;RYr}W?eUiy(?fto5FfBkY{i@F>(`YklFu%qYz&5EP^Q! zJ&103S5tJvVyd|yh#sDcSJH|0Ab($agf!oZKz$r>;-?O7=^amNc0?WPO-a6iLg6Nn z)=j4WxT`+sWoJ*QEYr)P7;(!~*)nY&-GXEMvE_-RML|ZZSu|5Ry6t<&ZOmel-V((A zk^tmN7&iH-A%)Z*h|16{L;40eSGHL^_j^;$` zhe`D9@3`fX9HbT}yNB#T-6j^6_91}E%aUU*f)a16hgdtA`jhk%ftil|di zeXIDVNh--~!CX569=avPm0n>)Y`U%96E7AUjw@l-cOxz|71yQS03|`M9ZHDCJ)o;6 zye|qM0{0_R)Jg*EN1Pk8oh*YEZO6(hYA=wt2KI|{5f{y)XJ)YE!-;nSqfL6Jq^?G| zaVD7FI9Dm5`uY0W&r^k)UD60>VKy|=`fd`e5IB9UlW?*sN{&Noa<`@E&5pLxt18lO zM~I(^a-vwda_Pjz(2?^bAc0JVe+{1TR(o}3ICOph?`481LR8-rw}=!BG_UVBi-t9M zPOq(|zC*q~y}Y*{%g|rtd0nj@#E+mMX>vx}P0j(0J4=nWCoo#wFPF@n+IEjPq#Jv3~8nCWpNiZi4xo;y=a)pc`B_l(qem!zhE2K4Qt$A?wP~#Y_wgF?soAWk=Cxs3rwcz#|O`JIsnj5ngHK730u1iE{ zu*E1N3Wq~OE~GIyr8eSIZ9Rqm0|BtqnrgKMrGwg&|0@#~b;* zE#T-ANw(=o->bI?C>~|O(D9UTqT@nQkr}lH*x&$ctwNh3;G3!AlE1={lZpbLp*_jO zhnck$!YS~258ULShF4R8zdq1FWtdW1geF>}K8v!18uFOgH~Fe!Ip0ZFPdBACrWO@3 z%ujM}B6$4TitE|E1s$ zcmMzn82}&!;6tmJ$)J%`_z*uWN9R>e?B{>d$#w`LyfidPIa7xTmqJSlSdUcZm`lqq z5V2r}vSv5dwYj3;t=>kHNVItcJ8L;0?^<{2o4Qy>U`_4&jeEEtCMG0ywZ=(|@rCku zVAmLg1Fv0&L`KN`5$VbQ1`77Nc@4K01Ys^w zieb>|e)P`sv$Y0^D$l9-Gg$vPWDUOkA14WF6wm~iJ4at?wWd=K$nZWJP&Q3ZP^ z#;bwL=XVkY!JktWx&i?5Vy5VV1M^0Nb7q9NQOK11RgmxL-ieZz{gGZ&C`&)026eF~ zB}Zo(0B{39g@Q|af`u8<1>280U`JCB&6v#?8an;9`N*m^*}Mu}ilKIv3WVL`M5zjh zeqUEX_B`out<<8APO{ueUTq`ZrGDG=%sXmk+} z{sBnc(VOW1OuqlnEl@wkw|{n_4UByMKMucQ6!>?OgGuDSCc>UfY*c>`_HSBLV;=q~B*4gskj-60%0q(o8#4j>>Y4U*C!B_Q2Mb6?-@ z-t}GQ&sno)J$u%(_MUm>TyIMUUqcxYi4X(=p@9tasx++6Vt7;VMNwSdD}_*?rD$`o z|C;o)5?dz_P!SF|R3S=WcW}Y@(D?dPuJj_jbw{F6-RpQ6zFR!KAo zj=CQDx>c zG=4`OE8g`0CmzFnih}++`Xl8Jii!H#f$cnHG+??H5ti7$?)YT*9O9J*mBy^1rqbkR z;ww;4C23mx98mWVa1a~~Zgi6_4-|o1w^p(>eb6`6;qDTUg62FFY7yy30B?7> zFjXJi`Gkap#i{bKtw&Kvt&XEuF)UK$%5~Zfkgd99JM2zT>@7md3orJE9y%cG4&=!m3Xnx+-xHT*UA|`dP5qYi!NRmpQ#iY#!^Z zI&HXse}0*Q#&;m#(K;Hko0Vf>r6tR*b-q!We25%<(;CCQr*%aBHiLQ^Og%3pVFJ02 zpqboI*S1s_M-AXcF#FY@%nSD%K6FS`+!tA_LsPph9-OP9IGbvwDcA}0ZNJ8ji&I;H zjUy71cBpS$8!~;bLeDuD{EKVwN5nb=v_GU<_Iis3`-~zB+%cwgr>SZfN*U#^_J0&_ zE!iyJs4#&5yt8`iaJ;`RtOX}nLyo+l4h!A185j#JeriP(mk12=Lw(6v&QVPi^H1;3## zI9&fU^e|fc1JgS*Kw;6d>X7{Jirk<+M?n8m5#JQh!WxVLgB93-K6@0`dW;rcot#g5 zR`}aqN=F`nq!cw2VQQtK@@-wFd7t0Vkx266W&S0rz*;W~M`b1aEF`4!4Is*EZM)Dr zNrHsZ+5T`@J^P5%)F-!jvUUQ(P}c9V0hWcMp!W`xtvZ72I~WBDj)XRGctgNJd0j!-~S{0Js zYDCi+$4{3Z^(u7tW|SWC?+t^15hAZ)otl{{! zf<4P=#Lh?vt+B`riN&R{as^3l#n~Rr48Va2FgmobMV@@|LOjMrbF|uBB0}~0TPxz( zYuVec_yiDN|8R;pn*LNxM8MnzZ7NAtOt7q$uBl`gSo&hi&wnUR$-^*O1JK34tVCEEN@ZX z4G1X9PT!K_GFnh0;J1WX(oLo!mXRIOwn#yb#!ORpma$Sa)(B%ZZ8E@!TNx(8Y)}hm zaVI0dFkR9~pL8CyTUJb5YXk|<*8pKx2yZ)Vt&?)!uo-LA9NPZINZEjjIpxzy%d)-gDXGV?14zEfy}+HHI0kq5mJPWAU-T^AMG0VA z1$lBg7sC&lV-=OgG=d)-{Qlu_gWPy2o0Xz0iNBPE7`j6NLQ{_P0oV~imzvm`uTn_TSPHIPR)_4 z(xX1VvzMtAla`c)oM6w6D*U3}FOp%2WFCHSWXs4x9u)UYGf{@sW^VD`SIsK$zki%F zaGPisdLS=mfZ*pQQ-B-+L#x-KXkUmFqgdi*(MsH&w@}jB*0T0}m*KK5>R#CK@4<_S$>38N&flW7OU9Tf-s`4Mp zRE_2yln{lL5EwriduF<|lW8AsN2Gih#%`rol@qC((G@FD+Hh0?0H3>$K4s$e`9ZGv zzEF%LXU{=sx}YNkY+F6h39q~9(oQ6|h=-wEmxV{-bL(NM3&k^~rNe|FRu}Py-1%C} z8kSFW%p@wl%^xxI-qgLw*vFZub;@+pd3j3hniTW`8$EnEAblnxe#B>|D(-otpthT| zgg>Qwg8zlJlH4yi5E0_Msei=E9S{6g=wn(*d$m#}|0!8%|5Gty_;}E?V@vVJn-c^3 zgRu`yw^@kf^ybSCwUS2X9u7mX?)f_cWF>iJ^mATQZL^b4vKkBazs97D4dUCn*0*Bo zg>O1iH>TG5zKi?d2!@ikmVEf`uJc<`pWiJrgyA%>>1TO}C}8WFy8nHnn_299Y;d zrK>-$f1cTJf#)6nM6VPw6hwg2^#kZq5bj3Z^R&NGDE6a!y5;=qC)BXQ^0rX`gFrAj zJQl#r=_?mu-zsuvkDQ*pT4KzJjYv6WKzAeNln0pjo#Sx zNO))6H#3cviS+Bwy@Rt^$`!;CrMpom91JzJ_X|cpZe4qF6^FnMQ7ntm*&-wIWLZ;b zRLlm_l0Q&h%T|=Htz8_bWs}hAqjg*T>H#cNzO2-!oM;xlFAwpA=oV=wzTp>}_FV@H zD;0BJ6^bPhV6B=gHHr^hja3CyQxl62P3dHyf=y`KO2c|FzL{X>bz`M7wvxnt6S+c( z@HCNFzHy70mUdZ>Wy@M~lMHpdriy1fh;PWZiGqHd)rV@ zq-wiDI|8Ch?@*(h@Yq?w-{XEwd=$!0erdVgX6|enJA%w4f~X##vPSO5hjJSOn_iN?OWfDUy8s)+7ov(7ZTY#ScDO>TR{WAq$JF!Xj7}K= z&z1CY&0LaiK8%Wh7?7iB_LjlP1Rfvd@2b6U=rmeA{M`LCVzse*CL8WZ0#oTcA6|0M z`n0+@y471(PqW{~hjI1}SF0xH5r`%R7rF=0FT?sAof9KIPY{Xy z)RJicdEyl9GvKkc{6vrXWv6hP(}N(4yv-`M!uHm_hE<=t88ae87?rxD|8gIRRE=Ub zo2Cx_!+oBzrwPCfP?d#@k38=dYJzISA$5J=)W1bupFk3@Zyb282a)9xOiPW#|FTHT zAR4>6vHWUWepAY6n5NTyQ`gN;B8#}w#rC+DQO1+Q&?%^C#zBI}uNMVW`f zx(P`EleEApUcYmcG_|mKmasxmEMm=#QxsNd!`~S*$Y}yQ(PM(th--K`{ieMtQ7H5k zYO7dj$Z%XLItj5DO9ZWuIvYHrbe$i-d%UR=8dnjIEt3r^5*=CZot8>#BhUPn zS{~e{#L`_IF51~mcnM$5oxmC$-EW3@Q^J09{kX1zel{BRyKdo>iI5q;>(AoN2from zQAL-l9V7-{s3BD7KfrnI%$Kt)xkvf2%Y)u!0$)95CWXNfuAFV0W-NO>`kHl&eciU&*Pi-iY0F+0RME& zcV+GhmsikvGBriBFC|_9xP{1SjI*x{=8StUjd;!3&*vu^(n$K+hGOdV3P@2ZYIAx` zf$2SO(aeum1G93zUu%6eaB?Ben~HgWx0*{+cN=0^Co~>8YQ1Y=2z_gPmWcVOPKHE? ze)v=2R-aI=+{*j9_iR4B6f`s12%-zaA4d8er+MMeqWyhtga(jtW(AUtkJ5F^cLelj zN{m_90~H#RD+TVcnQ$B1l)8iWKS#jR-&qnmSA^_oJ~ro5ha9bOlZ}fqBo<&&ImulU zA1iqFpC&t(TEO0J z>4U&-%klv=pq@&Mp_dY-OXG0f_H%BBeP|lj{$~W?KQq<+L$#<-bk|O?*{2z&T9Pt^ ze*MoqW<_QPS8Kf3mRa>kmIDt*%i3A@LF@A2iUg0P=)Vn+^s2rCvU(heLXjhrhZy0| z5?Y5f?$TIw;cGlBiuEqpiB}Q_J@xnMe8sWP%jXc=*!IsZ3S7&Ub`A1>q}-cP0y%N0 z8Ia|J?$W3HucL@wVmMKc?G0)jS{xLUo(A?cQ>G%p^d~a>5AsZS2~VhiurE0N+Lt;Z z+v|64G3;*QG+YZHe%PwXIXv7Q{g{)}>%&=yfZ!U>l|c|@HNVL#q56ETxh$*?ftwG( zm2T&LIA()i)`L{D7isjDQtb4(unDx+Ag5VJGaY|-M_9N0gPT_#aZ;z)LsX@0Vhl6* zy2{}e`SN}cTg%M?fZA%&5+y}5PHx}`7KxV~Dpl|E-=F~pFR&2;xR;bjI#^E1y5u$n zPzoZ2q{77tLxCbVQ-)tJp9dMzQ!irT>^Z^-|GU zP2JeW{wOFFOH8pI1G`Wm^AU)l&k4ifKqQZhjLWFX&gm^m&(Ol?uUj8){-|}oi4m@N zf{Pb9YcYTtkgfkHiz^dNn<$C5o44;@DmbSsyx}!k9o&z(zKmaG%t>Z`u=$Haw9C}; z`y3kB*iLiKhDGC)>RCm5puZ#>jvc?b5Aq1KixqEb;~a_|3| zCC7(PR?wI?;ZiCwFi%T8nMw#l&y8bZDngQPQ&e`5C4~%ry8WWh7}3$*&cBx_!*%l( zt1>Fb_+9()`2mJ6{0$Rty_`}e`e(0s@d#v+p;}YrDSK3^5~3B6db{;NW=NX+Ya&t( zs2$LAYW)iB$Y|gs6Tw#xyPdG%bJDDEIEzI?mwEj4=hqWUiy7M}7ngh6$|LXe+5M6+ zB;Q9ZM4;aG+)nVANtc?AnC9)%Q%NFmqLmgk%tgLsKpB3j>WM*Fo+KX9s%sIRb}|TL zhulLwh*uHQvu$F*4sE0e)@uxG9I0+%$h|-p)e;Y{6MbAIMW{a{o?A ze9;P9y*4)*qdAT101om(PjhC*{x3x;TG6Z>mJGW}9YzV2?IxV&QbJodIS) zN{iRiOgvnf7FlI&U9`|J+v0X!G}q*lybx+wdgrS|1fvgX^A1@&M6f2{Tg_RRc#Yj+ zoxLNdP2SjGPnoys3Q^j--rJO&J;oHMET4$%0-Lvz@@^^e9CByX^PL&G=YBI+|1laD z8|Wbj#k3dDU_yB}zS)%>N`Ukcu@B&wt2NaYu`SIW?&l%JWlYc1AvYEw@ia!+SHTxD zo{z5<&sqz+P^)oc;1c~VuRI#&tI#8w6WCL0{&WPBT=8I!$;3(ONqXgLCy|J?q zzJKJ^(TbO7u)_71+jI4yW>FaR_1-22FVk?93@NouE{pY-*K&}(ssLzkZbYf1Wm2Q-=el6e6#la>l zhH72!bi`@nwHk7%%4zO1Mu9O5{SMicn%Wwc*F-k!m{@lagD}+W-66Uo5)7|4dGnlF z_YRYKvvNzrEk+^v>y~LDi<-q2n5cFk&yQ2q;=95GsohqbhOlYhi}6&}rOK&3L(_KV z_By4s^Go}e$fI^fFDft)GskeRF4q;5sp$>|4BUX=)X>8|u$(eA29tAubfc$rxS~a{ z`FGdyJ-r%C9ij>QIj1MYzkUpO3gsji=Z{b|gHhkR`cI#Zj|g+8<^x=`OxzZ^2!rG| zBq?+ez{Th`0i;~?dOX+_wE|$50BKiGTD@>e=du@19ZfxzYKt-yD*@vzW;;>g-5|;0 zXnFc2xwc6D9-pce4AiXgonO`>Z~W&!MbOObZ}w_2FlCL}9ulJ*^(aBK!iZF{m{~D~ zPmFtb*>^Nzr`?$maDmlrZ#k-=ZR;pL2ut@k5vwDbPrY*x$I0+60<$^Wy2kXoz@axe z;ZF9?)B8L^Z7iz_*T&;2L_lISZ>*HIc4g_{gW);~#ONJJ1zoaHdDLE7Qi%8c4UzMP z46KT(WILm3FwVzz77VdrOyg!g zaEib;EWDA6t@I@#>^f6_Ygd&DCX4c_`m|xBoZYS~N|vc6sFKKq$wEOYvu1yv=4xWk z;RXDfA^tzw?w^GMEdB-mA1|!ug}{FW zUof-qzfN&x@&BiJhBLEM{~^}@4S);?AQ09+>xn-G2GM}JLfK&B%;friV*X4pvPd8h zDJ}?v@t=_Yjj6{6fnK{hyIELscv*O9D1#9QLH}KH{M+yRgIJ9G&)VZZ_MhB5Few(2 ze^D8+kRt|Bf?!3IB(S$ESpQ=BFWEsLvcJx0!oILD)BM5ocSZhx?m$`?5-ZKWLGEn@ bgEIeI%=RDfB!4AZp@+$`GNU*!{qg<}sNFgl