From fe050237869d0d5bf0cdbb79c48899a576d0d10a Mon Sep 17 00:00:00 2001 From: Renaud Pawlak Date: Sun, 13 Aug 2017 15:20:28 +0200 Subject: [PATCH] update documentation --- doc/jsweet-language-specifications.md | 48 ++++++++++++++++++++++++- doc/jsweet-language-specifications.pdf | Bin 334833 -> 339013 bytes doc/jsweet-language-specifications.tex | 48 ++++++++++++++++++++++++- 3 files changed, 94 insertions(+), 2 deletions(-) diff --git a/doc/jsweet-language-specifications.md b/doc/jsweet-language-specifications.md index aca1365f..5e6bf96d 100644 --- a/doc/jsweet-language-specifications.md +++ b/doc/jsweet-language-specifications.md @@ -1395,7 +1395,7 @@ We provide a quick start project to help you starting with such a use case: V&?+qN~~B$?Qm*v7=)o%de-s=hyNS9kTUefC*r z?X_;}wjF(R6+NH@bp05YoTPAtG4W;i*H zWlAo1_)yGAsbnUR2kqDE1Kh4j#a8WsXay*1fcWzY66Gr2Wzd#~0Yvrn%CkYwtNLL# z<9#t>q{nl7H}5UD+C>vcpHow}z?J{4GTbBVoUFu=lccrX|3^B47YTgKjwoZ&I20bFZFoF2hw$3D}kXiu4k(dd8kI)`&)Um zeWr82MkGgL+4j#q9+zvRLw?vEq&Lc2=_@?$&+Y5`fo}bW?y7o*;C=zhR38Vk&St2v zX(P^5cci=Chb?~D9;8R5sSLoeAGYV=()gL)tSR>2#q{ImD+B^BkA`x1k$y?hh!(=t zNyfI|I5mYM}g;bvvl*s`iBop+xqU9L+G16roCZer0Q4{bHlbIc1oL`0MvQQdsPrua)Hf zeFhuZDVhalR7aJ1W3v9Hkmb;jU*Wu3fijhXtA zYn;_jgT;4fQ)Wa!`z_i*KvHxqa#dkxkvenZ!R*l^SgtJ!UQtY=pcl#kcnU0EFZ=|GHJbgBUWS_F92&btf01*9$=TUHPR z%2Lj0O=-y=R7T)>6zw(9KddQs?)bJVV<_W$I^8MrLl*h&R$MI#r!Ua~!CBb$_=A86 zC#$NhL8+bPxhnAT={S5hB1v)s4516=XSGS(8tFe-b-V$oNVpE$rJDhGtjsTo&{H)d zK093rp#G5n@rn^@+TWA@ghwC&@cxW1g~wdtQ^+j(^m+o=Q=<81F7C7avF58mV%yfZ zQaNS3egt^Y_JUCV)14zVORzk%c4^c)t16r19|; zC>Xc>ECYT+IN0vE4;|^Ci+xUyjUOR&(8w2+bCgS;%}pw5@=rV_uDNN+2qd~B9A7LXlh-e4CXI=YA*THSX&KVK2r=cN^qS#k+n@ydrV~a?!eX+&S zmilIUl5-<$XmNTrI$hS%5dr4f!id6+JEd;{fJpq445I?%pEb z0WB|eFi*;g^b&vOQ#o7ZR!8V)=JxMAM;;rc66o2%V%=f_^_ti|1EIN6KW+oc03&+a z#QH2xRiTZ47~Cl>@tRyAEf-A!%sCX>n$4>>3r?y?#7_8rgXR|?0*Q`6zOMw*HOYIR9e_) zUMXSb>XC%MhX0tUy{(73>1zEGw<7_s#~u?aL^!-C?968=xXn!;fV!|idEaM|kd@mj zaUqsX>kL=SHFi3Jo?C-FAmVmR)dGcz15mej0kNf3-V|2e1iK?#^{tO@kse&W=mM4F zCQT_jngfHkpg~BR6zV}o}o|5@&GX=+UE7(6HAaf>9wmh zX?{oXa%{G0tKeeXM+^6wL%+VzHRh#hT>a}cSBvso&1ty9nHf+AOY{f=&@%~%00?NN z2FbP{V|+Oke*YByMSZ<&tOIO27(wZWzVErdGy z(s8#igyjIas8)(VP`-O&fMF{j*3(8=(BtnhOFCDeFMu7RJZHjmyMN4@7&F%A(WXB2XZ2(YXO5XtG1xR(}0fAuQmmj340H-jW7Go!9Y z^r&`Z9z@iv=_LRME^MB9?4MDdtp&a1jTk7guv(BzA2+dU$UPt&q+Ost30l^&86L^y zUn_0uasqeP8U*r3b(yZvk;vZAe_j~+!*g^>s6?8KTRf(Z|14DhsLlANDxfh4!7}fT zGO3Ew5)ZON)Kbk&hP}!@vbJl6rcBo~)(@i`MIXARj^rk!vbH|#9LxqABJf#G0;LCm z*nIcyE-cWj>uu`=M2!^8VIsPLW#(w$Q}5}F$d{}J%o>mcM?aoisCZU zj38ajAiC1}?nIagSg7Ge5&*WVQvs@U0jlzEmlPp<70#)BtKW|85g&+C1t!$-&Ymcc zeNn&JcuCWD#b#2XimErjvr2B13VW{I7{K!nr?Nb)q+#I$4QsD2Z_!Uy2Y1#4NkmT4RHC>cOkP!4S_Uk%x^Sro#oIs;a3(m6B}cp|COs3xS=RmD}6KZ60CM9S9fB zdFoo$_qV-=y~cQ?4~=b0Q%SjhkThl&%1^$8VV0XH{TzMgG=}9siTB(%hzGmAERM;~ zC_zK}^KA(E7>Yj!F$OTDEdYHr0RN%Mg%rvjVORS<$Yu+3ZDvitD?tk6&Kk z4=5gV0gr%k5k3S5SE@%uDUih!kkvV~XDz%8m_j(HHz~}!+okuv_WqM7R^*49Gsq@y zC5fn#W74?z5R`b(k;6+uBy2pAKSqgnneZVZ?t^de%Ofc+SeF1H2|3)Xxj;UYG zcj-Afi5} z18K_jIi5SDw%Cm5_;`)XiTu7|>60vmRNn?-Ed$;e*2*johpObR_sW-UaM zfTGWG>6y2=dp~puS=0P9zCXLpL zz{@esQH7aLsJe>4gBf7U7aEBX*OkHPyjEI~;MgCEYhdrhl(WXt^{sHv^z878=nSc> z;_@DS6BD37GLfI?x0EtwdlRoBpb(|-efw+UG27}>879GHB(Ygg$X63txmt+`J01EG zIu#=qiuYldR@brv@@AkF|JgDl~RVZrvoH3x|<0csVwJ~*K7xWt|u$XA;{<%vP%jlfMU ziFW}m;-oxV0#r6<@R)3zy3DN{$6i%6V zSVTG4UeUM;yNM8y6L#y_3O_6l!G)W6sK9UIR!a+RPWbb6k-9%<&o+=O1^yOgZ zoQtYFX-1JqVmHyVS91NZ9%j6so+Ys`11zl^*9q90XzPl)$ch}D_sf=|VPn7ahC+Fr zP&Ar6eLfXMyC!}jAveU?cFYgO2k)_X(j$><&^qKwYzH$9mBR)xj_%3)p%8ldT|cR} zk0IWygQzg-5)NJH@Ag_E(!1d-?w`oh|E}47aL!LRWGCJnz2$subc99yYD+HHt_2d6 zBJcrih5xcaM4)KH*&DOy0dfJ`A#`xDpAVlH8igscy$QHA5JsBs32%e~Yj1=CAA$j6 zWlSz4pav}I=_GHoVfa7SE8ZnYv*>3KdAd>9Etv0*baLKSU5X@~I+9tAijrU?tv|9S zf9VH+2r1EMp^m#`@vcHp-T3al+~6apL*~wJjpOusAF)cH#$^FUw=AC@YTw!7#4iDE zVZSgEkJBwwHJ!y>(K|7A&H~l{+rJ{@Fu$w|D;|yWaD5B|W)% zzzHxWz}ZLospR%_Yd|g_Zy=yjnnYHIR#a1beZF&j?^@?VX=>Ek`*t|Wv9bbC!}7Uz zK$BSro=?1vFx}1?~?fo##v!&LDH*22^Z*u*~qW=Sf za8f@B!R++@^kJjWwsg&pU#5zcu*OwJ|KbIn{Ixp;A~72OLr1mX!~xV0?W22JB<8cD zC36*iOa}=fD@{)ktWpGe(OQm?uluxDNW%A0j@!PXeFHf01?Zaa; zzuR-K7j~({n%SvWJYh+My^N3|_CH~Z_^KHR*5HOH%FjLFSjvf3HedwbfshyqR}F{o zZwgpT<{oNw>fNJq)sSb;Q1f*Q0BHGq^xN_${el?>8KWc*3>Dli3cw&m;6SnsS04$C z8AnQILZ}(Hy@|f(K1JXZ#@RNCs>NqU+4O_TGe8(gk}!-cD@VhYkimiA(Yf`8SCHwh z%gRCT*Fp~|(PaiuY-41sEd4IEF8qO9k0W$~qCmvq%Obs(5QlA~WchBt4(MCJK5k8h zwr-~ybE2perXs}mP1yawT>SW@0w=d5U{#nntb%99)GSDSs&Y@L1byL3$y{mFlid*2+&6p3z0gT2~x8B?%A z)blVZ3ib;6Y(CX5KFVjsCQr@Oc{IoIojm*W+^SSpMWBu|{}`vfceEw>pjWDl*-pkU zooPc>Y-Z{7Toh9~Ws{JCqnTt&72#EPCm|&Z*3Fyd-r;Z^#Ex@i4Pefqe?}7NjDA*@ zg!OzH<3X^ffu!y8!?0D)$#b`QN$s(t5)RXIKl~d;Mtt%Bp$wMi?cejB-ItKpqLw`Y zp_B#&LS9Sj@P;A+-5-m=a6I)61f2DYqg^$7mSy{kOQpZKb47n?rU*n1P ze*Zb6EM-$^UwJM+kOhFop!z5{EToWQevvJbxIc9jF22pa>*S_$ajQv_Dpg+3le|nb zD+c7&Dk~AIa#M9kyS^V)hvJeQ$C~9T>i=CBdH(5!a*n-iJr@hU2iX*@gys3mqPm2U zFP(1?3dM=9ej?k!l)bYf*p-`XugtQfXLqu@PIDIpWwd^?K@VU>qA1nSzZ}e6bnp5> zujQcL^)M)-1a8T9SxK->x#WRfxyPw6C5osR>5FtWxkcSyi*YuEOMlJq`@ns43LJ@y zDq56R}HC6sZlU56^~zrOgOigO7%lV`@FSHv2vgHxV6?W=kQf| zP%M&At*bVff>`f4=60!c+P6quzI^{Sqp z%v9@{`I`)bO6~XSPuoN+8#fX@eS-tBR7srkjfD&O(kW@xmy(Qh;m$t7c!6WF50Jiu z)-g%4?(;70sRhxU4C>!(rdk+7eZQ2e4+dB=%CS;^^Y#K{tIN}=@ZWiHFkt;ECB1TI zS5T%GTJ?`v-6TrXTy4+f{iLdB$$AifCBm9*%h#Zs($3bMba_Qc`Tj~j} zp8b7c2*X9R9x$>vexs(hEyA{O4`V`}A3!~Y->ThL^ir2#FZ;DqZ^<*-;45~&l>uRt zuhGIno8u1n$*b#whEz0XLlA*}5mt2ViBgtGEn$o(Imw z4PDhL^R0tFjlzkRKu>T?TpS<75o(WRVR;;sE3>1EvN~vWN@?^Ez3YuOEB8o!;5cGW zdhqUrugXBVD+Zccff|xd0Ts?HQYIS(;h$FT0@i66%zqT{H*vZv8jTo%8xqIyUH^#$ z&ul9@8v;t;pF8#`H2kmC`Pj4*-^jehLiY3W1AZ?Fbt!j=<)Z8k5?#0L@m6kOcI`Y) zDE=qj14QZsdO8qW*R@B2B6=q)mMT!776paUk1{=J8tD0Fn!704g%x4po6Oo=6@Xa* z7QhC?v-PfttNza@&)3;%4oorw%J21B8Uo1N?cJjZm?0(`oL@mol{SWVW zVfsO~k6Ik!@t5w?&E^-f-aj3g{=yDsk=x;C!SUzo#%#3`*;@tRcYu1d}I~5Ni zQp>V7fHp)x`D_nILyfnvX@>%f1=CfTAYt?W|407sz<_@vhrne?e{c-Y!hS2huvGC< zf1~*NzN@IxCIy?PW=9@1Hxz1JfT1-41T_K(s^}&V)CeG`sNnx>29m_yozloiFr)tX zVCvG`0Zp;>qv2jOE}@v2)=?~AFfV9F2okjjhz2qc4RjJ98sz`b;A{mz!TAE5`jPqp zQ1?rmv`uN+szh`^7q+ZC=M$y-^V{5-`yWR^y6y5v|Bft&fkGyY9X{Em%sb&1F)C8A zv|>iF_yi==#Zb_Od$$Ml_jVqOCH~?vmD#UKR54|1tq^o>0%@36S@DSo8Y-Pp_52UJ zVgeb{|FZV^cI~c~YbOChPYfpxQ<_#$esIKZ-%n}KC#0n1ip z0hVp^pG91oOYKZy#gj*PR!a{b>~l!6s2=P?WYM`>n-#&)ISBUC6TgOLNoalB>WzhZ z`5U`!Z;_De2*d9xFwMUoHRDK_Y65uPxb!=c^4OP@5hU&_M8l#3XhCfE6oA0rLZ`E%;ST_( z;rL#>soK{kK4dN$B*`H6c2ewqqZ$TC%l59`eEx~?866=&rYXy{dfN(%&RINIw>gq$ zRPV4Q1Q~?`>=mZsbH0&`K$&bM)_E zSPesW;4yc0?OoEW+hg9YA^^?Ef}LhZ@rXAce@VZuWeG z0R0C3rP?o2sUD?j|Go^P5_z{DzvN_L!FjiawPN5GRia}c$3%MGCI7D)hKZW&bfA=ETqzqwNeJq7*$D@&M^w!i8rREW1Rd(z1p~Tck zgTwxq1S*bY(>^yqR0=3L4`4va8E8;pj}7Ci|76}CP+=FLw;ccVk$17=wT4;wEit!{-`^wd6z1;;;}QR$JHl_-k%myTL-q#dN;+Y3-h$9#bzB@6YhH_5ij z$tzgIizxY*{Hk_-nO;|}6|ThCC1~YMDC90-Wf@EWW*(AHvAzQGP716iziBlBd)ye< zh1kDR|WqkEBjsOm!-#WddiPlKXb2bv)u1GlQb=oMeb&^&)dH`{okHu02{{^ zGn~uh^f_*e21mSKc`kJQ4)~9bAPURENEX`uwU1y6L`F eH*`2+=$hj7IZN10=Lp zUPuhIBn!(Bbe!9-L=RX8feB|*3iZq=WmHZT`a@kmDnZK%6ohtyt9XV}R}TbF?J=dY*_Rh4`Y8Y)A2s zh^r|BC~8bVQH%H|YD_>;tNM?qZIhBeKJzRh0Y;ewk&`vzElF)A0>GqBo!{7{&pHs5 zBr8%fwGn}=2pHWNRbn8bN7!lppgy(zws-*o!EHOZxXacA1)LKK5cP@%U}_v7>ZV}- z=A_cSANef2_lhFya#W=xV@d}ULhXM-s0{2!ZJ-b?y8aWwfy;jBN?ZVsD5gX-><>hs z!#M#RjuH__o~3^dH#8qMmM{WyZ`oeh*+NzL<3*qgXs1o7D#b|&Xu==fU#uZrJ6_g8K94P-;)n`%8P>K2@G3_1k765QCj{rO!>g2- zj}rdjdOZ~prX%72CE0g#K~HKAhAz~4y8V(D)hJ#q*$Pq$(MJa>^+Rekx=!ioq$q_7 zfxf9|2{$r>iei1&x)}3`vqsse<2_c#F{CNiHruON)jf5*%{1Rey$M&%`Y%~^FZXhP zZ^`PTI^VkHYQD%S*4cHkd^zawG5T-9>|MqLx4eAu2V%M3WQ7sFz@P1Wy3%hiK+)2T z2*KHtL*-}yt(rnMITG-_*Yz0&1^8AaI0zZv*LQV@OSoDPxI#>+LJhGt0v~psrKrf* z^K~BQrnLS2d4BU+vEtr0ZF%pr`KUzaZ@Pcd$4Y<|H&PVI{Xns4Ld~>uB&m+gjNrKR z4rQ6VkY|cMS;H0uDaeDZ7k=@!&Fkggx4lhs94s z8ueO5jwfFk5Z3r0GR91PbozA@rq`kO)Ayl=xSViAtq z1eNp$j4%;b^X5;Xi*Lm2$gYWt@l7Kg)1vHkWT9nOUBh?vh)Wm`!S{s9Vdt>;K|7c} zC>g`r1VkxsPZxM$#GTWmBlqX3}$ zb-%oyE_5$MV|~e9MI*b$@;?0#61OpZM?cXbWguI0PP7#sH%hFLjoMcsjhCOFwl>{X zJ#weO6U#JXXi`hTfleUDGD|ZAloi{e7Th|*UkMJhXyWNUK0vmWp6%{_aL~6aqLd;g7~MWf|Ji{85c+!$iRg)rjRXMDj!JFoWvV zKX#J`!QZ)}&cT6TeMybSz+(36TxZ28b~h`=K#;e;tNY_-|FE#v?pTANe&c24a7yIO zCzb>7?mtMl{pHP-+yB!$Jv;oZW9|N}{Qi9ENX_uvTDw}Jr2H?h<>(q85N7Il>oDyfESsB-(g6c%oA`bIb;>zWuR6Ash zO;Af6W|V5K%9$+EiVZ4sR^z%9uddpRkZ+G(;`LSJ1-CvRJD7?(m}u#&7;BKf9jQ!& zE{oBd{zl-m82vWP7MbIj`W;P!2{sUW$v))y$7pqlI3k_5n^|OJHGmrG=ZKmtd!Bhl zM^t&Lhpg`Ch&-?BV%^BC7Q9j>~X2Pd65qj@s;64eB_i{1+ z8wKO%wAX*+3!IaSD_Q9p9h5Ph$r$)9i<&Z@%PGK3wnF;E4=qkzYpI@jz}UC4%#ldZ^D7{cnR^d??zmX z#ZdT?gH=B`tp#yKWpBO`NEzugluAwRpp;fG9TcL^*WB=aMDix;KZG^2Pk*=oMF!_$ zWJxzd0!K@S#|5WppGF6Vg+y2kwJhJPjr#<9ID3cq&(eW%B^yDaLol&0vL`z^P_}d6 z0^<<57Z5kd@|Ur`Kqa5JBmZkr^~(^5>6hJLFkmd~>4iVQIRWt{2wCnK>f}yYi`H0U z#5Q{4>e?wK4Igh9Nr=R93-WCS@7pf4Xf0w8e6bPHNH3OsF)-4M7PP`%p`4>k$CPo{ z@<|YfWZDYLc^=kF;kIq@%5r?-;|Eu;n+|2!zM(@P&`c6}3XJ8OsQ37*Ps-GkvekXI zos;q)V@J7Ab^w-z^@=y~pDYamEz}9KsD{b@pXNgxXksL1LP3WPKT)!{y+FE?-@Aq>Gr-aFlc#V{{i#Z?nIC8#6Qs zPXxQPgRuk1Qffx#d!JJsZi`brc6{wy(;QkCc%r(%dxaWCxo3tl?4g*IIVUQ})9|$UVn2oO{7~H^H1M z(sreJel|Wtfg=^z)B{nk&!gM1)vA0<+iSVGTA7J(Mh9j;Z~VTyBhAW*AT9|l2Ekhl zX^qtqy{W7E?Ia5&a(Lg-OYKKB*=wKW>I;gL*Rr0ndP8b*L$-K4;YnL9t{yMhI=$vL zt{dY&#sa!Qo_TI&qr%4KXE9gs8yCDQTe_q?E-I$>Ogv|(WPVkPtQetk{WL2wTm0c! zKc+1x<&T-8bfCaYq}?*8^O>OY9MLjM2@(>(gtx1v#4bB$#ESCRqr+@)M3j7sC?{*c zfA&{`X;R8TgelZF)HPjPFsoW>-@AbREr`Or_*_tnWm~>yFOCc8@5Qj&H|k*OVE*%h zEvv_b&g>i~t`sR|mIU(p9e=!`x2|;;W!T30SKKYvOTC4KhBwey+H&Uqp~}LVKHmV2 z-hRgnu7a0d=m3hIe$5OH*{&}SzC;Sf#gabP0FKcv?F`O?56;EP_%9fvJvSbli5Pgu z+zveaEeFQ>pClOVU7z63d|<5X|BV{wh4_XA%K9$@X8VZ>#IOt)+y4>_~p6hq_p9>i+b^;0nzyFlW;*3r< zw@QFsGq+`HI*@eEdRlqj#7V-nhBJdckugg6{>wex<>*%oC+7BK5Y~{6nx%+>UdZ1# zEDRP}d#0Zl%46RRB(YqC3q!=g93~;8BZOUg!$W9W;1 zXlkOl`W%N;NYD{+zadTJsl;K0a=`NWX#GWYQAKgB0Z;Xt4s_QYrKOzFn|29BR#t|s z2NNfPEL2t`$fQO%gaq~J3<(GTD>WhLQYKywcGp%S;F6L6B%qEJY3+Kp&MSbbYT55@UQ1MQ12UW11xr zBZmmomo2#Z!*9hF4o^gCmqIf?l*j>=CFT5GnwV}pBV1p2I=M|Trw0Bv1~rMaT1pcW zlI3|tGuY-F0Wucqgu>EddnQ>#8D@7;&|tl0JalJ^_3lbTicuJYmt%GU9zt8GUfj0d_8AT#1D3 zxP$@P0}?v)8GUdxmH0>)(tg)K>|hsjEGy%9;1>)d#gjKKByT_;aRC|G_uEA>t4rS5!8O44a%_4%pjrKeJ)WS&-D3bLj!rAvHFLJ73B z*OA|hZB9)UWJ_90oB5a$$5Qg1AHo*99=a$3lq-{t2K`e@X+;by9F?5s7iKcfr0u<* zXmu&QPEO5@{G`s){Zj$4G@<9G=7n}tVhS80p~_i#`=XM1^e=ms%z0SPR~Q$P_nh&g z>=GHqR_j#;zB#KWkhQDPrw12mYz+M97o&fa2K6;|j>IDkNyn^k5AypC`u;z<)A9S zfhtoHn#hfN8brUvEP!e5PCI4WS8EnnjWK2U=q52`>9sP|v^4q6#=`b=Mx23`Xe;LZ zQg3giV`O`a%wD4b&|xNAr%nDhm(B*}#X;MAMYHVMK65Q_EO(M;p@XHVu*?4Mok&tiq9%t{N-U=cQV|w@O^(9Iy&d8PRHP; zVAwg9SE}z(6RK2BUwX8uqX68k5eoh>*V=W`_%h{JqqfUZlJa@?P9xy(w2i+#v1fdO znqj-~g;vbZKu3*RWu*kt#_xF^=ak?l>T-EoUpel)DlHbk%w;x3_V@QE@i6z#18%EC zcli|DQ%x1mGe{G7=Y|5d&`6K$*T$v>{uHOTsY+OP#}gt=X7U7FeNnO2VsYN8aKw{z zax}Gs4(NPQlrT&$cw?Y~4h)>$W0 zqul<6^=rxl1kN*3#y(p|@!n(Si%$h6fBYpXtW=mKUw`P#@~?AwcTxj2#)ARBseSX zwY;Is8`nn)Bgcmp>xCdvE|VJm*#rV^qIZn-7%?~I{wj6LbKcU(O}!`P@lfFOo$rxl z)?s7O%Ah>^u1yZVHLJ-tWz_j%rS#y|$}~>w=X2+*GF0sQ5!siGO&0qceR8Njivd}5 z=_qq5;E@c@@4*tB?s*5H<;R~kU90rKlj2TE1?}aw_wgVLG{$T}8O9dS7I}_$%XNu5 zQ_!wM)h+t+sJ6mUQltjD8k_)|^oH{>VNA;vrBMDVN$Gv77R@5qrB!*1CZ3-S2z$|b z;I+Szs@K+BJ^Auw7pgwic45gF2nBp!&j%Hd0CDkzaB)HNyT{Pv0~K z*=-Y9Y8gzsp*+-w3!f)k57{zkZbr%_Ad-DRS==_|BHK|5Uj8a)!y4XU`0Y)v!ZF z0(dY*azL#$%oi|lBzw8}b7v_NXCw5}Wtw|1T|Vy+_VIaxFX;E~m}bL|`ZwHW!;b~9 zz-<_wT<-q%Ep{tk7}R2`;-68W#_@{6H)bjkFx19b6K#kTL9egi(cpvx!w<#hW8Cz!gExyIL`4&EC+svOE7Lm z$BD?U5Yu}^xZ`~6*L0D6t< z*BmYoeBfq#!>^$<94BoV`7MHR#9tksG7$!F+_^d5c<~U-(}vePbDyC9>guZ* zLz$Zma8;c#zknT&3*V25b*Pgs1U%jZCFBw9d(&*M6ldeS1vMJX9EqGPK?J5qs+Aj# z)^y>L&sZ#Jz({x+PC&b`_vff%WPfoPaa@@DBA!|#TaETL39NBEVZCL4=*dyYAX=@o=(C9g2qZr>+ti{qktfR`@HCUCn0l=a$c1)Io zH1yOP*I*o;UZoX{8=H2QatPqz^-4K;^M%d@N|hdb=>d38eJIPZrw zAjvYSnVh224$R|lZhH*(?LhtNW2ED40*{~m(;0G(yqFfVX+_V&#mmp@)nIy%Rw4e7 z+*g=CP3Niy7duXeo(%^47$Vcl$-YNN_gu7Dk5rifTpn=D}E(3GxzB3 zI6f|~UqCbX-kceZcKCT;iH1I{v8+@*jIGx^8oM=dW+V~QZYz?F;S9!^;MmpB3FW01 z1|BbmFZQ1M1vc-jYrH0Ni!g4M{CM~l5}m;RRkaZBwevGL<|Mu$4dC#1?ic1-P4eI1 z8BunCc|hG#y_so=h_UfZmAM{jB1H&kCCsa6(D;z#gk*wb>d5B!p!qLr^LkD#a(NCk zYo2E#&I{h0D59?94`aIoxi>M!wP{U=l|iP!zY@@63^?Wp{mrT3%~z7WaF^Yr706*L z3zI+9o`Nko%J2V5X95gY2MyInk$%u@)ci7(f*#w$$}axn%1&X7iEf{d*p%KreE)Jt zi?5`^^V&9Hu#Q?A;W4$B`fCI)H~P6d+F-k_W*lki&T6ym4pO5N%*X?h{fZ)uZQfW5 zO}m(u6@_@EEUx_CO9$W=@ouL=-jR=Bt8}R`_|5VoTK5hyPwE>tyuS@GeaSE1-z_)nR#zfT zKW-jU`}6$mDSj+M<2TS^xsiC~$Dwy~qnv#=-O^7&X6q5I&@P*ki<@^FBHIug-r_Ci zE-JC^y8VV-Xl)uIonS~C)g?*Mzpb2t(n`5+4ZSXo{$vfH`eUm16Ve}AY35J&Q-HRQ zXf@yHBEhRwT(2z}8GCe-S1iMs zL?j%U`A3n!n#IRlzOi$z1X(3-wUPyipCJhof=hAHS;t$XFe4N%tguFblj%yZ^x`93g)(262vWyan#f)YWUL$Q@5a8FmR~{Gc=BUpMCdxV1 zqpUoIjB>d=1+;^KtMek#=y7pV!Huu-e$+3EKiNU|VrV6+zVpzKr1G9hrov<5`XLi^ z)_R&0RJ6Cap+%@l9S=CRFfrH&hvMz z5X|aYa@?^J0DzcBGTC3l8qL56(YLaq3fr^xrV!IEG5iqY5OlhVlct%4yJ%Z2dTz3? zszOTEZ>Bp#s4@{8ADHQ?T(r3Qccs6kvLdt*v>T|RW68>;q}kJ2useS({QQ2#D`zKf zOqOgqG0I6vW!W{cW&Mb*Rci^VaTT5B*Ep?`dr^a3VF?JEc(Ft|gC)VL63Ms=||wsNI>=j%1w+8+j*A}c67 znUQ;KrVb#V1WjyRM7Ykn5LX&r4G*GoWkf@6YqKDpIFfdDQa*u;rXX_m#ApNjJuki# zPmL*L+@bkiJA<>V!^Va=77!D46q4~HKlOUyfrc%D!;=bfb6drXk4MnI=jm^BK{NC{ zC;fy?3C6OTo(SZ+eq)6V6qO_$OwVjn@Y9A!1nlB{<2TgFW{(=-kmkj2!g!PPEEz#c zu?^H)%5g}!F-p8J=b(TgYFBOkxlSV}{)W=7s*(xnDgt>`xv}fq&vO~)-r?&g6^p{n zxEDqyZkecP5&~mWPmH=AUs1YVO0{X^!QCJ;tX#kvdX6g)S5B{Y{hPS$$?psLTyAx_ z41ho_hG)ExcKSP=IK}UNZSLBs?&Mi|pf)1Pfq(17#iOZf8b`FJRdHc^gML|l6Vlc~ z&X9&x2b#eBk`6VzMdwH*&#F8RnrA=Hu5?TU^*_j!q|LL=SYne-@I}Tm(nR`XVBw*U zii_~hA-|%wsl0OSuA&lpRc&eH;(q`FYsE#zfrZ49e51P+Dyzh^T$Nf=#(I0*8SatR zv$PGR(n<13$IF;cW5qS?!WD(mv1F4Z6~o@pZiSpDiiOHA=lK>3=fbJXyQj<2S-Z}c ze7d{9arYj`i>qEB;pw+O*qzCa#OpZ%&OyK_Z->A;(9v-_z}w2!Fcg7dUjtCgTPrfE zWYnf!Y?8xT+isaB5Tn~TFn?saO7l6iI}{owXjN)Vm*DMijYa23N_v%pYJ*yldSn|6G`qK*Jx%L1`0 zy5M=9bFTOf)=b_)>N#J_0n(OJz)HDB z7{1`EGG?Zpl{UlUO6ul9V3(y$Q8+9P?($;1g$BX)pXs*hWmJZzF}HFYMAy#dJbHN-0sr^+ zSGSj+9Du)%$4CI5ufKr9kG{VcPj@r<+Xe#tb6dZVItiWFQ&a?0Ee?$^cP`=CGVa_e zNd5xv_`SV9`QLnG{9RxgP$OCbdlnBy41F}4;77N!bj>|Ob`#MJeDucLc0V~C_VL`d z__JDK{Y*gHbm`v_JHkz}C0Rx4hu&Gn>`Gc1CyKp7TH}m(ehdHr-e=#=(|2&f`R(-y zgTwke9I;!!qfZW7E)hzoa>Z8JJjri9F}bSL8`o-WO0E5*jX&I#W0`0QeK|dUD{rsA zcIbaU57phzE{29d z`5PAQ&&U+la`QHTC18!#=cFYAW~?|bq!1O44<$M#54&Lech4u2Nf5(M;5M4CEiGA) zd~7L1rzSGNni z6^ApM*ql=+KkF>RiF005b87M$tSi-EP&=#P;2mNI^IXdTYR-ntDv=BzZbVW_68OrJ z=vIndC|N1_4G$g7C^&06#R8;VbJlwnM7%jhM2)`5gi@KF*(lLD5hp4LDr3-?J&~NH z-p>S#aXS#OjTRu(ISxwBONqq=i$2l&2@a1+g@t3=N&Xweg+E$UENgl%j}aSj%V8-S zv;}8!bicqAnF=eE6jki7$g=_?HJSuM%(e&u7gVCH!!;&+Rp+;_d+FFhEbgTi8FtsOwX#a^nCVB&6V$ot2#5whpYxj?naH+oM1 z4jL^?cwL5si+Q0bryo&0h^w)58_wj^>$|*`C7%jrvlI%7cBWp4$(P13bNU~@M_`KUV2Ao~Kf%h)T_<@3T%e!wVqOBr?!N6Rk z3BNs{*9jG zQ^~+sAkdA|EP>jM-Aoj@6^*m&#^yWpwE5b`(reMPd8lY2s~5icqFS}SZ$@7CPIXh!9Yb{=4JYYrtuWg*idHh z&eC!krKrBxS@=2yDiQMe5u@#1^@~?(;x6s zUD=_T*>{J<2mo$w?rzyW&XEYQEG+NwE7e=Rpc~SST>tkpfRiIx>69FqiII)*|NgSF zGP9;LF#sQChU)hIqH9OExK^>vR5|b_yHyDILjj{)f}r~&01n&wM0I>7(mm?)Bjfc{_Mu33S)A{Qh7HS?cik5i-Uz+x>In6yp<@U*Eo!)$Jd-8%X6h4y&B`|c8S9^ zjq7|m#styH%Z!DMl2#_XJ%UXR`L;`6 zbSk;ZO}!1PUD~e8qm`K6ie(kcPQ$X|LdShCoJ})E9$Qx3d=060mpIFy@z zme|3RZR`<(klsEkA?b0$va-uk&Ty8iOS|vztHOQc|7+zepyF7zMvc3>>tG3l!QEYg zhF}TqE`boNaS1+X2m}c3E+M$P1cJK+2<{GVIM>gA?_K{}@2wANcI~RJ+TB&XYr3YZ z3g^k#rr>n4HwUnHP?x5xj8hs*fpI$4$Dgj>7rxNy9y?SAM)1Vdy*6qYa<#l}%QlkQ zoTPk?3vYTH-De&)ZRL=A5zwBX59nB{VM8nUe@i~ih$gncy zkBTpEoRMySP7{SL=a>kscc+q;yV?q$PvdnK$#Og569X{P?`DUuPhsh|MiFI4GM-0z zUpBNe|HaIpT@RtHQFy3Yl|%rb@jc@2#*}OEsbH2B@;@g&UNE&^j@Pxd(-;gZ6D0h+Eh1Md8E@Cop9Z1Eoc_*Qg;_^Vl zq$~g}FVFi{TxCY$_-9l2F769xt5TnZk#1r8ku4*{;#)jbR*n4y4VKh{AvddSV zRXFijssnQ67!8YIFQ7r(-u3Xb4F-vT7cKZiRfah-|J^hB6OyeBTw@0e`%p=jXGmTw zpnN7Z_TY{EK&B4qOBJXjXG6Wr>~TsQD`7c5GyYVcreq%c^|2X(_L>P*W7mt#~4Xa|MYGqfW%;1Ni45K5Tf<> zhSCIx7G2+5&K>%~6|=8>fI|=73}iP$0a2%kpn!-+s1P9Nme_Fp!B4v62}!EUh;LM@ z0nqLuLG#V&h9>q6zYmW5i?o&-x>FP>nr~fy=`?HvN$9{9^ti-RWd99l%Zs}}Tb}0I z$s)Y}26DglDPx&j!-}c^fFoa)CWZpi9x8*9+c+wzRkl zv^UUvgZ75lg{Nu{{KQ?FI*x|>{9>67fXwv8 zNYmzdrmQ{UWZ|$8x{d41MQ8~)%{Pb?W%XrfdIg6;jYn3%>*c1i_CGuX?s*wD zsK_g}T8bLrxqO5}QG4yS!vgj@zI@)Xmxwh)i}tG4FRyn#zBPIpCXDZHv% z`}{y>vIub@o!nRa|^9SlxrMRHKssvT(4Qn zM;@rV4MM-zfPXWVPvNlt{2=VNEHgG@5qXv{L4iXM5RE_Q!7+`mmmnt@jE(tFfKxSB z5hw@e8yJYVA83lWyN*yBLwqbu+x?Z4f|;3`f{7%5lc*e1N$YbfAL~!NhouT4==oso zZei{oVk(`7K(+VR{mbM@1Big5&NJe>X5+#)N0%Yz_aSao#`jIe_fW+WRN=a|}rd`cdh^ktxcfV1!vh76LD(AIxdQgjrT)E4lB5l8x65%X(b5tZJyA6Bb zI?-{CLVSm~g`EYaLL>^8?KCve4YIkt>66i2W&-sQcbe=k$u()a5~KJhJ~dpS(m=^sbZjV{%Hw`F}!G7%J zz`*9%hXI>SwGRVmn|kYAR5R1nnyQhskFS&FKj`+2L{#Az;S*grr=lRu1J3yEGlzU$ zU|wvoQKMjV+`ubirAE9?`9R#joc3^u37jq?>lyp<2SRl*)^=ZQJJhdpTN~(Owi)qg z_J`fQW=R`?8;Z^D^@k}%x}r^WZNDePs|pMe73Sc; z5izmE9LSuyf$^oR;4{g+AM)j+RMsjx1tr^cM7q`99`^oO%-K0uv&Xn5(-?xUz~4>B zvPfnT1F@R>9Ejf)bl?9BNZstTMaPhgUu4-fXiL+Z8Zg3q-Mo>;0~{nC)0`I?XbjbD z7N+h@*hiF^QGCZ7Q|hYx4$};x_>MZJ)J9s!a{=M#!6GhCtPsjw*7RwhTrsA6$!oIa zK=8i9fx!K%1A$wB1Hn5JhblQ<1J!c)icjSX#dx|%-zQ>|-X!KcB;}pq{Z5>WB^#1wxj*PaNFj{uN=WbR_{c4;kLKW{k}N@+ z`+X-fxiC3cl6_s3&w>ck?j^~>oz4blUUXgapey84GMZsZl1TiZ3BuW!le{8%AKaUQ zxSA#U4WWMa{>l@TKt*4zq0BC)NXRKW;jJZ!JalKI$2N1?DWF-*2|Kv<0DHk{=5l|U zmD)hxsLxhc^+DWVF!ccWL~qJj%=0BAHpYBVuMK&s)V|njJ#PK!S{8qCi^gX4qW`cT zn`#C|XB7Cv&`YcEOT44@aJuY|t`J*VX|b2ZLui~7q|DjxZ`c-T2FZqSLtJ7Mf0$fy zlsshu+MadNCx^=AYJuD+-D=_}TqkK|e0Qk$b9A&%+lcQLf83#_h>%1~P<7IFr)D9y zl&Sc(s|*T$(mfSV{ZZ^({)I6&FKE%dl#6E~f1YSj8t)g#=cOhc(~fN_>&y7mDgQRl z_z41Qn@R48nnj1xIB?Q3tWnQd9!Iw#r$xIW@Rg(8B$Kv3Y=N7OG}iqv>wJ1*7lt)( z)(Xs(1S;(&){xf=z|M)4q-cqe9C2c{$6XG*Ie8vRaX}{C80!@^RxXL<6lO=eRZny4 z1X0Un;A85Knn*CH(hoUtOHQ07ntm(vIp?GGfO((1L~563AEGs$Ee$aUx5VpB?C&Oh zpjS-dJGEG6`@SC=v8VzJ;-egD3ELYd#EkPG^n;n|5GM)A9?$&TgWgszcQL73y1YSq z^wNW=YG1>`&*vrc+P@7%cDE86wGKg235{~nXfDzc5cG-X7!A*2s{OfqN_s*V zB5JjxQrAfXFDM_cl4jn*=Uc$51fI>0ldmFmk9aMKn%GhhW8cqa3oCZH+#RiF50F_S zX81C78?@JFxV53Vyq{WqCU2+fRjhMu$2WUA;mFie^giO;T+z*;vQD`&)dH-<2}t>7 z5D{qj{P5>&a7`v@-MV%XGE%bXbNmtTi;$_F0db$Vq*-gst}|615iX#%0Bs<$k_~q- z`{T3xXW5y)y>qIFTC!8#&k8uJrZgoI<9NQH6-7F0_B~gw946gVH&4(^R99;@#e}|n zMkHN|Xk$v(Z27Q7Oi02(NiZW{KW^dC1JZX1V z3FJkmJf8QhEWfSK@ar~Z8R^vMN>=VucrDTAtlS_b-dd@fToa11ZMeGYd});y43<>+Tq7-+Q~ z5K++32qyWsZ@+l?irN9$gOrD^ia_HdPt>y<0$Wn80*one5sp+zus&_b#r-_bVCXcg zj&E03j|MZ#RBuT$Yq~Dy-3B0=M<-(Ovg_j+|HX3jZ6)0;t@f*$&j`2PnaiLsM$L`& z5@+SOlBzn6#1mAT{^sxZkH1Q+MHlPFau~U0V@b^~{AFcF=G+N)p6$+Rfqs@4YsbAh z{O)${j4P{pX+*$=UGh?U{G`qE9pRQ@Y*F)?nu&eIM^(OEf2}mO%F-?Q-Ss7O=&<3$ zSvjTKJ>GR=L1?LogZq^~O{cSXZE#pnkFbNG?)(nwztP(su+Py>BA~ATo4LMoF*mk< zk{nHJ&^W>T{7+LH$rYOjSa4k6zy28aW-ywe9&>S2dy?~goWhO*9{3JXf@l`WV8$Pp zBrKiA^bzRlY+UqF%FpeF;W1HPTg?J#Yq}mgkDZp{ZhS`*Ju>$k1I)JUsq_J-m_m%Tx;B+NWYvw+`1}HngB9RI2!SR zXL9{zak7`WUjwTtWi&4HeF+Aw;25!kWkn}^%UiV^w0CXYf7x1 z%h~3`tDIYDc-KruTMT=V!k>e-Wugs~dr1^xmZUnP%Vw7cw`eWTFI@yd5&9XYwEJfd zE&|eP&7NUAasm&(O<|A;~dg)gq=x59z&{wyxEC7B41=Jj3xe% z(woiG1nwJEIOdlfE+OS?M#jo-}%nf9Vye8iMiOc<_D0vPJKYa=pV@| zTg((&%b`a}dAm+h`uZJjA30@5mGRj&VpH9L^R)L0ZqB-o8#R_vC_)ye^m^-0>QKWT zF`UU>tL8KhitKZw%X1FBl9!x!V9B9=uEkbQDBY>xiP4+F;gMojhNY| zW=M9wHGf(Tdz^jxBvEpcKwfs%OG_r_f`1GLECmeeDa`EN{KL89baEP}mJ+Uj`moDvmn@Ze9jQZ%Z*cD7&j?e_i{kBJ)$GLwad> z_Vsqhq=G&CXp}%9hr^(Pz4Z%q#+?@&jJR^{oZ*e2(zwLll3G}cB{tL-GMOM#y!S4m zpSl(k@Z%dkb5a7miwT2dDIyl74B+4xS9AEr7_M*u_zhNNxV{09pPlkr?BF*zq~}b~ z^uSg{6L`T5$fqvaC8stzwVl`6|09)DU0JaH)fE1qv4?ha$g) zC`E6kM20F(b);H`8nWApF^zu9{^Wv^z)#uqJ z^9jHRsO1zDwG_#LnulyIU#4WW#`x&%xM9a zF}&v_DJ^n;?@^T+?hI{z#b9P~gF%S$^c8R>ah3#wIeWc5yIt_p93-*VmyIO`acNK|c!E0h7WazCxcn zg=0LI7#|Mamv08Kn8f95K{||U%a0dVa~BtsR`(TudA5{rFb42|T9fhgK={cn)`W}! zr1ptn!KLwYcm|lZ^3Pa#N@%}TOac{o#Egr5|hb$KfOBWzH@8ZNE;FJ zg6JyZ8|+sJAX48^28s0F&DYwoOb7Cr?%Y$XvMpmYGjzGLdD`teOn=Q!91urV(0Yp` zTEj)^7t1NB7Zl7||B=^zze=g77u}DR07(r+1{OzBg672x))L)|pdQ56c{4z`Sg$s9 zHPomW5Bl(mvm@UApxn^wI}S-Q{i`!sQV zj2eP%Oj_E6hB}_wdd3lS)c~YTI$W#&#!s-~85d4}5gsf=iylt(wLM|9;HFvQES{R! zYmN4=1w}c2GO#)d_eF7J`N}dVypUGw4M&!GhO&8Cm{NwazI(j>d+xXH&+voOyKdu_ zK#+8s9KOQWjBt&O((jk1pEURmaW4H3nnTn;LfXHXQ--|kZ7jZA(U8gl9MTY zG;~>%*S2&l$+8cr@|DGLt&EE+-$&aU(SOMM;w#j1y9`K2pPUV_#FHj|GY~DLf~l%y z<*YO-ZhldcKA8kVj|(W-aYRb9l6FTs(J4gA(k02`WyggvK)S3zCjGCsSm#ih-01S+ z!ptGj4Sfm&plT=5v%cv4DvVERy8gmKm@gPySzMNfE_US&xda@?0qDoPE4|O~;Av8Yn}&Wz zyc6&IAU)g2hO!I~IF^g>XPfxQ>MMA7fe=khu7Tgebaqg~kLZBW4f;yihlAwYFcgwL zWV0v&;c8Y!jiaHe6#4d3!H7!hlUawyh&z$^@;)-;@lO=o#%YR4eOCixeGr0W5;6hw z7{1OeyaYy1qb;e>XqQJb5@*WZ>)HYw7*-jnqinyg2E(2@wv-G2}~&unEhR( z?pkm(hg8!T?Pr0t(sYcnY>`|9Fs}gWsWeP%$nSN;QK(EwambbOZL&YX|~AMPFbO@-#=dC?^n71 zn5XHQlP)vYp=h`bmZ$4Dku0-=%9bvconKvsK!)`N6t0f8-u3YB=P4WXp$U*ZeKg1S zHq1>g2byRDTICb@q>qSMPC`%~^rk#`DI28hQQ3=rD{7vsy)}fq-N>Af$WrUA2Q}`J?Cshxq`b@P9P0SkTEWB(Vhb6I`pTZ)>UG31s zkKS9%8w-hr#Cr4vg~cckTvUv zZ^$9t)oWOJUw5TLdHR?Q+d0owkPJV0(gc<(i^Psw)?q68;B;dSpa>5TZwnSy8tvxP z1(d`?5X*Et2?#B9m#m&l!W2I0f?P3cqZe)|mjNGS6q(~~4YbOTzdWPH`ch_&dF;L= zbe2T2nW~+G;!2uAmvQ?RsYsq-lhdhNk>wjB(znuGPX4AB^gOIz2>HOP^O8Q~r$y>5 zCI&nM+C#-Xw+MzCjQ)cw$D3MkpIZWhp||vvO+qn=wa=$bAsp~sjyR+u7 zy)PcXo()YfO(@rKi##DLj)tD&PvcqdwA>^I^4NWjU3>8!XlfZ;W8@Dl@nrQzv=Sag zZRf_{3QY3WvAH}0);s=dSQc{A3FUOL>Mb87Wv`zhk#3?(un?GwWKHog-v%-}0BTb~ zWh}-#QnIMUh@6T#h{oZP?FhJn5@0b?@5?f60_T}qTmQ$<^Li}VpcqPEYmJi z$x4lPjDee(d>gM3gF7>!PIh(#S$&}$!BFzrW<`nF5YroVv)G?K%iFj?S!5bmbzXFu zy@9rbnmbM&ba%2H~LcfMN5=Q#`!_aM$SImVg#w(Z^d@GNkauAzqkmJN2_ZZFZ1#U?g51C8uHvn%TRL z1(J0Nz&n+bcb_*3vuqVf8iojR{VSwVxp0!0jgdO=(&><5@?SnHc7<5ZgGR+?PJ70o zFWO9x8ql@)G=(FzQlF<~j&m;UTyLfu`vMk<y$QG3&=|Cic#=Z&cFg z4{DkZGizek0F{bd#N%WudhK(uCBvI8);sPUZw`2|)gt!nwS4{kZtpv@L4&0Z%+=Fu zXJ12G(UA`T`SmqkJtm===P$hRAo4}_E2V{T-~&2e<-FX5;+^+OwyS#L#$%!9o&KL$iywY%@}}q9Mt^wuFD?dAIQUgmh};i)FUvAjTga zLSl^+v$yBTofhjG#}8zDSfmg0hSm{z0eLabq23SsF>YD?fY47dy@=u<>JJxQey7M) z_39by&fo9KR;mf^E>6XO$4#+TpKg1OZ}rzE@dr`x9j8}Y&A5QZ?P{!*52NZ zoM&%=86Sz(%e~#bVeo>7=M>&y)B_XDVDtFnO~wNGvE{+RRLjiq$w@xr)~;n~`Mnr` z;N}>$?7yJDZgAPm;}Ef^zYaHO8Pc0!esgt^AJVHDda%&rQ=)fJs@}4sPjA^!Z}L6k z#;tQxvvV+_cX!~Z!67%EBcT6cj_fjL=%5sUADNF~TGEfG|K04?)_iOMcd;5=!?a@R0d`OZmVp~=DbVI52A>#^jRkAE*rT^$&|rh zNA73QCXq>=?g>@(VQF70Wo|fJ5$j$75Vk6P$qIQf(9c_L|IzNR8~k&~qn@rNvsO9q zx)_1nTF36xaq$9kZ%mjHei!hsK8tU{H}q%bM>T68NS7|;g2Zp^M(%;+G%yI6b1l>x zeam!p(6tnPXPj!dRahNMv!0BErUnO|azJFpuM;9gnDPTKqN>qP(+C42(7Sp7MGImb zyAWRlfMmgEFRa|yPF{5BWUojnp0{jEzBq5$ShMRkX0w|d`bgU?qf~xoK^$x& z{o;na`7xo3`RfnI#$WqY&lJOL@$Y|4 z(U;I?3DF5^q~aP>C5};!+vSSM0o8GJu~C@Y)k(-czOwU3yr(7bh(oGYR z()xaG>DXsst<=JL)K#0#N2H@<`LYQqY7W1LscU3RBPr#(lq`?)`@RYdc3@SbaxWC_ z`Lz3zypb@W@YaihW0nQV6W+;uGJ~B?*8?n>-OgMy_C9_N8z$f6dIB zz5vk$ZG+&|x6A>=A);ckOh&!zA0W)47Jjw?ZW@G0aU2f>NP2u~1R8vW`m%|Y4i*2`15 z_1r!g12(e;vsb8^?h4{O^h!yhHMe0TA)z@i3b5T+G=#D*bFS9~z82{7`N4X^ogr+a z7P!I`f^BFxdd0rSdimjc(w#|fhcmk%6!P0p4Yx|3xt8bQ20&jnMEO|Y0$0p!LowW1 zR2b8&^(m8CLOtMX5GPZGVs>5S-KoIF?ELTd(g3rfS_1S}wh_{jlLE)2>E12kCUq+u zE&_Ar0ks76EeuX`D%zX#K&G6+Qy69(4Vs+HCPXu|zJzh|fM14ekIc=RhEKZubb9=~ z1fzWJQy7l9H6b}x{8~d$djzV1va2`_E(qZRLLp3XIp_FfU=Sk-2QGKJJgThX268Nr z3Phy{?gkolAmB3wfEt*gn_bE^XJ2bK$NyxS@5O2lKqXSfP&iTx2*ry@?S*+gnof~F z=?^Ug%)#9*fr_Qb`5SuToc%xGgRb$0k`X={eL*+{k)EqqA9){o1s&pfCkvmo380QB z_)ZGsen3hv+n*Qja7V3EqWZX!jsP6yfNdz@bxQjoUghx!TMYc{h+zRfczf|31@8%r z*fh1R^Q(>w0xs9C!cdVE!D=6~msrjPs(a4T8Q^XiX4qxI0)p506$6EP&a&E-)02W> z@i9{HUbRc3GAj1RaK!WMPtUV|4;MOFX+qe_Mc{B!P5aDI>ov#V2qU?xiU4FYknHc2 z48y%5uu#~?s>@?5e{GpIssA3VGeBdYCYl0j2Ng!Da_<PLIa}IWmj`{pN zrDCjUaN7Yd*REy8JzI^Y;g*>{I9SnAVnqg^T?8_5H>5xFep$E@#gKa;QZ)ilGOm(>3bUL&+-daIMl4z3R@Q_BOh~o~wkDjYpQ?=l&wvZ7CvajNP zou0Q@+8JrBkj*WIX@`Yn)pDMVa|6dL@#LE8B}qtulFh2H3J*xN&?l>I5KLwU)VcOp ztO=W>e*IQfER%5nj_heFB=RBC^hS3mPS>2b@IXE&5>Z1Jxm8KH`FfJsePokpRHH3j?tuk zn^V_w#5PnndNnCoYqfcKB*FFzut{8%yUMA1%a+u>w|4>Esr~*2@EmtZ~R8DS|)fmD(EV`24(POwxqz+>Z6s~}Y^ zq?b>G&Z^@7X&kBcr;RIyE~UN3_bj6Pa(Y?)Nr$2+^51#mdkd;(yhYuUJ6+>gwTm`B zQg4M*?GM9QThvVEO8v&EYISBrq>3$TRPEhSa|4eoHlr+(H>BOv_v5p)gi`lg1@r~T zoJ6Z;kk6YuEVOiaXiM z_OIk3FiQ4kD6AFZrWGZ!s_iCZBFIWsXLzh>dG>*=B=EcfmbZg(21DQIxm_S7IPNSD_`o@JO>=5PycZH* z!L=ju@bikv>n`5Q0HE{>bV9-E#N|ipUExpjo4|RTFU+}Im2Ub;%8$OaBK*cL!U^?7 zC&8OwTPI3~wwDcv^{ZIQok9&6XQHi<*q$iPdNHf0!oikD6b5ZdDEjZ4Ju$hCkd|(0 zmv?^N=3M?f>=pw2VvbO2WY)2x>a1#HxRA;`Qc=ekqKK?&#DQ!?GPW@*|B!pe7jI`A z*8+l}f+kd03xWy?P(d>2KIDI3A++bzq6%5U2Jny_zI=YGa2S)(t%lC+WyHQ0c;DvR z`6seNp|vB5B zc`kn=qJE&-c6g%Y=n!walO(beVaT6=(U@u|6tMz_sNF;dPRW>*HI%Rd?{&M44m@-r zEcY~1bB4(Fhs`-lPtzZ_(8v8=@C$an&evhZefv1m(L%IkB<}-vyLOsaemi-JH87@$ zqLd-zV+ZcG?qshNIo|L$OnnwbEj!9n4cu+qsa~;hxDjp$`P_oiLY7}HIdqzsa~Xfw z!(kY>>jdx6!PbEJe&xkN;4K&vdxcgw0E4Pi(*tRA6|pHu`>3beavS)h;Q4q{%O6mG z1S{IXMDy)z8nW{jeh@CLSVKz02p+p4lj9W*TO}0*i22zC{wvdg`X62B-}tjB91;U$ z)C%wW-~A2J_Xx_#&eS->51?e{Z>lb&#Mhu?z}fmqI)kc6pM*nD@;^xSA3U*vuwH%V z7lq8HG=5evd0}A~_eMki&xpeMD*c0Dtr78*ygF~>L;nrPA52x&fa*c@rV5-QVW~TI zOc1ld^4_ryhteG&X?d!{LE#V5b(CEG8@2-Vsl{$FGmr(n347(OXple?FILn+(*FwH zgRyOg^_Iv3-h&>fK&7l&r_B~+2{L==e9;_3x2I_)L+vt{to?M8?*6$jb5Xd z`4g^`$f{Pn7*X%fszKj>Ww*@AiAkZQv2jbjUJ3$=c?5;{kOVrX_zA>zfQEuUfT@Yv zBy|uXj8R#G&7qq+wm~N@iveTIl3=$AD&98P8HCTq=yt(x!M2YRbNmbGPT1~D{pH?# zHeN3SN6qC-FZ9l^X)Ux@d^ zYl;JIVFbQGF46{>FCX9>A}zn>E?|u|!SJ=?1heH?*tLY!m4_8FIpBzQY(W+>b zird-vl{NWp$Ew}S7j2F9nd|Aa!>zo*{6r{q0MKhN>GL)h*y3i6OvGrPjWir9LJ zK=~6pWjkfSQ}C~h!fx?wxh?R?E=at8`9Gj+bhD&%Yw3ek@BeV) zPkw>R7+`N2Sm6*3?u(;h=pXG}yZ_Ruq(22{K7r6 zY7kzdBs;aQphOu4P>27$TjNk-#G2Ab4w0JP_uXb-87<6M?))0mYf~0mA9oXl_ge4(76+~0* zo->)_hK%>4t<-XEz?g3Y2Oy#@#h%9d%#rl4E{?RDOh6IQt zz?%@31~~0ivNxgRPWTStn5I()pnL4)aIQx5%N0@OPIwQL7@EM|BZM!KHEpgQuiBnWw zrD^{SSIEOF+C+HxSKr0PQx($4w%QI$!Ws z>ya41*X;1^{{O&vu;#V|+~3_V#b5oe-q7>~i{xD#L>d5V z2KBoU-=2SS1@=WJEI-OI>o2eeT=h9KMd13=?QG2tZ@Eg57Fq$|zGyd333%@G(=?s` zXjkE}*DxZy0hVu-Xdy(%iTI%1CnW^=2!~1n>7Txr{q2_aKt5cB_YP9cL`3V=w(^%m zC(z3rg9|2N25Q8!5YgDw{;unO8Y=ux1O6>0Qa=uTagcN3KE70VTyCY7xUA08i?}8Fq{P$2;n^?b&~y>wl*`q%iFD{l5hGQ_ z$bWCyKeM(R_F??Lmpj`}>-Q3wsvBF_i@FP5OP>uXuF2~{v_jtuj7k-bEeuaR6x!ew zv+O5RL6X#_p@TGNj5w3bp@T@Zggw=!r-QspTXrq-g?fgSYX$?TJHjwvS{GZSlp|A} zsADh{@}=nX$RxuZ9x=0AquiNBd=EKAXED#snv3ZNG{n&A-}+Z;-|v;f-IP>k9_c0()^tPwGySTW22D_EIyo_P}6yP&>tJ-sTcT(d3TBr8KDR*F8 zUw-KHa6`9?C2K;|PeMA3KYmR4h^g^#W4?D4CL&%ruH<|4B(hOe=C9LsC6!~Cn7-Z% z^F$k65$LjrNyhOqF_7Au`N*ahy)rn%P53>>gjnA076^l`6)inrSQopbU`j;I<7}^) za;mIn;yn#}KB3pykD&R<=o!AUc|f5u_>bgQj41>Etc;2h4`_b{PC-M`Y&UvFqKp_= zXapw2$otPqSuk_2vaJsTmU6d$A;1rgqLkxo|8uebvo341fJ%LqIwsWrbwyBABZnN$_EOW*rs4Cd@!;`N>K7L4kGLSa8;oz zU<&_iCyeM$RDRU_6>ex#J7JAhtuLv&qeRe{3=%j4;^MKdE<$=Y% z!q5~j4Tg7IVQUJ!{L7Pw?~D>-($$Yt3Oq58ul!x?745OqT4)z`I6(bp&HsNzetdYh n;ivSppJKcBVpxN=^8Ylmmpnm^h=;+&#Si8{V_=X`l|}nMXxMIj delta 27759 zcmZU(byOYE4mXOsLveSCySux)ySwYb-QC>^#jUuz6?bm7aTn{QH={M4kM(MA~ zm#KIV{v!8?z>L5~FI_$`Ea(X&X~&mN>!S0;6*@To3+#jHtkAE2yNWS-`~d!qS=kvG zW|;b*mP^_CIH;BSAZGCN2H7Fs+T!dq?3&v7JoyXFY4bcuGA?p`NmO#4(+XGz5EZlC zjFh06RQk9&@UrhxClX!D^iCBc3`ay6QjTAtKnLI-(*2F-v@9F>Aen)$V}F_Mt~%Kf z%u}Duee=)t(VVkBe|;0x7}@5<@lp9b=09p`el-5fcj}+%L$od-U2x)$?X@)Q^j1Qs zH(F7|lecJOZtZ|wVbHBX9r`p4h?DG2P(gvj+amb0J@A`x!L6l@_&Hy#F5IRR5`vou z8_iy@YOgdKb3N0wml5pRMZ@#)cfPq>4IU(~LNrWv%3_WW4=}8BZLY~It7<=CZi}t8 zBV%TrLn7!I^z*dUc)4)K#%>go^BJ`5r&UD1i=(OeHeSy?9CB!+^pj3qV4yNFSA7TVxw`ZQ<8zmpEz!vNmk~LQzpFE!1ZO0hm(NDqJOT4atArq6#4vunbI!97sa|(s846 z5%GjLZ292)cRQU=BQY-iN*)Ct_nLstjW3a@vDWlGSDl#-g zC?#w`wj^hL18~$~0ba~vq#{`;!H&9{7i9YQ<$eajg2Y@1GKHN_4p!UU;SQ(>^ zPmvm7w!t(+hSunK%scK`EUBF+Bf_&opSNFjP(&`PTgqRk<&{l)xM(zVu(Hh5qU#eq zR(aM$2xm3rdtY6GqcFF%07oYZZNHn$ZgYMVc8V8+TlJ~R00wduVYA$1qzZY>C)%YB zZC*95ZxzZUmu~if4L)e;0f%*SRC`mG7=Vy$>~h>2i$;B18%-y*HumP_-PEf(U#g0O~W7@_TLMk_M4QX-vzN_YJcVdac7U3)EpfWlZ05Hh0XeK>34)EM57S zL<+uQML34z_1_(>>qo1Q2EU6Rt0iJ|$hvN-nXQU(3=} z79Qz5gKF_mQ$ier@O;y?cW{i-*P7Xbh}(--Y_c|QObG}Kj6ZuVa|OX4O?sB_2|n3e zZNKs-;vI?$jq{(6Qt6=x#oky6k~| z=r`Y?J>j32|1I9KfE5OQFOq4qsQsJk@<=msUPoNXy_G<;t24RPel$+p6@A%xZ7_^g zImIEd$y28r5tC9#JPs6`^OW-y8s3HG(2j_wEkJ--g4$`_PZPoyhdSfH=~^duoziYU z+4T28m9$e#4p3}FvUoPvcR7|WrS2&bJCRgg0etT+`d!i^Hp z4Y4LjJY0PhA0&!fY>yNH01X*Kq$b*w3b325#rZ9Ux93J5foa60%T15xlum~ng^!HG z+syP6+_+qFlMIre=KNCVH$fnFB&VWJAq)#*w`aGzorVA@G6TnC20JvG-ysvS)a}d+ z1*Im;jNLn5)pq1t9JkTVYE~da`SWSr#>_I5R2rswsJL~|1K-%tZ!qTOz5z6qSpWuZ zO8rGq(UJs-Ej&jaC2u#rtV-y1cb;nts+n?b0;?ds->rs_{>sFzhfMt6gXGH!xn)eq zTu#sDO>o5X>5zVENPbM#YX&C{fRo}=qztnPDKw{ygl@Tuo;eHhw=CfXng=FeU^pDt z&<|g>ItZ~M!%&9Kh|H3TRFKh)cK}H9qTLcCi{Q+b6xSGERCj?m2#Kp6Mu3)CjyCib z&vIwS3{+mNh+1LDTws{ax#WpWC<%WX&a`1Q+ABUV*rbNIk4wW|ks2SPcD=c>5E46* ztXe4uUoX)AaF|EhcH`>*}V_QP;itkA45}*vIIvQJvO|>1)9e~A3^T!nU z@+cxI?a&p_rcqR{fvIJgLH7nWgy6n62~`M3(MX(MU0uc~IKu%bF;Xna)Kj}W=g*m- z-9I79k_yCrEJf`gfYkSx9VBECCU=1#4Dp8?9BnI>Ub^^Fp* z#U(JBh0gAhVM@~!GdeJJFub>GI9RW#2pqOhaUbXpi7FClBvi#}yI8jA3aRG_}lVRh@h^glrit=?8Z~%5{R!5Tc%ne+Ok2M1h zrJ#Xv3^4-2KxKI2$xtFzO4hIvKtB*2v+YD3I z9btY2FAhJWNlW}{keIHHHr+g3-oM3%O-*UO%?_G+xwWMP2irsrpgTdze^3TEWj?WX z-y)WEuZfkHJRbbp4U?&}^*gMw~4)AV2yI395S_O~WE-QM1klD)E8RfX0b z-N}-nBtKHDq?YgP$SOW%e|sRdHSA&Nsod<@cN^8vitZDLA*HG9tXDrI)tZXy6{hM_ zeric3DV+~nAS>LokWyegn0g>aoR=@I7nz_W@2Ez~;RdYCmtm?j^$JNjjgrC3w1 zAiP?aCHiRG?yHwg8Kf>o4`>9e)L9Gfjh6XREDWXqI*j6V9OOwB{M%Q&tWFo#wA7fd+ zMoqr~IstyJ1igF^W8BGO+J(ddaxg!Z$WdY!LY_hzdkG5ma~D@ ze+&d1>u7>NzPmn)MCn>J2yO=;~gNM+14kvj`$5 ze?oVB8ssq@AYF|F@kv5?-V~ivDh#&8lRYi)Wrg@03-N!?;EM0H-?u$Z2hI4Ng`&|+ zT(w11A1%sHT`-#Ten#u#Qe1@51!fMOs{)og4>cx4vg;~AM!Pj;b-K6MBYph3U*`K1 zJqb`3vT~{$s}J2)IbX(en3ar9>-$yelx?=;aT?+>+s{&jadvFty&8oLK81s`!Ilz zoA#}`gYTkfZKSz0_Bb2@Rtq$+2m5MkV}; z!;*oQWUkTnM0VYey{8H(9BOh~_OL(- z!@V|e>x1=G>`FJ!j)hBib?X*S`R$IkzTgcf(nRoihnDrv4=6jSvGSGFz%qX;>?yCF z+xM41+~6xzVNKR~!iI?T-hIN$g6&03aH7iq+^}t!(|6tyqbTBNKWOv}(gapIrRMyl z5+p0g$lyl2LXqOmwH?5LiOQdA)9nCK>TueX!bzdmhB@7pj)@2idIL9Oi2FL7kQi8a zpz}d|jP`ZK7;1_=y>j zBZFzWR&&=tw*{D#!!)KCZN#!L)%I!A`^%nQL+(3PQZI8i*QGnYPi(PJ-z(a1L$L6t zS2Qp30~!Ru_%q-Ep|N+Z*?p5wdwWJGGyH=fo+QOI=`)62agSsnJ3)d_y~UfcTAi@K z2vx(28}nvqqYQRF80-e$BD>k65~%c$_rvbEJK6(*n6)`#XZt)*PoncstM1L&(3`p(35;(YXMA%hAbo&U7HqU zZlAA;<^duRzV<{i__e3xqOU!vvH#nXm&XQ~QD!nQ9#FPv zh;FtoAQ&INfXJ9Cuc?0c2gE>A_aZ7GA1%}Nb=iss{4f|HYv?F5^dZMi?0#QKr17z@ z{${7|&Lnol7FB|p=gG*uu!_PDYyyCOI`YW3{p8i`U6Q_-CZn$N&f4 z<%MD-;Dad~tddCb&q~5YzgstW_t?&=Ys4U{T6S&vDmUNPKcYAg;2E5SqauEa>v(6X<-z>PZaD#X<`pU*!so;BktmO=w01^Y8aQ1+asHl`WtcpZBi+f zP-Kwce}o!r>OB@o(3sn5!+(bpT&uNZXW+o^xe%s8$&3MhD{a~*Qge}>ibCGIL6@V2T~biz6jz6FsAr5}dA0oDLig60t*kUiZ%0|CUJVh$r$tN*VP; z;2hvAOdKiBj?{n_E#ZV*c7*QPx-rI^q4+$m`6}qjr*O42!a#LobsUmX8>~x*vb$?< z5BPJ3ie0d7zXR|4o>gxTG)u2Fhwj_#?jOTcZFxIow^BxIPh!ncr7mCW?M)~NgU(kZ2w{5y zV`4K!2b_YF7ZkR~!%ZuW{?`GzdN>~k}}tfphzls^wCvFU4SA<+(bgz^#xj4c{-5036~ zK-Bf4Y0;L7CXen8VJyo{t^dx)_N%0TBI@|E4_NqeP>hWq9LLS$w;RE%`DKrEAznJ6 z(*4Urmi1_7J{*moT~sE!jRC0zM%U9f?D>+ZAQFV5s1BEu@_BT;dKLkMvgF$$KQ}W! z+;pn&B=+v3^X4(=@~S52@J4YkQB^u+{YGRgtcZgJk1&&bt%cc*+Xy1SKvhvZ4K0AT z=yc<8gVWJ~FrV+$*Tpcj(Dtx_3YJBO>_D~9GOjCCX;QoqmLx*Fk%cB*F^-RC*g}Ks zzMQ3vca3_2&Nr#1cuFgft)04wu4J{x=I{rbaszuKqE1OBx^mH~tj%FR2CqsSU0xTi z%TBYebKZ?dG;5{AllVpqcR#nJel&o4kNd~$KEztA69?va)sW5Yx?aJpwrUT*r-w!Y!`$ty zw%!r1+c!t5_nY&Kg}oR05nlbBo#FBPYohpBMNdvgN5g`vZ6fq2e^21+iY8!Zv&&YK zAkhAg|EZnRdg67)&GR{Ch?wBs_@|deCxDH0I;-fpaQLJ(2Kw-sg--XdBibzQ@JjrS zX}!_*u$^};^?R0eK7F*S*)>}Q=D6#^d6N`Jg?gI9dGQzVAmR6gDWE`BVU)4d9jltp zVog>_oxyagm5Cq>vry+z1ypFK%|N-;YUGU%DXSbdDnCrHyJ$vB)QV|D78$4^$rEU+ zbGwn5sUQ88oB#Q}qR~pD#HdnFU7>TX>N}@N#m2A=p#XI)DEl4Sow@j(*}9&ZsaD0W z{lzhG{Sk&^hzzdt;n%%PF@-Lf`1oq--AQFS?v zT8qq=n#@#P#RuPyL#cRbzpoVUeR1qOwI&K)Vx#JMHL-7V^(G31 zxN-VZuve16m)hG$V9#j{;j_Q9`)6{`ti8b1+dd%7W#>8Z9oc_J`|bqT({wod=x;e* z++3~9bnJbF&n+v#uen%5JtC&LNK`;(*g$Cq&_Qqg>nfiK5SHg7{?ta7YVubId$F`z zhyM20Q~I|>04eMh_@_#;AV^vN$IkycA_sSh@-;dbD|-gB$=69RPDS2vfC-`dp4J7N z9CyC1S$F|yVS-#CMdxyW%j^gInoLYGMk}BXQoKJ4(4aQLEk&6^QA*LP%?twf&-h$pOwPklKO@ zXEZ$ckvF~zf7Gr#jqpM5`{;{0V9!){Vqyfhs;FfS8l^E=X}>9o(~swd`JQouMbEyU zFKE8eesiF<{__tVx^F%_1@g=m-0FMQklAp;Rd=0V3{j0@*W0mab&KDRyzQhFg3~bi zWo^QlTt&j!0A20$h3Vm%&}h#VZG_w#yY+=0N9!I0(IKEH-02F*E8Bo`GHC)7vxT*l zIKZjVxyvA*|zN#30YvM(KY0hJRZKsl43HVV(2vr{*%~n+Jus6-d+B4wm_{MNYogOpf>cwpcJjWMRhF zzc5@F$g{CUrv8VBl7l$P$xf4VMMv&C&sK@2hzT-YrxPMf=V;iVW zM9%|P-4n&=jPtBumzjGt?d2qt{nAs7b|v>fYu49vfhfMu5Y4h$Hv#*I zoG9EY=H%r^s@`CJ(`x<$4!7qDN%4d`)+#H;6jB@4-NchD zdszudVqI|w19HWuk(%Mcm-7ZRenIPyBX9i{u?vD82(3W!QwDqBRV06|TyZ6}zuA%{ z?QUHK8~r5?xs6s9Y;pP%!RG?U2R>g!7R_GI%DR}Jb2S(RL)9t-)l?{LAzlk9keZ(O z`*mcnf`;*soRdk5h8Ql)qKgw0N(-nYlrt|Soflk#D*zcqv{}KXhl)F}kc21B6Jf<@ z9E5H+2)qR(oq~`r{1l8N)+>A$wr|PR4D_ASKq^)aZ=Zs6mqZC!;Yt`DXdU;=HHKR{ z8G^MIK~fDRcrp6IdN_^}BC3GgKiGCj=QblevE=zaC9j0+gT+GzG44 zxG>ZN44^|@L;?|H$Aq{ZCIMR_6e9vFgselohhe2my_ZEIQXJ}OBpM7s9a;fK&K0o@ zMiL>{AG*5=b^-PWL?lrJ3_XJuQU_bcDo~Uul?jZmPwoK9bp#wYk-B6`1*qp!C*+a!_4B(Z;@N!&9R zT?@V|Bt!yOlC(PA;r0 zg#-M^ACCG-iX5vP@l-Cn?pM?yk;_k(2>oGzRl^o>j{_y|g#5M3lNU?YE%EH+o4i#s z77Ngmj)!C+c+pM6#gpyYf%C7Q`|n;>Q=kJR7_o?Q7wa9Qz#_o47%JP%Za zZ(bq&UT%Z8yOoX9L&3g7M&AA&qA8PxmD%6=G^yzPYEW{ zlP7rC9rO>ZX%QH)Ij73v0PBMky#PpMs;8?O#d~;noN5U_1y{v@eIi#0D|+@0E@u3d zWJF#&F^NLAfiHpQK;G6{n7{oh;030Br-o~sh9UG``MnVVUPRSK0~EVZnvnjDhHH|| zNp&*{CKz-_I zWoSu!#{@zYq!KFq$+s3co6g0VS=%hNmb)gG)UXr6HYGZ}7V35@V?z^6$KA16!wJPL z)s?W;9J*f>n+lk#RKvyY3jniz0xf;3tT%@uarn0BG#?xop1Ys`pZ=V8>S#-b%=X`; zi0+{Bm$^jR0*5lng%`OpF6LF#2etweV7d!BD65^Jmw52vMVGSQ!n{oJYISZEs*DnD z)%t(QB3+Pf|G{-i3s9<2)NHDrcKN1xIa`r&bGVcuIUC@AvoKgvLIud}4|#p?lUMt5 zOKeB*WNg}%(B%T9Yh6w9c>3{3bA=xpk&j%VnNYp<3hC#L=7Fs4*E)N(db6f@6^hF!0h zrxhnnlPMREb1t`bpZzWY975#~EY1OaM7;Ejzc3nOHEoqgXr}-m8M(JCdWPX|i9Lna zXQ}zWRdwcOA980-KTmTRPLmDxJa~jqbx@;e1I@f8R@_8C|A3fyfFABJNsYO8#EblrO2!O~Tos#)T0g4jN(1Eo6G6i#F zK>S1>X~Q{FU^bwqsCTaIfq?iKv_8iGjQZkiKUQIdY2NZe@D#%(JYP=nQ){;30^X_y z3JpFRpq2yVXg&y0_36lE#B%EC%AIHRY0aG#mKG0LX$HFR=PjIXocZ~{{`AlHhrCN) zq1|O%!t)Vk{M*q{i5c`;FmT?x#b80!$b(r|&CS{08w_ADJCk%qvH1)4=*=deyWG&| zkLJZR!uy0cF^9>@H?!f6j$HBCl_gCkq@y4S1P(XXhN|x!uddQ{XOH^`KMNQ%zkSGj zmhPMyJ~#qBTXZ~JCN7gz>j?P+{&Jiw-rn84&I@jg?!-dPPjEFds;_g1M$uGTbT;m; z@H9Z&i;@9q)U^;k4J_Ebmu9NC2+86t5zk^+A<)hgVrN;;bj=Lsb8d0D@l31AD~4k& zd8dsOiMoA1AJmaqVGe}Wpy8R+Y2T?p$CM$tXIdtE@W?C+F0u*diX~GY^g!H{7I}oP z*fI!+@Con*|3Gl7EHQoTf07zg8Aw=dpxPKnj70$8x);Q~j2*gk^=;Lg^l9hgRM=9B z^Uf99pH{2*IVTP-Sq|0|Twh~GBNzqvPWQaIvbgC6jTJ2S1nZGjel33gHBvWBDuHCd zdMq{FYO|D`@gq1ljGN#W7xL>CMmT7_rm=zKPmmu-V*E{SCBtWTcCB2{5taplnuSn+ z+D~c#*qf`?%Q`0Qk=z+{8~*2hr&Vt*)Y**`|0WLVa{qmIW>z#uT|No4&z0g^ z*?#SrYm>6C)4MXSW-Wg(%nF@6Z9!`j5!xjHXolXiFF#ffz2N@sFY(&CMGKVdyCDC& zsVkRm4QFO1#N=g@_3hEtA3N8E_|M(v_#WoBJo>qG?=^Ntbz_6-`L6XXKhKRub3@O| zgI_h5u9ULS4_8PCS5&Qh4f={sar0gS{%6v;*XKd<0~heTyqv#UcU)#1=g4JGoV<4c zT$X@HSJRlGc)&}%NZ0eL`;aDqBCuBuvtq(qzR6n=b6*JL-xwAP~Z@Fokm#PB~PKU(#|PGSG88uHV(Ku#w!~r&8;@QPF=% zcb-jV)oMn|@)&#&K=s~N5RT*n)OG2p8xFz;nF}M#lYXS4mp)dyWzXdwz;m$3_Y>$> z%?*#b9l=tZ;@-q8b=<+33S~H)CG&UO9R_xo_1047y`M{QzN{nlWM!U4(NrvsH1rum z(K-LBqVM40Jsc0UV;+A0!$4y(r7WxsCA``H4%*ovUk27ahdhDcU5 zE#-CD7L{1B1GJ@WY~EkTspQd68_YdtqB4gqImZK5kq85st*vFX)QDgkNrcY>^rbsy z(btqny`kw`xDM4k?yE;NMSYi6 zzkcpfDb|8hYFj5iHl$tr^-pyF=ty=`EWdeY1(m6uE2`6}rQV4K2)yBx%x3)-{C3MX zS0caMniVIOGV|z_Tk-VvYY{J{wb&`s^KZUFhg(VYplG^6e!ajMl=sC*sr@+k_4^fu z`&u}3HPD^nOhC~tq>?~ft&QKABB~`PXz0(eP|$vPQNNqjZ*w@;1*}@@Ku#02jwv1o zAld*Mo7GAkt@N`upcrqr1vji#T$GYR*mB~1)&WVl0~yTx_VBs^QO884h(OK@01MJhhx${KQI{C1Ecy?_oC)&bLOA&?Zs%Cq|Ql zPl|(*UWac?fKY5OgsG%MhwlMMflC;Qy|iQ^{?I^*tMLmDYhhSdRQv()+jikJ^lycE z_c)-Saa-R)#w{&41{gETzsV7an}g&3OpY8G4Ju#XUxw+*SL2VPc3o&b%$X*(3N*4* z8)-9fK!s?>UgoTYbiwG>ud~nV9u!|~r z-WN2Q#}ru8s<##C%A4YuSFg8ib25LD=%zG0Hd{;QoRu%{Xs!KBpua-vCEXbNOJ-kk zvCIbb1o*k1@ zhk=vamLKv?Vt&ywYKPQf8>OdN@+Mgzx_%5hc7q9H{+?oAg2U1g6P?`++oi0NisDxe z28hpA%+`r&6umLS)ppL}|L5a0XD@uu$!Kra z=lkAChSil{_s#1dz;tgv<7=9{rWniY{kT0iVf<^`1NHeX5Kz6c6Yx1%CorQ6@W0>k ze52`ZH>i;F;XJy)&ve3gzf0WcIZp4~RQ71U6(SvfW%qtK*mQ?K$z;RQ9L8PCNGz)a_;7QjEN6%!zB*b}W5%VUb%$bQO0JoQey$ zaLde+hH1mwqqOAjfKGN@TX@m|Y^AjZNb34#UQs4*#gKQlrxGvX?Np6My?u}SUBlVY zf*()%hFR3Ix$5w2*K1*tSw5R}IpUF$GUZ=KYyIe9+CagBz@iQ6QlcDh{qwEd`^e4a zLkG9HC*7l7?Qe-_p) z($hnaj%P054HIEVgdi6#{jqib{o40eu0U;14;pfQ+`V*(XTspt>5Ap=i_<3_;PbVh z|4ZY?0Vm+)XtWLB>;3r(INJBs@7oTzugE|y*glf|Lj?RQ6D_;-l;Nb=+gbfmrg9Zt z^(!sF>12cN-qQ34pTg&jw zd3|Is$RYL>6je(<@jdntcNX{1M9_RvcT-yP(1fa`uDQ@y_F}jIi~@Q;XD1_Odl3<< z4J^C$5#IIh2bXpWbvrww-`{BS-@VXRedj$42d|b(bo%$Jsq0pPM{k*OShWw=9R>Zp zU(XIQG7=&N8r1Ox%pbKcpLBieBP7%0Ig3Q88MRCnNs$>V;lsGIDk&<|whyW^l-dR} zgiWJckQSvVSx;B8zEKe^>(_QpbHgpGNL;C9&jXLuDY(}F(Wf}-J|2`Vqb)0!Dt^hu zK&>ipCGAqpMQafEl*m)GhPT5!P!Y&eICHyvWfMuIMOuFYDCW#3J{Q=OlUORB#5`l? z>PxNT{Q4zoVpQVFv$XEbjZ2dM?a~v3f8Fthj%rGUzu&Xwk^36K=uzR0vI!VVD#8$! z^fyMSD^1OMtc>XZTqg7-P@(*hHE`uWA+bvwmvvzBf5Ua5_cmZD?sgato9h!|KoiX>>*35pH`?`Ac<+X$gcOC{7F$^6GZtSBr=+H6jY4j&+o1~&v}l8PH+?_{GU5i@PCGLbV($*Ii~ zVSOfoHfzMuOQt7@J6pFCiDMEnvMV;G!DDhm&fTCDAxPdVfgsV4Yrj(aO^}Mg$OD_F zF>h}5mFlH8#0aCz`o;*sR@#ecv9*W~+r_Zpa8&DUaPTDC8w#^ctoK3hb*jjVaRd-d zAW(CQ%}1xbiW-u0nOaJCpXSyY=Uem2?HbgKM<)om&TGO1$%P=_>#iCMB5_HWYQuKBWh0AmXs2&)psGjV}D$mXA*k zlSMxhC7PX2N&^iBUPbEYi~xz6C1y7_=I7whuVj;GXcLk)7}^O!_(&LETH`<%U*W1X&=Vkxue$6E z=dmoWlHp{k&nfM99%NK5e51yt2zd^xStrE5*MWt=`>bVY^%hoE`y2C=O0O5}BlJSE zu)yg9?g72lFere<3+17$IZ#)Mktp|Qa|`SPcLiAu|K}9k7gHzFJMvilyY9BNGBbrI zWwcTH9L_#0Anro5$nXHD4me%;74QwnUTYW@Fp;4M`H_v~WT+@gsG{i<)auj>_K|u) z^;@w$;D3zwEDT&RZ)ilL^f4OUp(;axkN|Hb&fS{ubmAr~vG8GBK8XE}`1XGOyH8#jC&DR4``(7pTv2y) zj4vX)f@qHKWhk?qoKQ?LH6(cseR1o^nz|VqxtMC=Rn_J{h|Z}UfiPrO5%!5I;?soY zSK>2xP4J(2%=PGGb)Od&R_4?Fm&1jm@s7c4fDU$@*V$U zrsxanT`4srv%r9XNAPd2#84lVCzA_GrvvxX{{W@OkAho4ju#8NfEFzpcnm30+5`40 zRo)zdix$Dpa$ZpWkp1<$&iTtmvvXV^hijA(bu$6PR{=}{p#S6LzrlP-|D*D;OZ|`g zFHw8F3o7{?c9P?svPhwKTA?QhGNA{l1*cw1L>G20O!=VN<7Y(Uw)bkWM(!SlnJ<=h z0j*d(@fcF3bOh{IsdWA@qFH>o3o6?Mbl+-mO6&KFPiLVcDi)9YQvn?O(;+~B|A=KI z(u%$)NX;#zsMAYh*BZ0b6VO6qXCT54^Y}lc$A`(rz`d~*eq1jojBIXZDdZo?2`_ei zEHA>w|HFoH07AD)RDGHHUo01rV!_3Teej8c{X(7(*f2r_krFeJO$q@&TPGxV+Uo$E z2`@k$XvbxNUYg_S=sJCR=Z~B2YKmH-9WY`sCsPWJX=n%63UL2@#%=G_L zI7W$bzXF(~DD_HS#jg0EJ`RatfaX8{`YtBlhFT{k*`MaAC>70N<#=H zspWs>mXTP5d&|GA2N?gLZFbTs{}+kszes5QMUwh2l8FptgygexipBG=vakIJ9s!Gv zr{3`YU+H6rFbgjL8}mWepojn~y+Z^(!u+cyL|MMPkz{?I1kTh5WxqPx%&;QEsMe~I5CF*9R- z^7Mhv+JN!eu90z~om2e+fEW=8)9EzIEKeacyPxNI+_WX*T#N2a&CCP$;iHf6&rD{#=ne>8u34M>sVO(cBCAt5i^F=E|6&SIlAmg~)O! zgg}l^Fq{cqzKmgf3hnn6zh#dNdvJ_*ze}FrxI@t7Wr1E;=hHNehw9$BSXJC9iXlsp%b>T8FTvRV=R2_hv zBtB_5K%VXiePot?;C?k9hCIt`(Rqu0rTc<6$NY~k+B$a>2um$llQYv4$1o5=4A^tC z*dqVt^obn1gAJPZ-wE~W1F5eGHN)U91QHkvcSZvxI1M07uY1Oh+hOWjHTSpSuJ%VF zDJetMc^v^(~fJ6^vU%vQ*Ei zd>lScyz8bcO*?Z$y4f|cx0!hP#|QL{Y4VenlL3GTfgbHEff1iBtt*lzrNW+wZ6j1g zxd+~7x1Z_$Q-4Df-ZwYz8=$GScJ$sH;0rbfw}$2$+AB(Hv^one4IJkdirOv9pR+Dc zHlL&RvKok%8X?yf*6bsO0ybI0jdv0{+ZsM6N4GW-qk6BlM^xV3pIa?CJRBQ+H&k=3 zCawVXv-AR;z8fhqvsc^Y({3)$+m=R|?$4CGxp&UblwbommW@zf3g{VTMV*}Xwtu$W zp3BK@G$;GS5Kgb;1@-@IvuSvAy`5G2b~H&=UnfrOZ73Pa&PTNP>h?4?q&4W%EniJr z$U5-4b)NMZ(uWWo)O$E$Mvrdgc+QTv7z2JaKagmyIB@vaZ{_d`*tUn`TCBQc$uYI+ z$?&iW*ga#0*E9XBv{^y*I3uUj*+nW0GZKke5@$%x*LynPIAvGr`RrX0Ix@0zxxGjL zygx<&J`#FAj;?2WKNkQWA4H!Yy@0pb-uGF@&#pMY#ch-Sw(3$oz_+JAX*HiH8o-Y2 zf#eYw5@O|{C;&+%Bz-g6`}c+s@Uda|dCTj7z99GsTqtm`izsw2(=Rz0mjwG73)PKs zFTh5A;MQ}NpWRu%N-WNCoJ8U5Y>Wgw?mRW0Z3iKlVTh0#gBkNrBM{XDFucE?uyr=( za4Yk~JyJ(;iL#-df98{>jiAVe0;bvno2Kwsy}Y&bqhO)rLftb{#c`5T!{o}-Q_Pq! zQCbgc5}nDQ7?G=Knd>ZI8$cRyMO~OQETxb}cvkR&*~G_TV<8?S-~|HkwzT5h$l6Yt zIHmhw3SqfGHNY(0;x!ILsh4#0+m_gSL{TI(6udWL6M!u29q*P0Rk`ovq)#)Uy}oo)vPI zN5V}gfSr7>m-59hAdJ_{JHp%Hzd`*pi1g;@)QU)g$;w`TGGQizCP2N*?sp2s|8>U)$Z z#Y=j^9R)rVD#edkVN8(Vd`Q&!@n3Gk94E#L^R|RihVhXYqlg5lNKz{uOLw(ld0d>Z z`I2OmEc0G4YkN-cNPEigaC=U0qmdX#sd`OkcrO$zoXbqn(gC6-WT`vJSsX>V*~L~J z$t%LgfN_V5a>i0fS6x?00pVuZ-ABQNltCHI|Eu6&qZRi(U`})j%g(MJWg>`V*AjO<0X%&BobmZZ9`v_rI;Xjsy-TM z(r+m#n$+efFnMZkbjWNaG)73E@54S<-sDx>?nHWsM+c`a85jqNVx=lITCrFcN{Tj3eE^)TJ~$wPg8qQxB=s0)P+&PEr6^nwglABRN?H^{+Uy!cIfEnKghyqgR0bGi|$6VLZpU} z;NX0TpZxE2Z$)R~KHX17<88zW;8Q!3f@_7^@lfX*Cq}3n+pwsDS&Q<2!?#@L0lL$A z%+m^HI;MV*?CS%Rq*@9cju*u&r4-~5!VgbJ+_MP6)VzJeXuTM1grkn4se%m?eYt+1 zz(>a_d>;xXEkPfrre*=EvrODRX>8lX2A}7l4^vk%^C-s#!ww_$DW&$Q5~o=98i03paBBP{!XO!Us2yz=y(Ow*rYb;lcF0F_vKb>) zRVo$vuJg$7uZcG(PbUk9znDF5V4$t75dxs2rWnd;9OAe(gq-Y$>Y}m;H7WjeNBJwe zJ<$|i-B%S3g(SUhG5%^b*ZxF&s!oNq+rN++nieQW4tegGA#!&pVbq?<5!4S=DZxGa z5`q8dcCaBl@IU1e-n1ayTEvx+YlascGCsbAGCY3x|Fm)zP;o5lzK`Gz!QBQ6G7RqS zk^~PB+}(pW65NL%!3n`NxD9T>f;$8f0t6?xzscU`Nwe0N0^?JDxPw-P|S{rR)Xn`lMDV_W2Gtq*oC%5(_bHzI8}&ov?^H2#K9`8amA0=2!u>OA+!69%AamVW zfgluv@*Q#s{K^^kSZb(tLYs8np1ErbZ%X+qjz-@$=mSe^*l zTvj#Xk$t}-v9o=9-5Kwet&u=nK2;Jde$5o5@u4=OavaZU1jm-c(w+S+PY90JNF#6L{H6tQvknzsdw{S)I&D1cN5 z>ou+Wp{5$O1LI3CZ=F}4l47aTUMIz(C{hQr7hRLMt)pE?CV>YC4nx!|diD?<{&+}O z(>REE+oJ8u5N5STkp1b$lEVYnNEIWAk2iRFWV5jKcpCF_Njxl`ZJZnHDXK;(jiVsw zcFe$6MCNI-@m_S3yarq2c3+WUz+g*Yfndh`fne~MVi3tg>duS@@kSB>Z;kFC_J-dN z8ibKhgW{KQUPi}{;3!1L!^U(GFIRDbGNx$D{epZ~7k3F z8(zM`Lv=hh{`>Xk%@*~qHHQxmqx;3iGwZ&Qp7yV9aY+u<{ zdQ2I>dr8<$dXTLJ6)5falUsudT+ zZX=fpWIh;nt8WG zbU+|1FT%lzLz5DS*DZ|e7f(FHBR~mTe>Iyvcf;>H2aA7G83kOSX%o2^5j4Y4{d!u8yXoUJv)j-?__2cMS4W7yE)e}N0N9-1&P!vYBkz+iQ z%y423nwg03BRt?w%{!2?)LH>PAHU9AO~HHG^0f2x9fOM*BX0mnF9TRrIsmbIjDB3! zpu|bPeenF~yvk<{<+Z%bypnpX>^z6~+t!Egmnd-ZDT$LjHW|eV;l&d1rBihmuRS<( z4&;w4^iioDOU==_^oaJ9ki%MNBPq+T(C6;#?h63pkAENO<4i3heEwD3K(d7hSuNyv zVl}w+`{~50RK?T7M#NRec7|2ZDzcZ~F5FIX=68lY#|qagFjWl3R(Bo1 z0U-J1mlDltQd|n|ojMH?h{5 zD3zHgm?)L=dCfNO>8)rsWGHde#uVx1?&+166HOGTc+)sCoA2dU=XXsh)q)6hyp)=| z7t)DtjX+%M;}IlQCnonvcA}FG_uQ&5;B7q=Kfjegu_ZVfq9DIqKjs$^@ z)p{bM$8;PCTZ53(2*_TG*QO6B_*Bls^qR}rr?e4HrJX52A{qQACQhl3lS!Fg*0Rwj zjgY--u*-Wto7RwVJtlwlwwLzQ0wCl;m;K>sPfe_Q(y_s&wD-B%YY2^>cZC&0D2vB2 z-_}^>Sjz=In~M}E^T?#et48g$T^TDOvFI5Pg(xe}<0!-Vw#4fx+o{EL>v)z>sLe`I zV%>YMyl5JW)H2m-uhNYe`SIb_cQyMXNG%^#Dc}oZO^6yoQ~5}%!@a&`wgCR2pLCQQ z8T?4i-554vFr_)t_%_VAnCClqN^rz$p9x5E9rs0cnoIDOEFCQbaF+NjfOs5vjHOGw zYQ~pd>hQ-#=yk9hJhNNb&N6zgWJVOnArW^eZClE2pOk?}O*`;+xJ$EWDm1})auOUgckl#pQMGs)v2SB$YX`i9J zUxwz1NNl~7ti(tUtw+;Cw|~_KJs&Hm${(9C8hV=i_-N@cbc2}I*pBOD&=>*ohq)Ry zM(7(TPCz|cF(2U++pyrn$epI74bkvH!B@5Gj z%?k(9zPQhix0uVtnKOE$Pn*t17)YJ!c)UMu4^Qt~Iws6##|S(8bW<_!ONd;7diEDcP1U{s*oUK9mN5t2RAxm9)cdf3{!UjAL}1^ zr-1k>EC?4tiH1NKjCu-m-9VqS4`ZWlA{T^>rO_t!FYSlYY-qWSjmNhzO^+cIyDVYs zxh!F+$@rx4PGEm0BUz-gYFM9>{rTQXZVGOz!+4d;p^{_;S|_0kvS+zl=0!2PQagNE zya%AgJ%ef*uNP>hQR_0GDfIa;#Ui3=?4-tLTLduNx&%L~Rsaw786p+jUB;Q&Mz~0he{kjlWkOH6nQBnd;3oqC0m2nC1pVcq~vmZTLM= za4X$a5+{D;;*+51R5XNAP68AyDa{W0FxO0))E-`G{RvDZF9b|S9SB0A({J+}j5NZJ z%moiR1kKys_&dC&=b^%n!w7fb&p-^SdkzjXV#8Oa)`_~7 z?$K*97HD7pWIu|JG9%fE@Ov*#79kn~PFaY$G|rL7@fF>%Qr1%2dZ#T`SeZwsCpO|F zf*w<<#hhekZ3p2s-5lUxV7?hq+`!>AxFs;9^wcibfTb$LySR&RJ0G*&DO7yWSI))% zQ;TM`L*Z>pvZR?=R2#sjjdNF7AGc)?rO%XA#GE`vl$U zSWfBmPoL}M^@(eXZBgP$# zJWKQgVukC)g}&pEs_xxm(A}Z6u6T}yZ2cKV}ECSq-d*K=(}a$M|TAo z6Q`e^KCDP#dn#W6^%O)+#(uvHMlURmGq8ZjPAp80y|C~w$&mR?m=pxqrSSarb6 zthVao(Xnx67SkQ)v=q~!=h-3ooI5;7g>eo2CQfrIRT<5@fhCNsb3#*R!sb=x@i*j5 zt=mJ^(yN$;%%Nef%)eq1d9IsHLH2g`_Nr*^XxJ5eQ~*@E*d)I=C0A`tEv+Ti_h}U& z46Z>LLrpsZMpTQyXZl&DwwcwA%cA#(w<*us?|wqByr0fCw>5sid1)x0m7U%JBZ@<1F#6FV zELfoiY6E6W<~@mcax${~iB6rJOY|wCpBm3DI4gbE6%yUavhBZRW|>|1IPZ(?DG-vb z)zPo{R8koJVjz z4t>QYM)fRMx3X8Icv#*3Tz0t5M8e3CkR&M@@_DIC^8yAQA z_sPhqye-3zm2GqLk%8={an9_fkOFp#7`;=h&7ntJ6HUvJloU_Y_?-kDm=)1g2GY4S zD1!jYFTwiCepr{5d5NfV$E_)8A4m7J5WJ*$u9XHqy}5HK&Mj_uFT#ELW2gV_S%Dyf z%?4?ztWF6#3Z>4b$J3zG@RId0>o6AFEL^Aju_+-9OchvnvXr`^mhLMY;i}QS8H5D) zSfAR1Gv(PPkrD%+yPZNnk8DWJbXYgAwZi}?GQi(X*E& zM6TCU;?gX#dtVY*YG!C2fr`0KN3tm z|5he)(BIiiP)(%uh5x57dW$0l2W9z_pDT0d)97CjPrJ6M8(Q_-Jd%0UhkaZmKLMy9 zMz?j1r~E~=SGooZ(g}9vX!?SA>(NjyMas?Hs-HINI`=7Ym~Ra0mDy`t2S=HO3U>oX zv7T1SVyTEltP-J-3+C-cM{==HZhg%ev{^qqtp;bW+$|eBi}qgPZ>kFq_e!u;{y02A z2hCWm$3LNElvWKF9$YU<7JFd?>jP?&FF~ILon_af2S^ga-cb-#BB}Nk4;Le8S23jQ zzMW(KsBVJIEyQYonIX9B4nqOez3njKjms+>S2cDj6;E&MD0+ zDb1yGp%5gcFKdnB!n33wl@}iUT4cuK<~FFUYpA75h%_Y36n!Uy zHH}*QM2+zSrG@+R9i<1?>tOwdQ(oMgdTWWC26p-bkj3?uKju^o>O zy|IG+<3x2HQ}#lc^c6+4hY!xqG=z=kNDxq#Y+e#znkl zRI=P}xhVkJRVMy4FQMzRTkwtkR|DZ`hG%uf{NA5a{2_7e^i_9*NBi?XN`(qnBX|i4 zS3g0#s+Es7-2IA3D1FWD-vo&1IN@i+7Y?oefQ&D9_IuApiaCP4e*)Y)hQxt9Bw z$iIfDobYd*eXtQjSot7)U_MSTC)ZOjgb@s8WJcpqaWs=Qb~C4Dk`{!3IpMqi?vlca zgBX`mP4$?Z2>v3vthI})8#NE-@9`~!hxgCV)bkUBY`ekuA+K*Eg&3sDQz#aVFhDD5 z4EffDs}c&*I2X9IUR&*z^seY^_9@C&Zf*x6a?n*7EDQt=#R0DNWDHLOq*dyPB9!=6 z6l#frXbpngXB&2F)RLg!*|E__wQn4h9W%uAbo^W_$nmlUK&-oN(#A<26zc61UIAp9 zfD<_ghh8!=o~F!yf#=%~0ExeLKzZy{W~= z$5n+YuUy~E$mO(@Qc{{4#4DRrKjVED`-JdcGW^f{=1JKjLZksW1$bYfaj08+n^VIJ z0iKQ8)OwuMT-2QKP&G$Kw_l-L@Yw@3G!6v^3&&rZ+<)7Yrq&bYlHifz72uKLlogPM z$Oy6 zJKZZAL*_ZFFJ8H0D3TF~GCP;B72)F3tV~$x%(0lAM{VV%8A6n8@xZ=I5j^UK9G0KHDm2A%tLhiV<4%{ZvV zs9`~`&MVEw=)kT#HIHz)3Hz*+?Rk2h*Ml~V#rK3PSY0%A98-Nf*xlMTYi!(KrN-kVjmd3`RCpVY96dh^G0o zy$iii8Ky-`0N8XZhIVN1N0M32Q`ut{ef7l2;@Py>wa~N-RoFx;YQxlM$%xfTD07{U z4F}Ib$MU?cNX40?E9ri*N|DHHD>n9&R;kFO@>=c!O(qxepVX;c7^Az!m5xly17pX}ryX0aK^=}QF&~yTugQ*H@(%li3x-Ia$6~>u` zM^&695V1g@5)6A;$g7c9+Gpg*TSQ`{o|uN@Q=?#Co~FzT7czUz3o>w@`2r6ql`OJg z*t@;!h)#>T<6mCt_Hk(+$B1{~DbAMn%T>;t=AKK3*&v<0g{NY7#J|qfrjQ5o*SVg( zC7O!vgrCCVn9tIOU$EG^imxUZ@Kg1FK5}7?akjxku7u?3Z-&Fyzor36^&}ec%&eR( zUasOJv709Y!kM5-Z2#&Jat+bj}m=$E+<8v&V1*^if;;nsbNBep4y{IH^eul}6;+ z`Hx&v#BTHrybGr`(I=lej|0a*zvsS$p=LXN$h!RJ9>EVy01@akGW_tBgC7 zE{9U5)}RZot6I_CE+Z%0~%YZw_Ju1=Kf9WssZ z!6srw7f&M=-zvjW&>|Sqan%8GaUv|bCHmnIhqBYu^UVCB9?}#qUe86lilS2@wg`kTISjps=x5pHtU)w9| z%sHB-b@`JeJ~>-Vg;ss(lYVoX{142S*R9v>HV9EqG;xsJoMM0LIdyFjBDq;fw2BmO zAv){y=YO!<@UK9oBE^Ti{uMG2e;$&X9|-_I(O13SEHcMeov{x{_+ZaDQU##Y{$pGm ztNBeDCtuRd4l_%S)*J)(li{4@&4R#hIElkhQy;q;Q?dqxRG|=d-17gve>S^mrp;^15T! z>FPo16ICh%uFfCbMt6LE2*Xzeae+-MC#c}=bWy|&_eskRJBKUs)NU2S2Zk||+SFH< zE|810*WWTK|Dl)=U$3$&cZ)P)V^fEO9TI1CsCy!PUPEk!Tw;iDeOfhaqqICE1y(wJ zE*{Vm-RXi~{YejoBLKA%#^)IS*4t`!m`#(Pik(69pCRjHlle%(-d%5YI4Kqp_o2n8 z`R{}aJt~N5#14-T`y``$uE1^reddCz?gNcV9ZS^j;RdqSX&DaaiT;a}fT6F7P}Zv! zelcjvRx_Exdk%{@dG;cl+Uw4>^}#0GnNcP@(@schi%KQ4te47x;1GnL>%{hgbYO%|ibp zS{kMDTB5EY%`J^&aNz@fw_8C>ioC?$Tl`818ucZTPCH^NdO!AJbZb9)UllSrAzPht#@zW50}j_QuCP z&~?i;vN{+JVcVNvClsu1Z6}1-E>34Ve#EarQ##z#B_P>*>C%B`-VcZ<6 ziPyZNLx#$Xowy!%C(IsrEJ!HDUulZ^1};QR@`LvUXZW@%e!wwhqYEqt%R_&9vA&F! zU{zEWXO$Ta(FsV!{H_-zPh)=rthC1M3?;dNZP6(y*lQT(`3R$tPeBf7un0S3Mio!=w(R ziSE?pSMDHBML#wY{r3&CT|i8g!WcHF`&m1_r8{~(L-)ySUK3`$6zh+@0G)wF#N-2{ znH{9-4wmKB2Ri9wf0RpGPzo+RA~68JR~jE_uaWA9kvUCP8=oxfnO*E-e~m0y{WIO? zYY+eIA;VFGLoENR9N?{#C-TAC8DHj;jA=Qm1T9;QktSW@3&b=2k6I$+X?<|A}aj*BPL6_SXzm zInJeQvTgR~kNQso$LZss-IV_yP`&DUfJgkdCbkJohP~1KNCzc~I?ItlHT3?5>_|)7 z*cx)P5|`JMg7FlQ0wAh-?9s(O_vc-G>+}HL_Tqdt!3t&sFUEDe;79u1_;v}PTobL* z>IW$_VrUD`L_C2HhJnMOaopK8q@_1{PGtYBO8xDji|7!~VwIpZl<$!6kFK0HUZ`Ck z!3B3fhMFi4_^o~mUryG*{0^_tzodt6u;8R&C%{PJ4t(jY_RTHyZy*zwN%!T%M&-`x2?rg~p`QJV(+l_1GCD%}4m zl9*cq1aI6enH-|P|A`Q#rS7=pF>1H`D}cWRZdL=(Xf{8JTiQo3loQ&qC~=NIMf=$; zdCH*IJuivg>EaO(k{cKH)A-&LQorI_*Q6e7cH_v=_hPq!n88#C;7U9C;7+MbZ`yJ$ z!YIjB16yl3JuW+w`;&`ibvYi!SU#HO~RA=H`yv)A@MM z!n^N_nzbFbD?ma4gjRNtL}zpkkVM-d5oZR>ahO;3ZEj%$W5i+hMi+j$W$znQ}{yZ+2{=J`^Pcz&0&y2W%|V0TNj$DtD6 z4Z#2Ap#RA+HD5RP-Vxk?`9j67XoO-4#(Dxq-sloe#YQ)xVGZi7LP+j{z}L+Mj6h{U z(^W__U4lB;WJYv$K_gX&^Jj2TSlAx&QzG diff --git a/doc/jsweet-language-specifications.tex b/doc/jsweet-language-specifications.tex index 7536789f..c998f8fe 100644 --- a/doc/jsweet-language-specifications.tex +++ b/doc/jsweet-language-specifications.tex @@ -1407,7 +1407,7 @@ We provide a quick start project to help you starting with such a use case: \url \chapter{Extending the transpiler} \label{extending-the-transpiler} -JSweet is an Open Transpiler. It means that it provides ways for programmers to tune/extend how JSweet generates the intermediate TypeScript code. Tuning the transpiler is a solution to avoid repetitive tasks and automatize them. +JSweet is an Open Transpiler from Java to TypeScript. It means that it provides ways for programmers to tune/extend how JSweet generates the intermediate TypeScript code. Tuning the transpiler is a solution to avoid repetitive tasks and automatize them. For instance, say you have a legacy Java code that uses the Java API for serializing objects (\texttt{writeObject}/\texttt{readObject}). With JSweet, you can easily erase these methods from your program, so that the generated JavaScript code is free from any Java-specific serialization idioms. @@ -2276,6 +2276,52 @@ class HelloWorldService { \noindent So, all you need to do is to modify the code of the adapter to generate the actual invocation code in place of the comment. Once it is done, you can use the generated JavaScript code as a bundle to access your service in a well-typed way. Moreover, you can use JSweet to generate the TypeScript definitions of your services and DTOs, so that your TypeScript client are well-typed (see the JSweet's \texttt{declaration} option). +\subsection{Example 6: an adapter to disallow global variables} + +This is a quite special adapter since it does not really generate any code, but it reports errors when the source code does not conform to certain coding standards. Here, we implement a simple constraint that reports errors when the user tries to declare global variables (i.e. in JSweet non-final static field declared in a \texttt{Globals} class). + +\begin{lstlisting}[language=Java] +package org.jsweet.transpiler.extension; + +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; + +import org.jsweet.transpiler.JSweetProblem; + +public class DisallowGlobalVariablesAdapter extends PrinterAdapter { + + public DisallowGlobalVariablesAdapter(PrinterAdapter parentAdapter) { + super(parentAdapter); + } + + @Override + public void afterType(TypeElement type) { + // we only check for static variables that are in a Globals class but + // this could be generalized to any static variable + if (!type.getQualifiedName().toString().startsWith("def.") + && type.getSimpleName().toString().equals("Globals")) { + for (Element member : type.getEnclosedElements()) { + if (member.getKind() == ElementKind.FIELD) { + VariableElement field = (VariableElement) member; + // only non-final static variable have side effect + if (field.getModifiers().contains(Modifier.STATIC) + && !field.getModifiers().contains(Modifier.FINAL)) { + report(field, JSweetProblem.USER_ERROR, "global variables are not allowed"); + } + } + } + } + super.afterType(type); + } + +} +\end{lstlisting} + +This adapter falls into the category of static analysis, which can be useful (along with code generation) to check that the input complies to the expected coding guidelines. It would be easy to enhance this adapter to add check on any static fields. A nice feature would be to disable the check when the field is annotated with a specific annotation (for instance \texttt{@AllowSideEffect}). + \chapter*{Appendix 1: JSweet transpiler options} \begin{small}