From c5af9c78b97625c31f2c92ffbe0d1db42824c3d5 Mon Sep 17 00:00:00 2001 From: Andreas Pelme Date: Sun, 15 Sep 2024 16:08:51 +0200 Subject: [PATCH] Support for async iteration --- docs/assets/starlette.webm | Bin 0 -> 155068 bytes docs/streaming.md | 59 +++++++++++++++++- examples/async_coroutine.py | 24 ++++++++ examples/starlette_app.py | 35 +++++++++++ htpy/__init__.py | 118 ++++++++++++++++++++++++++++++++---- htpy/starlette.py | 30 +++++++++ tests/conftest.py | 34 +++++++++-- tests/test_async.py | 84 +++++++++++++++++++++++++ tests/test_context.py | 24 ++++++++ tests/test_element.py | 2 +- tests/test_starlette.py | 25 +++++++- 11 files changed, 413 insertions(+), 22 deletions(-) create mode 100644 docs/assets/starlette.webm create mode 100644 examples/async_coroutine.py create mode 100644 examples/starlette_app.py create mode 100644 htpy/starlette.py create mode 100644 tests/test_async.py diff --git a/docs/assets/starlette.webm b/docs/assets/starlette.webm new file mode 100644 index 0000000000000000000000000000000000000000..0587c9608e770bca947f2572c7357661d028e1b0 GIT binary patch literal 155068 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�W0xq-f7QU+?UZz5n`C#D0LkRyfI3=_X#>T`qOvR7l%$@SRGMOWk@@&R zIV)>wU3ovr#ZSS##B@L`AyBO!Wc!|q^%ELiAa!8kCt9}6<=cCUi`E*ReRwA+&qvg_AI$o)+L-w3Q0QsZyZaPS{njr$~ugvywz-f*(PX0Cn?{VwYZ+s=8ZQ&w$ z3=LRfIqe_>n%g}LMe!nP647$ctJ!p=UuF)mX?@>s6gZWg?(1bG#B}KVUv2b#ygb-& z9iOp?KZ;P#&5IF-M__#(`%v}`t4vW1B6zB8Do9cFHoZw|TEY<}w^LF>DB{49rX$B$ z&ufNzb|%7euZ&OYYsV>4!c&X)7AECg6!)lPo5fG`1vlV95ls#k8yQsE`fLx|zYQ2af~Q9w}BK zWHpS?hA&69nSmUgmR$m6HGq_${k=ibb823T}pMy}D?}bacy?X{rGpZ$4V*#nz*#k7QVcL#A-uO62S)Hh>dAr+B zW$DS9OHiWWN#8>~p$CzH&ZL*G)?!m{mr0_Qx79YsEdFC5zprOvhnulVkm3Z2vnpyP zBpqa+=!{DKp7Jw(T(vrXK6QDt$HX)Yg=;D@2orW~h$4NrHgQJ&(j}K@P}Oa!Oj~s^ zBILupiIgo^My^mVaZ9Tx0z}k#oG=bm>iN>`{YDo_-z<_U?&w@l?@w6}DmYoue0+r! zR_=tB?!f0RWzGDjH>&B1YpeOC1+XoR%RHw%lM*z7pknt?CCO$(9vW{=6Nw!evKIlO z<9QRAK^g>bK}dgg2G$^4G7X3Udqt%ts2gpWlF3K0{;G)m!jf(<4uF?{;Z1P(QHOXD zcstffupTFz!+zcrmWw@3P!QL^{i!+g!X8(UqXg_P1C$# z)?bqzmgxWx#u_L_DByb;;P>a0=dY8A9Js(=HFD~(agJ73L~#J_koXqWK#Nc$C&_K> z%XN}RSZ4+mULb6Pj8wsEXae!Y?tXlz|FHPD-rogmkMtyz{W2CmRl1+^X`JM`K@{S&p(ixd}P zvX1ni$q^@`7|&jLN9~fJgZ=f>F?q_c!8%9Qi`%>l`HM2{@x26u{e5U<%HIC#XKtl4 zj(3Ll*)$0m z7vk&&eik+ff3&JrlTTSGO@Oo%eC*$`DmI|DP?x54j+H11-A` z6OFGn~%4VXnSX!_S;(w=pPyO(yzR*q+@Ki-CW- z87YtY>q8p;cpqy2Dgq?5pA8%)rQerP`>9<(YU~`%FqZ{kEBX`yj>%zTCA`Y0sRHS( z2R}ALmZJ-KK7Dj=1U0ZzgDGze93G#S8%=;!+CY8Ra6XS z!k@{lvYN8Zu`6F0_dYIzwR_5Ol$&@zhK%2-YfU9t#UA$5DOp*;KgC%UhA0$1!HVsWj+|63d;h}0;=83zZ@mgjqS9cZ7ayWE|rW*-~ui&Oz|xS ze-mp-5X+FY^Ki^!RxF|#Sg0B+=Y4VlIe1wdEcp;88VUF{?^8D-RGR%cWyxG7TJ`vX zcNXzg;b2+{fg%dTAuwD82lpJV3;Hds@J#IJ$&NufeQK4@J%Kywcg4*%OAyP*Q`QhW zP&X*vE4JBOJ2nM5LW?!L`);I{9UA}WQZlkxHkr~-mpmwx{; zl~oXaZ3=2rlY9V3I&pE>m*iOu`ll$ht$a(m6H0Mi0*eC8b=4VoOwq!!^h5pIta(iR z$GKVM9pd}@w`jwB2?{F2?Fjjdl}16Nn1pPS{y0xC);R*ilQM2v zLsu1 zbore1e3pl(560b`I+NC6-{v6iSp&P|wTnsMIcNUuRex(&1xA{)OLeNknEuLIg)i57 zI@My6EeshHp>hpG_xAe!%TZ{LX@GTXZ+y;;^r;u@0GW@s)_0(eBP&?w7~n0ca(V(# zI^_TY|2y$y0x0}6puc|FqSZvS%;AIyNlSFl>Ek9Lq|9g-cnq>k6)*;^pKJOP5G?^p z1D!;j#NI0$IXCMvcL=MUNd6lflmqo#kFSqJ4Qlda?&s^y17K7;?=h!Hy|xH8<4% z`4?4#ZpOgB8SKLVSh_p8LLZl1hKm8prYx$B8jVD!`cranE4D6lpTBwEj)Ps9B#E1V z)}&20NFK=0FGIJ1ZNH)v_ky*_I2SDuZgjyCjYtq-67S1KHaLQV7fyqRjdQ~3{I%~D z=Kk6U3=v!J?1_ip%q=im2vdR92&&y%jBu1-UL;1JcYa!+e;MZLZu@94mJX~s(>fdO z9b|W;QOoP?6+GV{rASu?;&Wa5S|x2Oq=o=$2$#U$uO2Ny5~_0A_+KoyJryc6<-dir z3#C*{19ySlgh^U`!+;@Ok*SAyv1;^C1lD?Jr@T*n3NP-ExqNpZBiTnxO+B|0)?pyA zzbsy+6NM7mg|=P}j|e;+j-XW6-Z+WHy1~dTj{|UVavJ~iQ-6Bo-2N2TTE1{by%FPx?p_#_^Pww5eFAgHQXTJ<0vB2+bbq7-9G4N{I9 zc&zcpz5;OSlWpS08i@E$HNW;o16}5_$^#JqLxv(DX8<1fjuO@@#Q>i0jH{sW#v|k< z+Y(!mE|n=Dyc_o*1G>b`_R5^KkjDI zc^*2?*Z3L3dV}%mRx^${kr$l=%V4CkS=2KT1@@bao@m}WPjrH>eC2dJh^66HSZ`9v_UX-6#)m__A(8|q zVhErPUOf;Zq>wp#QZyF|jTY`Rm%ls})b|05H6<)B->*odC#q~sr%+$@Gs|KI$bVrx3K%cp(#u;*w5AGX6gAQn?I&p#w6ujvpzf6>vq@SMZ#Eoi!+9i;#aHF}C~ zKMMo}U;yZKB6-Uit2$_Y+)GT}mx5h}WdePsYYrkl<*q5R;iD_SIixIJ*h()nZN2 zgOdR9j51DcH_L$Q{+d7%_yJpcCeAN_iEz+9zoRU{P$FEc7Q#&{|K&q7A;WLx=j?^g z2<-M(3}hc~Is(+jJvaC_kCa5%ud^m5;9bO>jw}B=-jCm!lV=&1z&{$SQ$;w0(6LjY zkWW?U9V~5#iqJ5$cJVgnaz74+A$s+{AjGfdGI2KL^V&X0Ocu6J%4jgj$JDK^Qu#XH zkSWQH%}NW^+60X_UT*9FfMfIGkU{HRC*<0qd1h4W}i*=Y9Q0+tQ z&gcBZG>?h~B1ZN;G&koAS1?C`e>|iVFbsT@i{OUB;q>tOIZ7QxYv5b^_ieZ=d|M9p zYEdwJxd0&KCJMh@VY*J{J)d>J3Okr&SR_~#eMJ$~3qK|9@q~%+#4SvW+lfQvim5;e z2g(3*fAX-K+o)E53-gg#HvvDUaezkmam_vSjj+=s`UnHqj=tnG@!>c2Ydkpi8ak;`_dv zN#^Wa0t)d{Z1FN$pG^ncp%qcSstOcrKwm_M{KY8E#rvY%DN)&GJlvKu*0} zi7+bZgCxnXqB_x9#L?0f6eZx?D=c@fZA#mGk0n`64aAxGtRUb{DMvRtU%j-J=nM9u zm$rQ`O!v)h%#z!_N=#t!M)GATLGZ#-l``J&;L7foTJbRgx+mfJ*}+G z1p_=x&>o^rJcDps*)pDhZx4?v zHdqRDvv~!ER5A8&w^4NL#2CT+Cr_rtXypf}bx@o>dYF-ffi}-(lamue);pP)m6WX8 ze!?Eh^3?(t98aS_UlW`Ra&a(UW`;A!JaZM)o*{~K41_hva5YJF{2}w5mRxnq+N_x5 zUB@P$iJb-QXB|6iN-E{&fkxv|-Ke9PEOGr!EKhK^KV7?wETY!jWMU#Jqf4FQ=IAtb zPrkFMRY1DfZTgv=E=h%8+jh9s4Oofh#E=JFd8wF~*b01{pDS4Cyb$WJ+-J?9gWEBv$?ZZcCQehZ(o;B(;N8_k{hf&IIlzg zFR^9z$}n>o?2Qy5VnJV*=Y5H_s;%M9wTL_ru6Se41y=F=e4iH8sBJ;Wx6rkkTndU@ zQ|BbN4}d*n7%{Z3j8;sZ?H<2ST1*JD(}%PnGGh#xF4s7J=48m`Wtr){;D#gcg~ZxQ zvSjL|x}++)<~{VXxjR(I@_M*uLUU@??$g_TlfcCVGTmK=NZY?11Hy~$Gv#f&=%nn> zu+aesFfgb%!=*kNR0n^T4q{OgjcF!FNjMBi-G>YDW@I7^lI1@-z9r}nP~tV1Dpw60 zyO6fCiN^|5Uw)2F@Q8sSPr~D?c;1$OHRbAFW-b5=!m#{?jXFb&QWF{(^~hV&TjWVU zZha#rU7ypQ6NE(&60!Z)Y%jDaQTR;tZP2dSWtVdOZ3;MMwAcPWRZO0>v-AZxewZ=- zk%xhRW9iS?CR{POmpIYg&GyQp5XIb)C8GM%IpT2Rnb6sj30ovMf7!Acef8Ho*AfjLN7T|mXi~4h2{#u1#{6xc6dklM z_%+zNN8cB~uLp(;?JcWUZC7=hv`ow9bZaMV?@(#9x)Aq%Pw!Q-%HQHnxec@&JQeJF z8&GUHIpQ70sO4Xow?6pNDV5I~UwB9}B9x-pZv6xq8sMp4BujIP->;8hjN8(Fo~?wc zlV}qbVaVYarkyUs4jIsQB~v9yvIO2M%teos3@S^_H&|6U(?!BTuCGgSbQ5hBk(8OS zFHhN?diKE*V6eAD^pz-nV*=Le&h>;ximl!YvQWevDM%gM_lV}GiNJL-=~iHLay~4K zEztr>=9b!d-Xi39s6YWt0dgAyFmAQsUXL8YXVZ$8rSBm4uUSxHj33{#ms3j}U$G`< zeQV1~YIm@r`R6#mbu7Q$EIDg(8JvSeiymRV<8B>C10XIA5%J z?kQaeSik4kxA+e$Nzrix*1dPmMK&;2xX4)((#{zGrObvm7vLH$6A1w;hkfSFRGF%j zDxl&YnO9NLPEikxS3F0TzX%ob0-gKXw_fd=dbo5eHM^YI;8HN$+NytpYsq@@aplVa z>x5P+6+Xy%h{A^-^zA8c(mDLVuXL@?Q%l@Uflk`*Me^RVZ80sqt5nFpBVqoHme>lz z6+gY9F`yjlb{T%zfmCe_NNuC=K1&Cd6r~+oFc+HVU8<@Q0|r&LpC-@amaWvIVsTY{ zyXj2rt27@=-(vqP=~x*0j>Nn3@2TRnUIK11Kdn{b&-=6a0WRDVGGhKR#<|&fsGn`B zJ=N$DC{{t>A~1Fp)*~6{OCRQMM9xpP2Jr|;9et?4`{pj>(ADczR`HeHEM zs%?h3GhRk7w?zZ4qsQX{s%7Xa|8maJ)Ntr{23)d+;V!xU_XYOZ&Wl}%Tgwi9O5ZK* zx4=d}h5QguU7+HuZDk@;Wmovu=&E$4YUqlV}B?{o2qtVY!`j zlUrXYESyk&96lA2?E5r!WuM$Q_`OXBw4db#?uN*ZH)ANVRvKPADpmZLZ|{;C+p!4I zr5>sqS2PG|AY|mgl%q@bN!2%vn!w5!TfOh;3w2j`judY<({hK2ZS?LkPbfkMaq2Bh z7(S?e5xNhQuO8afH4No&@UUqCdpO}B%3SZ5;roqRs+cs6{eV4G@C=ak{tI&ETp;el zF%N1%#-Y#+%mHDW$EPvSqf_*_)2HR!Xt3)^{|qPvq>7=a^M9u}`x9LMs-lJ3@Zwz> zFJ*s9B;q?zx$9}+UcF)Ue5P{e%mmi(gdD_rS5kifL8Yh5d)Bfo6CojnFVwsNv%qUx2&4xyKB3m^2<@g$IM^BS6od9*Hh#fX2D|f5FU->2zy6y0RSSPb|nU zwxM6T;)jXk)!Xb8z+H_%H@C$?M@qX=8^W@UG@_MFe`|drcXzQ#a=TOrrXN2hcdk@vx0i5vsxh3tht+w+@4$aALn6)j^MzKTzsKPu0?Cta%ulR1bb zjlzOgv;Y0sf*SQ!;|=!+S%>LReyt7#D1w48Tl=_7%Fl+s#~7mj{Vp#QE*O4ynFVS# zdw`Sqf|CV!qSLk9ge5i+wo(;Yu`>2qf3eSb0_)gBj&o6QJ#S44sz~TcV;#75W)^je z;-AL^_V2?`haZPo>b0f{1D_Ey@j-{wz@2S5;JuAv^wM;C{c&fO<(fC*M=ptv%#xB$ z<49?3B+W-CR!kK*;bQ>O)L$Vwi~hk2t|PPJz@0?7wbPAa{qu+|$q&BcCu|(;vf6#U z0y1>4EUZcYKAp~+<|G&c9d;iSwPq(9m*=qFCAOE8^XjmgF{9$kM(&QwC!ARUCZ8*}% ziP`q(ncht$bFw>BICQ8^{^Q1amt;H9uJXfP&144;qY|gU>k+M-!^$d}ow4LehQ6Bc zipcN6XFuU+m|%^ClZl_ztSeAtj+MfhtoKmyZHaOR1P}52@rZuvK?Z(;IWR}>CpfCx z8Xyea>+g;J%IIGj(eX`R&G~lyPm#ybTM=rx>MzYc>XL^}uH=CEl-k&==R2agT>afSmbr{pwpfQ5Ac|)fjboTn#R0evUo^ zb3+DyeKogvp$)f>K`YL0LeW_b4&}=y5?Flj0>F-1$hY_XIsx9+ie~GklVS*wTesTM zL&wU+c6pP^XPkUBeV5mHZsY8fKm}b|2X1!I3oGteBw*iAL*lBg6vzGq)#sP+8-?=^ zdz}NcNpd(%K}-(@mLbE|Z1Qa8)sUtdv*Ic4T0e`*#)cMR4<-;+2Rgt}cSm)BI2yAO zds~i8kA(yHk$&SgW+H`FAS|%U_hI0iWEITs;pc3%1LXwNNYTnDha$Zu_5m-~_e_36MkK%Nb1@w1^D?oeH1@1xjwH6KuCSx_Y*@$W9+P*Vxj%aORY)xJkFw?TpG$IM#GD$q`l z{)`wxI9tNSVC1CdlR^?3g?nt&#i1{hyf);!P}&?$pwFW5ZWEV9CREk4Seg2_rPoi~ zXb8y6tnZ7s(fIm4y_qIF66uksQ)(EO>kOx}r9LSf%9CQ}q%Oql=B|=?1^xkIm6Ysa z3|GFes&NKaaE?dc%_75ieLzDLZywV@v(A&f6?=H>)g_Ql7tAvd{B@PY`#Tz9z0!Gf zD95MU%_WL>2E7;?$X^F%z06dwfXM;fD~}Z<>fhBdxwmU8#?La6ed&A1jJ~g=d zy<0&aXaU{vZ%Z5Pw{ZiwZ{&s!$fn?3^%rEbxpV8AuLdh%R7^U07`qq3Jfza`+tlXy zLe6?=TL==AzWBF3(UYsB;Jis~uPS=zMB{i84(SanK5@&%;PhdXR}W&GVdqlv<@j#X zJ*i^Gt)NNPrt3x~Z?xuqd`o^J+W@0_xwUWuu_SZUJlGLQdh{Un3F-Pr9|^hv8GHj5iUX_s znV)Myu~%sBJGHy~$+|5a=_T<@ezF)?9tNy){D4Ftj$RL=JU%YvG6#r`s5f6b$_hK{ zt~*1C_6rjJ&E-B9<2cEx)(*{3RdtYkVjk1`&@9S0*k{cG6NakQ3tg(e^(e2Q=op!B@6RkNmi_Oia?Rp|kX;Vy(Qk@PN*g2%a@`HOn;)DKN zGVs*s3DukE>Qb>CjyWNeG?<^<)AD&d{;CFx*%+?{{J~hVG~@J6t3QLGq1j55(y0BzMXGhq1p5h-=HbK+(e8-QC@TTX1&> z4#Ay3a48ZXNN{&|cXx;27Th(sTeuuJr#t=id$;fZG3OZ5)|yq+W~&_3o}w*lnN$^P zOcilDrhi{ul?daETkjy#gKo{ki!C4eaZj~!VWaQPWvUr%xIZgiQ4-2<^q!wn@pLsy zUvmL7(X$PWUA=Rm{8-y%SnJ5zYmzd@Mz`6$leF{5b_gu>cH8oI`aXN+CGXZz-7!W6 z?K3Yb%o$H{Pl9VKu5h%pdh#Semh)qe_2)B>N>-(zFy(uWd`>B1rVr~tW6SaN%Fp%Y zWeO0qi#BYGu0-)st$oJ5c_-ro?Dp%TIs24m2&eCHX_IR<*7l+D6I17RG2V+~X~E@x zQ$~0fq0HzWu&`oWq$rH@qiIYh)3b&A>OdtA zFA1d|TJ9Ufikk#jKfHL0=>DB9s+=8q*8fzW2uTx$I>%I^_IbOvyLw zSjWAO%eH>(xO*%0>CU?;EkJ|txL*NLG1Q9LB|DeJ5v2yDTAdKQ4i6$U{g|s|)ZIp# zW3_d2#gTkU{#VvqhmM8iDGsr*4&g*D?N|i&_aURW{;CUdIw!(3HJ=Uhd%Adf)DMC1 zJL)icmI_jiav!2jH2M^)eki@y2YSf+Ee`fN$uRd9_KE<>iVKfO^LV?(0Hh+C4v{(YSuuso~+Ac%gdpb5qKea=h^}A z4oFbEwKhG@Iy8o1eAr(-X{SD_KA%korM!oW0RP^D@deiMgQ<3or}Fh3;W?#o4HGm6 zq=17ZM`b1CESXlQntH8Rd{2E*Yu4ON2`j4DQd66-$9k^VZ~UN z1zXsP;*@+u(IWhv^fkIQGzO$&?wAxMKYP$8${W2)hzjZJFqe|QB}cfwxHV~K?Et#~ zJ7T_>6kvpFrADbz$E$MY;~XTR^w?=my_@EHz3L$j*w0xv?m)^s#O@FA@txmC;02Kl zNkkVAHd3j{;MO5NTm?d0SO{7@uUpQGvQ>GEYH$%%RMdLf0gJ$>+JPUdomKbgz`tvA zE^dW=rDbz}%H{4iOqMLT&k*aw=Lfla;HZb>U6!Y7uxH=pf-?m3M|J9y*1JGCkyW{e z?D=$0O!3&!B-5jrk$L@OYzjt|(u#dR*i2P>0CG!}lgIO6@R=`^Lnxl!fTLuvY=>;C z*&rMfv(LXZc_t%NiRa}BWaG!uTECIV!W#sRLf1YE$GtY;ap5US5IrrLY9vf|UvGU< z9s50E{*SPTd^W9`QKzAKO4Gm<-R*9p-suK5yh<_&7g9c#VAS;O{?x+5u=ol6m+z*6 zQuiY?6_JjLQKn#!5T5K`|7AwR;Tb&!oL9>Uaq-+yKzV6fJh3Dq!Sx-f5o zXiYlO+-%ncJ%u%1Hc0&e_M!a#8eB(1bbi+=q!}eIMlaLiEoy70+v(@-qK(M_9##q^s#~mhYT){L2YXl#X?=z_! z`3%i?3Uua4cxP@4b|lC;QIJ2W2LI2I(t3?ChpnLBMu+V7LCfl$2{eU|^)-{cztl>P zVsd*@Zjickyy_{X75H|@4}EFbK2JaNVh!K5js)!qb&5kD30IPH?}0w32@pl>vcG(> z+OGKP6O3aiNlu4^{|s(>BUA)2;sW#6zKBswH-uY-Uf}LreEa36+QcE}RoBLcJ;nOj zcxaqD53Dh==B8w2AnXH9KXv zXUf2z?I4}k>`fk&5`_N+{l$)wH(G+9=;V6!R2^rEA>{M`_BRqM0OxX@jh!rAkD>EM zU-S0;nuK-bZ@VrhLq5Bh+sMA0n4g(k2Yo9zO!z-?=FYju=GGX(1-+YGgJgJNr~u%c zEvuRH(Fz`!P;`f7%c-}#OI|Jl*D*rr4RGhWVGS&<7@v;9KV)?{*-r2K#hFL&+!#!W z+|bKBkN|a6Y$sI+qQgt(-4K)?8@~nD>cohmHkHeKg?{HXT;97}Ic%<{k^7D(;hCRC%>lFo-L{iRds4^3Qfzi@0w2p2H4DVVWOFNLj+jGRtlaDXw8izo`>>av(ri#;ZW3E{j!@$Od zd@tQ30DuXo*fucn@O|%jmiXmvCkprip;*z$a~BW}r5aPMKLd1%7wO z+@q?X4FB*k6Q_}hyR`&>@q2v<#u9V4aNFBtErphv?vi3Wq(Mn0ym8zZM7YfyEP-vT z%QJ9p?RrBZ@r#ZQj`r+kVrh~MOrLqt(_+gP$rJb%R!SjQ=gNcBNQ`rl#vOa}qE$q` z%D$*HQ21$o6mu<Q>8hgwJ0>Icpi8S%eRR)goIz*CO)WNV|BN2%~b^IMT zl57^KLOxRHK828>q>*ktTdK-Au6|PSd0FFfQqrYX(u_ur+3iN=J!4AA^G0w+ylvi( zrkOxOkE3}zM0_>h3z?*@1sNogy^Qf3npcvC)z0JjM3|fxQomK--u< zCjq#Kil)0a@(7NOpvWncHmdVYZL?5)z-n=E-9fyCIxe4(7*f&*GR!y$ua&UO>*YnBpYQ1()m%V_ zT1!@UZtAS`aGHI`Bd2%Z)-fw~=#a%iv>!&``}*7TG5I$Y@`sJ*f-paoev;X2`8Z)E z8IJ=M=@p<7^&WX6_xRv&QpXUfQmfWcMT&L=T$WaZRHxJP?A?4C+y|`H`1unF=u2WE zZgNn=!j`TjQ3~D`>zn5bP2%U5Clox)!Td>yn;{fI5b^aLz;4B75x^P-b?iCG@hf2t zWPL2>hbUsdZ{BNZJ#Z7F9I!%J+Em1zeE&hVsClIK>9>Q0S-9|NLf>#XH%nd8Jrw9P z7f$2N3M1eltY0xLthE;3&=yye6SK2$k z2!!~x+1!0v0S6-hA`-Z5BzCg_WATS++q1X~3+|;oWZ{qqi0a7R7QS-WK7~i&f znb)(fCF$;W5^(Nn9HHQO&=m*P5*9}y!=x(U8=PW>M1rdXmQ6z-66(xVfA70w7C8%| z=CgOj_}PtBA}W*UpCbq~MT-|;+lf?<1;pEgeV8f$L{CS5mpq-uVgDTyoC4sr_aaG8vp(NFO zd$1F!QESH>0BaAazi$+_(INUZHM4@^E;&dX1fh2H<1xU^>Jq>_*egPSR-x5>FC+l6 zI>d8N5dXxG{vjp>I0R9V3jK|D0}a;^z;MJSj+oigEIO_X^H5L#~FEU zVh@&rIH!u^tYgcy7kkoQTa=9@4eJxfMb$mNL4y)(H;o_XT@qtal6Ush)l(gS5faSS-b3XiJEYl!}g! zi1%FsHf2sJ?^<*9E7*kueN0%9!^Fc6%?rIojvoa1@i;A%6Sgg>=$N{2Q)z3b(%59# zyCB}3^j8R)i%%N=p6|Y=2DBTSAoe`Xy0JCS*XNMw`_I7RgpnufOPu&(8GOA(Ni8%A z(U>RLq-}cnmqx?1E%SvF{2(y6c+B}ZN^E{V{16=Q^$WLu*(5ne^8~`fyTSiJz>?8W z4dR_&%N9@u3)Jy4OWa{(M!`Giv@LJ3$G~on@I~66AtnjprItdl`)-Ntm~aTG+Fa_< zmJ7WGrHx1g*7bFE2fFK9U&9wdRw!8i2hc?R-+&?gK+RFk z=WM}he#!)AYhC3bRu@*yCT_zKd5j|xDHF3_TfX9#uA5}h%SAZTM`O#JCKuz?K(mYveR z5o}GlT@|oqsE@iVrR%$(TTAp-L;Si}`f#BvocqX;o+zkhXU2h{tDw2wCSJE0A}NjH zHbLx$L|g(wBx2nan_T3kLi!ohXBfG9k)dz6hY z)*sq-(*%K%+) zDL8z-DLLua+k20cg*}KCdM}B=Yeru8yph4CS~>VY@Z*HD$kQXaz-+8X?7>OG-%O@0 zMnY)A8>O+EOLi-FN4KVzCJj*80Q*nGN4g``(?6TlfKo-uGRjwiq$#>FoM;WO9EnK-E+OlYF ziP;J4KguHzU{NZ;OEAigrW(C^2yml0&$v|KR@!N_dw(7sa%oO#bPs8%rIyeVM@<34 zry$19k>i_mHz})~en1&)R1i5U{qo?HKDu@VqJrx$Er9twcQp91nht{CKdzcP)qXIo z0Ud1;vJIG!1jFLTXaBl*YZLqKU<#7Ugk%g)$sea%z~4rbPDM zN`3H7BL%T2S}2hjQULGjW4=gDxAIzZhH*IBiK=;vX(Ar&m1~`L(dinnz_h|%_O&PG z{)D^65BGK+CDRI{TciZjv&v@?Wpy~?mCBpe0gpByjlw(~rZi?SVc%zL5os%g4DzAH z4mv99Nu9YFh0W`3?DgOCF`XOyk_%XQZ@RyYGQuDAb8+{<)ogm#M%3*+lqMva@T_cT zlgb4GuL(w^uG0-;hzE)2QHAPA6%r~zHe;!P|ALueg*uznFFs@vRa~#8k$t(u_)02j zD_^7zS#wOP2$ymLzpzC~5j)7wKjF@;Xg5fnrL*Jh- z16DWjhe^}K30-9g?J_;(_VOdOX>729?hUX&lJmvFR$IQbYqh_>V{1`R-e;8blt-8aOM`V#%!R| zW^}?_-lQ9KE<8A?`r+z?$*>?ID_j6+;K-x?6H{MGz@bnJPKPvg=>(Tj70=lY&fx;e zz5ns+QOZe^Etp|PrqYUcx7N8v1(tt&veNunua$4(_^(X{vmDgaVd!3knm*mOL~Xcc z0un^eTeb&k7;e*mw3<9!>w)bS_YbkC_RKB_h~l>BnrmNi;J?f8G2D6~WZ=ioQ+2~8 zvkl6y8Dac-%yC+jolmdP-SXS{)^@m*r<9{CD!9?ZAb$MSZC!Ys>D=q?kfu04(Jnsp#-|8i|~|M_?~ z7e=%7zS;J)Acl5IYvO?R=rF02e5ij&!mUo z7X*@RAvT$E=yAB!2T+@PB)zr&f0M=V154Vg% z@~}TAqsFnmk^H)Snw60pI6l>YI*F}(3WpQ?I386ZGAdG8f{T5yMe&qrZ|VWxCApGf+`ift<;spdVkmwG#G= zB;S++51VjCZKC3Zo==)e_9@lXQcl)PSd0TzWo)vXqjTw2P+(OEHvu!3usQ5CA?%56 zOG_a(@-B}Mz5{KMwn%zKrCX)nyuj!7_kG-gr#ka$SWlAdzw1kl*h+@dPMk6xVu;G# zgJG&nD^*iCFQt-btBS$RmA4H{&(xC(PC`8R4{k%hGZd_!Z(rw~xjfCC_FLDMv6?d+X_rV#H(G z-6}9j@}%_s6Ua0Mt)AnCZX0;LCXF=^f z?z)&28r~XCQEc_eVr*&#nHGDjsUwQa=I;5J{VSJP^<*4{Np{7Tx}cuP2|Nl7a|w`-*Y2l-@KxW&g>2Yf z{#us;5FwF9Km=WzWN{d4`wC4|qm$rPJQ-UHOg9HV_$aH|`$#+B>aM1DMHhNW9B`{O z;`|F#!S^#+fW_+Q?GtE_a#DJ>scqqjgzI={#xra3u^$PFow1y*0V;=XUWl0?;mwM{ zc!8O7+%KaPX16+4Ia#B&$6*a}jN5SK)Lp}ahr1q-bGoXCuuMcDp}+<(zSMhm2tQ}C zzIzE7tb@WWX_<5_$O(*S|AL8Hi4fP}DD!0?)_aCgYr){#-SheU=wh{HVcUHN{0b}t zG4%}tMqRFBEA?O;`bdF;9!-q%6`1*450c9&{LWj~r(i1g$#9eDAsiOzku9}tRS}!a z1|g&j=cakvv6#o!AH5Qcr}~I}AT%i+P!rfydlN`hMn*)I@1;R=Hf!USJS9gM3ftjVU*i4umk|` zc5xvaC44TiU$<>vC%R>lvycXI$4uY*b5=6Q=Zf|XZvnC{O7$#DJnESvW4_QyoeHB` z)Pn0wR!aTA1>dD{DMLblIhqUEs1;;ozt`%MjL(%`-3)t2`n6=32^KK@!jlnlj*EX9}< z^46JvOke~r=BZmw>-)~6wK=1vo$6&+cPHcZS-;CToNV47F@>4~R9P($UGqZPPd`r% zq9mBQXh3ma%0muY`}v&s(Kfv93m1;q^>kEK=Vp)q_-X5J-^k0hYdEo8^hm#%`)Km( zc<JsEPcyKH>F!#Cdd^7uG~#ia(1=^x!Q+5i7a% zOQ2ADK0UvewS4s(1No)k!#9neGu*a3pD1D{ywBje zJ&hv?70z>KRFDdV+A~#Zp%fwlaO!?pq&d@rBHCDQO>Y&3i`%&l(2;ND4iOg0vtcZ$ z>R-%gD=FemJqvYeNm#Db>)BMv99dL4h@#vv{Z`{9V)JP(phd#g;o8T0H-e*rZ}EP> zIXtZp6!Nh$=$mL0_xY3&evM{at>?}bwaNY|9je+vO(o?=uBO%v;;`N=0fZr&vT^};wd1!jt~XrCDA3~5X;?ACcbDkZ189z;1jRLUnTm5 zMyh-C>YCK4TbGt5%q$>)XZtm(D;g#Pr+FTTI#cy!7Bd!hwA2E%L!bnLn^}P<04@oK}KwBf01l(OyLEqa}wi=OgM!Q5?`E>hDLHYLVRhg+=5hO{Vd@ntn z^wJt6{_Ia+$(Xc@#!1|fy0fC7zmO@or?fR&7kFSPG) z9i*V631g$$Q*He9F-%NS??HG$(AkL6K3xO8h7Nae0$a6{P?3odwZ$Le32kf-W!10U z?D@>f3k+)y&jJLjgOEMnHwc}SwX z%V7>%C`~RzyF77zyM20=E-wl4wKiW=e^uEUCy`WaWd+Bi*YVj==>;6(y(Vd5NB1?( z&m)m9>C~;>NQ&n@j#pG4K6dDMV&U(XKpQKZnL(p-g~o?csdAGcxNx@mnfix3{n8I0 zTFwM&&RW44v5B!kn8KfwF?rod@wQO?9zZGWP;r4zV?B+x$t24y#;2XU!%#j)@;cwA zwb3Z6MmiUL`5`9==0TbB7>jF@2a}vG#$zOaPOo-By!D2nkD7h6D5tZw0;Z2^Hvx>CsBo~O*XX*Y|Y3sqTLrNxNlN{5jcGOdM3jlzLt?1+P!lq0vEA0Veea)$ zD`y^O>LheHapJB3G+4 z*NJt75}J^bOE_3Ks+(uXSK1P}0L}uih)Fj*9Bp-50{$8wcLlq7jQOO3lMj#xgPAld zruS1q=A?)O1l+&9t#-gIT}f7HL=*0eY>v);rlqb7Hgns@lCho-WLEkjjvPYesd{sL zuL@i#g>KHvIrDqk^#0M)njv8R{wuyN_s?^=@V)7RpP!rT8z1I&%$nSY=vPR5TtC;; zQq=C5I8)If)LV?H%&V;BNXBkbd~b2egPO{wwZ`x^si0m{;WHxw>_DE)o5~iS-skT} zup^RHJ`guj*(%XYRS_B zA`9+YaIe)2khQJ&YAaw~fEG8|SKQ#f7Ky2)t`VDpBaJ1o)^^wF9#Rpvh0$%0=Hmur zksBGuXUO#I#(^mLv1f8FaeVD!^@z_u8bs~L;L~U9OX<{_PC#HSgY--)KI1`@D1~05$CCplFQy12C$6yHrx{& zWC>tHY%y!tDsTe)*-I8398Uzj@rLJ7*W#ZGuq@?vKW-bXk%bZkl2aWHw}E#9W-A<6 zD2#<&2>tpiJ{##47EL1-EF`ZmsD_61|Kur(mtfXe8@l-B%EbsRK}ZLq(Yi;JXUcCx zmd=jO4o3g&_YX^r*}CQHTySec78fy*`aRFYG2V&5Z2S6$b8vt@q(f2@E%X^UrrYX< z(wVLe1%b|h8+E3`0^aA6dQy?XA^*Pca#64Q{A9v;Un+6;6hc^^kIodwVcklQ@;2f- zRHb#wV7=i!r68eoM8CG>^+HI$W?9{6DOh(hER!kkC}>IhsKhMh@5a~Lz%Q#h ztRA?3F26;gL$kp9zG7%LXPJo}voN~ea(z|iNVh-gmteV!P360xu8egY=k4nNF3vH7 zCU>Bv*Cm#J&!aeXA=TsxL;bOZ*SRZdUP?r?5{w}Vljgm9c=1*K|jca%)t7+Z&T zi6!J_)&N+Z9mYlX2;~gUCyaF{?EBS%3WeH`H|RrfwnEV3+`&IV? z03PnsVtI7#*K#TD-Yz2k1}}>H0A#nc-#V8X61HY^bIW4VM{N9+A7pcUz5 zj&~_ic9H2B3mR3hK)Cc)dn0JN^qrTI=wr~k89@-}>v>pQE7j3rV;SpcLfjN$I8Nc1 zDLcMeaqjY_J(nU2|6XO`O{Q7*y)>eALy1Ognjv{lNXRwC`*rMF9Il9Moc{9-1&|@R z(Ga_i(;RF?G_0;cle6!fjo}2TQ{nN6&kZ{Jv2xugxu<nPR zC=a9bOMy;KKt9M1yt#!fOYW43DZb--m*C|>obq_&SBeU={T)$UbCYC|7k6j(!2Z`7 zbXFWno@mcZ5Jy?xiFen53ihaz4^{UD8GMWf1wo}OlUdSAVKcZOp2hvW#QK;&KTnzc zQoL20+Mw_hN{BGQ39G~>O>Yujd~kCg9s=JfEn}heZog-n&tf4u_!x2-m<8nXvFi;0 zIeVQ#92%{o=N!`oy|(Hy{lq4#tvh$FvFo4HB;uXX@Cb@u>}-peBaxDVLPOKN{z7OI38@J#N38-+Y_H54a)dF;k$|Pr=g<}bhk)BE zIi%8$RP|eI^9b+JX%F;Ej)-KdN;2%C7P?(#irg1Arql!EkH@6}=>ms=-G+dL72<3s z?1)5695He&{<_*`cI`Gu{?dXHg8T){oInd(GH&z7_6D1vgb0o2 zo$%+MQd37?3Cr*dXpI)V1=HD54tkVe04E@1d-~&uS#^hMOkPZJQ#83K4h67ip=iT0 z@Zm^bP^)bAmBa+fN(P5b)TbrF$bZt}e789h)xwXk6m98)5o-gdo;G%Bw+_^3zZq;g zsu(sU^@CB97i9Yc(`?;FxHj8J47r8 znuT&JgfFw8;-hG_%QE;;MQ$Pi6bf!x=19n8wQfbc#k#Oi2g9SD_id3F7XF2~(1i*a zs%0!(x8Wyl&Q?=sH|No}N0n)pYNO$zOZhqc$T zt>88$;X!!?e2|>09U33+IkO1JMNj`;84fOo1!A{=j3MW3`rdwvZlT!2H9tK7AwB8E+R_YFDk;G`n4@TY+bb+B7FB37iY4D^~x%lQR!(P)`rZcW?N zFt@bdRdz?dO-S>k zgkqD65lS{1cRp#1MTDr@o9pudJvW<>S_P%bTrdgmaTGacniMyoe4k!6@=}B-{Ooj^ zRHa>$wxX94rgLG$<)-?hBl;5VRlPKvpk^lY0@}%%cK)}@0s78*VdP>g?)UF{_5{vk z$EGwL4|NmMqFcO}fz%a@%t=asXuWSRSGD`!h{H-v3*+}eIeJ#7!_`b|;Vug!uKPRi85^7fQc(XW7LEJ?(2xVSqg!A_0n->NssktAoJBnRTZh zYrn#X#vY-%9@}}I2Rf{;phEPuB;G#cU{ACxC!(8nfXum@zdb6XCoLUHoiRdi-e=1rNFM(5j@OV}5T1Y6e^3kA7yG7)H( zbk7FmBc`LlEIZGzS85LM?w79pfD3WIF-9m3Kg}|JD^^L4!q?a#>>BuEMRdp`6S0f+ zZY$9uM=yqHOBXSz~Kmh~*grd$^gunsRsBSkk2wjh9Tzwzu zM6HQDmK$DQj`hV(jpHtwI4}N=VkpRZ$+h>UK`rjqJ0#xDZ?RJpB2{_#nS{4&kH1pT zrnfU(_JFZ^Cbtf(oaLg8aW@xthj&I_1|PknbYbmK@w$D0X~x)Ns4>)or$@pQ)C z`7KXc5uObi2F=h)T z0s$nivQy~g*8w2DZ*TW-lT76Kj_&5_?xsg%ENq)QQt|h;R5FLJUA+O(ZMbD0qbcX>3!G@)a{C{X2Vd!T?ZTpOx1t1H2v8@1V&)34LVf z<4iJs{Nj>L2?}bLDvQHg9&bt1VGZXesSQQx@hQs((drqpYpLI(hl{wwqHN76up6VI5RP5=_lTQyb6 zCr;5Mf9MfdZP1wJX zs|y}aoZ7pI70}19%7^2ABkn@+#?pMxWG9=~9&jR0(3uq4deKm|MVkfw)}A~1(eX&5 zV6+n@7d zyU#sb^mRp-OSc=AZDYSA4{$-x#4gn8uT1EQK3KS=8#ML^&e zF083qbvCwB4N+ZAbokbDV@;XLH>N$!hPU`qx!~6~z!g!MqiWlLj@XXq)WB}%4N_Mu z6U7)nhVVRE;IyS`yUOu}RbEY!P+4;Ns$_|Pf~z1Trdt(@)%p49@yz}HNN+D8UXSXj z!bc`);4~N{vG_H)e_h$|4)r~+S|z#Q=%zV2C6vIz+!Qo1m7m8S-$VQEdrC-2%5uES! zlw>eJ@uv-CH-q>dlM^<%D)v27v=yu0R)$|^jeHhlg#TJCs^0-Wb-C5?yF7Vf(8i3Q ziv(rKFVkf3QQYe9cY6ADTHx?pAgk6!q*_-CM5v#Z{92B(ummLJTHt5rOd|cWD9HpB z`}@wJ7X(yb(RWnRv%-|nzFuU0BAsEvz>VJ#l$>D3bI3uT%cX5*zMLht0x5Y?0cg*( ztEe)`gycJwdwSzndJ?m-qG^)Z@kxTTmFg!V%FP&BZdIH@bZGIf`GHnr%TUV8A|9!K< zD|WXurpiHPMDTrR$y8))c`edre#i8LOZtj-tTgTBpdnG$@;;FQN^z?1HzpS|9O!}D zQ8Z392JvNZ7cq@3aK06z%|&?HUw3m|*IcHTVi)gM| z@rMR4x2M1hCrQ7bh6oID3Jwf)(L~#(OeXwpiM^@f z3atlDxpX8aDB}1|RmQ&I@Dm7|qVK>6h7oWk%bC-+@6M?$X$8w-m z=%d*YvdJa*X#dHV@q!5Y$$OC^tQ(iu3rZHWlNZs0V*iU@bf_)E^93+rPXQOTAZzt{ z@9rKB5+9pp`4C!NkK22Te(jf4fsLYOzM$K#^NCvN*38vqhvJo_Cq@1D`cv}Dx%MM4 zbP~EG1Fxjg&UQ){E54NqiFOfUb{Ov!7yHq|6mJO#x1U8svd}+_Dimv@I5YMT>)<&+ zzBi^=o?+C)mf0(t#6cP}oL(nlyp-f5irr(_nePe$W=L{-8G0Y4r;0&>kCl9^lLE9+ zof7s66>8+Ml^DF(?jU>oju`?4#*T9|Xh3Ry*~dBJic~|2N_HgVWYY{yDnIdeqazcn z2;XgjVjYi`Fv~^br(6Fp;=Zci5-xaFEUaIWB`N9Xir71Er1MQB`;7IPjrLII?0LlA zPtbcN+NrViZr?S6;5s&QQtTPUmqDr6gEUnb%kQxf>q$+Pwfk)}>fJm>rNW>+6xlOaLDGYGI<4*;HJ zEwI3|?He44akh(J!8Sw9ggca-qKPH`bG>uGuU$||6Vxe6Xg$Kb8W!L%2Dd>%2Me|9 z58iy&;``T%_x*LxDFOoG-i841vgUvSs0Lno8~}i}^98`6$XlM_GK z7_rvFL~9u$1urufheuOdhx++}!{+NQX3n?~s)Q7A$!AYp8>- zE{B1Dfj5`4HObhM31+y)M6cZ3O~;zIi47Lnz^k*EZd(8!nqj!fy;jYh8h<9MuUl+s!s<*Hx9c5u2U`8zPK`|^n9mRzVC$~l;BsOtt@p^z5dev8J> zKx&+8-xmoW5U&!JfFN*h68`ERP+xnRidO|34r_Z|lM;5y^9S2?Q9MKl=G`sJyPY?x zLgi(171_j$BM)gGUbOVm+%r29sthuGzz`(v(%uzYE}D`9!__N`v!CQw{{d z`#Vp6r1>RJ8$QoMmpW2z#b2t*|El|Sr^e}5CFZ{bGQ3(A072;AEWuwhO#CVj($44k zD%SS}u2qyE5)TA77W&IX_|+r_2*Up-+5a_pW2gXv$i1LmCI|j?a^6q~4r|qS&o55{ zMXNm&*xSP{Dv&*5qu8}mAWQy5p!N@e-v1_efm^)7Yk(kjf5ZQ15>$s3y2c&YK9A{I z?k(Ez=UMf?qW_O@y#8VH`TxWg`3mm`f<(N*sbAxI%@=_DCDmTH|zfqS>r#ByZ*Q1mpuM> zg}*RN{SALT0se!*mQ$!?MriqFD+?U(SEbfpO@tnRAe;ZDfB?8y6B&6uZ@wjE*3Or6 zm8}t-?ZOB9(t&ReCm6%I{W+tH7i;uHFuFMR0tdOaj#|ww^YWm+ z!+GihHTiAF4z)L^aTy+H6`^rSE$1twRz*a>R?|;waTp!xw@~jxOp3Jy6_v#%e0~Y` zj&b%eXW|WVZ>Hc`{HkmkfG|#AisZkzH+2M3Jcv*~Uthtt;-^^>1MmkApl2dD%Cxv4 zE#6IWzFYmp!?pQ@IE{HJur@ii8x1}*8_$Q2N{M1{ZLN(4(04EOz%T7JAQ&x@UlR&L ze7QFM9HOhYG$a8*E??5{((FPnO#ue@{0sXn1x^kt)Gn64Wq+ZP;mtr$uD{`bOf!z7f;6+Q{GngIE}LQd zh%!05*{o6E>t*quLk%kS52?iej`f99>lHo;1l9Z-{>SCV?5Mz-9w?salTd_i6l?S& z%WA-Bof4@a@6qtHM|JBYor>W8vzB3!50klf^7Gw@@BbMRP@8|WSp07-JwQ;mzfph0 zP3kBYkvfadvQ>WO^%-uxKhM9xBCu%gTjcwxxOJh$=Q9DJ|8uH=0$)iBfS|$uO$zHM zzwd{+`W$rrXBUIUzM6CcL6cuhUYhvNla1I>u4XKii$~9UeGj8A;b?)cO7P;V8-n;V z??~yDr$WSkmA&xQTQv~0_)Wl{D+-3Af|o%2LP0q$S}j{R@w;ie=UvwS(9-&9T?GVf z`R{BXzZ4|MM0dZ(-?{8(U1S8 zt^k5AzZpUQ(E^As(fgu{)u*{ywmT!fY&rjN3W9FG@|6QYkN@O*8!Qw@1?^`AQR9p& zas%>MAMS{MbG`K4-K(Wg3=s7B%~bNG>MsY!e#DzvwimS=%ij;5vJ!Li>kKW`*Dm@% zcuZOxyW6w%?B2nWiTJHFh97GJkG)#}%$)OYqj0&*N$RTVhi95meUfTnL=U_RL%K+4 zp0Um;CqBBrXLF=E*5fBeq87^;?HxKpGa%P|1WoA9bYcIz_p@9f_VmkpJj2!`4U>#PX5Mg(Ho+K=#52g2NM)GP_3j`y6GXwwQjzoRwmE1gET@pLSe+cTNrrDb@qcs+n8T}m4iN0qe>47jwJY50>S$KhW`=KzZ3AEq0GG6yp(C~zbRlG z<@=+*{e2MpD{uR+7Q&)Hu)PshHRgIxR+1 z&a+cFWH38{Uq0Q9d2)qjMiRP;38qKtRI|)CmWP`aN|JTbzz0`CIk)C0;Vn z<2AJQaVo0PjqOP*UyQYv`MGoCf9`pTVCGcNcFt)jkna`>R#5pmT$MD~caj<+p5}Hw z2ShTF-C^$SL_YpLIO=QdEfKvJRAolN3CkQ6eL2fC-P7M`xVq{s*5>;yD6T$Bt6B*->lj{x0;L@aRY{dk;`mp~ai%VO5N!}Vw72Xd7m;D?5$JI>z*LL6&?3>0?8m!_efK7tDHRA5S&dqq%v~Te1 zsAwQmLzh|qaYyLwlKMMn!+!+m{%--3KyaJCQGc8?>@TYjXvInGuW=)66z7d*=5JL~EBLNMzYfsA+I;fRJ=mN0tXgtU_o`~UiY{C088C;XLn=YJ%4|8EH|@Ss=t z1`s^_1^zNk%&&QWTMGqWv_QlSgblnqZpSZl-<2-;e;9km@XWSlZ8)~=q+`3Ijytxk zj_r<}j%{{q+qP}nw)16muXT2xy}#@1_y1j^sz%+Tsz%M{nRCfRlbExrC0m{Gcp@D+ zl>JJ7Snr}U`WYlzvJ)4FbTWKJ&=A0yt+DC;uO{R_;`8$#+tPpAhVXy3j3AZ2;4|JJ z6~EyGe{h1)RiN^k`1+-lx}@!vkY6SemfR zvh{t-?O!#b^-Sllo$CF^n$G{eQ`O!elYgWBAjwA>b)j;Qe z5n}O|juUT?t>4lDzdZiEy?9pf4r9>_*ASqopgY` zG?*m#;EUD*b^Vv>BWvR^_<(~fROxJ1Lci$+w$f_$a>V;Ma$vI(6z{$&65(IBe~{B( zYDc|6u79g#{>8B0YH9vz_F2tI)Kgg8pUfIWJEcWD0K=qm+`jS$sro`SQwb3KC@P>R z?QOP|la91xQI#a96$k${OacY`d&@w9|NE8&_<*ARf|q)OqWp#<{816$Y$c$A+V_~_ z@v`yX?Eb36|C2jFDgIGI^550edxL)dK>b^Lfch~Xct60im)1w*c$JWjMArE$LH!RQ ze=`7->mNNr|6R|AJF>svx!$14f5ZQ9=U=(7J@&9X7@<$&6 z>imyUPJe6p6}#V3e{1>Uyn}}Qf|q-P2L0*7?>6&eMD&U>b1PRzdgmkt{`YxS@9B9e_WbsQo2W;0@aRx6rSn`@fv{_h1bE z65;Lf1|9w_Bl5>t$+OwW3BA%G3GmxLhm*v!=y; zd}TP|B$(Dps26t`fG$mGR3T#@ZT|F$od8_XZYql8r{e>ZUMZb-?x4Wp-QCdY7p4r5 z-B;42jR00*;zbF=BV24s`7F7}h~xh?JOEw&<|vyaEILwP=|)7~F68pS?Q5$LXs6YzxQYrf#kN zZ+$cv<}blqZ!rA7_59zb1dQevzSJ9x?oUO(sRIAeTQF(*X$+!3{hl5FYr+Y}_e-wH z8;tk29Ks*f0mD{WV7T+7deMP&B115{5q^MBb6e5Fj^N)&2d4OIky>vs+24!&HA?IDvq2^bo5x{Q~CX8;K zz4}C*3d^jKJ7!>Fzg4F(=l-SX@?MEsXhX7V#fu;e1>Xc;IK(*p}83N*tt@iGJW>QX8O{%gM#}>kS2-_m7MG zzxz4*kEXf*uIaH>+GX?(@&YKnTLiD_+6G<=KoMPeX98i&t14PF5A}^T(sIkP={! zbnz^c&M_ThlK~9Cd2v)N3txP>*!)?S{<`Ra-TpGwA0b zL6f~nDfJ}8e?0>DN?`=5m0>~T=gHF>iW+!O3cbnLw_;l?`Jjz-r!+>L;r{p)Wd zf%u~uCtG=e%+wvWzwakMG;px+kfZW2btG+pmF~DS{7e~tc|U~5gD#-&n%q4hu%H1& zNef72AyYk}wS(@WtGtZm&{{2;%!zO~;^w5~Vwu8}U9*(42MZv72MNtQG>qcz!xvBG ze~h5its{?1smrbzi`bT%aBziUOy+Z>g7MR?WEycU$LQneW(3pNwakUqc!$HJ{?^&| zjQ7XH?}I0kzkE3K2A}wF;e(vNAM*Y_KEhUB@O9nm^-Gsz&}u)G^TPz!6*!85nj)ju ziu%}P@!Il*lAK|SRu(d7e5h|k?-KE2t_kX~h{NP>TF+?OS@jL()^)7^n2-K$DZzLD ziOlAIkIV;~F8?zi|BB!LbdunYf3FGw^xszv@PUB+2afzV{0~O`z5E|+g81|cp6?Ao z^q;Fk+Op9UkiGx!`6k5YUlO_A5X}Ei_CtvN!k2kN2>!<7{36ru1O74g{dKz!?58~X zUv&=uYu$H(M9h632*qrI?Sy%-|pY7Uf%CLcRlcXFV@qyJt7*cMqk?3A6n_2@KfHZUm`}IJnP@|Zai7{-m9Lq zU)Ou@)gO7tUX>rUQ{MK^l&{^Z-|iPYiMHMsJzF0=C*EDJ-nCy?cb=_YwUO`n9^1#> zqu+nLyS}AddUkt`dWJl-BeHAW;#)0jfVZw!%1bign`p&EL?VsM0~jde)8n_Xkh=Wy9h6 zV1Zo_=?ri`;-opdfU(V2e!{>T>XN|ejvx)KHxgb$-9RTKd;aYlO$A5pakK#oW?m6w z_jBiTMd^@bcD%^><^4PyEg+e#aONG?{@rh}=sS7#tGoQCqhch|`HXW-t8C4FlVKiaLdUc%NHDB30aAe}alG z5jFcnLfBbE=N>M}?aZEnw}=5rnWo-w4?yp#pKoO%6fqESRxB&JN zW|U`0IiisGkVN=-%aT&nC=z&Dx^y1Rm5cwqZIw*raFhSj^c|vVRA+fC@8H|wp8LQQ zP=<0i6;PDQrpNiWCEd_UTKVtR1gA&473uiu(etTmy zS!-R*pL<=^Xk$fj4O0$YBRY@|$V5!6CJ-`WNLd-_yRU4;WPp;eWuO8bv^~1rtK+A$ zuuJrCJSha|>i5zrJX-+yu$)q_*z-p=K;8lU=NO*z*B!DL<0~Td3Ov7|(oF&3qooIN zuS^R#v?@&bo`#HgkQaaF9?yl;ANj$2CKd`cp(8!G4WBlN?VMNM7hz3CSlWm>9GDjk z{e^lNIw9vOhTtajlCqTrZvG-lzMmHzKy$}F?8ZX#(GUdm9fs!zSc4Ug{-Usg8WWx-4rU3X2GF}mDWg1ym!3}7uO$3 zXd0FPW}06wwYDo2wYFCk{Gzlo4l};-YSp)I9eTL-6=lJm>4a9No*7_+Ny`Ln-lY8=kVyNG_|<_oQw65^cpCM;|oHhxF8GLQ{?kgWv2Gi(vUa-wxLst_Z!K zqdJf^>sr(a3dKRXKC1&7l`#E9b;86hC+uo4cF?rpinZKH<7oJd7X{=4)v)*QFUjk|(7{&~G9y65@YA-CuQBZ;L^H?&_YL%#n z3`)P+`2=6>9N*^w2KI#b5%muP-`~2hVdqn>EYFH0 zq{GuB_^}q?r0lNv{j`TSCuTX90LZObCDpM>Fj2-+YN&RXru1N*cz0U61&6*7eu4eg zV%2IpH2RprgkDJ>0lP?5BJS2f^!+Y4YtW|$Y4<1~5y#_8rD*GDAjXZr&#UsTy~HRy z{@|hO8+ODXNshCyo_FNnP+XiMb}&kcMkoIAVB^H65= zBL|@Qi(n^Sd6D)D;^L{Tlz^k$O%ufr?X<45xZ$1T!V6^1_EJ05o3G@aqPdP6^Ko@VNq>ChOSkEL zKIMHOf4Ae|OscV-%++U1rtY)vMurgI1os}g;MhHKH(#4=`QBYkfC`|{I=S6~kS1Gr zYp?4esJ=^a(uTb*#Q-xgMoy&hNWu> zPWih@dgxaNR>P7}-nhe-?=_tX0nr>ZTs4MZ3m^HKy9)y>>&T_Kbe~JyAt&*SB{RXmnZT ztr8{ube2FhiQtQaW&ez8HdneUAy0UcV(V?#YMV4n+%OJ%nuIT3g%!!u*y2*zS#84r z4CecS6{v6r1Kr$KGcdHxe=-_k8vzjfU>5C{a1qpq?mh(MKp64CZog$si*<5Jiiwe( zY*)s~sL`4rJ>N8Man1Uv$?Z}P9#uf3v1qiDMZ?1Jsq*-YF?I1tD>f#Uq8a!B2ms^b zFJH(H9LR&>xxE$;Ra$dfO#E#=nJ`Mm6jY#yOmWE#LgS&7 zUJ5cKvD(3*+j{tn-fp`c&oPsw<9!bm{)TB`O^;Dqw&dqlq`%XhtnN`EQGYTMLVn07 z&y4Ti@}6)V;y4|!vXvB?eW^BA*Rd-WFRgL+)AE)WbI070TOLL}24x%$eSa2%lO)$J zX>TGLoPm6y>reuzVV}MC6rw7z3LM_HUgEmhwV6%|38>B4Ua2@D1a`3K+`>`@p6!d+ zSe>i?y3JyODT*2xr0Bd~VR&%vCHQ4st4^e2(w&D+oLPM|^CJWhDv});NQYbz30M(Ipet491u8sipsUGHY6sGD)EN9Er0M_}A z&;->DXg$xMvs%f3E>AxOGu>(s3S}gUwL?;)xQX2G0ACrB*GFHYFkJnkc>F~z5$3ib z&mSkrJhEr@UI-q-h&#^IRmk3u9{Bz0dinJ7?L5YpKQE1J+%Bp(fOE;ZU$x5OPG95O z;KTbosJnOLw`}HMtKogAePX5wqG1Gpf}1w}#S3O~*vKCLLk%(Hu_aSq1wXc2(}l|k zg#Jwtwi9U*YZVvOB>7R$nEpdo1*uEqT+gRpuqI;%5kjeL98=hLgj(cJDkDE zRM_iYYp*2b>a$3?M@AAvuQho(0eOfhJ*j!YradX9ECFG$?neDFZjhhm8{h66pLO#c zaPEn)ltbKlEm&Y~IQ)+?8RA~Fs%E5#-B7mD^KeWS^=6~dHBgEKxz(&YP`U&F?6Vbi!<=$|NYtKaJy&zM_f= z22TcCK^(k7(=-q5$g<_2a?{t@ND#7Iep9TqCiK)y+HtgFqj`(yOUVb8A2;^bz#)BDFQ-0}sU->J? zcrnK0mEJUHT!0;SgtJO49>d_JmVA89NmLUaHHlUKhhn~*?8=R!rwg!%2@n;tubHT(c4LZn4)TqLFVP| zY(unM!z4Y76qp>p4Ls#!*lNF*!-m4J$VC0jqYQCfr{^RW$Ob~)+O^3J!afc@-R9rE z!}#(f3PX7uto~@Q%Y6sAk9|zwmcYFYc*Gq3e)x`ifeJg?QY+E8QIF7#)WJVN8Z0co zZIx2}6*cW6a~#BRMBzPUcN^lQMedV?L%VdaP7;6_pU#Wc6R$Zxny_C74y(2jcf3@F zI1jIWr?uiyL}f!&yDn<33LlCi?SI+aK$tX|ldfNF#X`Jif2UwP%iHOa=a#W{R4fSS z>`y4&24oVO?oR9{=YwJDx4BA2)K=B~lynAuji2&30KIK!$n8KBL{Tm?1*;sI`s?M%Z31fb_j)8 zi6hr-5=OFL^4XI5r3n4#Q=ng$|Mbp^kqi3MCYBKV(yG+l*!&K8r>_rc)4^5*`zNY) z-$Dpo>ruJgx9wLl#CW31#&N<{KbA$=MdoHkgsr;0AKF<)YGlu!ME9?cP;?u#P|Zbv zvGah5f@U`H>;OOBW%;>a1p}!K4 z{)}6TUllTtwnmS_%XGeAx>VDY)UiXj83a2P_`ZlD@>Hv^chqbjy_ z$7q$7m_nEm(oP1G2QCHRGe#F*R=t1Z)uWe*#sOk~-VDs@EQsJ3jT(zbO2^y42nq|| z%(5F)9R8Z9T}Y4E@Zbc2Nk?qj~k~lq1#Dop8#eGygAM6 zR)-Ho#=*cQiZn3%Z(tc6D$1!n*=d0i!QY=5Fqi;QAh};QHzmZr7|mC_$GB*JVnH&e z+8Zoo^#E`in!dXV2Tx3B`hrY@FN@TOy6=ZSeqd3Y9+)hPYiOdzu}HP#wV57`6|di# zXsC&o9HOJPoV22BQWB)?uQ_^;0uJVGeq2tSceONi9>lF~5D1z{=%G$hbmZ92r2W(! zWVQDF4ZyQ&x3%n;QpHFWk(L){qbwAWK12A8-_ZcFufmsMe;HwDP^MT+@eK@^ASO=M zCZ{&hR$jZOKi>#6xEpSV|IMzq*(j$aiDpWDBslGw&F&aqW^f!~GAzq!BN1{EVFCCCm`H9N2F95(0SeNdiHMaO=qp5Y1{_cCcf(ORVK5V4#9xs4rq;W1?7f zIcP!%e4fW#X?e8F+^j#|QB7E(xLcj~5IkeE8eTc(^v1kfi*q>nG*0OE0;IZuZt+xq zB`yd^1PD8*upmYmNx>B_($J22O8uZ^fE9Q@N?o&bu(POgP8jnM4;hHhRZc&ymz^w` z)rMpBQP?~qiRl(2l7=X{2ixL({3v$H+*V0Wi(^#5-v;N7i}za>z;^JAz~k_R!qoAf zLm7U`2+EO<)U)F8&TdeX13d%hC2942Psg=9A&7lLS~D{q$ZRdnS5<6rmdS)_cvoWK z!U?ZA+nU8G&Z?3QN$FgI%mH29xJJ`bI%w79Rz>0Oud>PeEarQyq&R=D^%!7EJ?eqR zy|@px(GXzPT@1ElE)|;b2rFLr)3Qxa#_JZkn_bRPvjcPM%6ZkELh)KuW*4^*3t;Q# z736)X4uw&K|2clUu+%^{l^Oyz@IGQo10@vtbtZ5g&X<|v_5Q1N4?iOCl5TF8+yT^O zNUeAB0+*wu5zYQR2XA*}3xMUdRZ;9?8;%DZv*v*c>diFOB%X*FMLgd0$4Z4{mXc|= z6EEG*Shj$-S}iHAC3wd8k~!shHF)MUg99@SZ`Pn<<9P=8TY~n6F1<$*N)rewJ$diW zA|<=JY90!uWs5<*5|#RBUc%I-J9(Cmsb&y^3G%NQw5d9*yWHWE``>!c*lvITc3rmt z7pVONoF0R%YU11GS(zsFh2sIZtyn7x)ocmy4w8`LRnZLzI8wgt&qjfN*ZyvQOg24of{hmzk3rV(E>_>{brLTp9-gI- z2}+8JL_(BD{O$fpf%D0UXOd#B9ST-N%?JLAr8AWNJ1rYX(r7#lfMu-KW=oWvAij8f z{DaASFFiSJ9Rgx#QVE%i*%X$g<0IL4mPqw3U2zZtfNV-TOFG%=bAo|zNd7)9ojaUYOg1X6S!^KZ_#VUs|eBp~U3diq0v=x`9uO`FqT%t{hYA+DYw_704LcB!! zy3q-ADLOoxPdhVwuSrC*RMb7zqsK`~$|cF>R_kQs>&2i1^vYPdDjd!6m!*L`T2XkA zQZQjoF8rT|0_6MRobAn(yNXPSS2ao7V(2tG($!8C|D?mIIbgUOLfY5@tdLI7 z%`_}HrcB05hs{+&Xh0iU+|QLYvvmpO!X8KJ$^*Ww`~!{+8`T;Pex-h?t)5o{2NTxE zKLJyAoPR+FJ+5<@vK{CgkBX;nGwe2LsRWD+A@9w+#NWB_gd-DOmjNb9gMA>^fM8Sx zue#QZqsRR%4$3;LgL3lQ?8ZadyG!NB6M#sulJ!4eTo9#dm^Bu0s)$68H?`V!u!I0#CV^zrTzy2t z>kNG-u(@t461A~y30CjY6X?6&nB<*su>@n1rcqyp<>(I=JoYM(mFE8ff!MV=oZi}u zw}E$l(lYXD=0-^m z3gpWMhUZtgx3`G{K&{)Qr(&$IEGn##VaCM8sUHu*1;Z(FVH@-;Co;7!?sw^Nw^ra6 z>0Yk2ac5>YU`}Al_S0XQ`$X5=f!^9A`A=YJMXu@;?AX4Wh#cH~*^{L&Zz z(p5w8Fduw;ggloGt-)d!93oS9g5}5N$_!N7m&)u;`w|D#>h}O2qkh9)Aih52Zo;k< z;B)UhNm-kEwiU|*4McFuG5A;L$1`bXSeMUFJcyRs=z2l>Bv|=25&6b41it2okhR;X z)W$Uw=%&9&Q_DES19FDSdjdGj_p8d+pz*HSIn7pZ7ZOcryV3-LL*kVeiHgit zKhE;!lGUNNletH#j=XOshAs)^(lF`>clY_5+T)7=q9v{0pk~p_S|W+(x+1)>%&T|} znU5iF@Qy+$krdi4ziUxnY5x2cNOCG9lJA-eM|MJC-+_uc@7QWV= zz_9~4NzI&2gkD#Q2D=u@Bms6jTlnCclr|Ve6Mb1k(Cd{dHCcBagP7Zrmw~yb>e(kF zH>D7G^u1DCIrXDDZ~a`{C28dx1S@1%S2W8p~Dr zB0$?`S<&5%Pe$fX^I7YYodYkJ%I-HT{ds3v^=5XTYAN5pB&pEdrw6GJa! ziq~<3+=DlQT1V7AU})_UbNvBy{+_-A3T?*5p);o3M?`0K#4ZIQD6nR$(IPp`uqCn5 zZP&UrKwA;le&L!M{{5BeT6hoB%2u+FoK7K?0$-Y-JnuNq2Dtj%PDl8y1u)Lw;pXIp zccFd~>RK_0wpyju44nZDVdAB5Z=yV%)}TgjVg9f(FUH!_ViM)29Pnu~UXF3Q9W%p} zI;x5i`09p3<-J6|X?VCY-TRq9-$2zVN-6-=RBtb>h&79&;Zk2S2!%TA@q0;3p;l#G zU%)b`ix(|F`ruh{++p1+7ft~Z1V35dP{8HowcC&}nj>oslP4ma82t|17-psH3rju2xb2 z#0HM>zF;$DFu*5I!1(l6Gb|`rQ0tgd>;36$zvua=ho&AWa-xMNpQh2aj4YI8dvDu4 z-N8V<0Vkq!&rH<2kSs!ps}NYM_{2{D-zAw{X-JP2A4&@l!ubz?PDwJfP)@5(f*(}N zggHUmI}f+iEK`4~Nx{ETxdC~LgR8X{UYsj$TTDreJ?&f=BWxd#Sr9s|E*tpuK^NQ% zy2h8JISac<)8ngmGp1iSmI@af0iWGWpJMj-U(*n%gr@ZCt0Zo)K4Kv*BdEB6L6qJBSoxd5~^nx3UK6A^^h|z_?N1t8C`&EC~xvZeDCF ze`-hONxr8AFMv)@S$KVQb>thVRJUcqYaSLDZrr0w2nYi&QkF9q{hks~Ld`BGf{oUU zpw?8{2=!z3pn6ra-z*Uh<0{0#0?SvLai%Qb6~RTB3|aoy9`c$kW7X_}{0hdiuJQ58 zetZ1^tJ4u+d>Q2FN}QJ;4$a1^%4_@bBfYYH1g4{vKlPmBlc^^X$6i?8=&;AX^Wcml zV1GPN9hn}6hX*ZPpiEV514W~m-n`iC8hT1tIn`NQEhptDE&Jq4sE>z|MOP-}==H*a z3yx-YbhTQ2$);SiBY~5E#Yl2jh5O~DORX>60Y5Gj|3s$?SOjzcJld||Ht8Y8EkCUk_SV}9XH_Ev_LmJ9j24;FJFYId?&%de`XZV zl1Rc~6Xk)H*sJ85C^)(iH!d&S%Am{gaQQ3<@S!giSDINNa*#&`mHv#5RgWabT)>id zI3)YH`E>a%bH8=3T|Vm)H2{`4M#ho#v2&kHEmSsJzT0TeX&m)Q({wfEZc8N2P~a4B zTnsD8e{ak|oSsX%ao^{ma0MsLJVux}_=*=w1Ej^$KW$*)_PSU!_tf+WW{!PrLBT^D zGPA;cOU#av3!;(y4FQ5j5c_Ugn@voJhgAC;6m<8sQK}n9&42~zxL9Fdv+^Jqegm@U z(uMhfN_91_1Yn|Mu8vd{ZSbkF&^s+!`$e#1;>=se!!;vre;aJes5Nti5P^{h03$EE z8~Gt&Tqw$sSRPGkP~C*?aB?>dihXm;D>>UKj+VX4Mb*x`pXirq`J^`fJA@Z#Gd-^I zoayReTpLS}V5{dmXQ}&>+OUH6yD#^FV&E&`eq3c(ekJyfWtQVVFz6Xb41E=Z;kU?bkWq?BxuA zmGn)6o(H@z{YRRaELAzJWH*>9W&+CyUw)cgFgS0gHCTbrX_8CQ>c&8AaYxhDs`v4UqdkajglyvGo@C^IK-{ma>$fAY`+~ z!Mo!dR#BK?!E%^@@$Lx5l!9b63?NV9o+-AykUtf%(r=NK$i#2B;$iww7$yX#MCk07 zESw95(?Ato253-KP0J%>a9u<%sQzrtk^p?dElY{){MjEHqr!aFU@u~H6Gs9^C-9vx zPo?-x{c<_AK>8gGUnq8W^6`p|Zaw+qgK(InrBCy)=U^!WRzYl`+@fG{#g4{V(k8+B z=v{ZBZ|c$8WTVq0SaIu6wDcaKP?ITSsHNv+d}NaTdS-=+;cPr{Wh%+<8ii1x!zvh^ z*L&;u9S{r7m)J7c$L2*WdqH&ed-HWRor?bcrfeG~V!GtJ{1~E|ZhkNOh5`r$jjI}a z8Gfce?B}trpcj`VbmEBSruUx~;Y-XbB$+64)9DZr#)J^p8lLyMhVk9VzjklXc?v_} zw4q2U^w&RcyEj@y#6psq9dfh5goJtM^4X;tD|vZk*T#M`_h>l2gl3%^nYt=A_NU}G zXd>{zr&EHE@<27gsNsWL*1u<4YxHW~eC`cRYE36|o;0pjSH7A^v>*w;E~Te%nRA@Y z6Y5yhL;1n)`D*G#M&CPS*HjsDrn=dz{=IJW!p|u#?V@g+y#?GMJX!qh9R4_fWnH_d zq&Hl-PCe(MXF5~bNrn1{Cdao%_~e-;Vb_@$+@($!9h&BfOyEkGP7P6}X;9xRzd~XC z$FYj^YN{|Mpt5~AkeAQ*lPXtNYJ)z_yHDm!F$#0V*NwQVo2*zJC!TT8+PwxToaPSZUyQx!OF3!0 zHgRfFJiG0T`jR+h+w(hqqt;CP*~XNInKDGW!g+I;)!t@pE! zrIXA!6GWq^ZvKZRhZK=*NY@>4`_$Nv*lQPQ*gXMJxI!r4n} z?`De|4Nn<-ZA5g&9ir_wY{#esxcCyCTZlfp+X@kUT^UmaQz=AX(?mvqbi(jXg=V!O zdD_s#A3Y5DEvtjJ@`7WCf}E}oLT~JyND~Cm3xclero}I?A}t}(ZacWX4WCn^ceD(Y z1xPi07YAn%@(@gv$`@KoP7MLaG1r;&L~M}&v4G^TjawY`G>-0q6u)Djy1DzMvA7MY zo5TBv@E0)9B){#r~Ml ziX4@Uj5$`y!bN%5!fGpy9fj}mY2x`?R9XmmUMa00QB$D<_`msj&d_^!Nw(+1u};yRnrgmiNBeQ(uC-F3l?u~Si@e%D*caK0+V zE`{M7-8y_X)1-*0X_6Oamnlj`Sb4TjOR+8W6RyEh*VdzH{OYsyy+y{{kxA_6^GQL`+Cf*udvTt0TQ|;11Mk70QEa2_1-}hP z2VMI8D_HNsi})SbK^$)vJu!3)-_VB z3}3v)7o?kLOB5DqS~ED!1;5;S$eVu3(#c0pNd7RsSZR7-Z}#3hSyW$<(+?Hv4q#_lvO2@q$M;eS zu;?d*XuZ;SjclH@`NRXDDUup>-+k*c?r`7<23H-^?$*d}{%LQhB_)RV`$GWav|H!7 z-~6DpJi#r4#m}gofwUI`XAv~lhH1L4Z=BF>7nk7BKIQdZFL+uC1i`d&C2#P9J^=e* za*HYbQbzM4HMP4DCjcbbKgfJs{M9+1N{@nz5RYsOeUmM3C>H*IS z$0poKjRrT1_zB;m?P(dp^yo$#4AduoV9HjEcO(Ilnk(pFBhTZx2s7LDQ{&s+*Be|- zm~B__QjpGAYV#L(_2dN@@HIa@_))*9OEM3%25Z!Bx8JTbm6HWHhfV|I>Q&r2+7ZHf zEx&uqF@D;7P8ON0*VWe4VCBXU{W_J_q7%V)AEHnz9{pqV;;PMS~MY=D$;pB^#!Eo1nO)me%qw}SSXd=mnZ~g{*({4=O$`>z=bH3T%iQd0k0y$?O-6V~=CL0M-XB2RY;~ zx7K+IV`NAM=GQ0{sDkeev#_<1IUhN!+t1LA%z#|nYS+AGBZm!&oOv-=wQsTI<3MQv z6}Nt#LGzI8>E|pxVlTBB{ zQJq8#&r-O~EAk}SZqJCNS&&{bh`~!Oj{JBJBJU`2F{VO=HTQioURgWcO9S6p+J&Y& znLe5y&?8?K`a9Atl{FMeh}z-$ZgY@S_51ban~J?#BVFsV^TG`g0esp~d7c%n_uC~ilk>%}1f z4aazxED9P8%OROFIwH%bpK5Bk=LBWunUI_Cye5|QN2(xx39Ton(g2&Z)n8`l9@EkY zJz?9ovi;j;ECi?4K?$tNl(1xX-b8e2o4qYk{jM};Sn%N8vz9RuY~5MpF~25lc3*fM zumen$^dw}-RJD%Ck}y4=wa3ZEERNQ?4JVy=dr66a0E4g<`cn$hA0Of_c?J6G!pQYaXSmN}t%*5I9rHgpB9(#Xc9 z`fM-=>hQyEpVC%q%{Tijw|r4@1<(#x(eph<(qTLj`n7Y^u4FmLV^2(XsQCC8GbllY+FmUi~K$(lIfjhWp zGU9BZ9_8yxv^Y|B^m%qWLGvRNXe6j=6YNa)TRMagy57m*b#%RPV=Q`tze5j>V#Or3 zoV*_E+0;xj6kckKR`om;Sf?a_LFt1&wQAn!2TiGDfB{yo?@SX}FZQH2s^>Rf?I+WM z46LTStWdzjae%siwNXb7g>jOI=$`d148gSyg)IN^?%jU;7AbJ9AHYLZK`IH=QM9x- z-R!gbl~TP5SJSd~9HOm|P@o>J$$B_;W)gJoWu-v;H7{O0#*tx$f;#<0@9RI!pww*Z1}lXGan@M*1R_8^{%$l;Q7oBrZ(2tP-z8pZID3{AE$sl zlK3#k`s7r%ZF7cOv(ikYk1}qo&d#_+gBn1KdoH>Ohab2EgOz9sIdzHCooIj=wF7j| z((WIGkCgoJHam^Z*|;xS`OQkeMe$J&cc?>%s*oa5G!mEuwGyd!I>*fIhAjwAZ^CGP z7>`GmAOkh$CJI79*RKpMR=tJr83ekH#e!~`3$>0~OpH+Qptt#tj@vf`_5PmdnE(aE z1?^4{p|J*09Cmzq0f5GrH1Ot^O`O%q+ypl7hEu&@fmu2xgMf2J+a?u=tOj$sJ>&;6Zhfse&s&xbqGm|WBgQtL*7RD`8!TYk&=cmm-uayO^p9peM85E;$x~koQ}K*A7Q$B%6F8{s zjT0)RXaj0+O^&MHK$AQ73cuw@6-zbB`qQ}M*O41BX`NgYi;NFJWMKwZRu^7v4QUMn zA(4do_$(5OZ_?dC$LHz7Ub1PExOTV>Ve;jQStk#tP7f0-T^7wwLmV)s&Us{;I)Qr` z%5BZUk#~xta`mV_z^wDTBjG^%f=a9br-L6QCLU& z?V+Q=I?vd=<)DyAv{J$#x!i$qW?#ZTLn{-NOY~(gEN20K3y{p3W%V%8@DdYc{oc4w z5F2m((7cU~JQ>W-a*Z;VwIvtEU6O)RS~-tyoWUVJC)&u_1|~i88XZoWGiufxqm|Me zr}f*K%wn;PB25oR%);tK10lVlXW~@eUAuqSfrTFagx^3o+t5fP5Dq_Ks-8(P(-#Wv z6lzN8303P=SG0%xwIO{sON#gLlsmWY1?HWZso-Qeh%YeeB^pb4l3&k)%u5Oq99&9B zhbr;`&x#Zb30GiINe870BchncxO&oGA3tyH@kN-{2Mhvi7%9*GWZ5_Z`ms@Yu##x6 z)oAvP>B~+w1nH9JhKV5IpS~?XieT((pEGYr&Y|B6>8VUcqUiSA z1fZ75x94L)P)nV!mLSGnjmse8Sww>6)OGDfcIaQ@zkx1e4XK}iu#TDbB-FS2K~XwNJ-#qn^;+?`>w zN9K>mbcCci(1@L33jrf0ss7D)hr}ze1#2#ew%mQuoDE`a$x3ssd~07ey$pI_L_pqp zcLRsn#>gk1v$IJ zRNDoME<6zC;mLiUV6rm_dvW@w`sW*gO|6Rt|J~lNIb-fr{PEAOjl`#ONS4A$SgLK$ z2YtskriDt&{=lBHr8B0h&td1NHd9QUxu2jz;H|9;`mon8;u%`wG>>C2lQ}J|M-e$r zwhwZ#$1F%Z=r*?}ofp#R#n?pME;j_l?jXgw^`)@14vd~g6xF!^Wp5*r)>lbp2+7nf zR1v|*h95!vunuA>PaD%Tta#(Wb|r;qaNUMB+kY;OtiTp(o5QdK2_IAIb!-AAW{Vz5 zFb(6(T4?ZFCFBUS2p2jK{YXHbDBJ^`kOC*im0^7sb8-_$ean$62;T z;Dy4ZKah1pUE@OPenkRUti8j@;WoTT7rEj%rY)Tvcd-pu1$5?7$IBu_kMaJpSUND{ z)G% zP2{KBu_n;u(kGR7_}1H@sDtS#?ENj4>F@xRxg+erB}K<(KH~-nVYGG9cUrBXvpoKS9l2HN_xgv zYh*riKX#UD20* zxMN^em9S4fkU$XC@}trgR^HM)ybtlP((v{$5qyE2+f-1KXqmRJR?Q&90mdN9lm#1M0=Wq`-$)$s@lRqW*z4vsrB5m|N}0%E$uL!)OGrH7E) zRnF%6P7nYZ&UEKWZJ&)j^ye&>p_3rs8P+0)-%8H)%>DcM(IqBpUg=Kt?glMNLq+N` zbIE5+3~IL@^1Y=?_!;vC-ghcT*#pE85gs~_hdub_`)p1Co8Ees;ZPbz@kgde3(-(i{7+ifsh@jsVJ^+QDy?J(ibk00ay zpt*Uvom8t%3iA?F;s`QxTI|EvXId1@RNe|}xuT0m!4t)mBe=USQH01GObMfcCcWtR zf$)v-1(#DPyH+OgN{G>H>0KxUqk@XVw+`|fitZ{4Cm%5LC)!lpFm)ZMp5`J^Hi;13 z#U6Oh_m6y_+OIX7&@iB2I+BW`&hB9Odc$3T3gZ*O6W{h}xf9&%^q-C@U%c95d2>5U zZz263yI+Qr4q*QNBEMRaEAJD@1k7?$fnXw-eC0pD8QvTK;p|gam&SpkA^{i5&oaMS z>*>ZB9I8imhsJwqVd-%OH{(Cs9DsurSTuu6@h}YOo#XED7F8x>!z91=GcX~y!!b)e@1=iki z${kXbBmAVY;n@gyfoRXR3KH6HifUyLe`=WHj}h^kOiDsmxv?nz;`~i^51HeEg3g^k zT^n?!mTfFyQoFcCS1RvNxu#(8BK5?)zpB`8gv;PH z<$C<-s0w2BcKQ}@@OfOP0vPeU-IZOTSAi$+e$E+{qYAdHnBTeb&0(gi4aEgNl8-N! zY`f{6Yd4+FGQm$Tw^?>r|JXpTdBMZQHnY^E8!CrNaIVBvf(}n!CqTNx&+5@xRGwQP z={f9-$O&&QsmX};1UEcAr!^l9T|ucglK~D~4foGUeBr#8`5kH(Y^f-ioVjg1S{Avp z&Ki-r+Edp>@NnlCvgE=jR(l_0c#~4mjIUJ-4hE5J?PG24?nYoG%fYVPdsGZYZ%23s zs8#?gbq%&35P^EqfyK9em*Vwa`z14rV5$xVT&@*svUmktyf<6g)R+#}gA%*P-Uk7h z!O!m%boBUTpZlZ01uVeE(`8)5t$kF@pdPstldD6sX%0B*dE_~9G0tfl<`(m`K(>+< zzWF9ijAHG2-?TlNSmF_@+%DtI&5|u`xj0xXCW{6>C0etspfGdI-hY_Zk)=+r~LqyEn9zIkMo_5;a!=2ma|`eoG1cm%|o$>rcK&0K!gp%F7J z`FxabFU45h=x-8r>H+Ok>x&w*=`JNCkESAPKQMRbxm_*Cm7;S~Rn_)?GZ=$*CkGTG8!oEya7Ra~RX9kT&+ zrX4}s_s*^$IPKV$x|Tv&%+2c8nd40c&rbo96OnW1K1AIIq0E@YP5u2WbNe*Es|g;3 zvNSqTNomy5lE-SY9Gi&Kq#Z97mT+-jS$hQx?g_vDkh(Y|2J;Ose6*RPMcLkW*&b1} zwc56mvy+TimOh~u#0%br^_YIV636Vv1A{@aloUeRDWg2`{EGovpi9j>_jS2R2snMg&T3b0qtJdR8W`5BWCf?)6VAHW3DJ&1gTTSD@f}Q zKDtf-^Lny`d7?fS%J0$**VoO-pgTKF@oAsv&@Hz1tA)JR(>dA-eL7(_@CQS-Kym zW+X_isL;PDAqIb$A4nPbU74w~DO*%(ClMK=Dw3=G@Fc)Q-srme6eE!ydNj{=OV#FK zcVZEfsp%#}(;N0q4rdOwsdZ6;mK>*JJbsFnARCO2&T^lEn#sQjf)dk4#^g5M)B|Sr$(JLzrjM+xpq8%Cluug)Sr0jIPF?Jpw2SQq{%38o>;R&<9v;F;JhSD z=uY$tnMWh7?r77Hllv_SGnMmO+!su^!&I-U>?}AuucdM|MrMQtc&jxn>Ak3@ux4Oc zJxEuE*N*pR(=&5xgVQ2`7v{&u254i?TFeAq5*=B+rU;AJj5t4fA%!QSaCQ3RY$E=a z0OI;(T6McOP?t6cDEHL1YVRX+w4KB>^3ktL7}7F zIhX$>h6QhC`Y`SggEyxxnK)b!27F^_y_1rCfG8v}T|as*uODly`yBkH+M0m71_}U< z8Q4F%&%uxZH5`6PQ8D)+x?I;Y|E{tCY+n>9^k&@D*4@dKKOGp(+ux+Y+a$aFm;`LG z4ESaptMQ&IrZ3lo$BP{ke7eKHw}&QrroBSpg7X=l(7@}V@`67xh<^srK{X~4;q4D2907(&Je#m0n1XoNS;hWQ?|4}RW6u9sPF*!-35HFYIZ+7U> zCVrLf{lpyxjqXd+2AvRzu*T10nqepNg_>rG9~MGd6GYE)r)R9JF%I$rwFd_8&k<%p zG|e7dA_U+H)6G^ot5~?hTsDu71dchR=f_Ref*+UIYcq{76#BtXRNe$5XaXut|4kO2Uf_BjwER2M(Ix4V*%5JpKiR`%u(a8?8qvZf%k_*W!iE(jy(hsb#!*9L&E0Z!vVN%tBGQKX!naH$aYrXfT)^d6upD z8!C(55(Se2sI;hi>ihvlGSz-Ca|W%HJ_QeIyHU0}ob&1;#t1l!n^ea}0}3CK(ioHw zp^B?Lx;NGxRNG&u1F*9Sxu)6Q#Nv~J{#yN0nkgxq!P0YbywooVc z_}0yCAjbFLH z`n<#k)8d%GHE<7>rnh-744TSzS+(5{?$&^YPltn`WcY>RYi{uNlI zvY2?mX2RL9)+k?UYpNS_zIGR;3#yotd9-BleU!zd%z_#$j67(aE+Zf4s2E$Y8?x+R zsu;XN_(o*>7hBlK5h$Sbu^l^vLyO=Ta)C&Aj&ao(2Z|ZJ$EF(zr%zIzuaF67EZ7bn>7h-ZVW~`(*s_-nEbU1nao)9;uHSN!K5SrQ^C5I5CXJGi--tVYc zp@x2;qr30Mf&-Q=N5vR{P5O`7*5u_%2gi6a;!gu*3-=;n5w>S)rEHrgFOJrRZ)$IH zp2*lIzvO`Pxhj8{8(-(dvu)w9230L=Y$OPM*a5aO)P|5luUc{_5*+;=osxyn$AIdr z`$HM?k9t`;r`W{tSI2LRkSs*YwPox$hvm}kY|SKnLMwPOQTk57$i1n;9N3%K9`26w z$#2m#j22SR?qwx+cfYlHll$=`7_NS4))h@#RqQ$~jGBEz%drft+DPf|oexqEmC$zB ztshS2$n#9Wuxc9yXrZB02O&Il+M9$A`7~OeK3Cs302`)T%D@LbbY|ncguacFcn;z9 zvD1!_YkC22-azt&tWtI4dZBvfu9)FsjUE^-_dZJR;GVFSaDg? zJip~%*|r2y46nfb>Yv6w7FzERL(4g{{#Y()2KQz^Y24L&)T}1*gX#%gwSsy?!PA+Y zYt}W?MM5J5aJouC!Ipd;Mubi-V}on$`v<)}< z)A8Q&FNug&bSt*VwfQwT^sh|S`U*S$p2X1Q$6^4M9e^gW4Pw-8Ha&}THCsB@&7*iA zf%R)@KjfZLQb#lucx|Mn`{-{#0Mac3e@M@K-+9efeQ)(|HXWeGY7^VO=ki+n?c6V-cfu%pe2QdWpSsE~X$^(OTGQ6k=>+z=vsixG1E148 ziu%4)g{db(WoF!S7es1+3AbsQo&0E6cchblQhEJ-y{^ZdD`d`0eY~3i_eX=Y=382D z;3!OV<%BPoiW+JsRPsB_1C_ovU}_>!76J*jTLM>HW2z>qMmiVSS&kp?@$8mF*wNk z^{y1xRI7`g(@fdS9?p=T(XgaGaNAL@+n{-mx{#}SFv=&sgLi6II2R3XaMH;(^Jc7w zCTy}nPR=RluwvIsbK2w77cOh@LUm(4c^YrWPZG9$2WpKQkK`sJ#L2g4mu@!5vdTMr z;Ws>oz|`8|QkLR7ysBG^Iam1Y#ekeoJRx!gU+@;<<7IQ2a2?}K_L82burnNm*%Ii* zdDav4v;t86m_|G!y0s>=d@P+L;{Cjb78Tl`--@1S^~DF)AYdP|MH7ioqToxSuBYN@ zscI^*is%ntn~XA6j9g?_X!ATZOp&jk+#9U#g-)`@XPb`KyL8kzoH&)ZGNt%*6#?r1&C$~bo)@*5vpMu!G`YL|3_YiR5M|DSFX-VR*; zgHpFh%3C$sx(#?N*k;HajBb}!ySoX!oWu8PE7p!-F|#FM%b48&IjmwSxOyf(f{lIg zv4qz!_FUp9%`$OXm0Hg;!W#tX4&q<^f_7dxDyjc8-sephHHbQ|`F&aF`gg+8cQ4v0-%gO7jz!q05Xk%q1j35tn^oO42JfBl}%HtBJQT0;z zFA|b1cL-B$;xc8;qZUZwdA`T1xMd+h*UfRnFLsyc$T2*wmmK~g1O-IjJ7_*MqB`or zVU9Y6g*Px+n==yQq1YkBAp!)ngjg-C+39P+El`Sy=9)fzJ0Qu~-+ex%o{<`LT`G;u zrVjKdo|H-#o`)q<+a(UF^X+I-1OpD3?s~C06v3U>YQrh1z^(W8#kuTo*mQ_D4l{&n z)-zCa+DksdTrXw>X_5MNm4mrihX6ESbYhdLRHLDuZ`#g)Z8K`lQ<{j5P%qZ25m)FY ziE*FjcQ0Q~5HZb}-A)y7CsEg)&b-w6orXi745Em&=EpP(za-(yrBLGVY0k5a6b;4= zBJY~Z?^SBd%F}0*?9=VRgf*rnM&~vpCJZZUgC66V#nl%ofP91G2o3&zH_$*17@_qL z0d?IZ(4Q0Garm#cL$Q-7eT1SVu)v;a=b$fNZg-rfL0`9N#rQ^KEU&WP!EUSHK;z{w0n9uUZm+yL^3gwT>`M?LAhECgkthq}y^Q_jx$;~w z$2zdJw0lR;GbuxgC^jk||Q?V*%^?zfiJTWDGUgYi&M& z=;8wGxRpnV0r|SjpP9NB3Y?egkWK>+FICO^Ik-7Y{_QN9Q3hl%?m36(j1d6t_Wp;! zm~;1ZkZimnFtG0m_qVIa7iNgxz_hf?xOSbGh|*TB(4}z>8F!L3ze`K4Y2L$dNrvQ` z(D3v($FP|8__jq<>-^Ipe)$% zX=0a0UjMAePY`H)(Vs-w&!8Vvj0Q-KEVIt$Cn~dz4RlH4xKKz+IKQ<=w)keW)J_OX zK9o+%*>jG~x0m0nM5Gb{=zg>da_fmRdU4LYnnqFyS9e!mFEyzC3mMvO#9c0q`(0q) z?AD2fW;f8qeK0K2Ex~~;7?kWOV{qVoMB~$;pCHe7p(U5@OD#r8e=h!cTPmhtW+%2RmstJ#gH*W3cMWL&9>rHZT*le&^iX~E=fv*qq*YZFIEo_x?qEr?iH3%^s^2WI z0X{2}?$=!%W96m&r3cM1z%AoEocdX1Z;CEhh)RCBc33n()9KEZQ zTo4z^0QI&O0B-+i;*B0w-*x`_XTo*<1ArClAc7-)DBM*MPJRAMmh0QG2qTWGZ20rH ztrYNR>QMS_C_c$7Tr7IaVDlK|3!Ob)2=Scl&9&(xLn%L1!vZ)V)429vRu#`zEo5qsT&x(p!Ht`ejcv&}IlQ;x%UU9r%6Jh@_2mz&H-bJQGlYm0TBSZpd6 z11eL`#aQNXk?_bPUgpcA`J81NDYodGactJVs>d-`eVi zyv(jH%%1iAAU|U8?I^6MjVuW>v+1}+yh){ycxW4(bmWWls6^Z0I_N_U5e|KQll&3rXpeML{)wrd_PMgq?>&(O;# zD9;(Q9rinZpZ9bfsaO$KC4{{b2}Cr);YY~8CIAUFT@YuNA*qr8lr4U!e%JS!#Gn?@ zcez*vR|X{xHXupyv%d}7qD`K1)V-wVc;730H+Dk6D6KO!w5Q|E6?&xiiXxt*qzpIo zB#1TA{t(3bsF_WUgpdnpk6FQuJU!BANE<;h+Z&8i+^geXx)b-fa}E@_rfM%3 zQ03%A32IWYsZ;|Z@A2I^xaiQMbb~wMW{W0@_0Od{2HzvE5l;5~RPmqLL7)vilXX?` zq3K(FrRAn;ErG}Zp@Z(frrRN5%459HSJPD0Z+5?vqN)=^z$r*8yyxpz=BaVJmA8$O z=W9N_?MCr`#Ihw${OBFZ2Hv0WE~HdQ6~SGnn9EL+6Py}2aaL7t*?12Dm;!?JqFe0q zY3{I=P1bqJz}YC2P$Szv>{(m0h(!=d+*nsy>1uG`;QF_Ym4c;v?ct5B?l5;ONg?P*nlEVH>$s%}5I@By0 zSA}u<6aN)v!6lu6oN)x4Eg*`VTc0->B}cUT}#U(@jK?r>&lPU zm3#fq@KMz`-gye&;j%|#izQ-zaa5m6 z*9rE8=gKrS&sPGGUVp3XTF3j$(%PTx!TTcP^bE_byrNIBZ8uw?SL${c|UO)*U;`xp4FGB!J|L6w9 zZ^>Hl&xL^s=|%F{bHVN^!Ekqi>kGv|@(U1FRd46SUyc?x=|PvR6D0aK=>%pztfcpg zE$!4W)P-*SaUyxu;V;*W^wn1^b>C;qLgKej6IgRtfg?*nAw!G4>MkdTl^Ocls}3-c zx9Z?LC_AU%!Q6SKP<{ms1tM&g8*VYkA;NU653{7BzLFfi19z)++i4HEnhPEP@Y*-1Xc5U5=RnYv%|EqzUAuC-P4r`6T@gzxlDe( zqXmioN|3EH$K=r!m1jsMn%r043JNM*V79f}Nn%>+HfD-Py7Lp+vH;Xa#Q z`b&AY#7aHZ4+9GjxSymGi7nrb3|4K8F`oNQvQO=y#D)#DAMX}3xM%bUusPBZpryuUk#0?*SjUc8m$%P?i|far2L*K(S4==Rn-VH2VQs)27BfB!Vhkk4>i9) z;~C;VqP>*7DKi^MIL$?kTxYC?+C!W$T`84mz##ITTZ!?LmXFWS{w-3hIge;oa?50G zMcYj)D9>Hlpi_I03h;xvTus}Ig~#Y@3GE|bO9Npyh^N2O$;vCqP#G__d7Ou}i)b*} zo>Pl{XN#*+wPjYUm#w(GadRe2*Ibk_3Xj6V@ zfBtg+{WFWkLMgY1qnefLsg%=T$+isg)q^hYVuNpuf-JuVJ?YxJ2%}ZS600} z`o-2`3~l_KXgpi;wR|@r59Z`+&HEBve9?U)c9Q=+juelF@YQrD;`jvVRz;)iw#)ZD znD;8F+pmd|`hx^=+1e)rkp1Ra;5@d6^Gc2xxcjkTx|t7yuyV>Dvr^7a&Qe1#q2oKuEgm|^}(Yp zD!g-;QnDP>td7yW^+`-G8YsP=0Uo`ZRWNa-w2ZotLibJOWw8q&pvRv2pMGbZNnV7C zr}rkn51u)*&b}P63;F!EN;nS=*gejj%KA7>ZSa^}RXxI&9>X6)K5=*_PpWo|eNl9M z5x+%tYAE1k!e_RK$hj>D=t!4Doqi(4~k= z7d%M=B`MT^(r5W2*r@#N!cRCp{K}ts^dG%UnKbhD&H3Qt`l5O~(VPlpYS-H}b*q%F zVBKF|DHLE4(HQFNPhZmuZ7n@)!($$$2LFsT`6N|ixFd_TvIBg? zvcW63wZ3@)7`Px8`C8xY$AvPRuh||q^Qd)qJ~TwEcp%~A$r+SJMS!l(ol%SRqCkXH zB2;*H#TZ`Tq(zO~Fzxn9aID#Wg~2b{@o7&L&A!|z`fX&DtT>XD{1XNSYnojuV3FoL z5YFc$CaB~Wx-Wh^U+qPA_-ABVGQb4H;FX_a&26}gtlAEcR(Iy%f&3$;zmjg{iic3^ z^uyEL@6llslJ>a0J#9gT>r-*kZDwIMV3Ten$e2RiRiEopR}y%|vyDEk+}!bpY;4P1 z^p7b@)O{2rm6#;J?f5392A#zFa4)gp1XYFV_ETfIe7;SnevU?}qxm4y1$f;@epSa)W?E^EIP?y+TZ<}oztQ6sDccq@6CCWt&n zZ`nfI{VZUZHBPx0X{?rhH-7)!pwR3N9CC4A?hN`nBHUz5U^ixO2pUotm}barubWU# z`8y&GJfXs2_2yQOA$cp0`vZ#ac~iHwL54(gA*xTERlt!1%$o#UR@o7!6b=Q4n^P%K zooP9&gb916g(>%1n|mS1LKGq&7cl}}?8OJKEb*%YEgzDM=e*LQqcPd$98-cbDWUS$ zJ0~~&BZQq4x!arz8_HfUGcx<@o;{^=pZ}PBB5--9`MlGunnoY z_AU%jb-rP>KBvr^hBdpH1T%_&6~r#t2mp`0r_morO>XqlK?-|6o21e0Pj<9g64|RO zu9zYdV|S0t4gYu@jk=XAN@m2rX^|?c^j9im=;;aH(Dfm__$ zH}qQIW0Ai_pX*jgAW5Mw1>p~h6P}g*`qH>Yqo;FNM&_jA+$yXkXVHf~!~q}bJ#ZBs z)SgCp@KNR7_ijwso|A5Y$ISF?IxZwC~QafbVuRoKb3) zTe4r_T6tj6t2cF==+TXo&3JOCBNG!NPo0M&dBphGZ6 zaRlyxgh^ua1cjSSixRj-uTpaj-Lk00$y_c!f}IE>dtV8`Y4s5_S^92IYV_gV2^6=@ z_*x7Vb0w}p-~v0LqEQ3kg(R2O;YU=F`Q4VgIf%hr3i*1%N|uUjVJM2p3I`ROyQ{xr zn(h+|+~T;U`vy%6FZ#nGlyt4KE7xHI`tbv&W>F&n(dH4 zMKq0e9tCBEIbhmNV;^pyv(rgQLOvA}2#UGYPXx!leiYi2=R1gH2q+)_fxZLCmMqLi zT95L_PSZ;@G;kdLJws|lsphI0aDR|oBxl^(1K@bZrRUcKwLh<+I=%w^o#S{xPeVdf zt<5r&0Qc8*-2$G&?+zQ*v69h+Kj-%dpMJLoiyDL?i+E6ePS)HEfQ&!MxJrtNIYJyQ z^BOZdk303)j4N^y{JHVgdX$PY!;Vz3qQmxh%)DhTGvRm8I~XL@nw=44LEyT$uW{C+ zWe_upLB_KBVivTOykIDpCItOA@tOrMF7(XON)cPZ6XW?16aON}ZzHw^3wF;NE(tz- z<6`DdZRuLN)?PEiYTNkB%u=^>*c?mH5luhWNL||oyv;`X``lvd71RZnuWPh=gQ`SvJ84{1>-C_Y*_A`bS=P#z>B6K*cNd5Ie~ZH{~* zCzox=pU$V)p~>Y|j7TL58L1;AKdU874g%keixyFpWS#ybXZeKBs54|RVy`eNA#tL&<&U6Vj^gi1}{s?abKvT^i2wNK{;m z;uT=Tb*au(mVAYaTl9>NsW$SkKq5`*DQHQL{Up>!iiK=tk95;gj#T0YCfk0{!(D-m z54(9h!=`z=Vlz81X8P!w>x&&?PwRZvJ5+#t<~-P`-XjkaLy-4v>8-^HGE*PY)Tmor za$T;JMSgMcqb3O3RTR~kKoGr@C(qfu`4XvDyUWix70=*t-+o}vOMqLjmwyYwi>40= z(FrQIjQk9CHa7vcDNJNb97A!g26-3Bm*2azKZ2vc3I8+l8kgnN)Y+jr1IcYvTv{O%h^auh4rq^u^=npf@+Lw8V&@|^=X-1e zGysvdSA`jz(^w5`2w8b1{@tqgS=) z$GHmyH6YFTsm9{P+WSZ(;7_`iRM%mjFyCaoZBFlh|E`Pqa~zL-0@N%j*mhH53}Fw| z5ZYC`r1VRgnNzV<#K$0F0oTv5=T8c^w%?(=W8$ff2osQz{SM*`%g=C%lP0}C-IR)^_+hRImw%qw)soi! zP@@FQ-YysfXGowbE7|d=dl_yTf2CUuJTnT_ec6eOo+;<13+$C<899wgq3Q_mp6u20 z_;Hl+f}N`U249;UtLhi;YkbTwwFr#fws^$nx|NGRp%}R;!QAayC5xHrft81tsXR{t zLWE~jaTk`jU+TAp6iaLA3*j#NdfSNbNu-}R7 z9=bEIZV9w3(>7s10E7k|m{WPOc!p0A{7xd~{Zvk0nN@1rkZCWBc-lXSWx9(5Zwf3& ziJ$!gL9!<*$E;sCfKMPH-FlQ__vT^JDc^Yu^NB`X-IJ!lhJ8gKJ1Ow?DvZsyx7T^* z3~9dijT!3+E7+BzN4GqyUw&-2s(^{}-Uj8_k|v2A4xLFzC!I0s|Hy9I3j^0wCtSrz zCnmF7t-qGgYP-BsL1R|We^#{>de@a|;NgRN+KYcMt346j=6xt@tA%1ji?W%;;j#ia>BulHwN!nhXeU7+>Qvg zX*E*iYZImY3LIvauTmdZ>TC?cU3vk^M!6LN@1;gc8nNZ)D8gxl^{?U`BK#@mqhoOB zf*GtbIR0(@nLpWD7Z^NG(4@L|YNY5kT>eVFkUYD0eXp;R9!@;|6H9Ao=hnS${3k__ zuS~eiD0_9aQ$>DG0#R#zVvCCGj}{aSo2jr^Q8{D{veKJHm zuG=GD0@dqiX-N{*YD#ci{0P<&(}~J*t97j2CB{(eSjW>eK=_Z+2h`gIQP_Uv|CdsX~QyA#n) z^SQgU&t0G`4Ca{7r>jEDcG-=AeBc#Q(l*T_sfBs`8+>Blj$^Qj_>h?=>FcY5(UCwo z16~&t<~$v#u(2IH@;p{P18PhT%36N8&YxgvsXh44^(e#G$7hRaDWSS%wv8Rgtz;Zc zOGCfvlIk>?6;$0AOH(ix0mbEqRNUE&(!yopSp@|+SzGX1w$VpoKeb&WrU~-q z2YNbq%fwC+j;w$5RzTHBKckkEVTokSBM1#$N@b8J$*7Tm#G%6_rg^+|{4=v}R2!2# zc)6>xG3Avdl{oYaW3Pi*HSL@r42M|IX(gzhgeeaxE>;=n$#+WG4XXv$s&%E@r5G5S zs5W17v&Zg9hC?>c{$8;K?#yWoSVONzvYTD*N&jrdEg}opw0c)4Js4S9t77xTj-JgP z{l#O(beMR*))Hc3i5|XJ_jc}{Zs{^ECJhiYP>{?wiONzm$aYUTD%N<&kW8dZRfEuj z6Bx`aq#crIPHYm$a#hk7#&V?iu^QLPl>!HIg~RAIL~owMt_6bKEgk2co~uc@Pd|jP z3F9+2vAru8nvRR0iFv*E6llg6%Sr2y%huQcb-yoO1XJ)3wiT?eyWX$+ywm&y%UiJU z!Gm>l;|{pM_PEA(hl>fbs8kMiD22;oSufVe6=Zo8mQbtHz(xer?kS_x~#PCM|S7I#3<{mFEN}a zu%y*b1I=ZTPyx6VudphoP_0Lh*vD^oR3wNRkI!o-HCs;R|#(;V~Lf+ zTV3nH_^1i1SYAV4?|*-;rX`q3N+v3L00o+8CfWWjZ%x%#^q_+5-7ke$3VW1h(fa~Z ztcqenBrThVIwM6Lo$Us(K!%>GgrjE3twGRY)rBpPXRg_qD{&~<3Wmk&CnzDgZj}#V zDJm1Coj_X^bt%>r_S)PVvf{4Fh0e}_4m)~C}E;IG19 z{P6HeR!XHzOqd*s%Uq}cC*^%%+M??V*D@3lam7whSkBJ#820vsACa;X)yT14Od1Ax z;9uWTVicVp#ZydK95P|szlo(u4-ozY(^p~Io(rD?wI%5-J+Fm5X4o*7dmfeJLoju= zQKh6ScXmbxfhU~kD$)KN^;SB{`_XtohbDOlX#Vre62ZtJ!%BC~au=r9)9N8~3>@4( zZA^7NqjNPjw)4>a`BtVh34GwvMO4gCZ4mHgGW&A}>{xA`<4J-nA)1EyP`32tt=Ye|Xlt~}7?I-Nq$edvi#9d@yCMv|mvexw{Ltg$;|1>7R^ z16T!v(P3~H5Os&7pGKVIIS0gJ9R0B}w>ldTE?Kqz|8;}}uIF?id&*#46x3Ltgi z@M`veu=X3DXM}1g-V~*z@e=Lt7TMm$@ns zK>Xh+uTV}bCCSrP~H z`+w!y{@;SaA%+*?R?v8R1OCBj{KX9f0#yE66Ojvh%}dVSbs79!QN_j;K`n^-j}f-H zIH!fu;n-UFc!mF~!9Ql0{QoiIKZ0%k78VQ(1i1c-`X^x>IKaR7Uq6^#ID`sgA)>Et z@gw5N^SOXH>2tj8qDKc=NHa}vIu|7dm~0R-youx!e4%e`@|;!q{)m|w66Wq|I>e}} zPtdH%#P1m(dJccVez0(*bx=r?YDwVhv1)*6-C2NfbT|b-aUg|l(-eM#1pf_=2MKUofCUaD{6`d{iyh8bP z-GPAi|1IX9jsXBX7eiBy$tkPC;4FtP;j0@aS$GH)VfHmh06pZY!T%`i3IvS)2mN>O z{zYTC(9da_Xc9N_hN__rLyX=nDj_{I>=o z7Xvrsy{@nK%h+evd4IKgLbN-zs6)9O1ld(xLByE!lK;{1hid;X)t_lR{SVduiX;Dj zz3q8V`}gsA{tIdf1ib!FeP94W%-=pxoR2I&^lP)H;7_h%t|b9H7l?w6z{NVB)@ObH zI0yv$7d;pV1oIbN^UsF^3;^N#izaYBD5dAB6F3SVySL>U-&AJXrdeWnbONmY%j8rn zw>LZ$YB39LF!Yy=@Go0wAQ0|<*#6gWKsccSpdi#T9D$d$J?rWK#m#|0wEr$c{oCii z#-lhNR4>Ay{(|khHiv=903tk{2mFEP#E>5kPfq`>!uo%z@cmE6Kmmk*@&8rjPmhv+ z*LMX1efzWi{~16`=c5vHx1Y(W^+54tQ*4mXc59#j=mzeL|LRTWFN@$GtMvXYtMczt zzxS{1VkcCPU*Dd-meb|@zmEDw@F$mpNpT;(zNmV9yn<)oGSP^yP3 zE+wvk&jer!lb%?+m%KYE^a(%!rh5ztao@6mBrdUGL_o+#Db=z}#7|m?w58!5_SuqH zzG|2z7M}zeuFj*by{ScaaL3g;F8n!fPL!v98fUp8Euhm^IFbhi(~+h~gK0jZY1Mbd zZ28tI^NJ(Y&@>DE4&P zuZ()&S6j!tXPo;MZBAD$T`WSJtM!`XK6eDFQUYCx5j!L-H~43L&Hrh-@xR^r-|L-3oVWaBs{cR6-Z~)4 zwc8t}OG+A~yQI5IkOoD%Lpr5?wFSi`h4vDoO8ZCf3LNEtJk`& zduHw@jFvwbZT}8q?1{b*06O}c{>2=G=O8}opH7ey_^W~*^?Hf3^#^C|U*I$WK+hh@ z9;<-#sSR5_WiKu_u1B(mU^-VF*Qf3j>xAYZh(X8g7%70<$7@eoG&76k_&ulqW+=kH zd~x@Lmkj`ee8z)#QRHykICR)#+JD9W|MMOg@)O4x01V@q1NX%QVB*Ggb3g00EHr#Y ze-M8!QHB)2Sfozjh!?H5ftm*8abPyI9I>#&c#o7ANOklSmwzY(M*7uXUT;#d7tpQi|)~ym&igd*NdfRwR9c4se1gKtLmHwEr^h zMF_y8{%G+2UuZB108@S@<9Ukka|qbDk=n9`fJZ->;AakzL}$o>r#~pnM10a%x;Mdh zwm(1}7k9&!lcxF~;WzG&fHP+*LMkUddHJOx+J6)={uhcoy2AE}ULXJf=KRb+`Q(dd zm8iIJcC!kquDr8olcKTrJ#QZKLJa`br`TyscL*0DY$*AW>MpNYOQ=W z4-Zk43U4$7xU6b_nl+xX+Wxd>3_ABT*T=uFGUM3nZ)b$YgqO{)8|)491mzmBVsyiX zOf;fJ_)O)991ilBUtj@GIyD2pzCNqO@|0iCU6zm=uM9X=e@wsQB9M_nAIbOL&6jZO z)zDJoK=_2i4524(pPU)SnfS(&q=Y9)?EtX&M@j!l`DaN)kCGNT_Bia+xwxY4V_7C= z^KDI?mh1cDeu~R_706_P{4>o;o}?86zzUxA!g`?>3ODX`TktqAg; z{Lck|H9RwbJo%RJ3IBg-8el)4Kr#Vf1HXA*6xU0h-;D`u>WRJs0JiWo%gTU17vWb1PC{tL-+Sg-ur`p@UQT}L7wQ#0bsyqdWIJ^ zqHyE!uQ5Q?W`u~xwIYL%;;Cx?y>7tKexrdSKXDg;{9o1%0>BBM$p~Nc586i~@3V3C zdKX55O3)}8M@R=p2xeb7asgqz2VQyUIBn1>g&_qbA}y`!$HzB3 znfZB!@lKpv_6PgKw6CK(fM!>xE*1T?i`8~EFm=>FceMY}G{7sKurdMQRZm#|cZNUa zSN9YBqp!PuoAaWc{x@IG{lS>}Zx_7edFmM@0Pw9xvd7eYK8HPf3XvNEs1yiR#q!hl zuc`7+D~|pkT>lFMe=i7#C;9>a1l)gH@rui7|M>C0A%1UIFOmiV>o*Jp&cB19eWITP zK+rtXqrE6b*1rZhq_4KxSLL&-()MNVjdo$~5cJ{9s}wS~1EO!1XC)_H`1giB0TU*H z9FS(lfq!lN|1cav;EzT;PYC~a_W4Z-&`+>pP2hK(vLxYIPJZNS3`j*+4IZp+EY3F zqpgVi-?VAL$=6=)-4NfNBuxPz!X734Cug7A0vk6jshg_Io4PNai|i5|9<_F7-LnqU zUB@XHI>~IkgO(oLA{-i~twKDK?9GgzYB;(=|HD{^$asRt1VE&`RQ9;A*NW1)pWA*7#D^G}s*?B)vu`>TCvQqN6;F}WW5)BZ!Nx18 zv?_S&3)a6{+G)xED?9!+`5~76=&l8k3{Uhe07$k+`o|QcebHp_9}!Vk2y!YK;UyF-V{`)) zthoi+K+sFGNdJdn04ee$N?;5CDf)~p^;j5So>l|T*;b((Kx(m0`kGhKWW@FxM5V{i z3y%sU4Pad|PPJrEy6l4($ZTxXX!As_dt{d)K&(o&Q8bhy{4EtuK2;l<~r~@lHi-Rk%r0~k~j|(v-%BDY9l*(?S0mi z{D*9+@hlJtSK;!jAcnv8ZAj%O`|<&hO3&sYKc(ffaj>!}pi!!!!w`RQ)DqPmHj|A% zT|q&bJ#iHQAdQ~6p7-i!E@b8KCA1k?U;F^-{jgF$8#L3TD#z#dQxUnmLnw&5qJiwMC&I_;^qr*%AA48gpWt` z4<>BvRs$E{BG}%@f5q?D6MiNDvj4w*1TC8a@>fp(N8efiQ(4vSNGO8ekT0^}e}iOs;;9BeG5qFvVIj6Eq7=xq4RE((oyUGy_UJbD@p|KFyZw)$ zeE=wdXGW|S4TnkS zKVl2@{z;um0F?Z*RE8JoV5%Z=NnoV9;Q74TAFo-?|CBK9dH5*fKg#%fL8(9S3q%5- zbe{#hfAYce*36;`V-0b^In0G1??^z8?HAVlmNajF?nkEepdyE{5qowANM2OfH?*zQ zCeyru$}P~pwgw5;LN*DLi?>V3oE{z$Xw(QrDR>;}D{PwAado=fSRFSlY-LF9vuwDJ zU!?!;9ppzbK5u9s)&i1f%z@Pu>@`?{0acFn`$7-O>PfwJ0F=$Mb{sFvBUOc7aR6Ss zCtq3FTzEDqtxaI~E@_Tz(WkOcW(r!&#aKSsn#1n-8X?{HkRt0ygo(aMR}vGQLaK3d)KL_Z3E>U^dbc(VFA!i=hj(;n~Js!NBhLE0(_Rb=Y)s2LPddf2OZ zFDe7HqJIo{FoZXjUOXO^%C#Md9}ms{w14c6HWU9&o2@7MTmaPOOGiAH>$bp?t#L|8D$+bLH($^b_@O?}8!d$Pi%^N$E#-0Fpp_P1v19m$&!IV}4Q>y6- z%#NB+HhtJWj@fuPH*u2**W_o|qzr_v3j^wQlzmpYVLIJN7i-(of{3=K_<7wn_>GWq zCJYVDb)HdwU3{a-HBS3Q_kosrHpCwQE%|K7%iJ_jgCWIdt>{fUS2^j2S zq{mEkn_fWB$@kqI75w4k>ynq&x{R)oqn`i9%YsY-QnzGUdHdBE>3A&}!abKqVIA3f z0e~;gFNHC~RTz|Vr`(L~TL;1v$1Arm@&GS^j&utJ+73{+8`GLfLU~&O4 zEWauL|6>8e^CVs1D*)!*Gn3ql2EqQgrGS-U>OFqBgtAC+H%-d^!Plqp@yjKwXKs1T zS|uxJnJM!Vd3>*fv>n3qsZNj*8+dge4_wcK{k-veG$joDaIT)0 zw|faf0bu|1llzA`6GFuwWyWNA;oqGMdIjn02w2aT2!yNb2rDu-y^u2>Co#ygqY0fQ z03cAFUgF+D0vzAiFkm=Haj_(jp-Mc4ubYB49j06{f$_({Hji`uA)w0xf7_Mi&~dZa z9Q($D))5f1!GGm$@oaI;-E#E4`E)V;x|#jne+GE)Kp%F^PjQcVtrdTI-}_)$<*{&! zx#p^MOMlr+e?t&?0@S)=U%S%Ux%cR~O$8?1X~mv+R0H|1nwOh5n%nQR0uqXD!W#E} zfzKW;O77#1f$Z>&G*Xa?TpQ-i@mt&#aE82|VB0;%k4(GM8b5B<>bzSB0B^hVkg0bv zqwTz$2E~E4ySQCY&ny`@FwmOrK=-LA<%xTo^&fUTTFGu`NF@l>?Shm7b;}$GKmtCN zh(kdxkY2yVF(IwvzY8zy`BcrmlnuP{u$}$fSN&CF9YQvR#VNS8Mn$w;X%$i~PK>kd zJM%+G^pO15+Ukwdxa~CR+i>c=u=~^dpnmp{pAWYSyKL@i?8VXTk7p~DA$zGN2~95} z2fXT=B5ENO?R1VFP3*5}brpFM=$?EzPN*|s)%J`kHVyFg*dp*d8Kz!qV2!gY&W)wH znrooy=^-2vdaN|%a$>Yf`AChE*}Gc=wb7Y;&FGxLoZ?8*UwyWgNlez$l`1z_{2V5~ zT!U^GExjA-43w$jmatBq8$U`(9iLTF?bYcj5^%cT@!>o>z$fe?@tJgiDQQ9N7PXi` zbWV@mIdvwFoI{tT&Y8D_j4nC6&3^kzMf@I5fR|DLi8Rwh7x~obHGXp;@3_g6)xu`KjE%huQMlt_y{diHfq>-^63i zuAfQa2f4`TQ=sQSdVbn4P$C!zR@d9uqt{w>Xm`_C%l_gKDW6l!RhQzo6%&#Evt|dY z%k2GD37pE!JW9<_%B>l8j1%l~v_-QBApyZ#T<8R2ywxSXMi?#N#AKdIzo7%SZP|$C zdZzjh^jzow4)w-wh=$_3??`Wy?tFOm{P6-vkk#3f7c+pw1EUj2m!7W?fFJ_QyLZ4m z3|&tm=S_VDWoEy(gYbMNrnk>%iO0A{4jb5VG!c5Zrar5S$-n0MWKyksTG(NMKj2GC9a-RfwpU83mXP-5 z(9Z`3v77(bubQEHwYfFlO^5YL85Z@0hd2B{R<0(uyU{D{X|&jwRut9olmeRTfSc2=RW+tPDKgmNbD*{?Z^dg%T5OAvyQApL~UM&`zTDb9d_Tlcb4*An>m&66JBaLQj|1+ebi)I z6q(Q@qVAE?QXhLC1<}b4Zwd}Vm^A`%Y41})+pEXNRT@+qV4!rWY5QzW4JQVmz> z%HUXM3Kt-wA)qfjxi0zm{{`45d|KdsgY-YC@WmS-UL#G|kNEpv0PSqT9Qy$-ufhskc>!(uFrs^N-f9AclV4^D|vG?r`0eK`| zdy}6(w%0-RXaoS78{fDIMJ~gaAvI+Y6LLZ3ojGL>lcNv&>tj$wS@D9*l)DyF)o0iH zk5&|e9Hm9Nj!sx zk3iAnfhbRm+?NWI#yak|_qjx}e?v4z55bgDcqrnkk4fA~5kMh%W-)db-R?36-P6K` zoxWHlG;@8cYcA^qMaiC(L(p>0$3;wdm5t)Ehw1LBgxAb`?zw%OBU$Tccw*&MO-8Wk zL3_Qpuw z%U$Sfn_BQw!xcJR8I-|(%NwFl(;+4vEfqMXi@BQ5bQ0oVZ<+dWej&XHT~)&lQzLJ? z5=?UfctU;@Nu_FKj;cgj_>wOn$Shu8At~J?BtX3S!0jWDboHTnc(rafxcHYJB_)+= zfrx5$OKu$3fMntTGI9cZ{Mo#DS=&c!XlbPzCdo-BGg}c?`Hrdm3{44Si5t{}+ zg-?HqN zd`YrApBYK`33b}+7TIt_8d-9K>lg+56{CkUh|M3a6J}_VmEfqmHe0AS;j<Fj_Px86R~5Vg z#QldqOFIaV1e&15yj6yhsuiVSlzZQpy;-A*<)1clM8nl1$`G$uK_whm!1q3ft={K6 zB8vNp+ypb+nq6mrzEy(Btk+nCJoOf7R9Z0&x=I~1NQ|3NrQ)p?U4rt4 z#@kWPkf3!)*A%;w$Yqv5-Y-T}9d_`jJG%6NzL+#XDA))P&g5Ca3&P-?UIPo^1QFHG zS7s4;%^&r?SLJjo^+kAUK1>gbdd&>zc5(nNKA={Yh~F?5%m+wtsz|Pl4ByvE=Gl6B zDiw*S%(P<%G?VRh5UHPB;!l(Cd)CzXI-V0~g(=YOnQA2YEi<3`eaAQRL5xHdunW75 zk@DioQrFu4r`Q@(7Jn5eyZ)~R9+Fh$2EZ4SGP!# zRmR|=qru)p34`=BOPJI|Q3Yuqt!+I%@SX)}R5E}e8hG{UW-x#%+wx5#pMxehda!Q0 zObw3ll{H45*PdHMd=dG|)mL=5uiEnjcYfmIF#~r23Y|o$M3z&DAp^~K4ra77u3Uaz z`+O9;1f!Q^?zroki*PLk;0p$nRBPE^C*5NP9Sy!!-x^V(uS7akrN3@t7HQ(v^|!!4 zkv~8f9ne$dxthz$Oab#cIH}nFsc>@FDnD&8E z5mcRgpV_8?_A+f(8WoaN=@(8ae?u-SMu*(jog77eO>rTXcxh#*~(luL43uIvZGYMq{|x3>D#%@I$m0|UTN(4Ut`o(PNS zHom6o-;kTSx6*G0XvK3V4$ihhWc`-Z4*6kkRH5RX>i$e=&m=VFyBbRv`v{FyFK1uP zig!l(zSfuJ!u)J zM(YZl7J0J`l`lAH9a7?CT0g62@?J&wHKwRtO{f#afw~G{xd<|5nW_uXgdt+3+M~-szXxXMl-@+WcqEzjvU}+jskMZ&=4LM!H(FdR z>oXWaee;0NxBl(bQfQ{4XtLobTLFwJgJ@f|(0))h5e(2_onPQM{`#BI3G6Yq_+ znLolNm7kbynp|NB;IYda`~~g)m1Q$`ls;mimsO|kyGt&F^0p7*3=A^1*rX*Q*H3f! zj{y!wfST%fA4$tVOTBar+_} zd|=*~oV67e1+Dv@9`Y;mIFSsE+RI!6ER$aZi;IXYoAF$W5mwY|spgirzB)|NI}C>& z57?2kQ9_3F4p|%CL@ym-0Hlj$+H@@H&Jp<%iz_Sq_d<2OD{d$NWY=_{AhyNU4U^jk z7$8eu6mKA^&#OIu;D0SSnX7U~$7bvn(Y1?KSJRbLwc z*tQDy8CRec(d#|^!*6JVmN!FtdXPg1Hiq4Y#c&i6=EZwPGg(P+Tn2r!rMyIo4chP!DB1Sk zT(ENQ8zaW^yk|&kudA>h*aid7`as2)d}dJL1Ic|x#|#9@rRMP6Y(cv(KqkKSSf4H? zEQEU9E_jF-*P$y0E|lBV5w&XFNlu;W;SRT>ev(`W(@`!wW;>sUqB4Zsq~BKpqOKA0 zS+G#fAg?Qxg)d7MZ2;tWwYo~dDUxLJeVRKLln!cd5fp$@$*no^MYSNr%UvXwjW&1}5E zsJlDoJK<7=Tz;n{BnB<)7La@yK8GIyfwh#L%??`}AB>}H5PPBeLJeQbgR1bfjO9>| zOCEL@UcL9zSzH!Z!=2Zb5yqDv(!CTDJBe^ZVf4|^(y^HQa{oc3*zZ+nJGwhwY|`B^ znUR0W=i4?Ir1U;5A~{+GepH{?W$mr3pA!x~3(!O>0-wi;`%GY}-qnvQP^8wO!?mal zY8_C9E)5>qD4gEcT*dCh-JUqj+Ew;~hnhoJrQ_kHUKk*ldkBp>b8gHcXQ*lOi|&U7Nk+9iM~i$+0@xILs%3L^>DP~E32~+ zrY@>e@YlGj5SP>MkxeDBq7sbOY3;cP5d($W3CZJQ7T@5NE!G&zJbBkv0byY0W-u)B zQ6ym;lS^`nU~D!>0rV=*46&pB$TGA*{+BSCy99rrw|{OSQa#?syOOd)VIhu7up5OS z#104*H@F1y!tS$PN7gSX)DvKDR^H@Jip*{hc6IeP&<(R;e4=%f@m4kdoWp>W_VYrLFQ0=-y~HfqlgLHU%;GU9ITO z;9qfKNPiy7P^t8x0&f|Bl4qW+lYN!w^O{-=?xWG2M3d#Er3-1d1T~s~Q#spe(1tH0 zDCy!!9n)nPAfV_uAGgQ04;c5irVh%?qx8uorE0N(8I^Gh#TgL!Em7q}uay+-#MyYMh`~$l0$e%nbr@v8BPxYIl}}S1g;TzvP|qHC6|_`=CfolUaAa{5T>I%2pPd|k+5Zqu>Gu<&1s14!bO-+qByQ(S({~qlLMgu zi_eMcAZCs6O*F2=5fNV$$I3l0r+G{ynM#Pn=92aG*PC-u7glGU%c`-+s8=!aRZC3^ zAA+*Eow-VAr8Bsix)!8;e~}%whbQ{>jzl6c_FdA~+~OY6WQ@?vI9$qx>Nfun{zBfW ztbLkO{|#ceP+-izOy>xpl`|&8KZ+*L)nbbhQHe@)>@07M+n&~Ptnh%mN{#%}%!wui zD~|fcq7P5}j^>Qnk4e3Okv&y#v!HtKMN1x~=B3W!<+B9BS7cw10v;G5C740_4x&XU zwzZB6RsAzU86D9!PPks@j{kVYX3P;K)A*to10D(N0*rumLvD=YefxYzR@i<#f zJ~Lz)pYlE#so6$se|EwpopGr*ax@xDNI)r=%>DW`v~dN4EwBL;rTGEFloYW*(2kUSvx>-5~_5LzAEwDRFGFecWRw|pUc9j?w zq)c*f>Q2zPas(^rv7v6^aBp&Gc<3oJG}SE1 z&Itxp)^G-HKjcu~u4mmuvc_@qOYc=1wIK`yb?R;iX{!7p@+s&ZGtIGq0AYnN?uH)! z_*1AM5|X!gd~21Pjg8l0`_1+j6_4WZGBzr{*BgzWbK%M?NBw8Gx06xX{nPV?QPg7! zi}L(1NT==LkEddJ?{anW7EJrtKHaI&Te6g&wLwlW_*etYr?ewkW}2h08Zm7mgqJg|mhO$N#cR7M z3V(81uC{mf8h3|3L~c=)GKAhEW63|hkM>oSbnooj3bqMXt*q1)tpqVLpf^Kykx^ z<-wXiHmU8eVXM%k3(Dgt$3`^|8{ZK4Zr#6qNokU;Sv8dP>f*Slu3^g?Nm+1J#iI4z znDoq4O?-TOW)lj*fkOUQtjb3%+)@2}3|xyaYZ)zUANCHk&^Hdl6%@m>1_BM`Ruzq( z6hZ)mx?Nfy4Ca+~gUl>QRN%&`HmAiDKNVT);*%&=RF3hKC)Npse_%1Hv{1wpK|2)p zXoVv(gx?yMe6N4BJ*j9 zy^juavb|w)$2j#Wm7t1X!8ti~hRy1Zf|wUdf{|diD@9j5!!>Jbo6stFZ;Uh~`UN&M z(ia(EcG#rzsIj&QO3r=04~^5Qj}CP7cN+6C`gas95~Ze@*hM0B<~ye|Oh|g~RyEHo z&B|bWQK(fNDp4i>q(9N9zr9WP_$C*Kar08?xHWb9tcPW5d;!&5 zo6itUk59j4d#qArCfMVTX^(tJ-=IQaqBdH_H%ndx^SWCyd;E}^ z=2yQbtcuLn&TFo_CN=IKbd+UJ5S!KdWWPOWk-`E1GG|Gl3etV4_*M|kmymuP4w7Ih z0A;tGA%2~B0R8yxc3e!JEPSOZ1?Py`PDgM=Bo?TD=Rm|2xsl1Yvazg0*is(qRBT{Ldg>4R*UwlT8?n-ns5DzOBH$!^LW4*$;ke|P; z7783_^t#PTigx#K%dEjb`h{w8lv(?sD!3dgP%o9zO>E>yX~T0b zaT?>p+sGat=RJ!p>WH$}}nH+WTFH44ua@}1DZaouMDl+On-!I^^ah~{Sn5HRt* z{MI+V*%BBa!*F9YlfB85OzM*{9~r*k0(sswV2s&Tom#Q6CVuVu8mvsTc-KBAc8Ned zea2KrSSI`v?|k60sHP~!tr$#ax+KhJh_T)}+<06Aj%8iF z;04M3Am`TgSt+2Gn1#SHF099Wlx3n5KQvyOuf^)qhPG#^Pz{5)H7jcUKjT(nG2AU#AqKqS5)VswT4UftMKoKsk0h9sZm`GvO#s~FR=-?_a- z;%x(&JlSpD*DHqc3tkm>!KE%&-^0z7^YlRS(!rYfY!f2Yb;$B9%x1o9ZAJRbjY4yB znj}s`=wxm~zFk9?;DtE~y#f9njbUmiiGaSth^F_lGe~UdR}LG;a)c-8{jB!Yvg4>1 zIP-zdh+hSQdvb~SnFwg8*k;;0X8mqs`&vcnwwN8%=$cMv<;uTZ6&9Dx5gcaiv!Wo8 zKfpmie=5F|0=2i^?V>EN=85$A`Wt7P3pOcFtTS77Jut_+-X;_dh1zeB@a>XuCn^PZWEB$}^T*(v zdtuN-v{p1yCll_E-Lig_Zq{Vk?{He8T)D?YxF86F8%@s?1E}7gW_cG1ykCfb`@ zER8g0*vtUmnJ2=+Rb%4nTBYdfw2azLYIYZtv)B&)w`z1MmiTo$?l+JBBS2xI zI8CvV-Hce`sC=?uxp03GVc&;*s^~EJ{)3?WO~21QCnYeWiEf8^2$T^!!*D zzdPUjLhhBNi~Fw8(5PVm_yE%)G^Z{=a6gX5Xf<4z{R%C19xvEAG*FrZrTXUb<})sd zr&a7+Pv-0}W#qltM6&0-I@uM8br5O~i!Upj#-ORJ{U#PD;Os*`|j zg2pzoDHUn`=wOp=IIiYZ;*ZIoz*fpL$2gJ|6E@S>xz_~##u?c0#!MzYg@VJXamzjt zbnWrJ(WJ+L9;3ebdzcMMzZ#Xd!&gy%kAka^Rj-YOY)`sn!eQyY*)5xD`qa`Q0S)0G zraappJ$Z&QtPd$=N;l$lt_~{<<@}DXT{q{^<2A`(dVK|zl{sKyy-GG|5#Ii!MQAxf zCi@;Z*v0TEDOWF%>3Y*74!x0PV$O)&Itu%k5Cg*os?pq4 zK>$-6xZe#m4`qOni4dxdfzJ6=0cTCXas&v-C8IItwlJ2RA+w3 zT>=rqjrddTGf`}@0A68yK+sLdW)G7D+IZsFk-$#Md|}`B#Y{%8Ph^-v_?SWiIsGP# z0|u#>)#8+;UlIfY5kfFx8f3>3=#paeIP_%e^WRP(3P|GQP;9^TaE&e}E|T^TD!3tj z%Wbo%+bq&1kgAGj3;Kra9>hq=9^pE_&D76sPxKtJW?rD4?_owmY#D~CdLU?f*=obU z*AbpcCBC&?<%BZ5H+K0Ryc67z2f%NeRKRI$KXumR0`HS$6F%kcfDAhLIMox=} zcIO8x5thzTo?+>oK=V6zD%A-im$fws5JhdwGR`eU3QtB$hk_p!CAaytzpY7m(RV6H)?*9Q$1nSaRcM> z=F$sx#AQ}qUq89iN)9C1yI4SsM3QmIT^%(>&C^|&DpjZYMyFz-UnVm8CP6O(VqwPs zga?O+L@f}+RZhchy}|k2T!n>>nlpAS!Z;IHg>%q^UUT{1Np&+JmsHjz#f{csDooU~MDEQNE9o3V_BwjN z9%w9P#Gu{Yh=4>`ATA`~mWi$M*gN=3+IZVl32yILo8I`P4B>H@CFM^>vdoMejqygM zW^}7zt45arjy}_Mdx{_3b%O`hVen&n^(_UQz7c#LkW zvhxS4HS~mVM&`ar`d0t^S+hppA@EBr^7=|(9Jpf`i2wy%Fk$-Aw|PKNKT5(at{`>Z z`9bu1D{6B@B@P-c8eA@+GTF?2R#cIToOIJ|SnuL%4N^|e0LBe$i4zPO>3m2C>S!Wx zE!9d8@myHH;DsOZPU4A7lpO6Xr=hxTWdZFIm+q>-1;bF;24Pp^Sx|6-lr*#8O~4zAmTw_BCgADapYEASxg7wd-`L+e7?XY@6R z39P;jTh@|L0MBH4MMPayr4yI~fD2*YvWLCj>_Hb#6byWa&6usw>8ElWdRirZJv`ws zp4Hh3g5^4*y(JebAi@MunO`9ubWpnwEHK+gLsu5U8^qg`Yi1WJM&%Wwwu%U6IBr&l z4OuWxZ{e0Y)}J5}v#_Sxzf)9CijyA=T|ny!q?8ij6EP+zg@6j$z>?tj)U8j)oifYyzWvI>b6eXXPVB_jIlb&3=mi{hBf8 zZ=C-r{|5eD8?s(yCZUQW$<0*eus;Vrb#~|Y1!lH->E)y8;mueqLec9E%e#iL3#V5U0tqMi$vzY^ec|(oiWi_g^PTe zWb)gcn7A6{fHc*~fM*5{-LS;>+llkUBtgVt(Kdp1CDVdZ-iuYQLD=j;!I4xZ3~zs$?dFx=dJ9a=@C z^p~t}FL!5>?=lnO^w}9(^Q^2jn%*KY-Jp?oGk?ci%NBuJ3Ch2J7ca{3K5of859a1# z)eFNczh-cUW7<35=T6pI$~;=9J;OjZTeD#>Xk2|!S2F~%O!`p4RAnxWT zzslIh9}d^H%;xH?4z^+;K~{)GaxSeX##YSZdq$G`6vkhU)b_Aw)dba*rfWz+800Q|@5a^1a#iT=uL#@+a+ZfJeELQ3#xz zEot{5_MDGc@0(A{en!y=emCK(igOFnA31xVgR_L7{xej6yy_O&F`lQHlsAehs)HwL zecYx~Q=>J;<+#L^wVc!~IHNNbUq{17)mo*6X<^((I=^-ttP*u~Apv%Bo zMU2BMGRopB;=%#H4(~L5T+5+*&XPj2C@L@>$#buxWf$%9^e8yup7iYadGZx^VbJ&M zsuI)j5AO$SE9Swg8Ejx1hDoOURiuuk%;S8Hl!X{UFCC!UNEW7{sGZs0=^W|4zKssj z8eP-`llGs#QW9bSHwz95!46qeqDFv6WGaQqJ(6hhf1rBxVPs}=%Sk)mbuNhWpm;ee z-mgUg=q*x4Dtxc^8XL8Cnpo;W6D1TwGS_PGO+~DC%?+%mbfl1Ei zTjS@`uKVz-_nsK@E9gOwX4LvgTA>nNyD0}TbUnU%DrlfgZ~r zmN^P7f$K_-81#%V-FFOm_AyzqtCAet7cO0TVP%qA?TSyNvEK16e#X1L{L$;jC z&e2am65%hUAVz{@A&rg*&9Z->Uk5C7VHKn51@j_RwiGLOu4m&AM+J2f9`TcW?Ih-? ztaH)aI=8SiPPf&IvAE;Uz?*ZjInELh$>$Uv0;7BzXGrNhx~ZYseBgH3@F3F(*|twt z`o-t4cn>nJwk2G*r=Co_+vURM;Rvg^vgjNNC<681k~b8t?z2B;WWB(^VSc>BPw@0&ZwJ^?XK%YQ>%Krzv<=HKC#OH zbvy_uq{%SLa*lbUi`A!5d=ud%)0#kJn;s3=TnX|U$_14n{T z@Lwz55F@x|{oc*he|3Ylh5%i-TwA=3dLMWCe&7DYid+HD&{~ZGY!&p)a9LO6dW%|z zVXjZ`$6VrfYVH;djs-^#xSZZjHf49^*{AI8`-K^&sXq~`XD2%|QKoX(7Q=XET&RMK zM@ddC+2n?uE#MSb*SslvGF}_n1_WY_jhDPO$J)|CEpwBitnN1fywZ8 zv{l>V!$Ju=Wo{k#ZXEl-&Fdn)k3IsButGRtp_d+fU<@&D%7RUc!xg!+FT=%NW03Tp z`4t@)mDVtkhsY-HFw0>bu5BrPwBQH=Z?Y(2BKUbC8MIht$3he zd&Dx1T!P<<&6PO;V&iVu`3eX2dqF;y+O`Q;Ok22%abnY;AioBxH-%Oc9knPaYZ5}7 z5drQ|FW03%;Bc03S@`I~XrMwdmsH-5)Oi5&M0-j)S`OMRHSU3^T`WTd8N~s=>fID^ z`0-NJu^QWN4WWZ7jU_KWA&6N?=MJv74$r**I3R47Y$h^<@oV3eMo~**K@Uev-gLn& z>f^|Jv$Cr1ABMV43eX;ZBI7OqbJRedhUf_g+2h2yR*kTix}aZvXVE#FL&sg8Letk?2%RsYf|?EGiX&ooXirEH9Lhcpb7r*IM0%>1h+Ru`AvohxahkS;#M) zzT=^YzN9zIZ04chg=#$^{VY?x;Wchs5ZUw5m$$j1D!E3u^ui$7K2!g3*eWq~K@Kq< z=#z0taC3e^h(v?z2>XhjapA#WCpVb&YL~*Z>X$kD)wttVsm8Sc#g;^Y1^3WNxXhmm zW}PJZLF?V5KOcz5OmEx$hLcUZ3@6Y6z@nugv02DW?)ZBW6VK;t1TnT4@^q~r zjAEYN1&DO0=@v8XX(&pd(H4I}6I*)org-~1I532~ntYppzr|KDXLl5;mwr=>pO$s5 zuxzx)o3nT5@r`Q5*=$1Sl81p7nwlGDYO?d<%yNblnM4?0uh0tv#P@fwEq<{AOiD)Q zhKk;*$b;tu;pS0Re{xZ!<@ok)-`wSUVmRecqjvqbY>hA{jWP&Vz1dx3(&+Lzv(GEX zGL`~ul<_?HpKbd?zAQMX-4spZhUagu+jTEv%IRR?ZZqb-|AHi^6Zq=Ww%L#h{vbBYyd&EfgP^zliGVmbo;tys3{2_kf$L`7+ zOXN~F-&5cS3i+3~rL!w&Js?{YTV>LP%KL&z<#`kWY~Z_TY64C3{uev$f<3F5ybD)z z*?517iZ19@kUi+Uu*`s^T#K(2U12iHvDAn2&g6QaBqoyZ8n+^Bx{Aj8a<4CY@S+Xt zcB;}oiqzX)FeLx(<9S>6_>jkev-QX0v7L|N-7v8A(CEbeXf_Aguc~wN=iFmF z1L3S#(t!lv&ipwMW@1GC@i7_^=Ny16(WVpUEXA4p-K9+L{0AgI$*^qOf}TJ4vT;Mq zm>h?u2J|9)Q?9!P80@v2CqMY0&9X<64GZ+`_U9XQ$=HzI^0sU&+|t0NgKqes^q9bd zV6K<-8+Fgx+<-uVexRc-zGcz{@6OD+B#ZJ9sI#Z!INH|WOF!yhqn4iOVYu9 zsnI8wqR>r2)n)7cl%K4ikc8Z9Tx-&MO@~pVik({mZxQE(uo+4b2JHh>M{?UKACE)#*kQk1@xR%?O0LrVXO`()phFcIt zsl>TUqV$Qp0mFz?vC73NW-E92)|rJROV#UpdsXr2dsqV{IxJMo2mLJQE(~a&a#Dsz zbZVXZ2>6Y)7NZ$C;e${In&|Fz)BUW^{U*n~vrZDXcvDd|S- zBBX*n?m|{HpE6mVt0UEqX4M?vH1HnQ^ra2||hh z!CGF$dmVGuB73=yN@M=)z7&VEkP+7S>5N#A$H582#ra~ruV#+Zg@ou=q8Z86*pABy z#k{b+%emzy#ib&hCIwCsis9e~|KzPJ7*TWuEyiP??c$ENgv zEkLt8!wMV8vq0;Hc|2SkuQiFz)ywNd8iFji`Zh`>iUiy+@^cLo9}7)Df31kBfz6R! z%Z$*=QT(964H4!T`(#lx2*H}HF8N%0YRzbJJA-xR#uY99JnsXKa9_%Yr{Q)m!buWUy~a)yt8k?ogd-r@K$fS&9)H`C+&NU z(Ev|b-^_=V=x^$Ak1%!PRd5^0DjaTm$^bayD|A(g-)MTPw`5k{pe*P&yt&AGw=2$3 zG5bHO7R1xx%_dB9i-MUr-NeR79Rwcp*hhVLOl^rulZS@>=ZtD*u(1pw5%kiywG>gd zHkW_|nMz;M+PfEYC>^pqSQiX(h?*8(qXoM#nw%^C|a~LEaxFl|8$Bdb0Yb z53&|+jQ5VwzKz2U6G3|tgBVCHz@LP^vWeovy>i34!0Z?Kg(gN&3pE|IA?KCG5>R=1 z8}UDx>I6y`?_{*zIoW6S&&kUPu>MjpT5Ue&qo<`#r2nIlW_{*&j+O z^g)AZZ~6-ZwVXA5?Y9x^F{fPjSzb~*fe~!Ff?%Nby@TJTP0B8`*3@3GfD-RmYT3io zqDq*KbGw6>3}7|yT;pX@7oBQIZ2`0={HXnRKKQ$??}<;fP~Ks~kHcMujn>0lC2fsS zG1hOqL{#xG|26~&!tTWTde0+D_Q|l=WDkBD-+e6d>QL!9^N>~?vmp~qS97=JeK1{W zD=Mw71HLc+^>O8llaIVh?WinkXuM)YLFH zSWj|JKK1<*7HrdL+d_HNjiGS=7nP%8Zvpr04#|g&;t4ww&VW)-c#q(_p9kmR(R9?j zC*%6ol1Dy45^m-1bwgEiQ{rq-E#rwIhPNie6itv1s|LoqOc`#yujEj8k~C4ZJ1rLs z-W_Td+Z7%bgiVXg{+S)i2%_lKb@B`!SkC$-1E|SbbTM=!**?BMwiG*`FX&iwrm^n6 z4JR;OT_stK%{-&ihx|S99^h}!Vo#3nYprilrw-sXpX3mb+XTY$>i4ME;@Wn zUpbSckk#*so=QzNrPdm4)5dTupB#Yd8$`Vl4vRjqcjyrg7B!kJ1!Sn%Ii>9^%Pj%yiKQ&8rqj%dEDp&|h{MmU#!h{dvJpulc3 zNUmhz_w>GtNZK)BR@L*Hk#Bn1soI{1mof_7`xV#fh#He5Uq(5-rTtHgO5EineG_Nd zezRGn1q{YPlSuZqMvHvo9d+JFMQ?1WsW8xq4jyt0K*w2n@fLK9rgQR!7b)?kqI{9? zD;h4?Kf`FZFh&_9$aYJ_ZKYs+!FGms1byjE7TMMz%Efb38k|1Yn@OKI4`pVU|1%xb z_q9UxrN7#S+4)CK+!SNaJQ$^;-)$@M`pbVi#2**}9#FsZO%PT*M112=0S={vL%vNK zNs|2IWDX?U(0hz@U>sd$OX@{qBKpz(xnNL4kaoLl+7h32+FNYihk19`k;@aX4k^9O zJSK5KhsyQ!D&jX+>c{Y1iW1yxGBi&%v7TkKro)}^M#6kqn}qQ!wXgA-?7tKZ7;FLA zOg4MdyZ`z$&|rEXb5iYeozy%GZpg&`GKbzWucwPRP6N3PfSFxw$fuifECqNKI$i0x1e$|%jEI&NHs7WnH)8IV7)%VF3&^A2qqOgq? zOuvEVUU`Y+c43>Y@Ib0N3HdH2=(!z=*biE@>RNpSDnNL{ZiiGHfBCK&^pEeWiMwvb zwd5kCW>Gl@_LOtb5lVlvz`qQYYFneKxhgGpeo%~TGN-kCxIGOu8+cuN+nr}ZL5m79 zw!7+x5ElWx#_kmGqR8$Z-tnt7x#uXBR$4?b|2dr5WD(^|a6#q-2`zsj-&*^d_=r}; zvG?ZL3?(GKPQJIcqmpwnuJJyL8ns$kcc{rA1w#G(=4zmV5B{=_Tg3kZ$N_F)8yy$o zjiDu+g}(tIjRakTGwwmsr}dXsJGrAK<(Xy0%^&OR9T)Zk|JKTih#h%%dQ6J8ACKl?B8@?Zc&4$ zu;H2pD`15j6yf%5O%gCOYth+>YVbx#j0?@Hb;JzWvNFYnvbXbmDeLX!(OLZZ)x8@! zMxfhG75tyq8Y=NI_J;dQmBX7e{p^x}>)48$s9%A8T~A6HU9K8p(Lp}n3|TkN0N43X z^qIcD+EaWzF!S;`h@|TpHnJls8IX2`=MGCEKsKTgm$C;pwM8FwQFfAHOUYSx6|mB% zhH$YrvwWbi%nE^`OE?82WOswtZaHRD)uxfhDS;J*Q?#MMrJg{Kg+VF#ibVLi>L?O( zHAZ;_$$awLn4%|A{fWGSM3&?(m+XjJ8QoAEZ>rGCSnP+)9f85-dRHp8ZtOF^-)6T` zzDp@Wmub0vB$_4wJL7LpuZiB}7sj}K^KDzj$F044AvWIfO0pcC_C)(K+pF^z&Sh6- z{an{#lwLF-ebAflk}aTYdErH28Z4QA1I)bhE(&^%Ji#e_^qFB2X-(XS|I)z(Cf&B_ z4+Tz>Wr;CGty3SQAChr&x;2_qKtWV$uvKPT8|;4VHc1IV9?aYZ{MWf@fq1wTX29EM z6D-$5pKE_mx5|ln`&w1yV5inrjT6LIWWTFtX-mgqOz5ghVl-2FcHIlZt z-X>iJiy^<3f_~d#^u8lUI7Q4r!msEs<#Z+yeT^Nzb)uHe{GitIU@$@8Uy=;?^w^^S zaafo7--szIC4UB~nOCgGu?cy^4X&??UyEU%VD#_sM>(zM6IZlcF6&i-j~4v_4L{n3 z+4)CK+!SNaJQ$^;-)$@M`pXa^=%P=g^$ao{`CDtIg-4e$hJbhXZgs}#@{yQTG~9!;WL3qp_u#nuDA z|D09>N$OrCUq=G0s+{v&3U|6!6f=VOCQr+DArb{m2bEgR59X++^PSu$fBWlwr^4;#}qXXGz8X5#8)$j%ff&(_<9+rz^?oCbBLE%#M(s z3+HuSh_Gc&RyB&CW2#Q6jQ%TOctPubWU=c)$HF&WNb}|i7>Nu9POB3CZ_G1*&O#<4 zfXmQB{84~~qJav8%TY#|O4(hf0Sd@VrtGC+Nkv;E+hu|s-;lHx)t$R6*?RNOjR#69i*)&3|WE9?KG6=Ey)`HS&s zr=#jGb4QGX^mmk52eI^YWOpuGs*n}05ys#CU0Ouv_?t0%4o2}uefs4l5s`hbn#@?i zBza(_;n{$G76P=&YK06&G$K}iCTQDD{kj`Vau>u_G)ZeVL<#D*wPF?5Z?AMq=;XTd z^}rqZue&%VTf`SNhf>%x{-;t-go(QX_x7dR|92wL1y*KS>*ZH|T5V0Tim$T@b z$O4#we0!oqKo_tM*9{UQ0oBUYxfZE~BMlE&QO2Md1dUQW*Hu5VFs+dO)T4NA--8?H zAa_mpIrZEqc?^10Jf491T5jnS!I`16emd(4DJ|G{qH%u47-Wc!Gmq3;qGAlG{{<|R zcA}5&DW62z?Bl*GG{4IG1Ce^_g)mMa+0NlRX;#f!skjHu#hfYH-rEjcJ_$%VkzL4^o__1f`tv?gnXA6&=T&BqS zCo$^-4!%a!N7uJ)w@J4+2Ne`)`B;I(vBn=STO7UBEsTi{AJ<)w- zR(O(g_4EHZD;4m08Y46}IarR`&D7UIyi5H&onAmX9x|Bk%|wD|9RWH!ON6ST2zUXhEc_Zw;&2&bf9Y z0|fu0sW25aJ7-zT&fH?0`97O!-Yz|D>)8pm_WK~WWaaxUB<#nh7I|m~Ob|yXF)(+9 z@|+uywL&>gpJed5x|Wa^a-3zCAnU#vgTMFr&s4DE98{ZR&II&!v?a_A_FVR?cR#=y z-l+iM1a(>|4GPqo9I0rBNN$PTjz+JN&QSV-T%vBHy#@`8j@js&IMROw3A{h8Q=GDJA`WguB&i>nHv~fx1&i`6NYJ zhx76TNFg3V@rSX$#Pr)2x_D;^giSv}FcIU3^gWY-TCcj0PvQe9ys2^yt<#iZ(nV~Zh2?qaAWN?p7;Gh}gS z!?mu{&IJeZb#Zi2%&K&TI-M1s$&g%f@VR%-l!5IayNJScjwX2;x5$t_cf*NZ=j1`W z>Z^FCbfkH=F-sw}wet!D*K2&FX$+)U zp2z+~36s2PE|0MIFq%F~4t(ay5MOM1G<=r$$R7=Ol(u}RSIb%FSc=s{=V|engR`gA zCef1A>Q~D>YeFr^;W~zmLl1v96Lid{d;P-!I3q7@-OiejJ8!EKFZl=@AB@M@oTeM% z1Z*NB!|_ZAnK1kzVk1-`XlrW}so;Srf6j-1I$Ozi(%jVOEyb29o_`Xp6D6RdE7&`e z<+l(P=sq!8lb7u0+Jz6zU4AAxCK{f6m&KJ^b7etR2YIp9NagPckE9yozP^-}tO5U1dq zji(3FM#SO@<_XQZhi^Nd|7HgMz#~HF!=pcY@mj^?Jdjzl? zG-}@92-hzx@5U@?7-Ol18nhZJ@;~D8Sj}!MCG#BaB}l2ACES+;7y3SMP;LJ$=QcB@#kxP-=RAvrWHG?PiWNUr0>S!77Xbj#sPJuczBp(& zpa8cj_?1Tov(fHeEwM63-Va`hmbh2gBJ3|0@Sqg?PM9sRGFgk~vv@`P>o{ilbf(6& zcpmCE2{eV|Vw#yh%4wyxctnkKH%o<_HY+a!x5LW zgqNZ9e{CTII_bwAcbcps}u=lsq?ura}zwRBm`=FchKAT*$?0C#N| z1w1#MSb%}e$WrJ-^%kZ@LcN`8O0uS_Zm_w z(Gt$Yz?(?$A7H&!#5xh5F7zB&oyHqXdoGoA8c(kZx@asJB}n^-7c`W{vQVV~umE@q zE#D=rI5O`fOOS@URotn?Tr`;w@qqi7&Aj7U^DWaV;Ons#6KSIGjCUAlah782!mQkR z;k_uAU;CY_R;!_z6C;S05y0q$X0&A!uVh5^`u+m+A)O+pN3%v^Ih!*>wK?fX7WJ{! zp9Y|G?4TqFPdSh*jUB^cH8hi$E+QmTFGUub*WgIgAB|9kTd0dsxgdB292)6E73kY~ z8?~}#dD>iNqyyGaQ(6~FM|uxO0wl1-u7KS6eRe9kCq+{CZ#UvJyp5N2&w zz0y&NOyyp3tA((9()`nJWkWOk8rOB@CFIN-TQ;tya zE%)PH@r$Zb88b-qX!yh;rlV~BG%;!s9fBEy^g<+)ups?;ywGAXwOdBbNq%$%bi<4U zhQX~f9^LXp6NY=|T zb~aW_LU>LRwQ5sdVo)QxFY<=exZotA)4Urfu3Cq`@{B8+vlc8~F5vFU`8xAI6tZFe zRdW4uhX{6YE!)^d`ZAkm^Mfz71O5*c`m$nW`rm=Bjq=ib)WF9q#bXUv4sUB#yWl&2 z{@s?q>)IClV@-g!^BxRKUHoT>#!tDrh)XpHsMyCj>u_ahQFc^&Ud@wF$3-q%EARCYZ}LJH0NNt!4Su&}D+c0!J7SR}i=wsVSbG|$INokeO> z6`9?O6b+*+*7f5;vwC<=n#EAJF-&aVn5E0$_1VK0p^z`;f5z&Ee-@AZj z@6P9Q3SKoZU@Lwnj zU~#CMRp#J$LEVI#tyH?l!~k0LF&KNh*&YGlLS~2hOG=5GSo196a|6?C-c*+#BgqsiQ{{Hn`*SH&qG{_QbY= zch#ZL8AbG0S5)<#@}DoCzXF&1Xdtp4RXQOboXL&KP-w?$;WN%ck@C;(9{etPc706bczw&f!g zV`#JKcsyJ(*}-xwSI!U*@0{;i?7jkaa85)NePS|1Ebv^su{}GtBaM3p@#UCP#%m^G zNGOuLsQ+Uwb0&SQ*bG%B2-#FzHUvP7sVbkxQ{}{JTCQ_kL{Gf@5%MkzcLvqf)hL8D zkh~Ea2jpJHcVl6NQ>}iy=P!kO0@ul9a&Gs? zt%V)+%WprRvorT};nc}LZ6uKS6?_P!+6r@P9Nqo(kBQ)P>BozxT2n~zc z#KCnLbK~j~m!XJWDb7GbP9aWOEpDD<2rOB)u8^#p9eP^9F%Iu@Kf&-z^D=&p{ zjo@|k0d2Vvsj)G=YGpa+e|!Tb^)t!(f!0hqvvw!@=Vm;z2$D!Fvf_wKSH%VJb4F=a4$M}yjqO<=4Gaz2YXHZ;{(Ss)*x3x((GXfNU~Sso<5k2 zL@8|YyOi7fk@sWnbo{mXdb9%*$gn;8QND|};e9Q4Bu9{wAzE!`2eA1-xs_tMiy9wH zpoT?@p+UlvgWjN6K(vU5T6UVY!7J4vN0eL~!kaaMUbd6>{5-$)LW z0nkt)2^ykE9a4`EW(jAq8fz1o^45i{Mw}2doh@uJ@0F9=1YB4Ex}o$-?{m>P>qo%d zsP`>{L^8d?Tk^FjqJ=raM5Uz|5=zGeVngWG?IZyBdXc$^^W=oCPxvI7V-^+1V z28T%7Y=nsj?IrsGeLCK)^$Ogt-vsTys~(JeP1#OF(^p{rd-vU>QYCM&*?l}=gIg2~ z*V&|<)EQ$)`qb4G%nr_R`3%ssWl7Q%lEw)zJ)zkTudqK{+U>pp^ zM;%3l05Fe6o*p2HuJ_~kW|&D5kk(2p2PWTv(kCK&7}^N=;18c2%_^xvf(p=SNVA6a zhoq`aXPVcC*xX z$(thd+v2K|Dg?#yDZ>kE9x3Yyag0TB(2UWfO-FT_{0K>n_+qTpV{a{Xt(dj(bv`d*S{+dSAKZ2A zlElvkgr9el5eB0_?rLOmtPb3gvS_HDcZHg8ppg%c>7o<2NzyfQu=c8_NM$Mfjl;#W zG9T$U_DZp++#Fka0goL4Tqt+t$`*!9i7e>u0RVB@V2^~(;0B4^2WNr zyH0P>q?kw&%7{t)*M<@MpayH0ENw^pzMJiekq>7k0?JGFmo-=lU$L+{PAC`BQvO&$ z!r*qH5Q0J&boHv2bvykDl3$JXhI$xZmwIuTqy>ZZ1^I6;dZZQa(Kfz2X<|wjbU@B3 z>Zu^BED&5bPT!$-*9DCa(MsOs9)a+SS1&+&5@o7UtLEgI27EiZD3} zNVT65tjMrRTsPgj^PvJWG*iP77Az&z|Nr_eJ^iKl-Rp^>HkP)FC4xnxtN{>7UGmKR zEZ{G``8!kxOL!3Ps;SL;Q`VSjS0clX_^kG9!GLwBjkv*WqyIpOB$m%!&b` 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 VoeV<46!PD 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 Mz@MR==C`5$14QFauK)l5 literal 0 HcmV?d00001 diff --git a/docs/streaming.md b/docs/streaming.md index 403df6b..768c4e3 100644 --- a/docs/streaming.md +++ b/docs/streaming.md @@ -1,7 +1,7 @@ # Streaming of Contents Internally, htpy is built with generators. Most of the time, you would render -the full page with `str()`, but htpy can also incrementally generate pages which +the full page with `str()`, but htpy can also incrementally generate pages synchronously or asynchronous which can then be streamed to the browser. If your page uses a database or other services to retrieve data, you can sending the first part of the page to the client while the page is being generated. @@ -16,7 +16,6 @@ client while the page is being generated. This video shows what it looks like in the browser to generate a HTML table with [Django StreamingHttpResponse](https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.StreamingHttpResponse) ([source code](https://github.com/pelme/htpy/blob/main/examples/djangoproject/stream/views.py)): @@ -111,3 +110,59 @@ print( # output:

Fibonacci!

fib(12)=6765
``` + + +## Asynchronous streaming + +It is also possible to use htpy to stream fully asynchronous. This intended to be used +with ASGI/async web frameworks/servers such as Starlette and Django. You can +build htpy components using Python's `asyncio` module and the `async`/`await` +syntax. + +### Starlette, ASGI and uvicorn example + +```python +title="starlette_demo.py" +import asyncio +from collections.abc import AsyncIterator + +from starlette.applications import Starlette +from starlette.requests import Request +from starlette.responses import StreamingResponse + +from htpy import Element, div, h1, li, p, ul + +app = Starlette(debug=True) + + +@app.route("/") +async def index(request: Request) -> StreamingResponse: + return StreamingResponse(await index_page(), media_type="text/html") + + +async def index_page() -> Element: + return div[ + h1["Starlette Async example"], + p["This page is generated asynchronously using Starlette and ASGI."], + ul[(li[str(num)] async for num in slow_numbers(1, 10))], + ] + + +async def slow_numbers(minimum: int, maximum: int) -> AsyncIterator[int]: + for number in range(minimum, maximum + 1): + yield number + await asyncio.sleep(0.5) + +``` + +Run with [uvicorn](https://www.uvicorn.org/): + + +``` +$ uvicorn starlette_demo:app +``` + +In the browser, it looks like this: + diff --git a/examples/async_coroutine.py b/examples/async_coroutine.py new file mode 100644 index 0000000..cd0d9a2 --- /dev/null +++ b/examples/async_coroutine.py @@ -0,0 +1,24 @@ +import asyncio +import random + +from htpy import Element, b, div, h1 + + +async def magic_number() -> Element: + await asyncio.sleep(2) + return b[f"The Magic Number is: {random.randint(1, 100)}"] + + +async def my_component() -> Element: + return div[ + h1["The Magic Number"], + magic_number(), + ] + + +async def main() -> None: + async for chunk in await my_component(): + print(chunk) + + +asyncio.run(main()) diff --git a/examples/starlette_app.py b/examples/starlette_app.py new file mode 100644 index 0000000..f06b57c --- /dev/null +++ b/examples/starlette_app.py @@ -0,0 +1,35 @@ +import asyncio +from collections.abc import AsyncIterator + +from starlette.applications import Starlette +from starlette.requests import Request +from starlette.responses import StreamingResponse +from starlette.routing import Route + +from htpy import Element, div, h1, li, p, ul + + +async def index(request: Request) -> StreamingResponse: + return StreamingResponse(await index_page(), media_type="text/html") + + +async def index_page() -> Element: + return div[ + h1["Starlette Async example"], + p["This page is generated asynchronously using Starlette and ASGI."], + ul[(li[str(num)] async for num in slow_numbers(1, 10))], + ] + + +async def slow_numbers(minimum: int, maximum: int) -> AsyncIterator[int]: + for number in range(minimum, maximum + 1): + yield number + await asyncio.sleep(0.5) + + +app = Starlette( + debug=True, + routes=[ + Route("/", index), + ], +) diff --git a/htpy/__init__.py b/htpy/__init__.py index 997a846..02c1308 100644 --- a/htpy/__init__.py +++ b/htpy/__init__.py @@ -6,7 +6,15 @@ import dataclasses import functools import typing as t -from collections.abc import Callable, Generator, Iterable, Iterator +from collections.abc import ( + AsyncIterable, + AsyncIterator, + Awaitable, + Callable, + Generator, + Iterable, + Iterator, +) from markupsafe import Markup as _Markup from markupsafe import escape as _escape @@ -126,6 +134,9 @@ class ContextProvider(t.Generic[T]): def __iter__(self) -> Iterator[str]: return iter_node(self) + def __aiter__(self) -> AsyncIterator[str]: + return aiter_node(self) + def __str__(self) -> str: return render_node(self) @@ -137,6 +148,10 @@ class ContextConsumer(t.Generic[T]): func: Callable[[T], Node] +def _is_noop_node(x: Node) -> bool: + return x is None or x is True or x is False + + class _NO_DEFAULT: pass @@ -168,15 +183,8 @@ def _iter_node_context(x: Node, context_dict: dict[Context[t.Any], t.Any]) -> It while not isinstance(x, BaseElement) and callable(x): x = x() - if x is None: - return - - if x is True: - return - - if x is False: + if _is_noop_node(x): return - if isinstance(x, BaseElement): yield from x._iter_context(context_dict) # pyright: ignore [reportPrivateUsage] elif isinstance(x, ContextProvider): @@ -196,6 +204,68 @@ def _iter_node_context(x: Node, context_dict: dict[Context[t.Any], t.Any]) -> It elif isinstance(x, Iterable) and not isinstance(x, _KnownInvalidChildren): # pyright: ignore [reportUnnecessaryIsInstance] for child in x: yield from _iter_node_context(child, context_dict) + elif isinstance(x, Awaitable | AsyncIterable): # pyright: ignore[reportUnnecessaryIsInstance] + raise ValueError( + f"{x!r} is not a valid child element. " + "Use async iteration to retrieve element content: https://htpy.dev/streaming/" + ) + else: + raise TypeError(f"{x!r} is not a valid child element") + + +def aiter_node(x: Node) -> AsyncIterator[str]: + return _aiter_node_context(x, {}) + + +async def _aiter_node_context( + x: Node, context_dict: dict[Context[t.Any], t.Any] +) -> AsyncIterator[str]: + while True: + if isinstance(x, Awaitable): + x = await x + continue + + if not isinstance(x, BaseElement) and callable(x): + x = x() + continue + + break + + if _is_noop_node(x): + return + + if isinstance(x, BaseElement): + async for child in x._aiter_context(context_dict): # pyright: ignore [reportPrivateUsage] + yield child + elif isinstance(x, ContextProvider): + async for chunk in _aiter_node_context( + x.func(), + {**context_dict, x.context: x.value}, # pyright: ignore [reportUnknownMemberType] + ): + yield chunk + + elif isinstance(x, ContextConsumer): + context_value = context_dict.get(x.context, x.context.default) + if context_value is _NO_DEFAULT: + raise LookupError( + f'Context value for "{x.context.name}" does not exist, ' + f"requested by {x.debug_name}()." + ) + async for chunk in _aiter_node_context(x.func(context_value), context_dict): + yield chunk + + elif isinstance(x, str | _HasHtml): + yield str(_escape(x)) + elif isinstance(x, int): + yield str(x) + elif isinstance(x, Iterable) and not isinstance(x, _KnownInvalidChildren): # pyright: ignore [reportUnnecessaryIsInstance] + for child in x: # type: ignore[assignment] + async for chunk in _aiter_node_context(child, context_dict): + yield chunk + elif isinstance(x, AsyncIterable): # pyright: ignore[reportUnnecessaryIsInstance] + async for child in x: # type: ignore[assignment] + async for chunk in _aiter_node_context(child, context_dict): # pyright: ignore[reportUnknownArgumentType] + yield chunk else: raise TypeError(f"{x!r} is not a valid child element") @@ -267,6 +337,15 @@ def __call__(self: BaseElementSelf, *args: t.Any, **kwargs: t.Any) -> BaseElemen self._children, ) + async def _aiter_context(self, context: dict[Context[t.Any], t.Any]) -> AsyncIterator[str]: + yield f"<{self._name}{self._attrs}>" + async for x in _aiter_node_context(self._children, context): + yield x + yield f"" + + def __aiter__(self) -> AsyncIterator[str]: + return self._aiter_context({}) + def __iter__(self) -> Iterator[str]: return self._iter_context({}) @@ -275,9 +354,6 @@ def _iter_context(self, ctx: dict[Context[t.Any], t.Any]) -> Iterator[str]: yield from _iter_node_context(self._children, ctx) yield f"" - def __repr__(self) -> str: - return f"<{self.__class__.__name__} '{self}'>" - # Allow starlette Response.render to directly render this element without # explicitly casting to str: # https://github.com/encode/starlette/blob/5ed55c441126687106109a3f5e051176f88cd3e6/starlette/responses.py#L44-L49 @@ -308,17 +384,31 @@ def __getitem__(self: ElementSelf, children: Node) -> ElementSelf: _validate_children(children) return self.__class__(self._name, self._attrs, children) # pyright: ignore [reportUnknownArgumentType] + def __repr__(self) -> str: + return f"<{self.__class__.__name__} '<{self._name}{self._attrs}>...'>" + class HTMLElement(Element): def _iter_context(self, ctx: dict[Context[t.Any], t.Any]) -> Iterator[str]: yield "" yield from super()._iter_context(ctx) + async def _aiter_context(self, context: dict[Context[t.Any], t.Any]) -> AsyncIterator[str]: + yield "" + async for x in super()._aiter_context(context): + yield x + class VoidElement(BaseElement): + async def _aiter_context(self, context: dict[Context[t.Any], t.Any]) -> AsyncIterator[str]: + yield f"<{self._name}{self._attrs}>" + def _iter_context(self, ctx: dict[Context[t.Any], t.Any]) -> Iterator[str]: yield f"<{self._name}{self._attrs}>" + def __repr__(self) -> str: + return f"<{self.__class__.__name__} '<{self._name}{self._attrs}>'>" + def render_node(node: Node) -> _Markup: return _Markup("".join(iter_node(node))) @@ -347,6 +437,8 @@ def __html__(self) -> str: ... | Callable[[], "Node"] | ContextProvider[t.Any] | ContextConsumer[t.Any] + | AsyncIterable["Node"] + | Awaitable["Node"] ) Attribute: t.TypeAlias = None | bool | str | int | _HasHtml | _ClassNames @@ -480,6 +572,8 @@ def __html__(self) -> str: ... _KnownValidChildren: UnionType = ( # pyright: ignore [reportUnknownVariableType] None | BaseElement + | AsyncIterable # pyright: ignore [reportMissingTypeArgument] + | Awaitable # pyright: ignore [reportMissingTypeArgument] | ContextProvider # pyright: ignore [reportMissingTypeArgument] | ContextConsumer # pyright: ignore [reportMissingTypeArgument] | Callable # pyright: ignore [reportMissingTypeArgument] diff --git a/htpy/starlette.py b/htpy/starlette.py new file mode 100644 index 0000000..e448bd9 --- /dev/null +++ b/htpy/starlette.py @@ -0,0 +1,30 @@ +from __future__ import annotations + +import typing as t + +from starlette.responses import StreamingResponse + +from . import aiter_node + +if t.TYPE_CHECKING: + from starlette.background import BackgroundTask + + from . import Node + + +class HtpyResponse(StreamingResponse): + def __init__( + self, + content: Node, + status_code: int = 200, + headers: t.Mapping[str, str] | None = None, + media_type: str | None = "text/html", + background: BackgroundTask | None = None, + ): + super().__init__( + aiter_node(content), + status_code=status_code, + headers=headers, + media_type=media_type, + background=background, + ) diff --git a/tests/conftest.py b/tests/conftest.py index 48a7eb7..6cbc26b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,11 +1,12 @@ from __future__ import annotations +import asyncio import dataclasses import typing as t import pytest -from htpy import Node, iter_node +from htpy import Node, aiter_node, iter_node if t.TYPE_CHECKING: from collections.abc import Callable, Generator @@ -49,9 +50,31 @@ def func(description: str) -> None: @pytest.fixture -def render(render_result: RenderResult) -> Generator[RenderFixture, None, None]: +def render_async(render_result: RenderResult) -> RenderFixture: + def func(node: Node) -> RenderResult: + async def run() -> RenderResult: + async for chunk in aiter_node(node): + render_result.append(chunk) + return render_result + + return asyncio.run(run(), debug=True) + + return func + + +@pytest.fixture(params=["sync", "async"]) +def render( + request: pytest.FixtureRequest, + render_async: RenderFixture, + render_result: RenderResult, +) -> Generator[RenderFixture, None, None]: called = False + def render_sync(node: Node) -> RenderResult: + for chunk in iter_node(node): + render_result.append(chunk) + return render_result + def func(node: Node) -> RenderResult: nonlocal called @@ -59,10 +82,11 @@ def func(node: Node) -> RenderResult: raise AssertionError("render() must only be called once per test") called = True - for chunk in iter_node(node): - render_result.append(chunk) - return render_result + if request.param == "sync": + return render_sync(node) + else: + return render_async(node) yield func diff --git a/tests/test_async.py b/tests/test_async.py new file mode 100644 index 0000000..a31908c --- /dev/null +++ b/tests/test_async.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +import typing as t + +import pytest + +from htpy import Element, li, ul + +from .conftest import Trace + +if t.TYPE_CHECKING: + from collections.abc import AsyncIterator + + from .conftest import RenderFixture, TraceFixture + + +def test_async_iterator(render_async: RenderFixture, trace: TraceFixture) -> None: + async def lis() -> AsyncIterator[Element]: + trace("pre a") + yield li["a"] + trace("pre b") + yield li["b"] + trace("post b") + + result = render_async(ul[lis()]) + assert result == [ + "
    ", + Trace("pre a"), + "
  • ", + "a", + "
  • ", + Trace("pre b"), + "
  • ", + "b", + "
  • ", + Trace("post b"), + "
", + ] + + +def test_awaitable(render_async: RenderFixture, trace: TraceFixture) -> None: + async def hi() -> Element: + trace("in hi()") + return li["hi"] + + result = render_async(ul[hi()]) + assert result == [ + "
    ", + Trace("in hi()"), + "
  • ", + "hi", + "
  • ", + "
", + ] + + +@pytest.mark.filterwarnings(r"ignore:coroutine '.*\.coroutine' was never awaited") +def test_sync_iteration_coroutine() -> None: + async def coroutine() -> None: + return None + + with pytest.raises( + ValueError, + match=( + r" is not a valid child element\. " + r"Use async iteration to retrieve element content: https://htpy.dev/streaming/" + ), + ): + list(ul[coroutine()]) + + +def test_sync_iteration_async_generator() -> None: + async def generator() -> AsyncIterator[None]: + return + yield + + with pytest.raises( + ValueError, + match=( + r" is not a valid child element\. " + r"Use async iteration to retrieve element content: https://htpy.dev/streaming/" + ), + ): + list(ul[generator()]) diff --git a/tests/test_context.py b/tests/test_context.py index 2144fc4..d76d40c 100644 --- a/tests/test_context.py +++ b/tests/test_context.py @@ -1,7 +1,9 @@ from __future__ import annotations +import asyncio import typing as t +import markupsafe import pytest from htpy import Context, Node, div @@ -33,6 +35,28 @@ def test_context_provider(render: RenderFixture) -> None: assert render(result) == ["
", "Hello: c!", "
"] +class Test_provider_outer_api: + """Ensure provider implements __iter__/__aiter__/__str__""" + + def test_iter(self) -> None: + result = letter_ctx.provider("c", lambda: div[display_letter("Hello")]) + assert list(result) == ["
", "Hello: c!", "
"] + + def test_aiter(self) -> None: + provider = letter_ctx.provider("c", lambda: div[display_letter("Hello")]) + + async def run() -> list[str]: + return [chunk async for chunk in provider] + + result = asyncio.run(run(), debug=True) + assert result == ["
", "Hello: c!", "
"] + + def test_str(self) -> None: + result = str(letter_ctx.provider("c", lambda: div[display_letter("Hello")])) + assert result == "
Hello: c!
" + assert isinstance(result, markupsafe.Markup) + + def test_no_default(render: RenderFixture) -> None: with pytest.raises( LookupError, diff --git a/tests/test_element.py b/tests/test_element.py index eac1c85..2579316 100644 --- a/tests/test_element.py +++ b/tests/test_element.py @@ -19,7 +19,7 @@ def test_invalid_element_name() -> None: def test_element_repr() -> None: - assert repr(htpy.div("#a")) == """'>""" + assert repr(htpy.div("#a")) == """...'>""" def test_void_element_repr() -> None: diff --git a/tests/test_starlette.py b/tests/test_starlette.py index 6ca9a3b..ec39229 100644 --- a/tests/test_starlette.py +++ b/tests/test_starlette.py @@ -7,7 +7,8 @@ from starlette.routing import Route from starlette.testclient import TestClient -from htpy import h1 +from htpy import Element, h1, p +from htpy.starlette import HtpyResponse if t.TYPE_CHECKING: from starlette.requests import Request @@ -17,11 +18,25 @@ async def html_response(request: Request) -> HTMLResponse: return HTMLResponse(h1["Hello, HTMLResponse!"]) +async def stuff() -> Element: + return p["stuff"] + + +async def htpy_response(request: Request) -> HtpyResponse: + return HtpyResponse( + ( + h1["Hello, HtpyResponse!"], + stuff(), + ) + ) + + client = TestClient( Starlette( debug=True, routes=[ Route("/html-response", html_response), + Route("/htpy-response", htpy_response), ], ) ) @@ -29,4 +44,10 @@ async def html_response(request: Request) -> HTMLResponse: def test_html_response() -> None: response = client.get("/html-response") - assert response.content == b"

Hello, HTMLResponse!

" + assert response.text == "

Hello, HTMLResponse!

" + + +def test_htpy_response() -> None: + response = client.get("/htpy-response") + assert response.headers["content-type"] == "text/html; charset=utf-8" + assert response.text == "

Hello, HtpyResponse!

stuff

"