From 16af2865e6eda3feb279bfb7013d448d6f6417a7 Mon Sep 17 00:00:00 2001 From: Alexey Bader Date: Mon, 18 Feb 2019 17:46:19 +0300 Subject: [PATCH] [SYCL] Add SYCL compiler and runtime library design document Signed-off-by: Alexey Bader --- sycl/doc/Compiler-HLD.svg | 2695 ++++++++++++++++++ sycl/doc/Multi-source-compilation-flow.png | Bin 0 -> 104470 bytes sycl/doc/SYCL_compiler_and_runtime_design.md | 390 +++ 3 files changed, 3085 insertions(+) create mode 100755 sycl/doc/Compiler-HLD.svg create mode 100644 sycl/doc/Multi-source-compilation-flow.png create mode 100644 sycl/doc/SYCL_compiler_and_runtime_design.md diff --git a/sycl/doc/Compiler-HLD.svg b/sycl/doc/Compiler-HLD.svg new file mode 100755 index 0000000000000..989dcdbf7304c --- /dev/null +++ b/sycl/doc/Compiler-HLD.svg @@ -0,0 +1,2695 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-1 + + + + + + + + + + + + + + + + + + + + + + + + + Data Object + SourceFile.cpp + + Sheet.2 + + + + + + + Sheet.3 + + + + + SourceFile.cpp + + + Dynamic Connector + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task + Compiler driver + + Sheet.5 + + + + + + + Sheet.6 + + Sheet.7 + + + + Sheet.8 + + + + + Sheet.9 + + + + + + + + + + + Sheet.10 + + Sheet.11 + + + + Sheet.12 + + + + Sheet.13 + + + + + + + Sheet.14 + + + + + + + + + + + Sheet.15 + + Sheet.16 + + + + Sheet.17 + + + Sheet.18 + + + Sheet.19 + + Sheet.20 + + + + Sheet.21 + + + + Sheet.22 + + + Sheet.23 + + + Sheet.24 + + + Sheet.25 + + + Sheet.26 + + + + + + + + + Compiler driver + + + Dynamic Connector.51 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task.28 + SYCL device front-end compiler + + Sheet.29 + + + + + + + Sheet.30 + + Sheet.31 + + + + Sheet.32 + + + + + Sheet.33 + + + + + + + + + + + Sheet.34 + + Sheet.35 + + + + Sheet.36 + + + + Sheet.37 + + + + + + + Sheet.38 + + + + + + + + + + + Sheet.39 + + Sheet.40 + + + + Sheet.41 + + + Sheet.42 + + + Sheet.43 + + Sheet.44 + + + + Sheet.45 + + + + Sheet.46 + + + Sheet.47 + + + Sheet.48 + + + Sheet.49 + + + Sheet.50 + + + + + + + + + SYCL device front-end compiler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task.52 + C++ host compiler + + Sheet.53 + + + + + + + Sheet.54 + + Sheet.55 + + + + Sheet.56 + + + + + Sheet.57 + + + + + + + + + + + Sheet.58 + + Sheet.59 + + + + Sheet.60 + + + + Sheet.61 + + + + + + + Sheet.62 + + + + + + + + + + + Sheet.63 + + Sheet.64 + + + + Sheet.65 + + + Sheet.66 + + + Sheet.67 + + Sheet.68 + + + + Sheet.69 + + + + Sheet.70 + + + Sheet.71 + + + Sheet.72 + + + Sheet.73 + + + Sheet.74 + + + + + + + + + C++ host compiler + + + Dynamic Connector.79 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data Object.76 + LLVM IR + + Sheet.77 + + + + + + + Sheet.78 + + + + + LLVM IR + + + Dynamic Connector.127 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task.104 + Target specific LLVM compiler + + Sheet.105 + + + + + + + Sheet.106 + + Sheet.107 + + + + Sheet.108 + + + + + Sheet.109 + + + + + + + + + + + Sheet.110 + + Sheet.111 + + + + Sheet.112 + + + + Sheet.113 + + + + + + + Sheet.114 + + + + + + + + + + + Sheet.115 + + Sheet.116 + + + + Sheet.117 + + + Sheet.118 + + + Sheet.119 + + Sheet.120 + + + + Sheet.121 + + + + Sheet.122 + + + Sheet.123 + + + Sheet.124 + + + Sheet.125 + + + Sheet.126 + + + + + + + + + Target specific LLVM compiler + + + Dynamic Connector.131 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data Object.128 + Target binary + + Sheet.129 + + + + + + + Sheet.130 + + + + + Target binary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task.136 + Offload-bundler + + Sheet.137 + + + + + + + Sheet.138 + + Sheet.139 + + + + Sheet.140 + + + + + Sheet.141 + + + + + + + + + + + Sheet.142 + + Sheet.143 + + + + Sheet.144 + + + + Sheet.145 + + + + + + + Sheet.146 + + + + + + + + + + + Sheet.147 + + Sheet.148 + + + + Sheet.149 + + + Sheet.150 + + + Sheet.151 + + Sheet.152 + + + + Sheet.153 + + + + Sheet.154 + + + Sheet.155 + + + Sheet.156 + + + Sheet.157 + + + Sheet.158 + + + + + + + + + Offload-bundler + + + Dynamic Connector.160 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic Connector.164 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic Connector.168 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data Object.165 + Host object file + + Sheet.166 + + + + + + + Sheet.167 + + + + + Host object file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task.176 + Offload-wrapper + + Sheet.177 + + + + + + + Sheet.178 + + Sheet.179 + + + + Sheet.180 + + + + + Sheet.181 + + + + + + + + + + + Sheet.182 + + Sheet.183 + + + + Sheet.184 + + + + Sheet.185 + + + + + + + Sheet.186 + + + + + + + + + + + Sheet.187 + + Sheet.188 + + + + Sheet.189 + + + Sheet.190 + + + Sheet.191 + + Sheet.192 + + + + Sheet.193 + + + + Sheet.194 + + + Sheet.195 + + + Sheet.196 + + + Sheet.197 + + + Sheet.198 + + + + + + + + + Offload-wrapper + + + Dynamic Connector.204 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data Object.201 + Fat binary file + + Sheet.202 + + + + + + + Sheet.203 + + + + + Fat binary file + + + Dynamic Connector.205 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic Connector.206 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic Connector.211 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.220 + + + + + + + + + + + + Entity 2 + + Sheet.215 + Host code + + + + + + + Host code + + Sheet.216 + Device code + + + + + + + Device code + + + Sheet.219 + Fat object + + + + Fat object + + + Dynamic Connector.221 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.222 + + + + + + + + + + + + Entity 2 + + Sheet.224 + Host code + + + + + + + Host code + + Sheet.225 + Device code + + + + + + + Device code + + + Sheet.226 + Fat object + + + + Fat object + + + Dynamic Connector.227 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data Object.228 + Integration header + + Sheet.229 + + + + + + + Sheet.230 + + + + + Integrationheader + + + Dynamic Connector.231 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic Connector.232 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sycl/doc/Multi-source-compilation-flow.png b/sycl/doc/Multi-source-compilation-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..521a7425cd45c7b3b8a663a155608ae632c9462b GIT binary patch literal 104470 zcmdqJcRbtu`#-AHqD4_FHr3k1sx6A5tzB(V#9oz%-5_Xd6VzR`M@y^P+9R>|svuPw zBSuMs))ssIqW67&zMpe`=l6J=f6w_tWW8Un>wWF(`MR#eni%QPU*^0_K|w)(_s;G6 z6ciWpC@9W9qM;(cqbR?>Oa6Dx_r9JMMd={-FY=2Eu9}9L6ciOnv`6+A$*(VY-Ldqg zpt#a;_IIuaR^&uMar*x5ZOsR8@NyHw9*?=r0$*x9X7!bSgXdI9gTLY-L_((lP$TAM zeT@zJ{@&Lj%}*CXk6-tqI8)!8D=!p@e45PrRO{*JigLdpLbYFUZp`S zEc>k}VxO3{AY;6)7)DaGoM@OiUR4vyNeVk6{68&X{AQ>zkTkC*6p;mMR*vs*Wi}D& z3;da^x0%l2*|^ay!J8N2+>^*7{PD7UBsBQxxq+V`bj3eng#Rs{Ai4y7q={#{)%0d+ zarWH{c-GICAy$ZhO9`iihbI3>w444Ps@*a2x*Q@NSKClspR_VWmtSjFaS9ez(4|GM z^9YWrOPAArfrxat zTX~y7K{7QnHWMqYWk1p8R-hT9CVlFbdljJ<7^62%qb(n7-#+1ErzQx>9cFhPo-E)% zIs>pu?fwGR3?m+IHDloolG0{%i2=do%`x!MtPYQKxygc7@6$ve=)7zHYzLuX>A9^v+?yNVU3>83UUeZoIUaqvF0Fp{WA3m&pTE4L}?b7qiK#! ztA9D?1+@CK>$4?K{KfL+F#wegrd-`SJKrd?8O-sfh#RGz3RH2C^dKm1#i7E~OK7hL!@y)z@y$7&1g0Sh1609?=HPm4Et znZ|Q1XQ$O=j@wnlpL3|&v54RJJs-NgBk-d>P{VqxHr;+z@NZH&ovxiZ z%FfQYjAmZ>aW%JPOYL$I4SHPCxC9e16fPHZTAV3OknM$GM zB9-)<dLf;~MN z`DoCJp7Ga)(+@x0o1*Z3sW)Cf9^w`WFYNk{5%K(?g;AS|ss`CKYoGA&38VZDp)otL z{Y0eAv~!1=N@WD@{c?n~lP;Wu+cP3a0sfu>EFrOOB_ImI*`HHS*^%vj6w}7pwLW%UpV#X{Kk3{O_N;Ie=Q0Y8G4z zlHAXS7wGYRlE0cUFE#%}mt*DxN3aAqKMV}yPo*rvb_WCbohF;|>Se4HCA4|f{cIIN zs7VgWNhn)45t3z0=zpsMH>*Is?A|q3D$tg(RpOF5?aTRDL#xbhr$L?ESx3fLJ z7&~9;D%-&rH3t_*+U=wQRAT5HObuO}~)Cld!KEXg5dJh+*+RA?$X z@0*R5FeD2spY9(~KEAQ`OCo&)_;52Tv5z8zVq+X-Q_%vZ)szZ^Wgxbke9L)S(NdG(JXJRorlJ5x0J zNgGkxWMSnK2zBqB$y|wg{ zJ|6%DIrcFyj-E+IhVEYqsHMYXCPu{+B9yf<-1mMi{)nVyA1pKlXj-$TL|4{I^i_>* z$ItpmBQu1-yP9Lp71JA=sL=U}G5_efkD7K)ct6iF#)8{t61nyr5tYarD3TRGuqjj5 zpzY|@0cw6i@Xx@(+4zBy~hBMH89mr|=X{BQi1t~ek>vJF2Ylim1H5Y3_k_80bj&8gsMxHKh#|!=OG_n|#q5gD zzDs@rYFSBQ$L^oxVp9D%o0o5Vz($E09W!AMC#k<6*z#w{+UjsrA-za7V|@ci(O+*hmKv z^Ly*fs3YFv+cD#iZ4ja8M}(Maa%21*9+Ln>^5@G^Y#%YWi%XWHcTnur6?3kkLJ@pN zZE9XG%o`oL;U}HKmHeox-=Ho9qmDAf$9Yl{EY#nHu>%0w+rf0C;mUr?H*N%;w%afy z{?&cQ85m;yukd3|WS2n_2~F3SeN7Ie4NXQ~J>m6LZ;<~I9qZa_bZrv05gKjJKv{nY zp38%A)s^w?6cSHVjq>Jx%s??iAYApvg+0Gy^*u>b9i>)GOE;MgSEt#;@4>D5V$^9z zp4SslF{1i?h)XGD!wZ?bnWX%p1om=082U3qSp*Gy+ zm9TI8?z_B@O{k>0W~lRd3;;(>p?Nwh><>#$4Sq?{IR#W&fAGS73Y-wM-7^3(wO@ znXD+4wU*Np?3x({1>lq6i-W0qDS5P?ZLxQp; zHe#ctjlCqIy@u|ZjI`Z8k@c-`tAkHfgsN3Y8mgdlFqPrZQ7-mUxaydKH4r>W0R(}0 z9%6QPV)d-4ceymjP(01}V~d(xWv^;E77pwM=ZT$IO~eo=UH<;Sf=1X$V?TeC%u&7V z3TU}RJMTZ57jP?2d^Kqt1UQI9@x_Ba(!a_F2_6I^dny-u(Az%@!hs4rj)DyH;PI`C z;onS~T{*w;-;k$u3{UIaeq+#3DzEhUMI%ZrVkPJr1Rv!hstGO}_DaB1*-O9%%st8{ z;IyPpDzVWUrC1d8x41qX&Q0dBl?>|26%*Ex0U}{r4?phjYSY_;a>_9v;hrz?q%rh; z`!tvHS<^n3!z+?vjmwOey8=VZfLD%P zis&8W*!j7+QgyodI8u1CN-3h=xY9k=P75qfk23aPp)3yOHjhB(1gN{O23_m*AUF~f zq%@+0JUGUTfDC;oUAY+a42JSkwR&si^yb4@jG%=v%2J}(tZ~}f7Tx{4ReI8j~<#S=R_Vdi_x2bWqBUcjo*K&tC5vkw)qc%HsGknLgct!27 zuUvE{BMb=}b6*vq9?zb;E_OvZCY#=+dQX`iF3l~O8%S4cB=1reS{!YU1(Z1KU4`X9 zGVUZ{fG?I@MzP`=g+=rdI`{};<2E`lzJEp&YWxYJ&EXw*9gIzf<4vggHrFSfzu|?c zettnJ{$2H+@k{Gbr@B)|6yu|k`|vS)0o^+v3$)CJ0uGAZW3RZHW_B$Zyinp5axkT? zDx#Zv?`UIZ{kU;kTn13O}yxF>|HBWN8{!fgK*|~Mf5O-L&i0(Sp-x`{0R$4zOTzopwd}EVE z(v}Jd!ZwD>xEkI{hkJt(c_kf8RBowPT)L+{)Gf$IZ;QR76Ph_$QPI0ut2V39B_z^^ zBKoSjIpuR(@s$(ha>_&J^~M8^Ddv_B-byuG;q8T`2^3*)*cIgHsHbB4*dUoTjO=UZ zPhVf6m$Vy0Ueu4V?NzV5sIHZ~)He%?7uElK9_t|x*LpJ(J1?5qwA#UFQ{^(R>LyAD zJijdgdP`pjj&e;}OZ}ZiyuBw53>vz--8F0ZxTwt3B8JKIchQdvL>-r*e4X(Ru6HK< zVuVpmw`8UQ6iVvc(p-gyt)>gB%s4+-&G}hrs0?@q@ld|TOb{hEcE(W+OQj7i!|C8h ziv8f9RXOJoXy-9#{ICdTf524n7;1VGmyJ4%nyY-jej}VkPn95-r0Vtkp)km$uUJcR zxM86e!J9x%$A(~M54_9TL7m6ict!3J#fym2XC`cizx@GD)26uf0uHWtBHcY|dAAY? zZw}nzyTH3cC zi3l#>%4y$E%SLqwPuM=7ENlqz%5ZW5CFzor`DT8N?w9T${f073RcH|=o=t5e-E9x3 zK!Z1M>tDD~&Qx1Ec+l{ZeGb7ZGl!{9`#onWC4<|adz?J+3?=0V)=C0yOgYulzc9th zz9E;semWHeK1X}~w6jvRb}siWL`HM5wF`71roB6mUwls0(Y3z_{OjbBZL(S@Xw(A> zdk-OJjen{y1DT#gdy55REH#1Q7#hjCst@mqJGym-_aErj6`a@h%i8z%zueByvI4F0 z9mw&~V*fbYC3Ar$->98?Y(vUk#8Ua;vL2F1C$nhgsQ2Qb#;J z-p#wBsCFC{VRo_%Yd@;7YBzMv^}WA`!P-nb4tZ}cAOslnHyTg#^%;CB-Z`#3FT-P) zRxSlA-52vxkDvG9V?7d%gsy$6-cE`)4G#i8S;xa$)w` zSy6R%JEe_3`-_jrb)(Pl=R5yqG-uWC`ZLjf(-uZu31%)>q-pK6n`>X{xjq9EK(n7#7w&O=O`Kl@5n zgdklrGY3aI^}T7yQ$m-FSWAjc48C{=4^MeN{8!>*a4%XTFqD+!ORU#@&ecKAru zo)*$n`PxZz2hIw_CDpK6U{54kwby-Ch`f;o<{1o{jViYrKaf6E_GoYH0;XO6n4i13 zZ0@o!*iJ0N4Bp5#Q$l+s&RRDt(b`_>X?~v^dsf9>oG-Yk;I8u6O^xlGoUFo4$8xp4 zSk1yaB=?&8M%DXZk`;pK?t0b(9^9Ij8W0ErmbpgN| z_bh6I?p2zzEZ>hx7J~iNs^*3Ou!aX+&%E3>3i>CVZw-nm=hDe2D%L=cGiLPTCnr$6 zH(`-5Lx=Y~w6^dk;>s7h(p+^p3@SAWIFrM)u3pJgZpYj2`xtj6UkG0mX*Iztckg%?m zX1F9EM30r($%gil+wUdSAsShgfp?;yx7_r zVz8Z+C77w#(a_=qf=Kh^&)Oh z@_u&G(ho^mIZg`_hrfM@qc-P@S$a2k8kFy0wc#JFp`_+h{wtvt(XBs|lF(~?R4Lw3 zk3P0>iF4m_R+i1vG5;~yp&aAOR8ZjUnd>{mYJaTi**9o81Ts9V30Y(}4`GXGtGfNW z(y#(6;H>)$9STqV=y8W#ozOb+%^Bt9MBIlPd2?iWWQ7(}~c2}ykHVD^e%3S_h_^UTi*ILEPr ztNJuc+vs2Ed`(@dg|3)=(|0N!rA&o+GcDVwHqCI}I?OX{d|$q3Me{p!@oIKeLA|+= zoX-QFdKHSL0Iv#O|Io%BRL+#<;$z;T-4RpR^YoRHzpV1crJ^f zP;R~7HgiIu#Wl{%+BLPyYdmNO5jC{(p5d>4R~a!oh|S@w`gqK|88+CzcKznsWxPfm z?313%2Qm~&N1I&*5C|FKnto;IAO2BAVFn&OIL?+qMN)oUk7crtFpPg`*nKaJX z@9Z94E(An6N?-z0B^CIZDWk{?&2#bQsMtp`4OxRy`(1|=*GEH;@6=Z6Jmg51sjB-w z`;l$dltS>}APJ$8l~1X`YyTusJ1JD%m{qj%*g-@=C4)L|5kIGT*cPDtY48WL6y;bn zI^-$7EP5_fIgh=TTjSDbQ;~6^KXKC=l>tnwSZ zVzy)bLLS!A_OraufXD5!sk|-4zz2(d!h6k)`p&|HiyHx!`q}dwiV8fHRA2e$pwY`g z-=5{qRk};d(9i!h6;K9scNvGC^9-XLp15m0>I zMq!rmy&mDEy;u*=jA787q+QtL$;Ni?s_lrLiC$x95samCS67DnXVK3G>J(7Wq?4DR z=0db0ch(@BE1K&{>bV%S`{JF~{?!)dbgI4*iiJhtx-S*n6+7-aTg>~8i#Uk??C@jX zprs|bWy3eJR1=Q2y=1@ukdu#c(Edb|sT?u?>ZXlF;Y}Y2d8fW- zcf;!)%BOL5TFqn9g5K(MzBU|*^q;TIL0!|KJ*e`rO~SUOT07)JEdnJt$}Y|Dpc?y9 zSfS1$RWi?c{5S$7A%?z(uS(1hIS(IXXFcy3HyFNRPfG5m>&SFNsi%6iu=o3Qyy5RA;NTc}e-RiD4? zPApqg?2yjezp9mmWd<)(H!}6KW`1!V_Ox4du_O6TB!~&V{+y1LZ*eAvt&4)!N5Q@Y z$d8F+PIh1P&?;*_2tUx%Hta)M;`xM8Ggn^n_I$r6^wFH^0Po$xvzg08G1qhwIIdEe z2v@y3M56m0J4zcj0I7zK%jvMj;hvM32rdHyfpd*JZ#8M!+=`zxe`~FFxe-IJkBz8l z-I9S_$RbsGceY#S#fB4s*WlPwIaD#jIGbEjNRPC|3~JL?^@7aag{~XZddV8Z~5m4Mum++xb_x5=WWs#>al{#3Vej8+|oH z*o}UjDAgXUM}_A#=%H3*^OVMzM{^V z+WdQEwwT?s7i=O_Pd+sOmJi|}Q%l#3-)?(4@4AnIazsM~i-zYn%KfiG6z5iUdX~a{RswvF&*9^| zrXcDYo4iV)1m7<&9Jv;PxfaZU&(1aZ5SexJ+b@q^ijQ@M@UZ%cc_r&EP_jb;ZZR(S zr`!*PcFKw{IAilP!gf?=6WR+MGq8wxxhnhO8GZ2PU+Y^RG}I3hYqLD-$q+AC0z)MD zR}&orA?#_?F|I00+PTzx2rq^Htg+wUKUYaRwN*OX$iWQCc^A{t0N+j-dO^h#(a&(MWIjII-C8)FXU!&8ipUKlJ5F)-+;McIWi)gTq{)% zkPCvWCIhdI8oo2Z6bPMGa*5nMkS2GrLJQQ)}-ew?#F2@8y|v+Z<8=(Y(v zky6xK_-z|!+`c{TiV`r?!~S&QbSAalsc~naH_oi7fN*$c-qh2yj*g@fO>+#9=)ebv zDL9wJ8q7h_FD~h8#p&z26R91-daTVo*cho9b6dD{2;UHXZ6xWwb|k5u1wws8~Gk( z6;&N_K5J#?xuCDm49s$I+-=SXql{Ti-j_INwXxm1r*N4Q$o1X&>wu=l(`*69*T22D z%qlWd4J6mB!fVb^{xv6x^Yfpl2t$CE$+<3R2+g=4fQoE-1Yx zZdvE{1>kj`_9V5<-dL%Px%Dp?AOpJeF)R3RVs!9sp7ZTlbkhpd7YEazN=o0dWC1Bd z+_pJfM@xlIekUx5OmeaC9 zHM6H}sjT&`k|bx_50*f=FF^y50CHc3&deBsz%x5S0_WJMc3xV)b`9{?;+jKiWcx7d zYTOFm^|y+TQz0*zxJR{502*L&MOoD8$FR^r-@#e)ij9pqx_@ESZ#yn9TSR$#&>`Q8ecTcWc1t51|M8h_b zhl9kde8{RjQX%3OWe2q&qt#`NlVaD%ec|6q#0XFLw^!|k#-W>cXMrKBz9rvB(d#9r z2exS_Y=_1Pp#*0RSiPD)Nz2v`n7S-(tti3yTvUGx1{ElzJWjLzgBhr{!9zP>1GFtq zR~x-Hsum&>T1eM9u=z653DR?x1?+n9WQS-j%}{-EGnrER8)x!mWAj>l>A$|`d!5|S z`x_CzyMCju?Reah?r#a8khloUpId+no5BUZiJB!G{|Dc~-mqt~A zYc;8=$p^x*=Y4BErXgg4&R`vy4D1w*ubSg0dh(T$(%-3c#rxpA3}i)X_FYdF9KZQ~ z&CKfz$GXrhN9QKc`ICH>`sXgVW{EG-36|YeZj=TU&zZ29PaF~C&4kVww7pGZy!=f0 z{>{fGG(%6NiB$6;Y+44Of9V{e27`=&>?|ear$1&Pe)(W2B{2B_@YQ*wE8uJJT8MNK z6QNrgocmDze)+11R)3usL61g8%!~f2mI3uYi{RPkgLNDF;B1D{mo*P0-9v= zf)A051x{a+{A(Gsv|>&QU5C=o z%wEEFcTnwm_oWQ%uzp5tgAcJ!ftDI$W38xfchFw8Ff+skLgfo)32lgLZ) zYXMF+jS!mx!2Zf6u2CmPA)(UF2AXM;>+BnnF`DQ!?~`lKoMw~4@WvoPiA4)}9-LLe zCS{%e0d%f37Tici9nX$R`^NoukL{=D(xSV74YEn@Y5uUohGGQGOl10P>4EMS&PzA1 zdK)C~t2L3sM&1`*h)iFdvDX6y+zjPu^;tLtkPAsYUOAptWO<>e0aD38n`4GLVOdhv z_48F=(m`Bd(=E=?gifk*N#LNqN$60(!ztbotLj{G=f#yDyfI6)j1ID7S$C#X{rvXX zbzqh!Z#u6B6-^EVzqpmQ+?2@GSjTDz!%rE9$(Lj*=w!WnUe6p2%=F_L=o+6f0u`s8 zo^}NGJ5e&{$JNED0VEe{_y`}bg`;U2Bv`UqMap_5VwVabp$I+hO|}xNj5eG1Atuqf z%$EhaIjm3PLYb7xz4 zQ}4Z#wbPS+c!zL%Op+#NA*S^KN45f`19zL+ph49f&0_v9rHRLBf_jNR>vH)AcZ*%s z#pSx{N^$&p;~JZS8h=H{)%`Ae8sM|Wt7ljHh@*tIx(MjfuvHmM{P_3&DWB-g#}D0%b;$Z@03Er^$(tu^Qt7whXk-A_Xo zUkBMNzIj9WU`IUIQbpytzbafS#&i7SONg(5>*WF^ywiYfs2d8BaE0~Ng?Z~PHLM~T zHY8h^xNKezb9%9SbV&uR8}2a)=?xBTeuK^YLg6hP?KnqfxHbDowEPRd^wC}}ZRW|s zisetF2LwHWT<+<@Z0}GHDg8?%mW3t36(O70+N+ZubrX~ky-D};TKOq~*rc45!Irl2 z9lN~{umNxcr`n^jad=%wrmGrd3K_vXb66d>6U!OR`tsRrK|Ow`iQu*Hz|#3*_>_MY z(Fh-(-04)clgZVw>A%*m?T}4Ym)us7sJm2zF-muwk`%_c1DD7qCFe~T>V}r;LqKW7 zE|JAr2q!_h@N?znresD$krvOe&DlozqGYd>u0=le7*}@jEmqLez>wWp?_0eVUL*Cj z@3TJyef8AhHg3<8;98XF!zP`bg%a~%U2C;(0QkIIKe)5)D532EXF#?0l>e-V1yEzo z6eKF1HD7hJw=O50>YW&18_AxxN-m3&GNe%e$B+f1$fYPj>2LLme4o#NRYvHUQx<&( z8Ikkrs{#*AP!^L-F}Aqg$3tj{?8=jbH)!l>4J|$PQi%&&thi1hjRRm<#=oz$N~+(( za9wN(s;84i1X8X&Y*l}H&9WKMZ4#Lr_fd+al>H3bfAS*i3-WjLJp(3IW9W?o!{gi% z#{5yccS5`-qR8oY%7|Hy>DTJDT2=v*8NeZOZ;->cRvPVWMZmGd!Snuwjd%S{+q#m1 z)+u>{$t!O5skZXbRX0DG;Vxo2M|Nu_it77cgdaaDBW_sJn4k@x6cI)-PFoQP;p{l2`Fu!&g z_xdpdx`Osq?GhB|nBpJr`Nvg-vlk9=gS-}p)KKc==yumJUyt2Lk=3&&pWL#j6j+MSr=y#d< zxQq_)33umVE!cuapqnnU#in1IfmFFn{3IRHbXa>4!{GQ6h%30O?u-}htR-W5F`^$l zNP%D8n`2X32*ZaY3xR_#6)>K><-mu+EM%L%)Nei5WKhM{EoI=C-h?YAZn50ykd=Q^ z!QI}=m-S6Pq=bpijS;`OR80G=qERtTUQZV9Z+`-Bst6U~+K8C1%0U%e$xb?1cbw^U zJZk{kaD1t(M#DL3qL$C$qA)DtvD)oUZu2}CS8-s*mvXTr%@N(4X@uZY0p-Nt6#z_w z+%tjkcS+Zvc%#;BKc%+Z>(z@(s)szD;$vGzS=O$Ojqd$a=_KNbZ);ap>gCF8PT~8t z^pL|_nVj#=hCR}K$Ok*7IUX8~!r2W^%y_ScXwH-N&JVLkNg7!A&27YbL9XMOx}-zw zui}rmUqhZJV}`Jd7zs|MoJuJf`Ol7axgAa@Vm=6wl;8rgdt1zsS{Cd&R=tfjO9Cun~S<4h(m) zb#uemlG6D4=0l>KZpSx2PxGH!Th`+{b>S5}c+tOb5}rKx641Y~hAeE3E8J|X_P#KX>nnphc-U5qK zkruR3uhpZ_?<;`YruZsELk^N_WQYHXZ_D$1mH0QsPM1EIRzG;#skN zSAs?;U?p#B)GpU2MbX-lO4Y6(M4a9GmC)bvEWpRy{-_dT0p($A6jmCr<2{>WZV~;UR(Gm1YN#vLrqlrwkM`aRa@(;iuY6^h%3hwzZ8%v|>_o4|ru_8# zBo6AU3_{C*KGh$P`irWx-jnYA9pM-Akl}GE9@Ebu71VETfOqpZn<$}--s3t%ydOTm zIv4XpZcuwHaXP3HQrLqj;4SMXV{k#Dt9maEAob?P0`P*PSm(-QZ1RRdxzY5%bt-aK z7mzAEIa@wL=J6+bRG7~UcY$*1$rXtMnnWvZe12FjVpS1g&o}>=?fck%2Jo!p5MVH5 zTa3s3hUu2K(2s}uPXePLe10bN?-%Q?NePCcDwe3aLagv>-IY4qEcO_^@r_M`0td*k zNh2R4>K6(D0_KC~tFXK%2yLEDd6R@7I2HS#Lc*Dh7Fr77KmPW1N!v!z&k$V28enxR z7PwO3*wHD~)iH&=p9gpq-PoxBh$CW>exezEikp%e!TQHw5|>bi^!$UREu%XM^hAL$ zgT{e~9$F%?V~1VR7*01%2+FQFWLcT7@i0~UArsms`XM_d8rtTEnDEWOO!(nFMSw=T ziL`}1huxoN<|}%J|FnBKww4N#CcS%j0{fZAHqV;G2Iq+i@a-P{vQZQ)XgJFytp=7hup}0Hur_1!>B(W0ajtLJI(3+Ig9HhWI?Za?&r<%?3yU3I z*|Fy#Gs6vNn)52DlScjt!tNS`;TG+cs6C3?>C`l-+G7nOl)+vWFI$R?OscILS1mMx z9bV-VKburb7+-CeRtuDXaFwR1YcfU4mnD881|N0`mWCfD@I&xdW>!LrA7i=QRJ1R? zF~EalVt^CW4$?Rl&sRFYW`xoBqf8&|Eqa5RjTG0G`(~b72H0gSgSzUwme^r=14#-o!%ZRP7x1~x69L=h{^7Nu z)vCJ%XxrpbaSbVUySiFQ6VUFBkCn#BgO0BG%Asnfe-->wQV%{`|B&xn;=P}r^4wfx zZ7z{k3>deUNSpJ}05OF6p#@2ktS=8@hs38P#-k;(Diu9si;iUDQnyiED4rPD;|qa| zwgCkke$3Z)gxo)V+c6;hs2}}Bk$pi=gWyYHp;0E)*`w%g%Hwev{biePe=EE4qpvx% z&zEM1Z~c7PSsBL=+blq`G!T4s@M0t%w8XDwMjbM~SI1Ax=$LzbsnH)5;}Zi%MrnqiEoF%1ub4LRURo3Ev>>us^zS8uYO$#EmZ=3QTbvX5w2& zTB@{%sgs+x7)(;omn}ZPn+j7Utz5{HFCptpERW#X?fEJ9M;R39CMh7U=h^RqkG$kW z?p3kaSPyL!wMAW%`9z1~mWjB)kV|90`rI=#IHsebcTIuEzia#4&o)pJK3~5)5d|s@x6vpoS#FLU9aSyu6T!24 zXPO60rUq~z(EAmoW6kOLOS;w?>znpXwJquvWl(f1RaD;1gEN5g6LXJnqN&^XrLI|E z)8rnbIbUm z=bkk$U>@`Ttd$cYWYnG60rg$B>go8^a`3@&{DayOtNm$PM_?S|@wtLMZ#n{;?f9(L zegXbxdeBnL1kB$JIbxuLYJR%O*e_!r=zWP@{pY)gUv`qxZyXl})x6Gcp;-qhg#iR<12eUx(9KOu$6Qx@$I0=bm83?& z!Yr(L$);+h3Nl`~UZ-(Ns@pe4^w3PccQgbfxU^gnxUI*M zgy_~`80P;$|8lR!a&|Tw#ZB|w24({l zj(ewvNC9fXm9y5m+|>0r*8Ny%r+}4A%OpWP7u==Ysmxi}X*)2&ac@J!dmkKqlhKey z#y-WE@q)G=9z~u?5T(&LLZJr+>-_pI*}M!x&yL&jTNRbbOQ>`t?v#8soz2Mq=5@U= z>vbCJlKJs=Y_!sl6}c96Cz6{b9s>_A0!(QfsSB?h;4h1-@gq)$bJ@<|?#hLhePO@h zS9xl}M<2sZ*Q`p)hP@0M>tdF~D5>^dT$B@nYwb;=Th!I|)MuEReLLta(|^HKPmhWd zyM(vihwWf1*;B`*zd=t%4)l0e&nZ1p`ha58N-^~W(aOAq7y3L*xQu0a9VI9;byhFd z2JUM76d2MwBg~oHR~1ceIm?MIpWYY$ZqAw*w$Lz};@WhLp(YwEdm{oMbmlM%e=riL zS1)pANJRi5bU_QPy(Lc$aBoXDte&=?)FL7X#1dsmmvsZ;Cr;Msa949qMN-C6xJuJj z>GvDpko%eS4k-&wZq#HTBl79Vz3qpuOH1v8zN9cZSp0Y&&Tj3c$$OP>ew7jm!0y@4 z?kP3$o6!uBN6&oY3>*@r67^UFHQM*yCvDI%`}I~dN(z?t6uw0&@pQ`!zXbs1t%Y%{ z;r?R5O1C)satoOxa0aDhrB;Ur+{nQC{-5_B9)XdubT+^%S~dxq;N8^$$4(`apKnKI zf3$_qRu3D!B172`f+Xb+zaxj|!)53Q>{QZv?0CO!yi$4xt`+6J*qP@4)6$%-Zyo9J zLKdUzFGxRM$vF$umBHG!DMYHLyDQpW5E*0Pm;XDz|Z=>x&Pz| zXy#<~bCvU#iZY%rn=Sk7c`Cwu?J;^PZ9aL&U$?6Q4El^w2Q6=|E z0vk!@pUOV@`O}Lp1z#4pjptSkkjVD#=CD6KIVK;*u^uh>aq&{F-mpSJzWhU7qARF} z{Xu3oMV@>Tw2}O40t8ywgeSe6;}n5)YTxFJn$U?9+i3|9DcO<_93DcW-;36H)f(jWWq|nOUB-3_3skF1`l2N zkBNxc*mQg~PB^U8q8YkT8)obCjL#p7ce?brIAyRM!#-o`mN^fFhsj_4UZD{@$}?tAY!;!JfS2<0@H4574kllyck^sR7f@t{j{6&l@7- z86ghNGSUK8<4c52lebFhe!nY7j;s5i>E{jLCF8JzVb_Go|I^_<`BxcMP``4&Agg7| zjdTikt~>rm7s$8p^rzhaV(ZJpp={sxD?9>5`)-URv``6AcCv+#FvB2WNS2B) z#DoyZo^|YN)%C&`(`U2cz7S<3Gaj36YxSVigS7;Gc4h-Zv)6JFh(dA$#t2 z-jQSl*AB{_XRQgLoo-GNU@$EMS($v@anCHm() z)eiF6`K{Ie0P6Xf78=TGV`$YpZ_hDc#mnz(vTO}6--*os>(Z~dFYAGM- z@1h}YN3KB!XgzX82D%^4`@+^b$_!uWF93z0A1^bnCETx_MR^5&eW>MQ%b;mPUs3!-;vA9zr3b11=0x4xjQy;9#KY28a))(>| z*YMh7{d>C{6oZRpS@K?V_&&2T{`#}|d+^dp^qbU3y5UHe&`LxIqP=&9_;dwRMyquF zx&53tx7U#>nfKMFRx#z+DB)w>V89|zVF+{|r#?U3#GeHF!7z0<*!e|*Hqk=CG0u~h z@aoyz$@)Tgldz6F#Sv%_>s#o&>+fRX3 zNWYECq-ME1nv1rCDs$q5miAfSb?js*pBx(yYd z0l>mza+Ptu848@M{>NPe!N(jW;lw8_W2t1_1@ab~+qhcbs;L8R^Z$93!k2M0b{nVq}1rP07MrsEM(shA$)ROF$Hd1wuxay9`Jg4NSWLZnI)*Fz-K zOg!o{uoc4!njry^^A-X0aptkpzclP0y1+n3>|*$01sR{b`lX7$7)G2f^xymq@ccxY z?-AZzX_{fh34)ZDYO}+WD6H|+V~t;z>bw+c^_Y2m<<5Ejd_NBT9P*nVk~t;vijomJ zfz*&7eHQl>8|nzicKEi}12DdvA704z}><#!VM$ zze51iXHBoGMMr5n+I#1-9XkXrw~AZMDKa9*obMy~xd@r%X_4;G}0L z*Mc@{b1r$_gL0fZyyZ;blJt)?wRn+7w~$h&7vjvPt=2{?Iyx`vHO$00rXU%*QV3;a zsmfP48gP1T`0mToS6;rgR{;%slb@D(7sKxZfHjd%)%%{O{!`);#aAA(Xwlw3YjWHf zYVgbg0srRP=|JLLSTepIb5N)?`sVM*Nt0mRW0HLBh~H1w{B!r;B~;JU&9gH%eUEg$ z9=2QK$DG|Ei-w=4R)C%;a2_Af7?+Rn825_ALR7Ie#@ePY$>LYQ>x?;3+Utu`7sK(C zcllsijs)i%FDNasjFjneQjGuLucI_`ry$Xw?c^P{VZY@#q|nx@*9MMpbV3I?#7))D zMgAiFK1a>AG0d_==iG}ZHg(8dPgln%eQx#BcF!AdQk)l2KNs(ybL2^W7ojXN5%!j9 z`c`9M|t<{xK*kU*6!zIFs`fU#tdRzyQYoVBvWP=;sGf%xOz=ZDto@_ z3Hj&V9w)G@GX&0(r@r3U<}V*-2kcO}3msh!(d@eLsW%RJCnet~Qw4b_q6JmI9GqeY z)5>2JEJm)3z1PFwP8*4S^X!HuM&0jmFhg5iz;PdTXKMP$ise`Rp#6f(I5m8^gnQC& z$kB1@NZ69NfLBvwS!+r6L@3$p_&hC`%fBZTC^cRZA}ZOk{-m;!Slr-|^)5yz#1Yv= zh`v)7;BQjx?Mg|b-9%E!2;e&f9*lb3;OA-FcRQJnIeLat1s)ax*I8Ya>g-ZG?|uCtZSuZDY5?H5#Mxekf&6lc&BLBhLvKGTwh zycLdK7nG1Sa>ad28K@aG%>iZs8tqfXof7?T3ZxxoI$l{f zA(`Ng5YbuO5y2$TE3+NUyCeIX+n9>PbVSol?Yep^fqDLQbIXXs*JmwUr}@sZ2106<8VZoK{LowP=G0ey z4%yujQ8BiHCZKwnozYibQM4pDnL++Wm!0B$S7|SUYmEX9-gaImn`71EkHM_39yf3U z?nyE36p4$40DJ5Jea~*C`;aU{8j?+Ux;81wq?2Q1={Yfd#x%ivt?v$4o>jeKiVwQa zQ?T%M@vHE-$3r5|1P}i%zMRB6GdbQiLwS?mW4rD-KXoy`QHF5Onexosw~LhM$-}w+ z@&4CbP!>L|@moUzfeL&YG4mfIsGNMl&*jJ?F=aei(`0xx=h3@5@9JiK<+xggg^AKnj`j}1TI;;0`+9Dh zMP|NKd(-IixXU>Cs*$JYdSuFMzo0mZyIj{{(&Hww$ zYZ9L#uS;8q-z^oHAFY&SiIUXYRJwRX0M*M^V%6}(eX>3XEZgDno44XFf@n{>)ZqD2 zYq|o8>NQ%PO}=DZcd+a5Sj$9jS{A#P0`PzFUk!nIk4c5vrhS4lPQyEr-$j#0FS#BQ z5PE&_elLL~HBRBOsGPqPX;=poP5b*JlxV=|$shpArkJA{cu+eC6oF2S3{Sx0Kh_CR#5_J!Q_nh zI_*ON?cwWGl;Y-go^;_v9sWq-U<%!RD#BM>`cFIUOi}ym>!-? zS*owLH?gj9XL?*QF2Xhit8o(Pcd_TLr831=_q0y|3Adw5Rs?DJsX+i1h%gC4M?4V-lHz}f_kK|DGWuakQY0hGd zn)#-LBvUPal1oyO3o8_#3qHzZgX3`LiVwDPTz(U&6zBqhd$3~19-Qs`IHCzKn8*dI zyQqD@#~?x_IftOO?+Nqs9T6=A`0=SNQV-4qV);RzF$gg46QX)O;ttQRB1eu{2A|A3 zo1efaD+zV26}!*2q*MtC2KcO%)dkN=_9SQ`9C&))ZRK4B**Ld~Uy6<033XzKX+EB& z6oCo_-U<-%w?h4=&^tw&IYYPBK*{op3-e1rvXU+1uu!V>N~PpKXX3~M*tK|Zz|VU< z$pp>>V-q54=vZ=FkyX}#URY+IO*cP2rkg*hS}N8R(#;ncSxRg+RZnV@YZ7GTF|^?A zKG_?YKGZEWA|he?9DJ)=Qs|37x9x5Rd!b#cL95b<-`E<+NN@ShL}z36M0w@S|1pg< z_Jd0pp3|=bjd~hRWpFU&a?G@0g_H4I9jPyRoN2IWjw!kCK>Vhz+So2fZt`#4Pkqmc z>Rn(EO7IwKT%C=cQwWuu_~<9n`tbPvXQntna9q}NgCBtRJJhursf^yd_|GO!YL`Fy z`Gvv|rTC&osV)c3^T8_(?lfAhEKGK)PdMR0@<_oXsZ=`ZX_fG(46DmjrYDv=!f}pf ze)cL+8A|gXJSiLMc5Ag2O%CcZ37D9jpbOm1Qvbw=lN|LXJ@tnfEBUV996yzj@$Zp$ zn_xWF!?l&jX0T@V#GSc~ARSQJSlKm~ct*ju;f=3`8Eq)6-W`?JS8P;|s z_m<;^75?K5^ds`_dV~8|XQ}|ydv&953IAcrIgA-^s*t+x_f%p0mKc}^|FI?-&j)Dl zVJ85g5o>SU{U;nyd+L5LDLTdS)C0sy_Dm^85*It_JbP5^DO~Hdm?-YtJaN{7XB;|k zyC5+;_w5cV3+^jk+4Mg^Aymr{C>x`5AYcyN8kk!CpWxtsTX+dGrOt~X1wME0@g+z{ zI&2DY%u*HgG0=SNT#5LSdp)zkmEikohVQKcF*??8-#ei_zB+Sk&&~TH$?=<3a(;VX zkVxI5GM6_m@X2N!M2`|51N1+(*}kzl*R%(O{Bcq;=uRM4!C)ww;kXUyyPWIH>-E&w z5>1^!<~x@f%O#86tUf>0x4A|z9aR6%iTiDfa*u8y@I_6fJ6}Nooy20LKm?-piN@-R znVSm16XL}}8mvKHpyVexSJQq54^7nKzbyCc61JAJ2wTrbZf6|J?y28cfG^2UeOB`$ z$uBDI1!CcYj7R$GUg$J|xsIkPuep_*>W+T{0V`*()SH&|2A-=Cw-Q5~6kVX<11Qi!LOLZp&_v$jw?~Z_NBM!9Q;E zYIE*2OoPN-izUZmEnd}ZxtZY|7N6`z{MZ9o0ZOXt&+xm#^(mv|98gp^|z49QP_UE(XMbf;Z)#rG3 z@kNLaXJh|kmD}dRW-RMMEcMDqG|L_Dt(>$buS2xq;X?0XXk@}kGO07oc-iJvJd0;V zS&+7!76xJ9q})p)0C;FflELF(M=mJ z6Atcg>zBU8Ukj$6>!}dq7M9YfEp>4Co#4jVZ;HhzB@a$_kW%Bh8pk)}kM7t<_jO6t zyTLn=F2AN;(6W4YmNoxRM#V>aOP*L|yvBX#<5Qp4Z^aI)C9Xc(-_gb*+qPnkiG_)Y ziJwy&tw<)G#*SC#NH+s-g6{!j%~3%RBl4@RkCz*TWQ?mll_q@ngg{ZPlbI7ChOVzoGB^#1mYV4wUm4oT*ba<^X1Z4G~3!79pzh?^8% zsLPKQ-OGrr0Te0@UjhFY?8E@ zZ)i&bUQiM%o0m!tzh72b9WZE0)9hD1+%Kh!Sa(lU4-8P4#<+oc;F2Q90$H~{>L`{I zL4|b=idiCWHMno}IZ_CL>PZ3w0;H3}3sU!D7FC z%1fO=u=#YcO-n?f2d))zdYHz*)ykJmx2A9Z86bhD#{0Iu?zMqTF|~9g^=b(&`D-($FtwAhg^TYe0-aB^mZ}pU0^%s{*4lkGexBeETgKhVgB5LX_^r>ucj_+h z8O_sCFRc00ul^fLGl*vY1Cm_Loiv*f8%h@+fdVf2Tam4fN%6faptPp}%jZ4JB$;wG zjfqsrP$&UpZG0xsZS>M9;EWx;9%QGVxN%@~ZPK`8g?NYhONH48to0qGMCUhtzD+DW z5`{>$*vnCL#r#uG*o;>GNPpG{PTI=N-M^>oC=g;~`qPo4JP!d|!^6w2rh!uf=7sP@ z7j@5SrRaqiSlx+pV4e02b_x*ZTy?Qz#ww&ri+L4L3>L_nwz3EiWen+krRF&HgVZbY zYVS~x-6C;qF$C%K^F6?O&s$FVYyCMJI+F>8U1!hiZQVU6zy($w>@OS9HfBVQ@q=hx|M0}M?>UG#%Iyr3pj)2ei2)g@N}k*6~zNzg_l5rhUXn z#Xk1*qan|7KVm$}uiM#hU#uj6#%~A}Eptf!b=41RB**s@zoDB#W(@WkEAT3iy@BQk znBxKuWLS`8+N($afm?d#kEO{QjWlP8d`D&9l5KGv1vtjbT=rj9gOdB^r6P4zT8B7Z z<459r(P3n4ep~{x+z1)4+&ie?5WPJ-p)QH}LD(wwi0>jafHJj&6?bEQ$8Q^a)N_fr zm{Ej333>jKCN4?2^FkIh_mjV|heAk(_p>UZMovSu*BeK3PlDI|cTq|U0l?h>f{_$O3J)(YQ90W%4oVkUekmK*KC-C^a+wH7ej zs@w_YioQ-!im$(GmX#_X{*3z`BpAl^&eg_%eWlAF2Q{tmAasA#L{V~Gtwyo%_;tu4`%*m{Jpxm0P_ z^YBP;MhqWw@8;99)1u-GR=0qlVzdn1>_>ZS)w5h#dYEJ3{E5>E|a1*|!SY#A=@rh4);% zT#@hUY~dc3mir_@A=P&_htl?k>(=S-XB+cBI@cCHtvsZUI%WO#A#Yob%(Rp8$)wIA zC#InngX2ISMh5-9iIP}R#z@xx*)z7!&jjB7F|o}&FM-W47gOTTOw+NIOcZ(X{r3+U z`+KOg!lmxg>=aJ*d%f&GUPdlRzn616QvY+hisA&qbFbw%s}4}pJ|-D7-z!veaEPel z0c}N7&!mhT>+1=qK~XPohs6HYm0Cmn@JKnx(@%RVHC`efL0YkqyZ`!j*4`Vb;zv#} zO^LaqNCnkuqucG+CR|%xY<7tIg!+y_#kwXMW#FCX1n_>BSEyd^T&DN`9O&tLWe>)< zAJlFChR6k&`Too#mwUrW3zm1 z0=73Gr*j|oP0tOg5qpWX8361U1MS44I#3R-mf-IwY@!4eEF($!11&KN$9eh`sZxcK z9vw#YZYLxn{w78gC|l{_BmCF_N@vi8`G*Nn=H{LQ;v+S&!X}+#s)72CePWYT+R@gt zD@~F1ud`L~p2igS2QaF(6AeDRb*$NA2V~IM36y+O33V>N;uNov`$?840RR(A`Et~( z;!5x`4L(UtzxgZhOKWx>MjAu!f>#d|NW^!RvW#uIpLpHg>>nTPlFE=yugpEFCyVk_^}HID?gUAU-U5l#f6m!rUGw)nyIHz(!YCAm%I*9r zsGuddlqi6_fFjR7ZC#1l6!7j(13MyJC##1))nmCm7#kma%Mk}qHd%nOJ*OmtoVZo{NGow%6%g$kBbXDM@bIRy@ohdyW1Jq{c5f;W$=WR$rFWn$#dnOw zzthTvS?}2Vk`C{-J|N5KA@}xuqg{{R+F99y&X+PQ0%*aiSb-#ND))VUhh}CpL3Mysp&!4(kAfGYk!cc@P40E`Q4HEX@lB?((%%G#Ng@(B$zp%|% zMZA1<&KRHe=}i={>}j9|m~ezfR{M-86{t}n%bES9sEXmb-TrIYLfdoqQa=u1S zpu?M&*~|7wTQQBW2UTI2@)$(kCu0vKbwjX3zHiRdq~Vncf0I;Vg~CZjX-kUd1{HUj zR3lfLoY8CSU7dG)?L-bm6BOm}&uok~*TMwnL_h z?MdAx;}UGaa^h@mnh={2F^S%2-QR^m83y&mb_U+{iLD?XsHAH1M68Tm~_95NO1(MhZ%Gi7IL52;*g`BO(j;saGNY z0tb``JN)pud;S35M_vFfQ3)j|Z)+WI0$b{KpOw2^F1fSI0f~bpmtXeaDc`G|LlyYD zFbc7NGe}9Xr4zp0EJJ#_d>a1BU5%ixNyQAQ-e=SmB9Ozz4q);wjL>afIhgDjF0=eEmRDFIIg38f?luwKi)c2A2dRZtcIJNq~1!4B{h3i#BYD((`J3+)a(lZ zci;>w8xRw`;=1b^G}oi;UTDvDeYpDSL)%GfwIJ;6n+dShD^B+>>O07;VjS-1eN`wD zrH8vZg_5WUeq8_{HKTQRt#`ER)&1S<9OSbd!E{ejk|f33<~P&&PkLKQ1V|;y(9(!f zQiaD(Jz{?@A80*4EEj>4j2u@wuMlHxBFiM~3YiHtKM~Pwd;PtJdEjBz4g~V?_A}*6 zwnMeBXMqj`5hqS){pN_u$^m>PoGrPQ7anz^Co}SfD(yL_@`MZ%Uvrv8^H=FN&jvFh z9P^Gx9b4LCjOzW1#tDOHQE*<=&tga*%6%ND+T*s`ybgFB?`~UsI@jeKah&O%g((Kp z)#T2*^or-7vg31WFzTO^FQ~2aRa7qGTd9*l1t?Z$;Go0%HB!G_D&fP_v*kV^7Q3H`8AGx_hYkQ+z6WQKbUkva6OUYEz$iW? zFBt@i-;b@i&!=iI1h>`dKFcbUf9(QkvOq zHZzCr4=nMg%J_Ju#dDyQxHUhF(B{sU_lk6QH^0GVNl3(61Y=ywh{V;7e@cb_J?D%u zuYGI=7fl_DaYq*N7LxLPvn1!Z?tQ7J zF4lg2JQ5@w@#Xw>PlAvu2L}}uhCb}KUjF*;ba!*Ew|^7r;g=BwR24KOhSEk-PJE8wrOz-WKsiF-pyH z;U5i!JLKk*b*+^-yIv1d)z2fP7or~IgW1o@W#lnupv&gG_~or=Fx+~u9#e#8?dEZ| z=*JX+Pq(hP94sP}1%c1$pWaESyT9|lp6#7jbElzsKJ%Xw?HNK~$UiIPrhLQq6)F4j zn;*OcvRQ~vO`2$z9r2Su;{m{YA!(0bA~lEV@g+nBw-@^rhcaLyk>YH!J|XbLn}_{) zr@j>~iPTG5u5MF#MKgtyUAIN|-TE&M-7t4R+M$%T6khG|bGN?>9<*v-ny6C;Glzd; z(VZkARBtTkuNf9e_PxJPZ$P~4j+XQv1xlso7z)(T+wf7mqfAf{8jbjX0?&WpGI==jX-4AEaQ|(o-7N%Fb*~>kW zo7;{=pLvXPq;!oRz1E;){QE{)#V%4UY<*8X-)H@Mot66pPR`&rt?>=H*!SZGiFLE` zA208_vj9&pZg@|~M@yDcgI-r%D2=s~_-_le_})m~3EQbGKZA*@3PE6Q>+K>swAWy{~@* zY3>oLf&2P*lPSo=$IJm;5Gt=ABHf3Xy2!lQOtRVjYFa(scTN@WCDmo(s+z*o2q z^izP40D992YP$S9f_7d*=qd4nE0a*POV$;aP+E&P28b*tOK-g_eIdVv8c|a&{v*rW zdUS<~u*Z<^P2d>LR-Fb)pg{^Y$-%jjHMyrsSqigsj64LG?s7aXYbM?+&uqVW$YX@+ zfg+S{P%yyhwYl)CKS|L$4R&*%;r$r5k7G^ShOFhwJU?r}ymx*^ZX^28HTmvI=;Apz zUr_p-9}2e1{piMw*YS~qM2iU5MtKJ8g=+tCuSAb`{o`lhZluAwy009h83s0sk)lhj(~2gE1vrx z87`odIVBcqJE4;5#Oh%##W^qHp2#UDIh#n-TG5RWOFwvsYUo<|Arpu2ET+K}}gZzz8zhNDm{Tig&!S2`K*N`wNqXWBb12}Eo$!&>`GZI>sy z38$u#ZqE1`Xw}QQb%x9tew~4tuMTox-5)!1-~bdAnNcA@WNH56FQ@?X7cgQpe=hq@ zAUApH;Ll&?X2Hx2Hs?J22rM#v2>AmEMs0odXrCgB~L~FQOv_*a~FL5wIID+r+ z5eSK^d9|5$Fvl#;9@a^$C?8R6=S^_XHo@7j%jR3_F&G#ZTnZ8IhQe zy}J*^=|~Jl&FQ`p*oK+6WG65ia7&rlgMU?NZE+&57XI0Et78)8RdOtuO>_P{v#Owm zW6DMcY+Smbs^9!VNT+d&Olkt+B0yp0Z63(zFY8c@Kh_3HLKXpe=P-&uzzz7JtZb1` z84`*Ztn0X0D9U6h`fa<~ojliw=UH-RI#W<KyMK=S{P4$fl=Oc8$bUY4K(j8YvUIccBi14rbOj!DP^x+$l6%cl z&IvDjJoz&a_Rj==F)QNlcfvNYvT@T@QpFq@3yzOXW)lUqxbM9*@raYr6;!J%*hToKO)KO-@#%(9B%{YP#XVAmucpm6%wvo(cGt-j+2{Sg zjx_c3BBXnzgIx_QV&^*@)4mnDp1S!+EzJ>vC8tGkKQfOhZ~3zTg#v)!+(u~{=~w9$ zVSi;MQF||ra#1?|5IHq*%UTG9L&c&eVFwbyOF*h5Q@IMiR;SLBaz|_3R7#@Vs1zta z$lAWm?J@r-D(m$A2%bfILto0w0ylBzluF>|7h|baVGO%pFtqr(qrM!@8JvQ(* zVO=4&iHqwRAqGv~e629`>*3uNoXiJkLb}oE8p3p1xXRgyo)2K*aIOsDBtMVfFG-J` zkFT-RvV~l6fjVpqC4`j(Y%)zsJNfeNFn7Qcq)isv{I z0>_ie?SvLk6Im@Pg!FTb@q9k^y9bIkA7ddrv@J+iHsFToLY#TCTI;I@z(!1aeNC33 zvKeCZ!%h`Dd+Ku!k2=p;({CTwEk6~)sgCb<-l~?5p5At0$Gnk-t^a zWd_|f4mh**`=w{&8Fiun4^M~JK&yO+`c+@29N$?6g$km%nC!dm9b%Wm4r@ZnHDRdH zn=S<2OL~>NbEZZGwq1rbSW+?bc9powLrX$M?AigoshY!U4{as)$qW2fn^Y$ZL%TtnN#BCRo9G_lR_VbB4MtJjVs6%Ay!Z+h>lKR-Oo{C>9%dwIOCwm#o zUtO|INdh|wiwZ2JuJbyHy{|{A&ohxykYFkeo=<{$7@+0++$Y<<*A zh#Ox|AC&c`uu2_^fg13&Mhe^I^S%FC$%nw7fyuJlTBzF=wP&hN8ox>@Zkqj={NTtg zeqyJ3xr}8YDXQraH7q>m)D{z0pjtMj?tIguR?Adkf+uS>_UP=dvI5=pWSIoZt>X8^ zUI)gvQlHDGJf*}xNrp%^zb<_sMd;pB1pjKe^k{75%TY9QFi-Z9Cf!I=4n%4L1xKkXATbphPL9R}-C<`q;pp=y z?t^napt9@!Lf2?FXYS2weOfL{rd~e7u_~A%m*TSfy%tmU2}R=4CI!}h4|K>tp?9zK zGM@{47*y?wJM|EZai%_6n3Shl6Lk|<2^0H%*h3{6ZMwL1F()FrNWfpeB`h5#1Mf*yEYHYy zJ@fD8VV(KiT24k6Hhn_JCX|q&thkn9yUxZ{EG3DWR31kP(_tPhV@N&V;*;(thZ!0d z$ErzSb2hL2bA;3UkxT(sKqJ_d|9-ST>l5YRN)aa&HV{z{L!NuU^8|ukSaoXO?Q2Tj z&o|}+!j^^FH+)9pP}ukii9`loBJJX4TVRJSXA;YLWI|4cOmI_Hf_1_f58go@ZAK_v z**X5N-CIS{-&>fjmS|f<%tPun3Cs9USVD)oX168RfM4POjnh=6F} zgY|2wgM!e2BLSr)ol_gMvTUTeyAa!7b#?23cG?maSsdj*mD;Z-_t9ny860003K|Qm zu%86i$~hxHQ8k$HQ?E34YA9v7BN{mI9{d8b((O$%M5^!>XsO0COK&>`NqA&AI&&lU z&~Hs+N^=c!=i_~&iuvNsm7Cm9zI?rBQb^)@}`>avd)tSRE*6H>yr(#>ZpUjFKcD@hCd!hhgJnXs?>}t@a8b4eB zN5N4TE5CAr4!^=+H6rT7jj4K=WK5Zeq*(o2Ly|Vi34q8}jQ1_QqYBT>2PA z-EMbquK*jf`tK-+okXhi{ngp*?Pp!1EevY`KaCUYk&<0bn7E})3-aJ{+(*R<*9pVy zJU>e%*VQcd!QIWaDTly0t)XkXtxm&{S-FRH$ie;}e03iS7q z7TQ=tj>i0gp|05CTBEGVD>HCMnY{^!%7=FRNq}X|Kxvm{Dsz{SF;4wig%rZ&05dE$ z;Kff}m$UEkZvla~qEsV+K}=ZBm3YMtpU>fA60Z(rg#@AG9NE*1(Q#Q>FhbS#brM-! z;=Dr2)AOD2N0T3y**fELa;?6LX`^g55@aB@rTJDjcXwj8!wPMPF(DJ%mDynvTcHm2 z_QZm%70FPC^P3A7x3>x;dsp;Le%leYtk#=K2-T~)FLNJn9%LK|!ZH$+h#^NED|+h@ zzjY5#5=%G`CGgtyV8^A@?PK%Cd#&+qkf)7&lq2;M&v3pAo$k zsbXMNBRS+Fr|s=kHN0N!v+2`3U&_(y4a}c68!xG-GRBECDp=QS<$j zE5<35tGB9U2|U4;wQe!hX5xu0gO8$vq`NS3XnpUaBIgv|fV#F{nT9C!ap9pIcNQ7r zjLmmR&C|D{d>8<~yib$JbPZNHjUvPMlYZ<5ug{SjY2SZ;mGYNCyiqjHqvGT6T@UbY|orSl&v^J|F`%C%mFVjfYDzl9%bij zqA7@rE4L*Y8~^!_<$cU2bIHsXHKaoWc{?|C&48Z}$w_g4Xl|H7O=gzeU7R z6-f6VEt`J02lF_j?n74JaP*Bu^5L~Hh>8-oOGK5<^< z-^~yg&NF_XXXv?NzLnM+vbjSICIAfdXWvP3;j5IOEBTR41~|MOr&6;QV-L z23?R`44Rysrb3C}!Xm3-8TBs53rz_~DeOV=9hyrxPVIv8+3&^yJRfhHBF=$6qB;1O zCj8lmBZVsugdhwso?`(8!RHwon~eE9D)*=Ye&1dtiGubiU~`3p2`zCpI?8Uc&WM7p zJT5~FkUkjJd?G>|sg_h!&)=sXFDe1WG{g|S{B&j|)(i0G2wu zzXkF!Q`-vSN%ra&4kSHE+E>W$NXEkKI}hQ~4rG z@)F|BO$z*SVsVL`u8(HitL*7);e*a@&v-S@uXa-#Ba4hIK-yQ&%~X#vs3jvL{c8Pn zmSC7@QwJV_H?)m~5@d(!0s|E`;I}M#6rJpSjX*P*s!47UclGB*zv~P#Xd!D~`ko@Q zX5d=5r@XoeRdX_oB>3j!RQj*B!$da?F$YbPbTWCGv(t78h>DeN9?mI9-{nmA= zv{Rk;gc*6wy3bTS6(z%A7N}$2Ve+AtoH`GClQf+&_uG%p<&NHff<;@~Uz^$E+5`S| z6~1oj5}ME~&zL2XZ=C#lRG@5Z^X9khS8a_A1x#&k{%5W98ZOY3&u^wDGpE!|Em-$* z@H55)&OOapsIN%wJ!hQHXl(9f#Gf1EV=>}$+v+4sYMRvmP$k-oW~d&0TLJ=nAqe!4 z0XHdg2F6tKo_IS1WG?J$tNI_Xb2TT@CVlg=Q8O9G zmrsW~ZOSytFf}1s3zjl!MMti)hLEKWs$7c{B3?_{V@~5fw2x*&sLI7_@^ABc>9kl z4ol-T)>Dn4L(lj(yLwVoOBNEffnkA$yg9($t$=H`%XnUsBMA{q8GwU3?iKxh0!o;+ zVhUb1JnCV4?fU0yYXcw2h~>$Kd1FINy;a<|>#WV93hQ%_fRD64<{fC zJiG@jKZojN(@lBN%jprR#91Cm>&;#y|Co!m?_Dc9xOB6#QD%@ai_Ey3f|QR>BQj3+ zb(THg><5?1`zkO^DEl8NYmqR{%I|jAnhp4LCgFQppS7w6EB=x24-pT3$0aRpQQgK; z9*Z4z5|^Y{DO@zty9LwDnDELPhasnTQiJEeH?Y`Db7>ZcN=#vaa7PEcM+-s!_+sFO zTIbebEY<#4DocOy*n|@dhTWz{|Fr%ACy40AwDlZGPH@|qo*Flw_+ubVjjAk}Q#sBU zm63td$-NX3nSFTHbPD!1Ec(e6ogtr@<|LZW;~A+o#i9-=Ublg_;Ralu9+56WTkT4S zB|hkpTP5@|o9>8&sfi_%XrZagHWNonm8qsvblwo zqL##FzaUyCVwR5~DKw!NF1|9hOCHf6=HVgsM9Y>p?8xm#jm`8rlN?E2mrlg*NXtQM zf@?mw3*C%`vrl21ZF$goZ*=SR$7M+K2P3b*jNi-TkGgUf8!fz{u|!uRBmHlG6 z@7UU!kYs$W%m$RX2WC5(zzAt_5U(g>hvcMtB=|(Fe^l1Z<(|1y)>RiHk>$y%;_pNTSRLo8mT zSfE{w%&8aKUfDr~t!o+=I9R4F{?npk6butkQ1jqsMx5fkQ6qicWvt4}CDm{4;gDTID1#(M zibYQV3~9X}kLKS4+X8&0b!Sqqh3|_z@_c6YyK5x)YkXaC%E@!ijA>2ZXRc5Z2xEK>$1BBC!Sb8%Mr60K7_byka!;~F>kHswn>3}__L13&pDcDWa8J#c#t2v+h9D# zT1|&Y$VF9zoUE^OF>GccKtVQ;_yn4GMoJH}>YUy$vFom|!MggUMp>Pt)N4I_{O@89 z9nCSCe7GM3#;hGb2XD5x`A^JurYxtBYd~WiG`eH5AG2%?QXhaNXkd8bE^>gW6?fM* zFFHx#mH`fsZJcBa;B4~hWXn%$58gZwKjQbp8TCoc^-pq!4E5nZ#^bYtEO)>jOZ*Hn z54p`3omoDDW;k$>!WC9*MwgYA-*Ss@e6ih|eBvxXNQZ?_EL|}fyykYzRVr|2%l-Rh zV%@_|P_B$x=00&ax4D$;bT9)cJ&age9E0lynt*Cd!O`U|@E$;e!TSse{sjD(pWo%M zHO64@AhL792d4QnR5|tO+Dk@}Q0t^#T<$5^N=fdsR*m&wM`?lD?{B-uk;Q(0MhW3)c_ zwJ$b(2<;)M#3R~7Yd;J|fw}&%M#|^|#BF(D3hB+yOhfLFl)vF?ZK|qn0Ye>Y=(9)v z@s&>#kOHNS7yN$4ikPuz40%N^JaL9-hiL}K2UWGcFVQn{N;YX{$Q^IG^_3>ENzrSz zY5jG+EtE?2aGRV*w>&n4B6N`!;J&^*H6KPF8IQj0BEUP*V%9o@2p~y9Iy2h=ZpNe`4vu;R{UJKzOMcM)wUa695A6rU z4MzTaJ)Vlc*lBp0P1~hkAK@i1iki6gEYzz>rP1UG>WNaGVx!dUJP(U|&^BS!xq=m+ z?Y~^(A=O&PW0N{DN=%f2aLU*TB}-*uSc06k;0_5idTf2YLHcSYXP!~QPws*q1^J(N zQY9fZ8A4m+W5MxsjTiCoW=xHu9vc8(J83MfS#Mib{2q2Lv9(L01P`U;-txN5+2tPz ziwpu=v1bR5+RK3(C5||LCoO~AfQFlcME0udiy}wzNLt(lv-n+*CftGj@$?dKs}0Nl zje5b&VT-~U=s9SGY#j)F_A=o*%KcXL@9dMYvgn$lFAij6wYGP57^tkcb_#DB+0E&{&Fy?d2@6-9c)lMVm;RhJY}FEReCYBh zJBCzsc@R-Hfr7faj8;fHZ`Kw9A;`T9R4%0*A>j~*FVQ*v{}}tqxG2A_YZav=MWjm% zQ0cBgL_$ST5kVv+1_Y!eMuw7<6hS&v6cCW^Zjc)37AM2cbBy1V=I^Ecb3;Z2^gdG# ze38K=Ag=McU>!43DLV>66tw-Rf$Jk>aNPWk1DDksnC+MEz=V$@aKn;qs z_|rd8?rzz`NIXa9$-#XTV(K-3+Si8G0cCY97P|xja0_MFHn#DHisFew$r&5`udZxH1E=NGk;q^dDf-dD(}A{mjE3J z#F2WxI72xk*O7bgWa`~P1i*#s;i|10e}VVofHg*o zEY0HK^3Qh@q>}mU^f~bemsVub**X`$pA-dzepEbz{?l!Z^g}UD8V0Hn^c@cw`JH^&_AXJy$vz)+vxU10@I}FS zG-~%c$JzV59kEFyhVVUBy;NRA$2lXvo9>3MY0;HFa>Tfskwnto+op`Y! z^(hg>acKy8ephaRF#4dER9P+=P%4Ibe%P4-^_Q3R3AiSrPWkHvGO3l$imZ-z7=m4Y!8@h8>?|}5-KKc8=^9;M*DO$>uDgpTlC_d5g z+Vo2BV6a*JrngZC9?e2+L6fUioZX@&X5sM3BPgFEnjJ~t^#5e=5OWfQ9qS6C`ZW+p zD;7r~h?2y-hZ2g$TPdDm&WJ@GZ-memBX`20nAf1P>mn}r_CSMeIPtxi7uWytjTZM< z7RD+h65Q5@5$Wvf$Y&WACj=%qoQ*dCRj8FX^tR0UxY;t|iJzT#a*f*p&Z^IWRRE8W z1%6Pe9w^$mut(v74V-b8m!}&1@iG6)34bvBRvVL7o2yV6&GBckfQvoRN*J_fEFtx_ z6HK-U)utn!Fd{dSvpB}ZQQ}L8kr21_gco~WGE@J9cmCVagCMltF<3NFOZLQp!*8@y z*-bhFZD^?V{qJ1oVazjcWirp`5lg28fxju=$-*mTsUpCYVyTm6srh zF3rXryaBAAtoF$iM9SuZb~dLKbOkCs9$roIf)H^s9?$7C#om0$;O_-lW$%Y#$(cxv zHy!G(p^B0lRlJFu)eC2mNs|E`)gda;4C1jJP(wxa4IhZ7j?p+QTdyZwG-HGxN?NXt zLBg9WK<&`pOxc0TT!x;+$KFUyEB03TWhmWF?MF5vQ7&bZxxsKqW!4w8!)D&&>i>tG zzg%)%$$TWM-{ET^aRf$7tQr>W^?RTG!MOYDv12!Z;gi_}lNcqg9N4m82w|C&MZJK2 zHaA3o4ot8OHoa@MLlh046z&QwU-vP+3P5$Lvkvn8XI!YMl_v+9k}xztzIAd!Z(ZqQ zFNHFLF~L7E{IkW#qWE2toA_9 zfBSSDkD58it2+wgPzlQj?Pif@`k(QElthO`XgJqj@7l1iBsu9M9kprWY}$WWSkiHz z2xVNW`U%I%(nOM<(BRbIYAeCSQW= zSLnr7%OnI7lJ@65;r*V-dIR8;Z)SEm@a`PH2}*xE<-m4h#$*uCY5YmhA^H*^6N9oj zDDIk!rjF&-Ha7K1c`KhXCa3()%{r_WF+}bs*mfd`N!M)hiCpE2CmO8n_8Hus%K<_7 zw>J(BCT5+hX|oW!$=My#j2$ybK+HBer>e^c?zdQb4y4|W&xbn;0fz9OQbq?Lp2jRQ zq2;b%m}-)yeb1oD^Hv)7q4XKy5( zJLGe|G$w1gOE1RedjVf|XjRU!1ldpl)=0m!3#@I+-li^&cY;QqbjFDp?QU%iTDc}s zzY$AbbWRPTIU}IYdI087Mu9L=#wjIF<<&nvlyAPqra2%{coEs)!4!z2*jlMS_CM~2 z0_)N18qF`IXodD2D%BElC@Vw5HgYc?a6*9!)4;FHYZ}~F|B7aTlWXD3Ha;R>D8vq> zmOPZ|w_Vx_445A3l@;~*tj{H!DLSF=(k!z2ZS%=t+v*=S_9u4y>$3#o zU`cmUG5~4ucT89T!hl|qDSy$O*5=ASC}6g5d3p`mk+7Pj>HJaSv0MqUPb=RZ2i=UrOz=^_^)A3fv)x@A#Jm#qE~ngAt(=Bpgz2 zurWc-04viA4WA9sNrmS8JxVT7#p*s+a@zH*#Q0s40`h&61FxbvUrGzyT}a7dipn^- zw-RSNxhLQYy<(OH(k?TffFQVAvIT>({(j~~)Jcf#`}oEY5Uv1iE-i56s)nE_1PMZ) zgt8ywW(G9b%av&7j+Up`%Z)p}b})#n__r_k$Kv!3v|Rpvh);`6jcUe^3Ujf#LeK#1 z>ZL?Tf^QUmmpN%fQ1zDM-dx07BtcibVyRlbBVKDCH*xtg(DI(&R;zfpGZ|68;TE>= z4$2z;`ZT~oAATIU?YVfo&L#CHD~9PC#NhqF@t;-JG`;;D34Qjxv79dy^2n)W|K!c& z`TBfH4<`Lz3=%$KgVxmZ#iOj^dy8GU1Y=k7{__Wn?!VrbJNM|obV&clsnC>-cKrv~ z#1>G7eM_i>pplEoqu2p(eKW0bvM-(S5UWzYA!F*T?*_@r7`?Yinh!Jm96mvoZAidv zKcZe_|I5Etkxr&81BHu4G9oE2K^LQ%q$aLuIQqNcY0+9%KXC!jy!@Ycn#=T!W1CIo z*_~}{)wu-3c>YQR%Kgsfr{vwQxeIAsVTcyri^J_z8pJ8{;w#3&F8Qw_5MxDP|G|7hC zul}r2NrCCt53kGewXT(n#eSjAo1gtmmPe=rDe}lNHgB8cWh{lDEy)DQ*L53Z-zu!D z^=Pp49EUoXj&7JXL z>&NWO9xjTXd&u$;ncp{nL-Tm`^G{rv5k)JY;aDaOl}%!n;|1dg!6)4>?))n7;F8@> z1GuT=z2!0MPvgH5ILJ9FUbsoF8p`kG8RJ6fNIk5Z<(){!4GcZB*PyQXA4il?zvt~= z;E!Ys(`U+?m4|l%TXPva0ru|LIW=)+n8eP&2w z0~5A*+^!m{K>gzZc(}F&{<=&L-wIb+xMy6^VgQL08y=J8vHm!R0?g{vTF~<`0N5r#sf3E@ z=>ZL4ZroNQFCMS=T(yxR_4}T2xulEf1SN(kCB?XM-Qt$0|1@ous5E9%npyN(zQEJ^ z<_)B5yxAv;oIAxeVvCIaPDKbI>DX`QQq3=+CDmoAvTk(HqU>VFg*2YCDrl1gH-}>0 zUuc}g1JRQFjbD9U?IrK;8EqfcXDRt2jTH+!>B{QNg(iOZgdYmzq6o5lK#TM`B?R?% zG}-b2JK_$H`BpicKzKO_ubIX4&iX=c;Xkg9?38I*j0A0}h;q7p7eO1cIQOMT@(k|Z z89c<|KTPwsKPHh(Y#^BQcnzBTLM@mIz6Q2<$s)612sUEL_5n6wVC z7eCsN>$R19yq`%`&1VglYOP=_AU^LT&PCp9m`bR7YF-Eq+W zy*Mz(v8Oe4UVc3}|L5hTwXCLLQj9NlUs-&_WiQ8Iy4X#_Z5eMME+db3a9>JmSWVVt ze3-afwX~&qpg2}fvbVWUIlnjfsUQ`9E)KPcrK+8HM>{JUzj=qK{Ktgczc%i;AtN+9 z=5!YZ3GoylWOn@g28b0pqVg8XxA(4~z#zuxmW1FznDwjO1O+$W)BQr9n;+?6`foH0 ztm7&r$z9wuZ8&N<{T^9ikr&n_YXhEsSMYd~Dh#XQmDW~g>ac`NaU4?L0hR6~9ZJ`1 z@&5E&H=>*n^ut7a+#thpjI~BFWmY5D`RHCh!p<^6hb+BcFgvtjgQLmM6$Jmm8^Ok zfg*+Jn{Dx|L&BNM|AL0t2D{+Cff2jx{1rj+*P@=~7>Ng6QCh3|TW$UFJ4J5e4lc`xH zY0g~Hehr@5q=MUGm#p?{EiuKKa07hlYUr@IDZ2J%2h^Io-3e!`qzN`^Y*_H+q97V( z{ss_+w~gXDTN_+veZd%XrUBm_B{SjL7q#idv!VlJhEnkyFJDouFr{fi(!Up24+@Tc z7BCIgS6*GYfR4V(PW~iMZ{@CM_tdv{rtbg=4NT5B{jZW-#78KCJ&@-6l4#V^2@gfi zj&=#g;k+-UI!=XUC<*w1;yZpb9k5YA33AM@%VjUwzhBEkaG`3WuJV`D%19a?{hEMm zN`&1Hn@Jgu1+xim_S2KG4_XyPdgGF5w)j-JH$y$_hh=fn?^wTmD(eUJ3e&}9>&xkY zq;kU3uHr?@(I~#SOsO+zV*wjKImN)9;X;!T__;?%)_1HkfTJV>j*<`LroXo-roxW7 z!{~@coE>OhHs2F{Yatp<)@UY-Q;ORP{O_WTjgU@aOYwuK_RFJjL_FDmZdZ&aLSOeUgfKD%96 zz=0hL)S02>(?iP_OwJna5PpL175Qw=-!gl#^Oj7QV90&+V9+2JyBFFQ>da*ATC<** zUiY7NyK4d~utEw`^;*}C=JYhn66dN{{yGaSzRn^o@eCDP90Gfrexc0Dmjh-u!L!)DedkB z&|P3;d&1GoiEPPtxHXAt|1N7jUrJJ+Jq{F6&xSrYzG!rQV2ct(jK)lhc*e zS2hF&B3h2ZX!)71^c+Va^}+B9NMLcjihLcJx}qL`c2j^=9c&{Dw2e3+%?nBB|JX)d z6RHLZVv6Wkls=O_v+^bG@h*ZIV1{wWTC@7v3)T{AQyf-9UIE|KALGwg3Gl_Nq*o zzC;^r*q10WiBQfuK#8v`>`%A?djEg6Y~8>rVbQqBLcB)oGk9|2oA)B=+d~=vfU5if z*svFiKb!8o3nWk&A!JmEl!b3U@l^k%)vcve?Nak@|7Jm)n?5;_i1x+FS_(k;xxLbX zJ;`6n2^!O4+xjP5fzfDD)dfAnd0+HdK8~24c?T?!`X83)CY*flf*NM?gm`3=|M*j1;)MMQlucSJBu>un|paQ(;ha_8RN5j00+=38He zO1J+4^&J99e%)Sv@iV8RS}hlZf^YXoy~c!c--<6E-!`Y$x^O#6Ax>uXc1un>`$se*Ot`e^`q)1r%%|Wg0z> zoCz_{&H#HMvg8GT!=2SybxA0iG^cuaq9_Qrs(l8VdpZBaq83kKuEYWq#)byRhJe2) z2g7b?dW_x}H;TZjWF3LpxABSuN2O`B4iGX;>ftMyaNo8{bliJtQueFo7TyL!QcQ*( zI+12zrxCLeXMK?jcg6=(s(}14?mw3Q9zVYORaT2sV5@d~c(dHG@t}Jm_!K`JSE0$? z78~txv5+`-Fnpc8EdzFrvVK5L^>>xOF*AqHZad?YK-g|@ah=fjPYh&z!_E-5{SQnS zz_dCcxl<9lDyna#bAieGIa9sMXkF9ZC*@vO{G;joM*N64>a64Uw042ykeXI{V z^BJJR*z5sT+jbm*oq6AF+eEK*F1AqH`HD=o;aF~{wW0%KvY^}G&TjP;_GZCOBV-Sw z{;z>BI8cj1@C*(RO_y7hsd_Ud1|F0QQ-qUo-;N5t46?&1c5yawf5I8E%Y(P!c_EWl z5j#zE^d%cP;={*a@Kc6tIb=XKW^HJGN}e=PWHTc+tram6etw`DR?BL&Wb3X z!^lhw9}{6TD-=tz-UA{yYVhFu7X%Z+Lw^bbk)`-LPSB&WfA=$pm=|pS(ca-u7r!TT zjKmqY(}pcoZuJ_PA_i!R+l{XmN!*t*{guxqW^JlaCf@msB{~g2wM)2j7t0H-fQg*j z!>gF`_bxKl1e$jK5pmLa6$i#zR(JfO2%C;26&+)vQ=vV*`I8jgNa`otBklm54!>S0 z8jupXI3Y0~oZz(?eNDFY9UbL#jrXb-DT1-(1+m;_ZHMy3v0Is!|9w=`@5!j|w+10K zJ=ES^eJp>e@1Lhd+`I(IpjYnJCp*h1rO+r#ml#O{MU z?%8t8n(G9(U5;!}IJ)EiW-S=E$QTu1^Efwd^ zL?lznY_O4%uoGI;TB;M*1vsct$ng>zgD)QJXngGS4|v#zd#G=~dMIpa)V!gPhz6>v z4$DzXuT^TH*mE|!HV+0At4o0L%tz8$2NnV5k3i2+b-0fvpu~^2ejq_9j%_$-SzNxl zr5!DZo6fjfyd|~iWW<^&ZJ?fXHVkNqqnq= zKI-lI?FGd_H_Z2542reMmxO@@MG|+38_pAXG=j1Ho!U0%@jNxzg+@D^x6Tz9XOo{( zVC5Pk1lEA06>cJU-V$^<0KAkkf}5JXRr&bN1jCN*WqzSn zV-TZvWpUJ;+vy1ntEtv2o zQN3|Za}qiuk<^mQPV!cW@sl*&S=?7pycTl ztvZq9Fd+E>pl@l1rgmAEXbH&L4u_*QpQ(hrV5TnyaOpIQ*VaUrY3o5De4ah$VZ2Qx zH%e|ytpNBm$`{-@8t3s+w9J_g^AyPG`r|T$bi0WBK8rnH6ezaSVM@9Yfw>HCB;-r6cHp(PISw?)~78IeYYq_pbGUHUy4He9{RMG3mm) zb=mT7Z>Zc%D=4dRmfUc#WjpHmg1c_G+WMt}gA5@MS*))}bQ?ibPO+#OfQ~iLG9b>#%C( znZ1Vr;(2>JgsIl>*qSQp`Xm&TuTC_eZ4N^MKQKmpRL<u&GJOxg>vAp+gy$}snh0TsNszs;)C~b>=s9Ll6!?E z?W|kEYvnQ4UO?NXm9$Yfl9Dp9(mTO1z7>z^pjhjQeV`Toq2haq84!ai*FL>^;?a5}i9j*E_A#7} zW$5nTR@0ma)oyOT#r@o{cJh@_#LW01^ICagp5x2ZVuBcId43&G@Pz8m;23W_HoMk> z%}y&HOceGqia{w6jBXP7Rm}@xR=C+P(}kNa%oXI1;U%e=t9*@*;w1;`E(5(|6R0MU zGBBK(L&~yerXsodgUKM@ntRa;0`i)=lWPR;CM~)a^;Z zkfnTuTW#v6;x8n@`Y|;RoqU8lr?hduScXWFUM=ydr!cKGT8PWN-Aui&!W#*+QaDVm zxh9eVrtHye27!!Pq8DI+&z9M*`eVAyVeNN zq%vP!cSs#Z&PK8}#NlISMKn#oKJjOt+)VRUNsv%7WCY|eN3m+Z7ligUo|~D%VIt4J zHgEVsiVbhWUuvZST3`l29_Rw;yvJ+x~>?Y>q#RM*w)?RGek@SH&5qKdtO5 z=32S?RP4u#ajjwT+*9h4A?^d|*s=#g$yFE|=I=#KoS<7`tiL@nm}F9Z=WNmqG~Cc> zP;9&6T=nO^d*qrO@QhZUb$;8PmB^Q4HG=O2KrwC!8E2=*I2?4ZDq*hiC6!%5P4<21 ze%@J!-|8JS*o|r8Phw3;LI1H>C5P2i!yIeSCP+5hkR-p5&X*i`+uU`0HO^#$Wsx9&d*Zll)9=oKXb0^q{ZJ>>DZH zm})k*tRnI6x%W83?LM_4vmFEqu?`v`DDsJlyk#H$E6C@f2G4i{ z5hiOefwm?A^kr$lSW=>k=`^rnJ7aCoH4&HSU-Vehn!*UUC?vVO^jW<_&XK(_*uWp4 zVx}Hf7rMxjW_=*!Qx}JF;cQeDO1I)~9{RIM8<=Ck%sYG|ao>vB83hCrg^qo@bIXfL z@T&jNtops1Y312uK)jLN=JC~pi6EB9fzuT^0f$_cSF_r^WnDxYr3W3~x{6{=`oqnE zW8NKD(1-a~z?5`>v*H!uRI4!B|2p-XQZMLfycyuRsNRgDEo-1Dwct(nbIjY-Gri07U`wBZ1#9z)s{ni)-C*My+?8HxWWs41Z zeD5v5m0qB)nmofyKd^vXUlVOD_Ieu=#I~Dt4|P$593ShJ4`kVutkCksc%94Bu42T)d^fnzv%vH_X4i}a2P|6=qSgWTr z+Ld`mPQro1YO2IboFDghJa;{wb$cC`i*Ya@waiAdcOm*Ur$G4IpWyJ}^PP$xVpAVV zb{tCy1=|;&G^Q+~webjav9<5=)T=zKh{^ui)s^Kq5rdVjj@QJS>;fc*H_wgP1eB5! zD3rmiD?pV7BZ-xErGIgC+kE&rYUYuzrvI1%_$hwvqDww-S#BRi|7MXZspL5#jR>I) zFe;&Z%a90|PH;_tIRRKYIL2Py~k7D$F>^PUMx&Td>krDM6nYWw?*L2N(&uM&XUE;bD?FV$XTX+Cw*BoH_yCh z)XBc=k~_UNp>JbXRkQp)r;ADHmHPL(qC|mS;#QV@SK9WTBMtVYsUnH>!mU`NWr<2<&EIYS0jX2I<~NMWNTbkV@2(a1`UQ;5%+sxDn$*sSFxuhG??iHKiUx~ z$v*o4G%wmHLeCnxc}6Q+AwW#ieK$YR;rV!MGyy~9!yv))<;!j%a!jT``ba%*qiO2R z!=bAe+^0CdS3UohR8lHFIbz1qVK>&WMl<2nnGER=;e6(qRw$0?D_SFhF^W_`M8ju3 z38cR6u4BJ|f7N^+vdg;MD}Cz8>DueCl~#E(KVjvYj~C^?vmhf>!wE=0CpeHXd~d%% zpuokFB?B^`INv~eu31=>-;3Y-8J2_H43%W8+mYbtq46udvSjmP!(J*XY+f3lyKmEu z^*oKyM`N1nWfRQ;!17@j&s9dR$R z!Oy5EHR8=)q>A96m*cw^$EAfZvb;cLw{Op9f5esYKfj5grTh`O+H4_{$$LpysLdx{ zW~C>9kJ|Q}A6t{xVxWqnh{vec3Rvd*F`RAxb%4Qn{Z>5}bw6Ok_3#2`S_3LhY}YxM z^CwYgD>~fb&H||y5UAGirX`$$1{(VZ0t5AdpYsey#prv_ic}jxak^( z08X1wk98$|TS0rC4LeI~Ys(&gkNI7+YygR9ZO}iK3Jsw>xGYdxXZf0SC-wuP?VY&S zJwM@gHTbmNel@KyIe$ndt9N3rQ@`pjh5{3-o`j7qFY9pSih448eej+h5}Dn!yAf<)2#^ z%HyV{2d@JuUMAYh<8^cU-IV$`x$&aD3~PMs{;|gN8Ag5$@kQcJGiGxoz&d!B4O+uj za`=dE0DuZzsPp?&!a^tBO6*eQ$?qweyb}$%15BiW={ozQrjFG&xzerC`tIR0G6U)F9=6Hc%J`1g!&Q0O-S7VIos{EDx2q zlRh7~3Z19)@hx{V2pyk=C4JfPhV1ZKL5io9muv4-FsN%{zi6?6KxppNGUMxV&B4FI z0jP~#akm{zu)qBh3`@% zxa+g}t~GD9py_f*4BZw=HOuUP#wJj3;b)vd2#i1-*Qo<7mG>c*F^eSq{kbb@G8QgS zp-lXQH`D0qCzY}1q!;i+2ClNYRok^ztWmBzo6f?DBeT{T(BU{Qj?i~WVH5s!IH5W& z&v;$k>kA@6)WfZbGWl_#M?XJy3<1N45!OOLDHt>dD^EIVf-^tH5LEM_ff0zcSGO1$ zcACZH3Hsz!ioLXeaZ@IqoyD@mSZwyt%t|-nqi`R>;(h)@tD%^igodG{oAZBJRBwie z`|{dU0vN9nwL<`h(muiTa3^`g@7DO9*Mfe@l#P>5CkI+1{ZgSFWx?*da^^Eh78fbi zp>k7d21x1Zg(tTvY8Fx@G$G6MCZYC&K#`CUU{eob$Lxlb(@Dmja6t?c@gx(^oy^Oi zp8-&fME6VP;_QTyTkieCw*qC{`ik17X;ppZ+@x=>yzZUE7x8rN1*+niaJU>?0FfR1 zm5uFshe?ipmVhU3XDLvm7#IYD92cB+Rdt&WR`^S0sxU~O?u_oLU+#~v@dO|_u(RxJ zk{aAUXSpwqj()%pyjsby2q-i=D_w*eeLD=hH=HQFKL^kEr^dsWirwata<@;CG}NhN zR!J7~TI)7g$+waVuyJoL%`p9A^>Hz%+fiRWTmadi;do`8lc!wr7u&9h-6qB1NMD+2 z20fDW!;3BV)UGy|jnNy+Bg-Tz>a!``1~mA0Fjl{W z-A|)8OJo|>W%jvP_qHTfzp(KgE*#(tuOBd*pFZJSCbX$}Fya+l!HiuWU=>X81X?Oq z$=CkK1%g_gIsY+>abZyTH4Ag5ep1}4JfsBB- z`(IaD^R`R}DhT0P5qGwZF64IK{3qx0eOmOEyBbO#KVEnk&Jwt02xCno)TOlMvOsBP zHXf5fsBynxCc58)+A}c|Op9sv?gOtBP0)}e>n+)?>F{6gUJ*LBA9f1`VwmMWp5Bdz zkM@g!{`Aa2WdmTIaQuCmQ1FqUIoSKmg`m*^uT1|o`)Oqm43%%TeZ(Xlie9{Za+(aF zp;LW5R+@8nItNWX_$C~eqhCmY9@bwMX`mY0Fzk37&tuE;dGdumc&IU|33Y zXJubDDM)?}1fe!MWSISglY1Sva;hbFMho2eMdBAGA+VWR>NE3|njOufeNYyZyyh(62SitWZJ$%u_iHF8akkthUE3dJKhHY z)OJ130aE*l?7l=kuPB81a~N=Bgu=K0rApCdf2wbwBQ6R8wEu|ces71Nbgy=?&8_AQ zNs5JAS91Tm_yO+m2OOK@uzg)=Eb2@LOZjqpn2EB0@|m2Snq^dnLFGGYGcq+go87n{ z;GKyGfnAp~x9LL3b~(gQMf|p&4UW-4TfO?A8$xSMvtf&0eK?wJ$5wqTc~&RKy=Kr)maWbY{v4e2&GB~oHeb^@Ovcrk%=$e0kpM8OowJT)mo02_eC+q<96B@ZwKWs zKIa6ZFQj_TP{etcsd56%L8>ole@BxkH(eQ>;Iv*AXtoO=#nKsv1EQOWF5G_EyE8^yXvGe>%H z*ybiA8Zcw&l@Z+TK&`&3Dt;mdrJJvrI8lF2>@RjAN;MwP|9$ zyt1|4#U1d*DVf2rH68ELbP7_0f)%GR!luGVdI%X@Vy7v3$B@P7ZiAYac|BC>dgO|z z*ZtH%f+6Onpq5(T4p-J8 z9Am6$s$vxiN~=3ly-BCsw-ffGIx{OL%LGUPGvrQIeD8*hVj9fDbn}(LW>fCYMTXF~ zQ&#=w*GqX%;dVqytOtt^{i^NBwP>dA4YvXKA4FXJ#R4V8$Q zC=kzqJjx}Nx@f)QqJPkt-K#F+BFXGYW#6$4u~@!#HREN(J2h=$v-Pl~?e?i?_w|bn z?Md!&k0(k$gCYs%nLIne$3`8;g13q+-h~n}vw19TrJKK7^S1BI&OVI@`u2d{4?shYx6rvrs7-5JDU0_seBPRAslaEQejv}C4a z;!I<+l;(pZKzsO|&-&0@3kWuP{{4ChpcNfl&TT`>erJ5F-v_r>`kERsfhso}T0=X> zQfD3Xyvx)y+fr~8Mq^d7c~EOjr_bloEdGO1(4iXa*FWE=D)Ptst8fSpl4*3$Yy@FJqr!`} z5HY`?lK~Z(Kaf7^ z#KSDT(JySUtM^?g8-N2JJn{JBPw1iqb_?uYgMvW}>T~b2R^&PmaclVDdo)C_L!YsU zCfIP#m04MIweF)CET&<=YJJZxkg+I zJBvTGngwrbJ<5|Pb1r>mm5pYH%^n^lpU*%>W+B^+( z?i~#zdGNzp;RK3^!R9(1V$rzI+w5CU&1lf2+Bkc`Fw81f?LCxW=27MQXj##0BP4qB zPr+?(e|?;IDKNilKTWT=Xn$fX8I5wctdJYB`C3?*Wm}NnmrvP4-X7Q{W_jalVaU00;n{%+MAI{Q#c+dI4b(hfLR$Vf&U0#EK-ieXI z;@zuYIonCGmf5i)BJkOcZCxxg*fd&4h zZ%{GBS&MHXGxDN_1$eKWAp~1afBzaGqu9{BjQwCiZm_A1E;G+RTjNygs#l$RYQ^-y z_{Q_3P4v;vr{)<~xV3w;tcFT?1DEuP+%9`F$(IW;v&;NMhX+T&-Z?%B?}_oV7iNDI zfeN^y=)CAPb3^Y1QzWW5;ceqrczErp@VY&blq|yTRq^?OwnyI!`sSVUXiM1Lv#i6< zw86oOeXjT66ha>a2_(^8+w%R#qR-IC(PUZhz3TS$3()4|i&r`|f3+|0YJTIr1f+5< z`+z-?5QN}*e_|)hj_Zx&4OkkjgiXJ8`$F_-t{`NRltZe_&Pv0-SGmx-Jrd`4RTLwa zRpU}GD;cegjTN4@A^CVS%eXeo@OHs5g_A%yO}<%S=Ni?mTW~f1bAGx}`Q=oq#hL7rkk@FIQkxi>y?yWDKEk`gb*;SXu56UK(cCTC>s05B_zDc}`-l>d zQ~g0>K!$qMeS2|`NrZLRoj)#rxYE=z71P218*t*6u~;1rMBei?kk{@FYM!7{<%#WT zZx*V35Km*9*yPH4(mDclpBVEz$h0Qe?D?mo-NCqH<;&mnEVSp}UK}V^Jvk%71)SsA zYx1q(>sSAA(E{^P_j<=Bs@DpZRz&#KBiRnW&504O z@!8;RUt%3m8y93R4I$VlIC`p7Rg3jUs$#PdVXypAUa=B5XELz6r)aknLJLXS;612F zJF1BIp4X?FGJ5}f@6N8w(;cR8itbY*I%YK=NfF-*zL#x#bS2u>^(UTc8sB$sQ*MWo zoh$TkU-1nqN^HNQPYBKyKXSZKtST6oC7BY(<5LFLwtHje=w3#lPO1K&t3h<;3OI~h zNH%4xXS^z`$a;$dbw5q@DaZ4M_euqQX%*PqHtqlG`+6llS_eiQY-W4maV|n2fuYJjLfF0S z{A`~0g4=h*to`foZT4lV*d0CR`9KmsvV)tDwaP?I+0;N%*W=GF)*eakA;W30JXU&j z^)Z@_X~Q=tW%1c<;|$8{`D^;Pf^8!>^-?<Kik2 zt0GBIUr6=KeUAKkrBMw?8?=6xLV;{GSjkmH!V zXo|-dwwg|8u7#naM9(K@s%qpk9a_|*?|9n5(Is&!_crU1t-^S_b`Sx_f-Bo|tA#;h z%++e!IpN2%(%tIpNEH6ruJJGZ!s7*nuh$=I`Ty%9Z2$2Ql;-Hwoje2kiOueiRLICR z>xsTBT}YBahe+Z`8lr9xblvn<_cS_jH<*AoT?!~DSrjnV8Ou4rC)+(T^2gMfrkQ#O zQ!UBQjRg#zMDfb(IbF>dy4a&L5ZC-5K7Zq)yMm_yr>cbb7*8@+VmBX&j#LVLVX(i8 zax`-Qe{$3!mDIqZ?Mh=^<@a}C<%!fgxn+Dk;B`?AGfvblNaf9PG@3j4)1Y*}g5&pP z?Hz2WtP8OX*LFO6Hu1!*Lcukq0z~^jx`6&=b14!gp4heaiP-JI{m&&u9qu=1*X6c` z-4XI0b)!En5~R7uWszv^*Ih&MwaI2Dmis?>=*n%r&Q~fKvy4(q+;bf@xF|2F{7WdM zU^1$rW9A3{V^0BO)}pRc&v%hjaKz`6XrWs%DQ8|4{e@rMuga$Cr`lRwb>8@8_odQ} z_jPVe&g{x1VtYjH758A^k6xpCBt$)*D+4QZS8Utu^oL=ckjuwQ=3_R>B$i5QWL9qH zIAAuIXJEJy569$THxda%bd8vSgE=tNpLSUhmII=`Mf_@RT)QVXJT?^nxWgAQ5=yvv z{HFrLS7%bIeU9PYZwRp4pWxy>rI8E0qQ`Xh+KPQ`S8*JYn>i%O)9z)zvb*|@{(4TP zBcZ50hOadkO}&`>R_a;;GW(dGJo`f_*QphfAVPi1NSEow8?cmqk@WH~xI8${YuznT zl{SNNTQ2aqBQGWd*UlYJV0q5g120i3X~ULU?eC>5**jxrTnPqJLE+2v7ebByh ztexKJ029xe@-RJBgUOTT3k<4HI)aQMTad52g{i`giDo|C;XV1QoGYK5W>T1HpXiEu z^xM;1w_!C)blB#baD|#=T2iy4^-QbX0(8-rTJ3i>p>y4(0eAQPJ6}Y?^D|k-?^M4J z1zA24s1qWyMe6hxT%S{Y{1AQWSouJ17xfunt}5=6E)q`{NIvk3hK}uWbUHq}6p8Zr zB{}d)+A^-*fVzxxYf|xu`>|-Ow_&%*F6UjRRZcV!pHS3TiCL@vC;yVM&Bisy^PkCY z@dz4y4!pD>|Cyu>>ts~r5xevC=I^^u4(-Z&2U^6se9lrl5ehp_E#+V&D8QP~`X> zF1=IDA9rYT6P|G(JP$(p*(y6TlhhbFJ5OhO*kr?5e*2ho;A3{y0xHs{fA+l2JmRrd znDJ)K`)dE!RW1ehQ#|q{qcaT#Ou8PjJWT=u|7|HgE~g63>#@{FO-%qY{KKcLb2l13 zyhnEV6?L2=WIaA}%TwS}c-D5UG}XuR4hhJCd0MSA;cM$H+)C-!V7ER_z(;LN&oW{!Xyb->iiX6pL^iSrvy8v zdXlQu-13E{_BAiETbd8b_HW4Dg_WF~-);Y{{;*Bb|K~i{*&6nqWTB57+W(KQ?{K7g z|Nl42$X1c8Y|1EAju{GfhVl->OmWsC665h;SIeo+ox2 z9Z&~=1+3<)A{lNOb;GlOdE;3kARdTcb5$;BP&V#raJ zirJ}1l->7pcL`so?q^{i+E-66IqG_Lg$`@oM^(Cb(Q;VB3ZpY$yX0m|^1HR4f{otW zSwnBp9oU{-owta3Y!D4N-%crGWq!TnUTwFFW<~(XRtb2D8@1iOHnNhmyS)04$JanK zN#a)-I;7^&!%+muXo%qFgi3Pv03o@KDE3o!DZ`z z+E6dKtv*&`u$Uff4^x=!%;^IGj{tjMKLSzshDO zpTdE_Az_)RUjR`<{$e2DY&5ADg`~*$ZKpKo)zpu?^tpAgV4L zd$nveDV2-fQaU37m5$_Ady2M*EXeJ7%m2>^!ccSkdN}M!d50bR%kN0sF-b?F z{A)E$5Tid7Ow|c)@R`gYio@Q>Y?(2T^y?c+FPqW;L2=)a!8s8DCwxV+@15z`D7;3G zetx>nud(o*a-3U7R^88Q6{SCo_C8g=nMxDBH8QWD$M-QC#yER&8~neLP}(l~w=;Dv z2HS*XTMFQRd{nsm#Qn*a#~t#f1GBxxBR4<@USPZr;v?wgT{fAninaSp>~*O(t%isT zNtU9?GPxYhZG20a2;0_C_(1gcq|y8Lu0^=RSJXj)eNrRQ>@Jrnl14^r)9L$O*3YZ5s~bh9dI zmDUvf(=u>2$KYe^UX!d6x{k^tV;Tm&S6}jE=ajU{y{x*_+FHJjSjvhL%T5@1*#C6?RB&sB0Cn{3ELh%9P9`m!62{goyofmX+^Vzck8n_DGvqRQel zM06&L8%*;mgZl-g5Y@C;rT* zo=o_b;0WODD8ub1ZnGH>kfUmx+8iakK6pm>Rd&ftU9MN%x%KZ86&-pXxkDa#5rWXk zZ)DQ{tFcIBx;ymANH&J-Qhg3{+zfIIALceY1Ff%2kOlfw3R%aZ2n0)|@}E+7PfNA7 zj}rG#QFx7#Js;U2&l+*8l1iv>_?Vx4q3CRlv3n5qclpzm>vcKcvlR6gSsiPgj~_S% zX6+BAlK+-1`--qvnUN*GRTK8vU}p5jxz{-rsA^9dbo|5yS*a3Ua6R1$s|Y=huGZ{` zTa;!iH-f~LnFEzShjr_CHOfYNK!ZNceK7a3zN-#MqWFJS_J6yEQ6SIO>gickSAR9< z<1@|Nn4B^<3$#nPd&y;%QBC9F4yuSmIuxO(*3l!O=mzNI5Z*>&slx39tqk_q7z2d~IwU^9Zr4=o ziE7!xnbN<#BEv$7n7>R%lAbsE;$VW{01+YXz9z2gp+))^Wow&WLeLqiHKzMb z^ZvL*jQ7)Y~0j*tSlo(gBGGXRrA>;Ghq%u_I!Yx|WBT!-ElkvXBpT?|-+cAx{Vd zk}rE=yr8R{&`n#Vz-d7oNvX=OZWY#zdvFlc==0&^%`09ZB^DOml1O@>`{{u0bq5cG zRo(6Q(H4VTrQOr#X*HXrFy62V3yj*9DnY}PuU@Q}nqruHCof&^w2q$MK@WAc{3pxo zqKkqxM9Ym$v$?G8S8i{%)lXb|u6-J{@K$-k_ik&L9IGS}%{Z`{AYJpi*}3z7r<=i! zN7E4!Y$xgkW@4FyAbNOSh#k9rXD`g>-Ip|Sc>BQh2RG?#BzQ^@w1wq}7susdirHi+ z?7Dj?v%N5I`bHs58n*B0Yp8^MMn$CT-zllErsx{HK+rW+`~mTVm=SYNQ((t_$SwO& zGV6^g4wn!w1AYU`sGng6J5rqHe7*BCUy@o~WQ_bPTCYKF*!PbrhfVV(kCtMly@6^j*B>G;ut^=JQET1_+5-Lv{fdboUj13?qRyE` zXK=cb;T~l8hi6oAMVMpWtb>0hX1S+-xXM5FVCIU_dc!WR(p}(!rL@Z*2j0C-zsmo; z!#cz*@!%3G(HaGPr^qZKFBf%r5Vzh(IO zTqR5@Gx92#@gH`idV&=l{)Ow2Ot1XV)BrpUuC<0oC%n{Tc?Ww76<>enxI$}_#^$XKG)XA_HP*i}bX*qrJ0 z3AwX5hXtX17+?*w8m(d&08mv#IMScsqDd4>`!dgFRBb1N{-ycxjcnu{{ynJ6&Yx)w z0J+N+tpH(p;xmQSC&fM?8)Ph^@XN?1Bxr?Mgn8wqf3`9~+zMp%hUy5!* zR4Y+f5x!APL;WM8`1D=-!c0-5Opo;VdnlreVeDXk%|f&Ypt5?T67twoWH|ZVB6KI~ zh@dVN!w!TP(fM>Qc(|@pwabaIedpw2j(EXr>%Gbg{gGN7rUZ3qdGl- zws|L|sLw}p$!$5;m&K}i=XXK-b*S|8gm!-De*@9c@x)Ok`4FLdGf9oJslW72O z4_mS!Dx0oEC<1UyqNjWj#w97!aOt5g*%uy!FM$13Rx&=L(EgHo$1?ojlj&&ywl+Tk zz4kKd4wltXQ1$`+$b73SsTlKs^e8Oh?H6P#0Mxe{azcLJu^Za(L}&zSI)r-e^mQvz zk?M~UOa1PBLM_d_VjZKL|_CpPsVaNR?|n;RltU(vh1%VsltG&Ss6bs@S8IDnUT_pA`? zy(s3ALS_^l`>&3JbK2kKVsaU3HY# zaz^#$70W>vAUeCN&IE4OxV`J|mtus?()%UcddTG`RjMF_^ZpB?Zh5g8{e4(P*wwed zPfmU?j(14z?|(k2)B6_HQ>7rM>ZSdqH?XhM<KRExPZ z8P;uY0GvL(3F_;#>;>&F$I4%1T?k#OTz@dsJeK_sV7TT-^Q+DWc&^09;;=6JrFG&seH;-C(X<76DvO;_ zC-*SI4)KhXFtS*`ZtrIpww9jWR@sPW5iU~cPF0@@2N(=X`c4Od3SCH8!=F;|^q$3K zoG^0Dnf2w1au)vobU>Oa)-p(?`xBYA>V%)9HQ&B9;}9vM`%8LVA9KW6Gnl}$`mX86 z=+nOx#~f5^T>$(-EGFIQ=0v^xHiuqv_;l;e=4rz*8$sC9C5tQA8qVxitvfcGqRwA- z6ed0gDz#LaX)63|OI(4mlXOl%8ywEe$3L&kPb*qy6o#%ipzH*c*aqXqi+Xwc0K2m zO(|Z24dY?p#e8M|RnB%>?s;+D_YQ=2@`u3V^Yqm7Ir1MB()~bbcfiWq(+QWT36X(& za)UE`WrPpPr1vbF-^0Sm6|<1}=_22{%N}dBmY%C37~Y1y8neT?dQ0Gr-OWAc8Ac&X z8lDieZVGDM%bv&3QT-S@%~(2(YARMzZKcG~ksA@IPet+@L8Voj)O zMR_T}2@3jqbNa8=do)R+R$7IM7|*3ydp;88>~)o@^xY^g^GtM z?o5QQ!>2wW{Q5XX1^ul2@&a`k+*tqfX{@O4T7ON{`aH;8vDYOB^rtV2L#H3^>;=%R zr@uHDU*21+Vjllb{f;53r~q8{i9=|}6q`}ESv1E!G~=7@$F-q)aZ^IB7BdLl&ef;I z{bh3mEZ>wwE(3i6byU@58JSTNO|fjju*yZD9ucJOVGPq0N`L3(K^4~_&qF|%wner> z^5YP%wW-)&rwdqkgjx1<`ft zemCA8kl#ggPr*oCo?V9AO}8~kV%wc-$OrTS8?s9K9tSI+wYl3k7yDg|C-K5n*5Ee7 zLq*7)G7|vak?8t+YA{q)!N>4xT6fZ)4-q!YmPisMC4zYC>J5en18myveg(G0Xk{5j z!gYHrKyp3z<2pk5Br`D&fg!|jY^UqVifk|WhoV#<&$!t4-3K1{DbYxg^6xZmkX7xVlW$DwOZAJptS_jxg~uj^75-!Q2vN-}O zW50ghAMwaLi2IKp`m!XRy(II^nEk3-=b1)$fp}Ru9 zmsr!eKBS_cyD8SpITA8&5pUUKZI?pB`YPU$i=ykGrk%UyU)ivy35^dw)oL3i2VP{Y zGDMs%OdPGB*;RP%ZNv7NX`}X=EOPK{9}*641qc=q@Vn4#*tB|`=7O(mhper&)IE?M zL^iDwb;JcL%-;x{FNi`(`)JZ z<)g(B-?o1I1Gcd@bvjpppt`N(r2z_ZmE$=v>+1u^l1}x`pLpCfQkhrD)y@7PNHylM z=Nst=%cWtRGn~wB&(i`UkMr~zf*^>>PjLXEfW{QWMYLPX2Vjiff8)s@L}QVwT?Jf!7r5v1U=!y z4Q!Ma$<9;~`K;(LTP4?D*|JqhIA-rnX%)iP9osP6?_&uu%O z+`!`58C<*X)yHh1mwdqHSN6SWsLy@$=RJ-1ZM?LQM2s-L)K0!>RTNB)+?sz9TwT0k zWT(U6mVACj;iEkJbYcfNOry{2uzTUqH=%pagLC8C>u+p62?a#*1RLw_2l?Aum}^~x z_O9G19$nz#XMVSIr)dWlnOvxc>+f%(Au{kccRu-PFi#VhYzh!*u|@vd?`q%Ja8=)D zaD66Dhz;6A{RpE#ZcaiQ4!)(^BRXV$VC7g^U;T)xrcz1r37oBlPjJa=6nQ2cXiJ*u zytDx6surwXuGgX2Nq{r9Cq7+!!5h0V8iO_3DTu=w1I0=iHtsMoO9h$loOewMU( z2W-P#{^k^RR8CIN{tbJ5r{P6b^yv-qBGs4xkz7}Qs^W+*m5K+w{?)-=dr+J&Z+-^3KzK;1!Npi)%N#gLYB#04PQ$ zN!Ly3E`skQ5!?{EC20hjI{5mw`F%FF?{|h`qI$O2n7i5XHC$`+cy6}r55vS!( zclkR1wB0q4eY_x1g|4 z+Gf%V1LZ^na@3)90v5l(mbuwS_6P2LKq-;_U6SAPG095a-EB{ROt7y zj?%VfM%RBcUpF_rqYt7}DRP^cX@||Z=yBp@(~FU{Gj&s%bypE+pf@(o{Z1FumJ#Kn z)Z?PE>Z~2M2%e)luumG>Gh>m&mp_00BCR%!3I=8J9yEk`B|X3j>84p>I2%F*{>cOJj|;YDOH;U- zLF~m(Sve{`U397x^OqSC_2Ba+$P&tH;E#R0E0ZY1An>ExtI(OOlHX)&nSSsmQZWOFD$4(?B?#6 zHr?xF!_{914Y>O-gNh14Hq_I;H7!dStHQmX+8>mGZl>BcIykzN-?}ygnrvF^F$OH` z<~G#R(avd3hutj)w2J3v>RX6xUbowaf9xi=px zriffxAD^>!pc#z@?uJ4QBpAOdZlGQWaP)`f*|3FCw9@sq8jZM~EqAcqrW@V>aCgtk z`B_cyo}s=Nt}ZK;*3ed2_i?HX-n?0%2+0h6^R8*=Euv_Y>P#JjolJ72*7a~@QaoEy z9CJd{x~;O15A9M)qi9Vga1S9__jrI28%<~cE%c%Y#0Xi0n56^GX~XBC>Vk43=A!}* zcn9YUBc3U=exR>?1#a+hqAjR$yn5|PKm3(oNN#rxtWi+|FJ3N*7eCaJ4XJnY$`X z;4N=R*g#OOpSN>}Y_*O7kIiZeAiV+zU-D?meto@SwEyk?Y)tDGQsh#|LVH!xOg-|$ zBys6w;$^Q4l@LtW1MZL=8P9#5uIBMjpI5fcPKCC<^Oc?-XfNR465qT-?(v3}yD-{n zYBK$&0>+2?WpOof%IH-twkvZhB8n#x)DoosVd-j9bJhc|uM>eW z*arVK1UL5)X3#tf+isciZ^S*cb$J<3BkG|w0e_pW)(>HXjYrg2Dmo za&&|m$8NlFx&)Cl0>A1)VB)4y6zA3u33vE<3tGR>UX<%3IX@Nvo=bG(zfjm?q}emS zJhk=erM?1+v`9C2pQAQKF1O{8P1u0y4(I55)bHFx-gC&WLFUcDaogWhp>7(j z`=M}>Z--)KD(OLpd)QNmLD*!F(>bTrVsj^OoN z*sDvLMd!7AkLZ7UMV?hK_-BnL@H-`cqxNl$07|UpPi&Q-a)Azk_t=L3#e?N@PIaEo z_(qpnY#A5lUYxIBx{i$+U;-eC&6sYNa?4D=mcp?2IhKlO;I9f*=`@na4+=}P5~wwa z5QU{izqQ(6+o^07HgZ$?zjJ$Rk3jGI4!;F)#ByJ5iqIbtN_uMtBdEweTwI48p*90v~>SKE5Jf zDzdHF3d&|>Oq#w8+K6^NBYnI5o(-wi9BAmMD+oSH^p&}Td7X~#bopMo@o8U{!0)jb z+FLS6p} znlCZoWpCSEo}c*mWcjRpm)8mOT~dQbcBxT{c(tq~Fg*c0qUM8vu!{xB2A9i`SDuyV z*IhQ{6h>AC6}7H3j+K2lTMBJVG&Ly_kC8w+cxOGmW)PhR_En2^g&(6E0NSrfb!ZkUW=q2?tgow zGtO_a$+O@RhZMbHa?s+gS<<1<_pHz7-bYUT&!+tps58{i+6 zx%wcZwoqV~W4$YFnP|unM@r<7wvmL)HJn;0ra~Wj$GOA;v;hQli0y zJKdIU4$LYEYp73aLz=8Gqh#!R;j%#pBPX|J@dyzjnk$y1JEO2PicSi4ePVgd?t%+X z3Ve8<(CI$nterDccU6>GPY%MR`(A5*MPcppby4OBcxbS|!|U~Y6ORlJKHDHdflY-T zPCxYH6}1XC!$0U(ZzcvDex@^!G5yiIzOV-hRn3=9w4eD9h(6I@C>e?T;0UU}Yrl@T zrgnLYTWI&|wXFbyrT3647SOUzGPA{B4<@OEh&(dS55;BNCL92*S^XM~gO`g_B#M1m zj9ZA-mCApOU$^~#ZBN8ngds7!bjQA&^WYVa9&7S`!K>m^G!FcF$i;YffIG95u~3$j zsFkh#UPqL6Z^Yb+W=vY=Ou_8Ms46Z@oIz79V3Jr@_-4lJ5{aXnRS(6oc3j>bxrw5X zv~6d7xdzB*BF@Sm=U|NFiiET-bl*l2t zE+qo4o+Fe{ZLlPPN-GxuGaV>vZ|f_2i64h{lh%a-U)h2(?neD|6daopdc_phOjdvW zZl0B}uATL6m+gDi<+idJ?FRaOv7L(OWzm9ZtqGE@`DJ*fjKWUqF`b#ZJ^9bsR#)S1 z#K1ah3aiAxoZI{N4l9X_$|}EH!1iQ)!TNQBL)>NfDoNV;qG_Ye)~?%C>$B{AXXFZY zS#eo0Z|no_{+0unr)q3Z4C4xRNuE69h;*RWmqLzbE8oP)2(_iO-+X_d1F#`MqB}mv zRv%Xk%50&57Ujb&WbI%V_w$r7XcbSoyYY>SK$%?-lvlK8mRF>`JdoxvYU}!E9ZqfrFh>U?>s; z{sZ%wr#?9;f%5HFDOLCa+Bh!erBeVafr&4dUMJ=1GvBM123$6h%_5}tsvtCO^Ef@^ z!U@+;-Ea)Wup6|MM&VCK{X+0cAjO89tq2i30nEe&P}+wsrD7IXJ3GAVI;X>)HU5n|hrq;+KQ};$ zo;RYq0Sfp#uHaQ?ADM@Y?4V76C97QD;w-PK(l}V>!((K~D~lr+D#UqyZdyXU9A_zl z3Mj`BPE4xpm|KMLJl^K$bjX&i8a{>fZ?0_Kdl~t{#VGZ!0+?w@5)m9Dlt?YA@UdoN zP1--cXiHm(529!kf(m9WPdxpHfQXQWwofbrzmUr-+$xllB)=C{nl}`z*8P0}*E*(V z>G%)lk*+E;qtpugVXu4WNNIQxqnW07!rgOnnHZe@pKCbW2}#a>XenA;_7VEpAG9fg zW87hrhrbrzP~F8~-YUX80g)xX`K*>`l{7tJ2Jxv@KZ15|745JX%Y&xfNpNrxvOK!IQ;X|7G-rW2)|+ducqsNoSJ74A4U+v^>G#|WENn(+8;;}d@68RZtGOFz zM*yByJL8Mf?&yDu7+=Vztt@=3?pJMa1pBz?T)z{`|M0;DYgX9!mn$2`KXp_u@UjrZ zg`(tV6oiT(8@snX2ei9)?U&XFFJLQEnMr(t;0Vv-TDehZpmh!a`k4@?Fzy~!$M%K( zgK3s5jh|R({^3EL&%vE@>zAUwfAZszAX*<&EV@*Us?!FalPSZ`)JfC(KQXvUfy6kT zalT=-1V{r!0*}?VPO1~Z_QBs^mX3yF@)mla7oQZG4yHYj+ewT17Kh^(ABG$vVyI?y z6jf65?VF!GH!Bm=+>NpiBg!)iv%Vs*a~dx8v^ctc3Z*Lg2ZR=TFrZD}46ggjKjvF> zd%+Gj7wm1yZi4{hV?YPH^`ba@q98JLyX^~pl>X*9e33I>zlt!M9_JD->TjNHW+!#Q z@d~Q}br?wWpBuh?^&w^9ndiP2Jm8)zTbK$lzgrmT|4jL2;<{q$b{g~UCi+o`K;u%T zw|7X5(T$FFQ-hha>4)OSN##o~@fqT%^3L>H=aM*>!0wpaU@HYc31$`EdMD!SML2k{mL8vKIO(*^nxRnhIk!fLhkwJeq){9 z$pkb59Axm&VztF6$3$v=K9Vu*C8kTViB zakz~bPdz>#`c7kg1KSTtzoJFTHEslC;zK+{Fgb<}IDI@V&TD5jAlL8l_+|#w$7_F} zYvOA_$9UU;=9YhK+w927!stPQn#1;T-)N=6=H|h|Tx)=Jg@rZ zgGGTHvf=i}(d5L2S$G0y6r3>`OMG^#^Pk2<2YO?V$q2%f4vZ3vZkmu2-7KmMfm22r zs_a~#omzCq<8@m^R?_Bl+$)gtixin-=_ho0P9)FE+e(}NlhCM8-rth>a zX!f5o3CM&8`skMxt0ZiHBaaJ6HS9j zd@4g8lda7PB^nD%@nH^wN_190)e1`7t} z+fwGIZ=a#=U{y)!>M>u;8C$)oqvs7#y3gsxk@#BeTxR7gmLU#A=tfM>}&_L zW<4$kqe`4(_TB_rpiNjt9I7%UFCe7-reIU{A6^eyx-9L>CBRL-vCaC*&Rr9Emep(Bvxb*3V7ydWW5>0GwVHoQI z)pqEn(-jd(nyv4aFU}?C&gqWwEj-tSFuY*y)HSwU2;@*n*_Gdks|&lhQ=moA4o$6c z0Z?FI5$KMgyAg;mtF^E+>-r8@=h6oM79@7|+`Uk1@?)m1-m}w>qPmvt z#P1iFcbIws#0J=;S?~%ZKgGq|E=TuEwNUbQNnv6A9)WiqU3!X^5BqHvA`e9gAeID} zT`O%3WP|7XSE?)|nq;hV7bmiJRc#|@3cY3&juA4qFL}S)dKEE?MznCZE$9O+Q-Pdh z;7J;Q_gx0^sFcG0&9A|aojO0zSMC>--VUU&t7rgg(Rt1J`k2Ut^(H#Bwh|XP*XuZq z6>64hM-VSPb^#qvc>N(A!|+@5_Z+OJ9)1h+P1RPIusB*Jl73t6!r~jFGN6tEtJ*g} zUF)BRZE>qr&t_#wRW)g%TUF!wkwK%lmexAOAsOIwfa3f`@!IZzBXm0^#W>FCBC4$# zB!@_w&sQH`CiloS)3OCwzk1K}Y(FN z8Y!nIzjbFi8aIxvz5Z0{pZM-I0Mc4T1)Iku?oxSOp@s2fDrFmq4zvk{FUtM`_h1&(*(MoS6dq2~Si&_Wd zJc-hkHFc%kCbkw$8ILK26oV^3e(wP^;NJ^FV^?;+y<|!}#QK8=FU_L>vfd#y#`MJ8 z_*Lcx z&U4Mnxk(WaOou0bGDV58jCm!e{}#d0Ws1aOUvhm19R+P6Gf6#oCCPJrob`e2Yug1Z zsP+;nv`Fl=WvJ4x@BEE=!sK{I(D(k}E_Cc|3?+9nhFh;P_Y&r03iEP#zMmk#dq)9_ zq_C|KOu)6I&>FR$GF1=hJJvl`+8o)=z}eaIeWH zT7O0(oo{S<@vUZWx|xnDI7S^1kb52Ohm{)VpPLIA`zU zW;G|R21ENjKFd1%Ks{W%dPTG09j?u_eHUk`5IgglFn3j^#L!C{Xt&0Q%^uH!y9HKy zssv{z@;X*p@0xREV(iaFD|tR@Qm|HM?~zY2xWnKGWhcZH#oXB{b!eAHw~-@6=;jx> zNa|txu*U7l;DDHKkJ}4oOpYob^8BmGeVZR=fjmgH&&45>T1qto3+tjLJs9lyrDP4TQaj6JO5Flt{ zSxo+Lln9Q-+76Gotd%M++?0n+9TvB-n{~5eQHx9qC3lTPLeJiTfJb?CmH>^wGy5zI zbPT_W!$D!laryOxevS8XS!LnGv4r}EF_JN&SeZ&B#!+bj9k@)wM~J%_QSxLVDFk!5*2O2~hAQHhku8$!kL-7GSk&iRcV zFoOL?D7^S{8;|ihTJeZx)&nT;V(5qL&M(~Rr#O+`_z2ls58A7r3yQz0JKBUk_!YBY zQw`+)WAkIxkyMm z5~J5Ard{j=W)Ih_lU3r3VfmbHPga!nX5}}pLUqyoFV|d}IK1**b+TqHMJ@uZj#weB9ttk=M<*+~kcM7+g;IZS5{ruj`^P&XcNl zeqZ!=u&-e04g* zpcgbWf56)xWZL@Smv44V2tW1qShH2etJ3z8i&=#H0ll-aT+h4;-hQzGMj7tcxcERu z2zZF6;<+sd|2Wd>S&@xQt`NdGcS`u|J0B_(@mFbaan8(oG`IZ%tIAC3--o*ahcz6d zw}2XWz3^Iry-MePbuA)CVIx+O0>aOIW-HlU7Xl8tQ=1&{#9#v8dw7N@#~}i`0=DZ; zCO1jB^?T|Bk0YD%RK2?d161rg+!^vabld?~51O(7v6Y z?z8aO?Q8Sw{J6_eto?GnUS!={rDD#z`XEQ%X^NF-0-`d$!II%C_iigWaz#mQtdDYc z+6%{nkX|t6dGz%qEP0SEK9LX~o7!+_hAN=HJ30BY!A|)JMQxN}wvKy|hPL3i!pwvG z*BAA~ji&m|1tFTd&YOPamVOXG%sl1Y#lNC27j)C*W#AD$_cqq!8Isr>tQ*8Tk=wI- z>VQdTHTYFmnH=jx6M!uO2B4|~3=ju480TrMNbD?RV%}(Bj%Qf7L1Jc1Y)590L;C9` z&8=cMzHiIP%nq=`$-4h(n0L}?EAwT3KnjHdA2Xx{0>Gx(5xi81M@rz$xv{l?Ui%mn zl%le4I~aHsKu$sphwmU4K*(!mPtOKdQd@1Caq4_yJ#2Vok!FFPrclmZf(!YmpSR}o zVGZ6VUJ3NN$ho#LbNq~i_ppBgqdK*~=WreXE;(YRD9m;~F=N;e@M-3UUmfThgEp7? zZ`A#9>Iq(|5^yZme3(Z03xl$ zc(aB_VUf-Qg7wCYItJs1nJQ;?eX%O&wQb-K{X~Xlb}v2C6=1>2c;Fk4j?GLposX)i zxCrD#q?+ebXSgoe5R}5B(AoD)0YF!!kJ`6eQb?I|!0P0EixO<0v%V-N+})(=yp6q8 z{dXNB1BwMK?WSQ!w^j5TX>n=&w$cnBR!nwDCBL= z51o%O;ZNKBNM-LxVlREiLfBaQ*;WGYc-*Rja^Ww^uy)v{f|=lY1d#>*x+6Pc_c3Sx zc*S`nW^(<&pDk?mMx*n7bic;B@%%`tD)838)0}zCnISQH0a@3qjJR8-1avbLg`=`4 zG4{?7H(6r7oN!dz0ajasH6&LjTWd%QYeOvl3G6;p7FE)JJRRDQ(oySC-KTedIxI{8 z;I^GFIY`j}VnL(N*O$^UkE(h}(u+*Oc|Z!tI*tvZ2B6~kEB|es8=%tCd(u)lqDUdX zwF6*PQ|IU@i>Ft%>V}^aQ`_Hi4;)f_=^vkRe~?TeoqOTT7vW5siBK(;9w5YY2Wf?) zmG{`H)o)u3DSquhVdjNtvVTXtQt$lweh7Wzbgo%bTTt(OMSE}{I#E5Ry8#0sTZUl6e8ou&96p5e{UT22Wh8rX|6 z?MkmTB=X4HAoK}N+M+djMYRGh`g(Qnk3&Dksw{f%hNO2I{&}w=`|8$Ove(lEdvgCt z0Cg}sOk#~a^Ioli*BafvN#G79$O-)y&Y1w6oB}x7%ZdaWTXcNkbM93z>jhx!Rl5K6 zd&9V=TBAP!+y8WKfcq4GAs`K|1(u{=EP_KzCNEF}T$W*W<3AV1QMa#hO!&;l5O9W= z8<7XiK%oJ=+X6HnNo>CTCwz~XMA-|On8jBBTqWM)f~&Qmfk`FZ;rj*9q%$@3PRSXV zAdMfr!nKq8kBZzXDExo>py=-k3tv2$XX|a`vTT@f0~Gw2%5(_>hMf1B_*JcP8xW_6 z3~kauEM8Q(l{5dSvTg(hvE7xH7F$oZ{l2QhMnflq2%bsa43{?GG2o{@cp>NXOqOj+ zhd&6UcP!c9spylL?W#msxjn1I9l`ax*{N81Upp;;SO}tVw-vHZQe7wA6&$$ipKomMBvI6I%A{=YkHk$=l{$~d6Y9E=35 zUA(f#cIE!WsgW0G;kO9PBLkVa;761O%=M+mg*$@&1+vrm^!uDyqwBkba|`m$e>{Ct znGpc8gyMt}{E-;o!7JCBN%F4LGUhyCm9nZ%DuxE&ypo!&09OV#HDJ~OUL(m589?Iz zj(&CmnZK-xP-L2|i|@AcdraL^p??t~nQ(*7jg8^62vR6ZD4%-&uD!HbiKE6qmm=1P zX~8oSb5h*+!ElKQf%$T5d%*&Op^UALt2s#I?SWfsoO3rnkHqt9kP|w4H091By;M@X z5@|)Vm-pj;zJp2|%_!{az#RGYIUV@m3EqLn6&ZlvfY9&AhymiEzwP;5LuOSsFeQ9I zF4k{orp{nmc?R~FA!xFKAcG#nhrh8es3ZpdEb_Yc+%W2Cid>T@FgAKx5B&j24oe*R zx;^kpT>zkOrSAfsj0mSAw>{au^zl-}fwQ`vypv)lI>_~1&P|;2n;l`<6tW z_h){bp#f{&xdBmdCnb6>$m%*NyoJWOcSP5THP;=wpUk_OXgtSYm%H6>OR8@sIZnL) zu#d|l#&_^HaofkeQF%9gnS zqRJD+o5_I0P_Fftj#B8}PX7&G02NFAK4rHMH9$vVc2YLn(V}@#Tp$qhcCa#Y^AS%2 zzze`zu^ekJ^f@D(BkD<%aG+*7!G>UeOt-Ns@Vk$=Mk7VVn3`D(JT7$~bhxwOhHY^A z8&E@CE;^p9;NE_y(7fRGA3oN7%vlT&S*P>73qA!HxmD@Soh@61u1eZD>eK;wSvUT& z>xXpGd6G06)yEGE{whWw$D`*p3>tYMt}cedHoLa%JHNDz_KM`xj?5!qb)Q1k*-S2e2DWib-!eX3x|ObUhb5s<&72NqDb`45()B?Sm&u zSBFLqCW628W4sTPeWG&qh=us_-sY9Gcuiqx}`~kRL){m|YWr!Qg^$wJ zPV8An+h4U0OcSg1suf;$m~w>Tzj6%x&?uLr4&2JSV}i~WUf6Eq3OsCHuSFoAlZDx3 z@`TP(?L%s*fnkj{=Z(y>yK9Z!hdT^>b;|HPH@6-mrEZrCZs>Q23gxNkDj3HTLhjyB z7x}%F#45?Q*F~eW^S=u^pmx)cb<1Xh7ngQrtq;C8gJ*o9c>}!oBIXRd%D~>k-g`za zG??Y5gu6ep&yeIY>gks54Oz z=V~ek47`91*TtEzu(q>@p6Op`U75V!4CsF zk}6@XSw;RY&mS_RWitx@hq3n#Ybsm&h6P1HM4F29B8W&+iWDJqBtuhBdXXj~(m|vK z0Rg2KiPX>pl`6d>qO=Tzj`U7|2uP?2?Oln^dFMRebA8wQ-<)gCguT~Z>t1*Hl^|SS zOgSgb#YFt3!5;NmwO^>mWuqbvnea^2NMGTQ^Un>slvzc2U|>Gb;zmO@`Ilz{?X$B3lv^oKV%_ZA$yEUyff-CRPz&h(~zlJ z^0PhNxsCTAV)s`QQ3-rH&wpot!GulN$b)$Qwru^jvW;63g6`^dau@3;1kY(R4lq2w zes$hP+Fo)lHZAtca7An&PfOrs$Fjc*$4`Ac*BDv1pc=RMXgsJwKQQw`R<2$Mkiih7 zI^r=N01%B|j~zAg3=e-7gZg%~2DH80r#Bx3teSe^j6}G@=QN(LTYnbh@U0~dflc-RH|VUa`$+ftYiG8N=y4d0 zS1YL^FI2(XV&^_sx-BCM4&pk0hl9Ud=oR1IF{!YPr}afK!J3V`H0|uUfw31 z5#amI(35x?(?L10Er8L=F;nQ+c`<@eG01DX2)@5Rd`lk?fEbP4qDX3%7UXpJ$U@Q* z7Bof*M?}+DT;*Cl^-A$kRXy)TFW7F%SCM?V-BPt#(y0DlA&hP`bT66R89K$Y>7aEQ z-^jmVTM;x&YCO!fuECT3&z{N)9_~J6=4LnmrcOlZ4z2kO2i9PPYQMHyd~;0uK$DNl zF$`OK1-QCDzXLfzOvu^6y5!t?+9wZbnq;14{e%f$==@m1x)R{_%W1u@MB7ED`!L?! zVI3p**5h;{N;6SraVwOXWny>Sd85i{a*Rn&9v_r_^_%}AC8ZCb^Kh13vWPpQDD|QJ z+eo+mpodH4JU81YlPcP}#l9T+GzgLlmF~Fp`Ue*>9{+_%F^rCE@0MIb4ahK&K!ZpI z0xQkpbuala{RrSJ0K9MWXbCy~GHrVdDVBnFWOBQU{V<9X}J-LDVAm|o(m0c z+%IvD$fh;_8gscYh}I&|;!8CfoNBc@C5DYp{wvGpE~9Q1?wuFvOyvnEvi|~ee)HsV zZP>DtbSZ>8uTPb{Yo%Bwo~YskytZjQ5HE`*dhteeBVR1+cM1=}cDJ(k*f-Q*hYyJC z07|<6$){XVroVDtIW0*@UdRKdJPK`i%KKCvYe^8q>4>%;kj)})IgW{YEoX&YI6nc) z_rZucJ({P?Dr(RzBZ`~%~yKu9Ybw%`cxB+RTQPhvHVGp)IPqi}eZJd39 z5|^xz!5|m+n8gXVI6s2x+#$kH0|0F9VdgAy20%LL{RPb|&Hl?f zpWlY<)434l-s~Uo4bZufl(Qb`^!ymut=E?7Pe@Lz)0#qgh_WUcQ&qfAaA5h9!l<*I z?KG!n+3wc6BIKvj_oFz};_(2JI`%wcBLnf;u+d`^dsK(Qcp~! zo(_JP%|L&2+}nd4M)_h>oa?%$Wqaf#{Il!ruw3^GmLv8~48-15&1q}^RQ{5)Uz=kx zEXzISylEKJi}(>tARGbvv+IXjsEzY)+lvI)mk;5Q#L^p-Vguz9rI=JLg7(3D9-kOn zf)A57;7BVih%LnUk;K_TxC-u(Ci$H`#@d(|lHN%a#Nr0@V9QH_cz>W70j_x#@j?6V zA{agaLlGOy0Lr87$G+~xzVTRS&#pzow>1K5gut&G#|>D#j%to755lw%SSaJ&sGZj% zWJKn0{K6J!x~{kR&(00HBc}3#*!fy;r)Sb^wNMPP4tF8gPsCc%$qHl zSWCiL`Nf+axs{JYw}O-6%8plsh;@Esw%D(d9$)jd8BFmWyVM-6;$CgNw$V%6&#lRF zzEyX?9WA3wDZBa3eQ#>D>KLnAz2eJ9jbwnQ&1D!%3EY^!?fmm^l{z*;#x#k=1yKpV z*hOFA4Wd%XOEvdY>`Vn*)GY!PoUP687XAI#Wr~x}L49iyVB zB;Ag138TIdDpSU57E-7QxNctL0T8>l`;mj0GT0LlNnEV!Z7hYaJZwU}yAAs;-q-pe0&4(?~dOaG}CXCv9=#<~&m z&0;DY_Xq<`Po&-9#nbYg*IE3t)ae82Os7I(fsVm84`q?_?PPocW8-vOjkT`GRiLDy zHRk4#`&P8BxnpatSdfF6EGDdmr-q`a zeuTNU1eCVHFZs>#9<(`0XIU-mN9t8erH`n83WB$C#mKmmpzOfgN|EI!Sc z{q|f!GEJ9Kv8b*hYj-qSd!gfMVxYwoGhDog0?2!D%=+_hXdN}bg$1BG*Tb6YiuCk8 zyGJ6#fgHLr&u*{Ma0eWu!*{J#& z1`DGehN_6O{g>OXkj9B;Y%q_<1m#QG;Z#h(e|S#Jq6It?!7dk-Kv zm&!!83o}(qFF&R*zGZU2uXBv5*LlNJAt59lo5X-hXDgB%W^kjouyQQw?yKorx^VJ!E7LgX2E0K^B5^b(L-*7th0uhLl5Zzx06OI?JdU8t26f?lLPFshx!|}dNLOfUs6@G6GEUey)bvZ< z&hjm+94Tey17KLCV&-CKvF;$6m6hU4q?+c_*M)Q?ii0L%^Qx2bIR1;7C0pm=BgiV`}K#r@_Mu&*VFWa}m9L%&{5XFUt z#Kkl_g3?9Z^{;hE95q@YP2-mNh$B%Y#dV;U`dm}&8>*^$iKd@v``r%NJ6ChhMawzs z56=CdZ+%Ecb0IMxP12d^#gdx*9HQM-uDtk`jO&Oj@$L(_rulBBM|SIPaJE2AmM+*} z_1A;-KF__>0bjWzPK0Z#uzxua3eIx^H!N~cGF9`4-{e{LB?q3kK~XG76L=^uoS7$z zr{^EgdH8e2+#_weQr5<+CE&}k*g4&>^I|V6p}BhPtY?8V+si{=!^-m$pzr21>hHkq z`sD3hkCQt6U*9i&LqYCpN#^Ig=Vw<7-yu!9GK8CRf^l@3$+~Q$Z!j@ZT6EaUCT`#m z2cRd4y`)^_ZNwzKc%yngmujLIaTxEr6$ZI1w_Tz&`S@bg`t#Ffnd%0@GUbd@kKfpy zv0z_5{(iLbK{D!K#Ocayj=A74+pL3-ni;MjpMb)0o4+@wnMJj@(RUO#d|e1s5;L=z zlEAI>v^!lC;dc<6_J-M`%wZ!hPh8heOL@&Vpb_;%ffgX3#r)$qWc!@MG4?|$fJzRY z^B&o>5Pk0&m-%XIKcQ(ff#$;b@A3#`;ry4P$9@!qv|O6QVYtxs&d<`|@ls1=yYs|l z->&y_%0{7Y^fI1%ozxTbP}sp`zR0 z)wa$C;l)ah?7a3NC2mCYX0S8NnkQoVsMxE{p9ZJ?Y!^tReMmdA#V&#Wz8*4JEeRjc z=nS3;TUKT|2p}Xac^5K~oOjcXg4KmF%OWzpo_eN8H0|6{yQhXuaAccr=iO%KWGiUv z^xcqcdY0Re*~`bfF-{=Ca0$zBvmBK1Y5$D4^}P&npF^rIO4{ku9ee>?)n5wLxLMWY zG|L(W$-i2Yv_HZ^9qOuuMFVXNP&eY<$$FRl#&d*x12L0w(S4)SPD6%@aD|e3b9#aZ z1OC^r7N4F4b`JTM1^DMOpvysWaCi6Zl+KmQHZr6uhwBW&%-DPP6yeI8No0v|#QW@_ z@>9}lsIUb^{L8k}XBj6%dwnL`>2ox9I#2I%;Sbv37w{T@l%W=1h74<-Tlbz3>0@NI z?Fy{HsX{PlK|_L~hoF7Py0uarlb>ZZHp_E8bX;G>%^1BtbQ)E`IogXp$em%7su`Y% z&@uHb6eV7TKQm*{Y+e(6lm2_Z4osB%t|RUMMg$u!jVGPVA7oAUek*tsrfTOkEvPQI z6GXoW;~XWR;I-m6gKlyJLgA}%>Trs8?af>Xh?4C0vFsw9t?OawYdsCy@K)o_r-HZM z7#4kf_iKM#l19orK3e1vn}BQFJPnW%8&D2U4nrM zUwmKv`J~f2j-wZkVC~f9*`lP!?Na;&!JcFW7A`6kPKI|$klXNtL;(D>2O2H}whb>~ z%DbUVkQ#B4@s(cwO0ryh$%eJ=Rj(~Z-JCNfKDYc4vB6!|f!4D-o+!F+#`KMAM?H73 zocEpT`E1Wm^3`xc~&T*SHC2o?1-Fp!*f0TMz`Xrxj@KO4}T-5?0Mfa0j z>57u{1+$n__u1MBSfh^|bhtEe4s(smB$EPIX#v7$GYe?E6dFpVH>Nqkfz(LSTizeS zMqh51FKv7$n8x(H8O%9dd;YMP#zvN>f?b54#p2Chf-k#5+NYar=Q;SWylV8G72y8{ zgo(e#t1UygLufNmd#cKWxoc0`&(ZSVQ!#EH&{5J>fl$>A-88<5(f@vB7d_JA$DP3i zbIy>rc45vHxA`nw(&CmIFc`c;>$fR{WqKrCXM4M=OU7`HfX3VnQTj&+A`7%|if?Sq9}4vblH!;C|TONk8O{m&9cgc1jQ zQGGdg>!sb7JVGg;pk=`TNPT`qqW%7D0MsRxuW^$t(=SQCJ;(z$OOCywpo!T8gSzCR zMFj<<2P_4s^8BO($fGonPeb{Y-eRRS3La3OsrcLE_P;(T;NMVuE0gW$r-^Q^36tmI zx|lKj;zSh8vpqQIlqkSC%jP0rD)Y--X1{(wQY&Ee#OlYrrG*JlhK1o;Lq6MQz8m#)%#{$;PW#-{u`gq++bjb z9VA6Tn%-Os`MSmOC%9ZyBAiZ(-)Xc*TNDdgxCYQiX}Lx-{nk~^IL8}?vT6$it5dCr z&kE2L+EdunWVT26X&XmxTWH~AFA_rvm;uw4(iYI7fbKpFcICUTgL0gCdn?G}aQBKh;W zmxvKIYZXF}4*J)ZBFx?ylxA^Jdm>^ZYcJMOlLQS+-+%+3>gm0JwF@bp<#!JGs;N7H z3YFT35|laXAe>ey5Hih3O}tr?2_RQOcqD?{Lt~!-x)M-)(vZ9i%BO7-q2*1Z1>lvr zVt|W8a8W&R{2(IU4-kUBmnh#0;{>f9YFNm}7SUG5cDfGSi(wa;Q8S2v5BJ3W@M-99 zr0Wj{Fo;@1i$J_h8gELGE5$G)W-Y?Th^C@q*!HExU1P#8U!4eK4=;qu9*;} z&1lb|oEy--(s#6uUX26Q#r0n4=7^q$jDlv1kEe05CN--f>+3r)G`RP=qao}6^~G!m z$yuJJ_bwb4VgvR$LmcW$N_3_#RqXC5`M9s%^^@TYVDQY$Z4?7v{I+wy$V4+=j^{JN z1cFrl^6S)1Ca-U!^5JbHhb71`-7ug!i;1w7r~S;S-Sp<(a8WGDLa}gI_`SAn5LCGD zi70oq2^lyw+5P|wSH6;Q#u@rdWQ5=Dh_n#ca|Q5$-2e5}(pY@B_P;)xcw1e=P-4cO zKC*6jU{LLi5lc6iJpVtwPlklUa1Gn@A6$41b#r2rWD-g{TA{7&fAb@y_^Q8hj-TmC zpNvx4U|aCnq7`n0Kfh2P4WuFuvt90&0c2M0SWnKJPVPO&46MKG)s1)(fo1~l}FHFbraP?KVHOE9=oX9j$I5oG7sWGDgDu%k3~-7-GYuZs7E+es@X$8caQ zO%_AlLkZ0vfU@*#aa6@))hNIuVrMx#)?z~o!z=T zEnWERdLn8F3C1z}$3%L(t*2fc^ec}d?wQ7eTuofsTYknPsT+@Mt{Xzz#r=X8IJ|MDsVbN};Szk(_tTov z#^`y!pKH;_Baq9gHTRs7T(0AIf_W^LXukYBM-WsGFNYPqsOlVI3bRL7MPz{R;`jb; z`fHS3b|%@}wq17e9~cb>2mqKGV9c{f1k&8J*)BUc+hb`@TGzFs9r62eUNC-4LdnLL zseE1Lq;G4(1!y3qF8f)f+ohaq(i}fZZFUR$+k92qq~dG0*`|xN8OdAK|GpBdl5abv zut++Y+J(m+f(XG4z)_}vqnlgQVGWe#hn(GjlUwd$na2nTXH}n2*m|_`my>sSNNfK& zd{C0DwTw-5($c=XMuZ)-8ELmN&m@U{B5{_G;k9;gWepyEQ51?k3W2zk3gVs(U0w8S z?gsW6+$AjB#xd30wng^PkLUh+_xxU^pEi9kWUplMrj*6#zU~7n$_LN{AT~XdK|Y)^ zz;gt!G)ZJ0Ot02+XuXR`esN?9P-ZP3rWBzLV@#TytUaPz;KmFv{K0ZVaMNs`KTVJ7 zu=FSOUkZA%e_uqlc&gT&{aUxpZ2J>L6s}y3Oh5LX;UbgC5BGB>zP_TmV@=TsE_5nx z!-4qh#c~Nb9lROjYK;*&*4=g`s8#2>XQ!RI9UW54$w*p?{p6taRGC4D(31cDCSMND z-Xb5X*H@p{8jBdx;#&nj7>+V z&btaFpc&N{q|f4O`U!9E-6BDaR+D{qG1+_k=zb4wN3PEs*_A9gC1*&`Z_E~csqge6 zd!xtEbB*}gAOT|UAtXRV0((e^B5opxVz>f`lZOG&EB*F{U?y1wY)hCB|05N8m10Bad-u zWPiPT3MPmVSH9Jf(MW%H(f#Fc9?)lr7xSkxx|jWhl^g!rV~nl75}Nqx{4Tnad62r$ zUf-jdrC-Fu6kF&8He4-1bXxqvB3H3uipSpXMTirT5^RaIK9`7#$jIJGz|Rm;JEby3 zoGfd&9mNwRz!>_k_n8!>lh>>2;>-fWuYZ`;T0=sJKD_uk<0XLPB_@tH=oEia8PHX5 z+bILM&Vho0$)X4G8QNMe*ru@~c2kasR~KpR`E59(4>9K?EPgJeCI%QI5^hx*GBd}Y z4O>0;M_57teW#WT;-r8nsVMXsPRmB~P0QkD1BpdTrh z89jVoUhcFfl|lK;!{h|xnPA{=#)NUMZUzu;%wyLe3(WFydf%&y#)>(WatdCoSCW>G z5z4*DYipr|>z<Vz$VdA3+OKtXo; z#V#_Z4*$C@x{lySKccKNaLnRX&x_`P`sk<9;5g0xX8F85Rf14c(a~y z^-SZley4xEtx(43YH}jUqC3Yz;vUW0ZYqfU*KYhah1XQp)rq}m*4fJ$yC^4+@jD6) z(GY=`zz_hZIYzx$E_6Rm{B`Q?Oml9g`6Dfja||gdxcM zw!P#8xLK443=ztYXS>i4if>}MVm4ch(|5kI;dbfP!>glQ29CF+{rNM9X#MN99q2Ot zc~822fqRf~`b*%eR*S0bF+Lg&;#F=#zaDhd(s(25adX8o%zLF311; zGsd#YvdU5#cq7@<#B`59p_KIOvh#=w+@}dG*ZrNKJtXCifF$+7%EC?6e^9d^!q@bq z9f&n zPhi8)1nC34UCqryBDOP&K+SO?kk8i@*iZ4zw75X&>;CWYF?*2t{pL5JSn^}uO4%NI z!r7t7y_IwoNk-cq;DC|BrFk~q*GFjpd|e+7>hD6x>IoU{wOr=w2w&M3HJtbtj}2Iq z`v@f?LBjvJUZr2?i|ErzK5!b?_q3A#N})XqL#~DV*J;yKm$(Pnd(k^B#xAVB`6nwT zF4IG#o&9FR&nAh!)~R)i`j&2Bs~0?v7HS&!fBn(iX1h1&tbewQdOe`?H^X;?{iqQ}oAd?aMG}F)NCP%;k#a?ajPkURkBRSYc z2i-*!JF&d{XLY&X`QC?USad*_A#Z)=aBj98lVHTGvmj#ycqwy^?&^8o#sa& z2R}@}ubw%QoA=a{r6H0fE`kp^25`khNZ34KI#I%*5Poumi!IxH|KS_`2hA6Mjx(fn z>lBI5R%j+%YmE9|y8zJBwz3B@l+2(&*0P@-k@A@b0ff&^Pve2|$ zXn@B2*H*fq_5bvN{``P!ZW2E{+mFQVUBN3R^hX*w3@u9opDb)Y{1 z`lNOR#8WWh0Z119JOt;9U-azzyn^-4S}Qas*?#NCu~VU- zhIKnkwD?AXP9fG}qObl)#OrG@%-JcYCanoAU-R*xS+MJS*gD4|fh4w+w(lzG)s;Wt zIiR!h>3Pz`fkx%n$aU$r#UB-qy-F+gNGUGHI5w$4^}?5*G!xGG}Zg| z`R)B+K41n4@j!^0_Dzq@YVhxSMr{B9MmR7EU!Hm}byyv~9d5}{i(*c@rbsncmm4&{bM(P}d@=zLM^c9R^g!HiFKqiZuvt5dx9ai=NV<~ddkD_b=V-@o^wpD> z!WW55Qs{Qqyu1Jne0sQhq8&Q={B4LXChxVBeGrn(y4=pA{O9PCh z&_;}jLyPy}N$np-7+0E1t88jHt&FW5<#nkOQPfJf30AjTMjqpheK(zYc2t*+D_OEP z-xarC1tHuEMyP-jMs!xfKnZ7jF+&DGMf#FCEJJ!oICx@m@7YU{|sWEy|QO@ZC+ATx(>!ZYssZHTpk<@V8!jz7r7L`rT*%dE=Gi`5?oXfs6k@L{w zb1#}+N?1^+E>-W6FeC{Qy1XC>pMGKt;p?;xe{AsyPyd5{(5S`F$maQk41PYrJR+uY z>YatT#ncGd>vfIgLJaYmRJ@KzRTjPm>Odyy10h5LVV`V@3)L0;S?GF{okuwdQ}`B* zu^jv;c0j7o(T+^$wfyEMSTy^$u;X}(t-5Lzn&kuelK>Z9H=l(mjtCwxW3gseRO5v2 z-jDBEFBYjLUYEQmt_@Ii-%T}N4mh4hxMSAMrbb04U%}GUC3U4Ta#I=YwM0f_Jlbbb zVIlWy0vupBEjyK#Aq1COd{iEwlo<6H8-yO&?@z-~SMpy8@D#FZle+1TkmE4bf@hC? zD6W*iFB$ZZBKw6BZiyrnz4|;fCSxxXx`Q_y;LpVXc>13=wdV7$7kiwEvWt_id0mb7 zRa46H69(LuYy7JAt1pAO&%U4bmbbNbtdI5E1hS6Axbj2bgtzNpZ@*goN{s(b0k;tw z+-qa=&4&qcuW9L&jSrL0uTMz27e@xXyn~aU#$jJx5#f(kYRxw;eh}NBGpAMo1H^ud#%F! zh?~ba6pWqvYJq-{8&J6$kDV2qsmzpJo%Wjc&l!oHqYn&A;@pwdZcV3#nYgb34DtO2t}mxB*_r>;5$W z?F0@CP3f+tvoIW0*I`gj$KlekWl;R9UVlxH6>PIab)qF4WKN!0WAqJ|fnc0fsB`nt zF3GLb&xf3>>=1%vRp0}%{~Oi!SL!FyP9Hk&>_vw3J7aMUC!6Ph7P4qH?(@qq$)Fur zUAvj&QKF@-Ncykh4?p!%$?*c;EzIZ+#8L;^F>1H$NVZ#nKLjcRUVvNZf=YlTezvZvdOa3$h?y?beO&xp(`Y$NZkDgPt~% z5cBD7da?cx7b&8pnV+1P*AB#Kjmr6SlJ5Gh2X zu|5Pk`gk#%7!5}~EcRkt3}} z|2(FFD1p;XP4fXVAp_|8d?DOhCI`jp*Aerz^HX6HV45_^L?~6&>9yotVq?ug?~-`H z2`N}&0GQthB^RwMr`dVLS<6iGq00yG1O^mOWafAMju@2Uw=+ap5Wtjea8K7)H%!>b&bV>Wm z7;ELIisRpehVLGPfipS^8A1OoW25-*;u~XtslaEj-rr!U4zQ=!`m--9* z-HTpFW4Lxa?=<3;A)|ua2Nc4hI7(`IPD9tv^2W@_9c-o<^euW({MSq;FkaWPBb3Tq zP>}oo=jQ(XsextRe3`7vO<^E_&ODUmJXd5pluUR)<}S3$+`?9xYO@!4x{IaVbrxM6 zCVm!&aZkPex*w&0{PcUp9pXAFN#+>QklH4NYx6#*rPFp&f<@E@mf#LolfpVGFN_G_ z7NeVkIh$D*|(0SJ^nHX7NmkH z$L>sQjgNS>RRqTzEetiRq`1epx{V}dB`=Hlyb)Nzyp1&2;Z?dnw;;y;L*nTnQ+n1jbvfJIXWEnV-b=d< zzD=TdgsA6d%RU+)AZR*J16vEV+yb+t9>^-!7AbaVU4dYmU+>vL*>cWFqdoA#sL!sAPl zSZF75NobTOxw5b~eBnz~=(D6XHolXh1swJi$@Pd1@t*=KR%BZ%Simj&%yG+!h$76r zN|3^C@x@BQGd2hUJ4?@>nQ$V}2-k^NcPQx5lh>eMHlI(Wp=?Px=|_k}6+084Urg54 zYiRB`_cxyYbWD+=$KtQk#tU(DX*6_9+V!`)KHq3{GcTS?dE2(TA=L*!Q=4Gq1j0f5 z2W5x`()e{nX{E84#!Vr|x@*uNtCYXd5!UB1KK{23D|z>*fkGIR6tjRT;jNXQEMaN& zNohVlKD?r~?SqspW3w@Ae%@#bgRSJQ-4Rq~s9xK_U`H5R?IQtOH0sJND?^Z>5ApZO z{yVyX@u~#og!y$aH4Ay}Q`X@q!l++#Y2Ue)($37NAe^p~gwyPBC6?Pb+mJ5Kx;w`H zodxU`r=hM%t~T3b{zYDGNH9@YtA>YgRqz%#o3ZYsPqYp95+nnidR}vQv9KGC8jZW) z6(Jkg*%Flzx^!Sf?txr4VR(DDz%FqUt*lhK1jkHt_{ZoZ_6{El$5*(YQ;$d4ZygK( zHP6nc&3<}V-0&ru8sPF(Bt|IgW5t19Cv9|+$DqP(e7|nOZMIBp3e6}AT_Lesg{lQ@ z7SZa4ilOBl_X8J~@e7qmA1gy=7P?Yh`K0{(9N}h&oZyzjtr*;`9*z=4CZTUHfmdKN z=lIAcNn{mVG&~@^k@P>8KR8WLtT!;_>f0y4E$=ItNM>mIcSa;7&o{Za{?tJf*}hWa zxtsO`>M#o*{tIxmFo;sBy0kM&%uiP0ulXqHB?5O1@(Xi~$(I1(cCdvZrqG?Bf-;CG zt8~PiSJ|K7N4Q}OY~e@t+rfU?T|hEa_MK~=<6g>ua_Q2@h%}G3lF31%dVdc;=XzRb zZuf?cbAn$Rn#?b>)U982YmzI$E@j|KsO6PVri=t({7NiJ)OHSO`iN4);wwH^t2$Sp zH20H;$7VCdJ&PbKLzP>xo+I;frRMqOI=JaK6efp5^Fpo#nCdUPBcwl+MD${99c+@Z z_##oIBu9~PP7zQ5i<`(@bzfTWeG>5YPt`!|$`Iyl{d+fTq;!FUvre<`5;pJ^78v2bH2ZGMre?6mJV{| z=PVu-B@~N6CyXCW-ZLK-S(i9?#13P5GH1?Eh$M&Zmlb| z(YkI7;Qef^@c{1V)FH~#6jJ3Rn~V=a+_Z+7-9+a-XLd|NLlqSEvVx02Gf;_-Fxt;A{h#*92nl1$N7#zXkSyTF{IvPz=$=K0o} z-?3@cez)ra(5fmoj-PV!RTf_CTY;Ci+4twQL+^!a$(aw68**Q2-KVmtyZqsU&JyE- zg#E{JHmT}Ir&_s9-Uk@5E3oM{YmSt#Z2jf^(V_$q$zU_NEwkU@=4WGOgVTjKH{m_! zVWU&faq}-VQr?qPe|C@|BfOB3EW7WMh=z(1q7?Idshdwv=Tl85hn(fpj|UHVfH1Cn z0nOv|UMI;pd|Z-~Bw&XxxF;X9uTC>rTrr#%DwI(kxLgIPm5%=gbRj3LOt)vNYs#m7 zk-A$LDta+L(enR(izD1vs>ICoZvN8hiWe>|iS~lbtWtS#?gLMu1ow07K5yKkwxJ?u z0gW@KnZjgip4p3QqnZh>Chjb&Lq`)4er+!Xg^uQPoC^FvLvQTu$X$yxocFA6zDn72 zN*iGXBh%3_NBuMCq!V-?>h8!!L%87}_k+M#R)T{ldSyh-){iM-d8Gp1x5u;g-jC1=e;`E>)%NtH0Aj9oSXm@H3#3DJq+>y6*q;zC%Bi7uFP*H zxX4Y#gr_youzoA^H2U_bU=46lAMYT-ypCMPykK;43Zhi{jal}0q%wZZd?g6f6Xkan zf&5O=7|b1T$2%!Ola_CifaUzfC`&QLp?~!7$eTs%a@OQ@V}BQFa_2 z*FFHIPTyKju9KIV3Qmhyy!VT??vE_UA>?R0cknNR_YZZMStOqykG2gLEq|yME2X|r z9kA~e;p}c<=C?89GP;w0p`@H+Zc^)?;FLPo!2k7?J0s0XilWsHwctyS;%wiu*I>OH zBD;)rKLXYJ6b)F7zbbS^0?~=qUA}KieFMdA4#Ovv?hg_LtW?}G7umRhcnIv)dFgBu zxriryx@TJ9=4_}~nr&3$ZZXSk7 zuuMcbAJbHCzpt<59T9#mf86?XZ|3FvUj_18zu0z;tSWB&Q%rS#KJyGT%RcC6$|h3I zEW2JgA22 zRr{H{AkFSeDiTV)&bzi)@9q>wN%{k6NvAaTay$2Tt+-HMApJsYMAia^9sY4GCGHv2 zuBC3%W>v#{VgF^RO0@u}Q&$%~%Kh4W8T=>nxPX559~;XrCCUVRS|iL?x_?g`^rRxb z%@I)I_#i@GMICY@0d-2rwb-YFHB36qt_BIRU}7~RIZ01ags?kYRx3ZROBRcQ63}lT zM#nQ&#HvzNhy$pDTb&Uk2VvsTm{qU!xwMBZ>yO8<;l{LiRG`JHeSbwb9Y;7UEr(!! z1u&@K50>eE1pW3HLaxo?RMRr)?^RA?xoWVjRjpzO#F&;mpqCV+_=s=!bFo9`EtkNN z>%&98-{=s7)3~5w+1`AhNUpv*_hZF9o5wQ!j*>Fbu(J-hXK5Px^wc zHXnf8>dPG3iYC{-jSx~GmKOi@bB}hm3I}+GqwJc&sOPmtdTwPv)xTE&z%H4qdgoUdOo%xcV;StV*lOggQ=joL`wRkYXktAu)XE9t%sMd(Y<4gZbcbud7>RYGP%!%Y zDotbp){uRv#lv#GE-a_4?!wA*lKH+h(k=?!YGLQsOCYoI{DR*vX@_+%408wZKTcd3D?ya+SRM}Z)Nh-W}t zAk@1*NkDSg=>HD^cK9)sV1p|nvyXHFc7*A-P*#7o%!F{^p0f!0r(|QV8R5PI`s{Wd z)b%(l)dWYt?eQXzR25lx?!}6{QLX{~hHQNlhTXs6cf8?B1Z8I=6L3un&@VQH;xvuP z7R6RHDt>gPUi<9y^eEhLsDFgUMnFZ#>BW3r7Q37|?WSPd|Az81WyeMCeD^uvHX2rz zpV6+0`;GC^Z(f?HZu;TBTE9Y0shIt)pxnBXy*;RW}`nm=|J_j$Bc*3)G6TC`PtF*VjQ2 zz!0;&u3V~LY_##*2i4i9GY!21q7~z?cTP7^j=ntRz{LY%;*Xg#HWsr}?2)T3evwJo z6@Y6sLYbE$u4n|X5UWf@h*VOflW`zJw*6#ZxFm(uk&5D!0!7ADGUMU4!jcG9h&IFU z#?Hl}0!^F7l%FO~t_o3(Ikq@%Z9eOzn-{A=EOZ-Xzc;%_6=Co8brz@kOxGot?3}yx-8LjP9ly7AsM2qwJvH zi#pxs_x;l86Aswnmz&=_$QybJ4=$E`{_to-RN6V^TitccgUK~DAltfkx+pl+Z?f{P ze&4el#&lpn_iLubX!-W(Bavy}fuOd4r&DSdjN&+Fmjwm5C^qUmK-TeSb6O=s zgBW)-(wSkC^Q$y*1(k)<6U=!G5}!vc<+l0Z@LOu;^$o$d&Qp(8=zA7)b%Id_RC-Z11ezWFFA0m zS}kqk!q#zR@4OJu9ZpF~{8Y2skdTe=P!7$suyGjGIx~kZyE-km|Ethx9bS8(ca_lS z&4w64>jCQ4$)zYL)4bNk@}hUgauj1agBe5NGI`=$gy=T1VfN))xlLrGbVR@g!E|^s zG%8ib8eDOMuXd7?KVH)U`jDXo6t3E~BszM7aG;`~{PR{ww#Z4m3de<~7WCGJJiJS- zr6RXp)kxZ;nO>e-+8SZQ*irU#^99v-e{RC2kaavb@$9II+v%sjGJmt%SZx?z=XU(cci}Rk?gz(Xp!JQLv%D2%H7p+Ljg8G?0v0a%`NpDiuy92-j>ONaB;4k_uFh}7YoBPfr)rJ} z^?iMCom*snsnR@R>iHM?4uuehekeDF@=VD{35U(-u4uQ?u$14Z_sl|zK1Y@3|^8~#)dat>xBZ&ZA8>Proc z;&PSpuu)9=;V?!`@@k#wGI?HA;7AxEJco?acpHj=Y~O$5_?S%I?k>|as=uq3dQ7f% zYITv%c>|sDEs_wSAZ+qBDbk=Q%2+lBX!?f4J}zCS<8dpQpRQjX}shQDmAa zsV^)k&M6-0Jp*>KQpdfsLYxa$@gH8P@4T{2I}@FNs5`D%d@0o;U^p{kPYk^f&4#EasUO$+eth)^i+h$Y`l&r0xfDKtmu;~sy9~k z-y0j_i(dF=@f%_p_UF0iJpEH@WX?Fq43o|2S{GTwztB33Vc}C1y0szFJ{@}5RVd(S zB(kn(E!H-zd9BDXd!)r@vXQCLag%_$W@u8;Xw zxp|Mg>4fAeO$X^Lfw~arwK>$aA@blfA2B+ptM|aaj5@(@R|Pi=4aDZ!YIqCzZ8m3E zG~b4$sGM;htEyfaaT^qTmO4Xu@6$hhbPTzOX{ zIWzl6ndRYp-Qf1GyOegPcP@D@nO14+rDqH${|&?~jtq;dGqC0Zg)?T<+0RT3g1O`U z@3oa^fazAz&Rf@GpKqS;ubU~Y7PI&5SdYnBG7yIW!EGBR)A(W9S#@=mmmVVXQbYe) zo?o+Pz+wcDnz_uh3UDa>U z*n6BAnvxYd_FoI!uNDDGKnyU8+*kI<>mHG zP$}Sbe?NXsPTLI(A=L(YyA0c)Yydxu|7Z*`*~yNe4ivqjCSX?)+U77=l=aVp*xebU zw*Nf7*qXXGHNG~u;{0O7(Wpk~_}7u7SHP;_S1f%PrF|elmm?}QdvR8T>!_ z$dPSD8viuT2vm$mRCt%~I;$vPC~{xpE@6(HySD633gXYM6;u~$hBe~$=Tlw|B8LmH zi8cyhjYt(Q+!sDFF`0~9o@u(j{xFpSM5{$Y3C5uZ_fum$UGuTct;%;CJ(02lThrvq zg&8$HEgIi=#{_=gqf_w{0J>FNIwZ9sB+DS_L=jad4MA1r_&q*1{vIx^8feaxJrnXM zNJ8mXbM&vNjp6@d(~oe34q$O74F?NP*eD5gFeq|AYCv@Av3M>?N%qtKgB_Ba`UxyoLbp0im9HDM-F}CB1 z8l0K7^U>NH+u+5U>_YE9pSPEYY!+>Hf(j}zZRPKLW*xC25QmZt?|vLNwkSM3%qVKy zWyv~xX-h*|Kr1i+v6yj5G=*08fuBj~ctot=AQwX9o%_IysK*a{a_lT{CQH9_7>Ue*Ed64ig^MqO zQ<0*kVb{>UY0d|h%-=BnfvyVV>N^@G{Vyl_R8}1(U>0sl(yA|DHON2d^Jw(ggRR5* zqh8zhPP@cl&Cn-F-YRb}WfbPYgQxF7B50k7;Wtaf1fo3r_-&JShd{t*b|O^m{rm_G z*BVM5sCM+gLUI9|vn_Z~Eeep>m}H(EX{yVtaxcDSR#XA*j%Tj{4JZ>HOPX(F6KX|6>FOE?#O ztsT8q^h)^9@r|7D9?C_rj|{R39)z}E(?p*aPloT8bqR3WNdD^yz>rk|9(*PAr)q?~ zy;)&C@`c=mG9#*Ia@1H!=qY5`8FlNAt@Hz=tC~-TqU_&sVARwB>+R!Exy?dTd-2!LcBLwdYnz=@)bt=ZY&H7&|FJW=fz8tHG zpe@rcU>KhWa!l|Q2~80JPFqh8q*d}=4NEf`n_`QSiqNEH2tY%a!*I+(QJ+~GotOuc z2eHYt1a;Y+ESLtRQ-`h5lSck|*Oz=D3#TXDOz~Uq`%1`vK|&+ds5CtKNEGET@aBjq zlUS=4BHTw4#wpn35bh0*aGQqwUsGQzsWvJ>+)~?+Yarh=|5oCEFA1E14G>L0Z9oEo z#SnnIlUNyOn8dXyAg$%hM}klMR|K+|H*IfqbsfH2st(#6xxY$3hkw5NUV@9cLbOfw zK~MmEaqbOb2f05=<&63JKKsKrPD*&T!(7;A*~7S4kWXJ}_4VFs?TMc9#UHib)ZFbj zAm89^$iI+$XyyeB3}35=O}YQn4hBdkDvfy2q5sp~cSc2(HSMAxVL+lHEwKqQNCS#w zB}yEUppxTA3y6Ru$sj>M$w82eWQLpsTY`!NX%uKeOK3qdw2CC5p@DB7(0Lu-`Rpk&}T@ZGNI0cz)!0i|%cFF*`{l3H1DCv;j~W+7VW2v)Ju~-i*g+n==GtY$dOv0j?J&|3#Gj)_2NFzF68E?( zHr%e4XF*>vUjW!b5OCBdPmcQBp0OE|asbFozc_pKOGo58m%y!&+t4i+a`(TrO+jZ+ zScT}bxFS@6^BIH6yP(rS(0+pxC|%n6a5_s&VD!uhG%uY?d3Nco4I1dxfKc_j9F-j# z=E@|SUij~XIJ2GTL7(bzfub%D0&ITh8>eGJ?-ug;#L!td?vG_j9%k!{4hGJ9CmFQW zb%?{g*Pr^3|5GZA4WAVS=b&U&I_S*uWezQJC(y*_a&LnbZGkqZJ#Eum+yh!M!0B%k zTKD^xLTja?Urpr=N0wmF6&G~*0+%;RI1&PSKpnC2Dt_H;cI zLl>YACkEnNP#kxOJmK_F7P^U$;*Pd0uCSFma%31EkfYY6LA{P!?ZR-Hu?*dp(cA3s zaFEgDL0(aoo0c~9QiX9Vv6LquGjh<2DJ4$#RN|Q$ z7U!(ve4`3S1;+s^3<>G*dCbVNPTMU)l#>{7xQ9ze%po;e)MbqcBVl)ya#8eQm+ckh ztqPQz-nCB9AmZ^rt?ClQmTAYb5hQ`O1EN5k0>6MH=o3_75GgPR`2uNBlszM;|FSoL z?N%u!g->?ugOYfTf>3u@GZzRxd9O{gl82)cdXeSXCx3lKD!nM%=m{lM6sQBY`%D9h z<4dHQ0ji1$&U}FM0=c5Y0t$)yal(0HvumKD{A2}>F!WFAA5(!OG^CKOq@JP|=GXFR zy*i!@RE3b3TPcj2tS#6*dp^~$mP;U6QuOzV%Ms6h*KwRqZEc~Zm~O!%&c%qh{0_|EQbqI8Jt?gWTaFK0po9pfgZS7I_MPC0m34EF7 zf$;*43EU+fuy~)04j~JhJVxKOcS!~mZF|(;W+tSod^_58OIBDzE>EXSBviU%S|nd` z=_|4!dD_Ph27Pp2@aw<^Wi+AP9;ac*zK`bGbG}n~)kt3NYNAA@?ig>r$wP3XoibKK zwe<--+_eKJ&P0L=qiGO;n-VovM-qCB0w-HR3nZn8@B5C8-ySAhT13F7A=#BK1LfZYUd9i@{Nt*SqYckT{|@LN zQ5_LXC>ae`$;hooNYJ!#c>A?Bx`y`2KNj=T$=X*)k3oWT5D4?PnPfNG8xO<9z#82_ z!#YSW1xODMng46F)G|fYgl^MaZ(BR7=X~tcbpk;1RAy`UtK=WJKezTMfomi@H*Obs zK}xzIrFo{4YA)a27z^k9_bI?v5_oTpuA_K=C-Y?Rj`A)|p7EHX9e(AQgdShItO0GdiqXiAJ45`-aIvB=u8dHcg508T^0l;KK<|Cg5p>Ye@ zzOgo*M|XVOGN?$x*%iO<9=o$EUQ3Ri46M4_UISlSLJ;=uk+e7M)oJoK38s0j-C)fX z1%!2Mg&NQBh1rbSZQBckTGdwCw;djI&#yNix~~nt%Esz4fx9aFe!)euBJ6Gz7^sjaA+ zwG@-f zbl2tgoErCIAGEbver5NZl@3>Ko9C=8^|cwQF>8yg*m7MDH0xWgn^<-m`^BD=&?=vg zaCmcDWu_vFLMXETIt6!m5ueNSG-yN=!!#pvZ`E7j^o~+5V@z`KV7_)Z*E*l%3s>c& z-+VI9#ahSh=x7#?<{ z0|yrl_`=XB0~u>@Y9!i}ak`fr>1z**O7sC)u92qltoXCDweHP|1R{c4-`|_UrHC&l zLZ>xDTqjXNRwr2L^wLU=+zZAMmJUm+2P%X7Yt*Z0epF}2l&P=KM0O=@BfUvH)OSVA zTb+6YXA1(F14MP=JO=QSJm{5pkN8@~f9357uhqbJm-c&jN_jFh)>oe(@^>MMQTYrz{mf(h^iA(x5YEQnJ^ zi&5BAkL)S&r#e+w^$0(?X<44}W)Y%k!>w113(L~We{jgH;dsVtPRVzcUm|jO?o(&u zTVy0A&MnmrUk=`T+`nzS$&dT?i-GuyG#(+8n25^#%7ZghkkBl(U8ne*LLEN_Du~qY zPjM zbG*OngZdzM^l3QXV?E}z?auU@eT6wgh+I<&({i6(gVxhs`cX_S2qYJEkkhlM*Hp@g z3mRW@14^z=SNfXm!d-_eFIEJ|nmb=iwVZot*&4<5f5`7VxSifqYfCtNBGv*bAh?|j>Dc5Qe0X5Pmc-^z`z9@I zig{pqn6s}{^UgFT$n6SQVWsJ*UBO`7spSB)QzTsCm{NaAphhm;YJbXW7G{kHgma%X zwct8OJKrGTPI7^`>VRaf=yZ8%m$irEL-^yVORcmc5;YbkN5L^@jP5dNt=B~mkzD~y z=gJz`_pm$X@vh{AjY5KMXn@mH z3mBAM6@snEzs`xF>o(dTVW?y*-4Iewj2w1v9jbWEIH59w9B&$S=pUmsItq)p6FtVk zWuJCNXWaJh986&_bMJW%Q>)!Fq_v;$A`YreWcukkofO2UQL8%Rnqj1>te>|5U@6CO zPF2G^)Oozo<=xw?x7M_t*gI4-qbIuBdG)B{m#EQFRBZh69=k4R zQkP)Es=}hTd2g;7B-Xvt7}L2Y)_ymNbWGC8XWZ3)>Z$gyW30UfqlvP&6IC<_q0ZNm zz{!~ zG}mjd%NSK&Y#@`{^P2y#UImKsa1QU z!6+l-90p#nyUKM6&ZR=aog6nfz!0CX*A$VQWg@&3aqj6Hc0eyh+=T49-5<0)#xTJu$b&vsA-Fe4dv-^O)gEhX+r#7kjyZ?}*O&D%y z5m%OC#He!Nc6Ox-{NANpbYfXZyxs0RpE^(r0x)r30AA?8K?hM+c1r6ya@Fh}!)*7N zNiWK2D7#s>xDo&;U6nUE%kgddMifH6fC}H|^l)cd%)L0Igp>BI<~3=v@)E{ewl~=B3V=qHwE_gpv@F=Hb+X!YW}iWH%LdQk05q0k`iNG?9H$7KCqA?tfjb%5wZcq9`Xo z5}xoyQX%6S1-Q|#OOi^cgf6_gPaJz~$~tLYRB4ro+PDE*k%0LZRSljuv6u zJ>|)^v~{T1ap;~*KI>-0m8EEhW&Ibw0|1er%4edXJh+JD`<*EdKJeCx51d&i;F{)I zlL+{(5n*$e77CT}g{r!h=5kG`&1wA+l_-8+CySZSrHSn+Ogx9Ge05$>Xs27?;C18 z=un(|7?JG4NNGV*jhHTLNrbzpY;Vu{9f<}mb=b8IDTLuL^}=c~Qw?mO;L_foEFgua zE}LxCfx0IpkoB*_fta49`|K#M5ojOrp8+Q|Z+4lHz!B3|$c=Ih$SUPO(3!B~UFqBD z-wZd!^#pUo%AAXx=!Ut%?5KpdDs>aq(`rD1^&eXNZ;+S8(mV!v*%z$z0z0N$gQ-Qj zoCFDk1I4;Gdc?O$K>3d3`?LEu4X97?##Vcx(f4+rYv$oI`2KC@o9$)x+Sf%A@*^-Mv|CJ;H(ym9p9yY z+1N#TWOt=SO9y|qEpRf&{ds(SfhZ^w;cf+C(8EQ;4`KBpy*s@CT+5p0HeG@r{ zQ`h*7gjqq~de9rNuRMmqzb4MRj^vw4?f1a_cK$t|-PxU-y*lTrEBvhh`45s&m_MW{ zT9NFUa_F{WK~YSpx64BibPFroRpl*3yZ3kr#7SArJW(&BCxCtzY*a|*z@{YgzDCLH(`6o)2F zWU(sIx%rC0T&LLnn1BO2Fwyzqi$Y*75p@Bon%42HTangve=sE)Jlo;r zv3dOQ5SUuSf?q{p+|E6rZS#Fj-xlyDDsbKT0(DifSfz@DbF|Jsakcax`}_=Rm&j zJrB%Lw)hpF3^M%DDl-S43A}glxOlg|@ryE`6jfNw}9CX+XptX_udfy}KpVI);h4<+( z7u_FeGaN+fKSlZ+FXXF#cm_v0>$aCOBxZ6m{O&WCQE(MF)VoDbghraA%jyW@Tc2^L zbF)On)mEfUcc(Bvo^#N}irC7MV1a??y!`Id$-e(i@(soGul6$lw3 zAPm~KJ(A{htcE~rQ*G2d6LUvi+UYyFkI%tQ1groL_%zne0L%dk4*=F0igD<(aG%yU zqP7#Dlcp&_%rX#TS2SBdc91RkzKmaL#+jj6=%_Ze#!~rcZLd;2o<8I?HzJSpMm0zFrUw@zYvSw-ckq=Pgz~nZjhiObR>%_a`rCV3V|>t(7OJ#*1$9cRUM;m^l5?!4*}+5 zmklGGWa!e9a=qJ zX3c~-?Fhf897O(&g$m(>e3uNr`80}fIp6ixU1 zYRFzzwfWzZae-u#kN&O8N>&a;ps!bd5hg|UEwN13Yk>(Zw89jaZ?LRA(HT4fcufIx znVaqsVofmwph}jZYi>&QLft%Fgnr@RAxX{mC02vC@-C>7zB0h3@@Ds^i0)x)PEEZ( z)nbofK@WK-DCg0(Znzl`5dO0GVJs5bc0cwaB<6f84NQQ}NxIWX-zR>kQXmg_0--V5 ztC+%W5IBeg=HtJgI?i#95`&tfJPyzIJWSmkKCAIEA%B;->*hVVJa|sI=)XM-QmX$l zTz4oEWE@$Oom-qmJVDw~4N|Zlh96Q20VBpou(aBVbtTXK@QJB_)dF2rbN6w;fuXm_ zCYXY7#~b24XL;F}+d6=}_c8Dpep=1QXypM+*N|=Pi08D*eB&(jTw}f9mpi7}tBV25=}|yNa6D58ymaxOB787n(PQlF6_oBj9-b$Bp)VJx zFd#=eJgK26Bn0!_^5ye-KT$uQIb$$^YFxVoa{p{UtQ(|c`c?TLT{tM4H4inVcUq(q zc4x(wFE%NGpgiY4SMp#?8`NGIYH#aqhG)OMYnt``z4vvH(fs?6Jd~AE!{=1gK6;#Z zAtsXJ#1`mzf3Xq_v;=@GhdT@`g!fn-bJ*+Vm0Y*+SvB@g@BHzRfNaEuD}5et;%q)I zy@@(bSN5q)8XhV}aTppqkf=Jzf`~UESh~M$TlnHC&T0EGZd~B`Zl(Z$hay3a70S8& zE&C)gRD+S{va2W7!wpy2dhzYs%vFI+T-(IQ7D7uiw{cYXt}(Z?@IonU&D?Kc530Un z8uH%ECHP(8g69kVtXd`U<+@HWCTIEYyMl~0D0BPIC}2qfpq8?T<>I)P+dEkA{kla)pvr@c#g6Qz9?` literal 0 HcmV?d00001 diff --git a/sycl/doc/SYCL_compiler_and_runtime_design.md b/sycl/doc/SYCL_compiler_and_runtime_design.md new file mode 100644 index 0000000000000..d7c3cc5e5ce8e --- /dev/null +++ b/sycl/doc/SYCL_compiler_and_runtime_design.md @@ -0,0 +1,390 @@ +# SYCL\* Compiler and Runtime architecture design + +## Introduction + +This document describes the architecture of the SYCL compiler and runtime +library. Base SYCL specification version is +[1.2.1](https://www.khronos.org/registry/SYCL/specs/sycl-1.2.1.pdf). + +## SYCL Compiler architecture + +SYCL application compilation flow: + +![High level component diagram for SYCL Compiler](Compiler-HLD.svg) + +SYCL compiler logically can be split into the host compiler and a number of +device compilers—one per each supported target. Clang driver orchestrates the +compilation process, it will invoke the device compiler once per each requested +target, then it will invoke the host compiler to compile the host part of a +SYCL source. The result of compilation is a set of so-called "fat objects" - +one fat object per SYCL source file. A fat object contains compiled host code +and a number of compiled device code instances—one per each target. Fat +objects can be linked into "fat binary". + +SYCL sources can be also compiled as a regular C++ code, in this mode there is +no "device part" of the code—everything is executed on the host. + +Device compiler is further split into the following major components: + +- **Front-end** - parses input source, outlines "device part" of the code, +applies additional restrictions on the device code (e.g. no exceptions or +virtual calls), generated LLVM IR for the device code only and "integration +header" which provides information like kernel name, parameters order and data +type for the runtime library. +- **Middle-end** - transforms the initial LLVM IR* to get consumed by the +back-end. Today middle-end transformations include just a couple of passes: + - OpenCL C++* to SPIR-V* built-in function names mapper + - Address space handling pass + - TBD: potentially the middle-end optimizer can run any LLVM IR + transformation with only one limitation: back-end compiler should be able to + handle transformed LLVM IR. + - Optionally: LLVM IR → SPIR-V translator. +- **Back-end** - produces native "device" code in ahead-of-time compilation +mode. + +### SYCL support in the driver + +SYCL offload support in the driver is based on the clang driver concepts and +defines: + +- target triple and a native tool chain for each target (including "virtual" +targets like SPIR-V). +- SYCL offload action based on generic offload action + +#### Enable SYCL offload + +To enable compilation with SYCL specification conformance, a special option +must be passed to the clang driver: + +`-fsycl` + +With this option specified, the driver will invoke the host SYCL compiler and a +number of device compilers for targets specified in the `-fsycl-targets` +option. If this option is not specified, then single SPIR-V target is assumed, +and single device compiler for this target is invoked. + +#### Ahead of time (AOT) compilation + +Ahead-of-time compilation is the process of invoking the back-end at compile +time to produce the final binary, as opposed to just-in-time (JIT) compilation +when final code generation is deferred until application runtime time. + +AOT compilation reduces application execution time by skipping JIT compilation +and final device code can be tested before deploy. + +JIT compilation provides portability of device code and target specific +optimizations. + +#### List of native targets + +The ahead-of-time compilation mode implies that there must be a way to specify +a set of target architectures for which to compile device code. By default the +compiler generates SPIR-V and OpenCL device JIT compiler produces native target +binary. + +There are existing options for OpenMP* offload: + +`-fopenmp-targets=triple1,triple2` + +would produce binaries for target architectures identified by target triples +`triple1` and `triple2`. + +A similar approach is used for SYCL: + +`-fsycl-targets=triple1,triple2` + +will produce binaries from SYCL kernels for devices identified by the two +target triples. This basically tells the driver which device compilers must be +invoked to compile the SYCL kernel code. By default, the JIT compilation +approach is assumed and device code is compiled for a single target triple - +`[spir,spir64]-*-*`. + +#### Device code formats + +Each target may support a number of code forms, each device compiler defines +and understands mnemonics designating a particular code form, for example +"`visa:3.3`" could designate virtual ISA version 3.3 for Intel GPU target (Gen +architecture). User can specify desired code format using the target-specific +option mechanism, similar to OpenMP. + +`-Xsycl-target= ` + +For example, to support offload to CPU, FPGA, Gen9/vISA3.3, Gen9/SPIR-V the +following options would be used: + +`-fsycl -fsycl-targets=x86,fpga,gen9 -Xsycl-target=gen9 "-fmt:visa -fmt:spirv"` + +The `` parameter is passed by the driver directly to the SYCL device +compiler for the corresponding target w/o parsing it. For each target there is +some default code form which is generated in the absence of overriding via the +`-Xsycl-target` option. + +**TBD:** Having multiple code forms for the same target in the fat binary might +mean invoking device compiler multiple times. Multiple invocations are not +needed if these forms can be dumped at various compilation stages by the single +device compilation, like SPIR-V → visa → ISA. But if e.g. `gen9:visa3.2` and +`gen9:visa3.3` are needed at the same time, then some mechanism is needed. +Should it be a dedicated target triple for each needed visa version or Gen +generation? + +#### Separate Compilation and Linking + +The compiler supports linking of device code obtained from different source +files before generating the final SPIR-V to be fed to the back-end. The basic +mechanism is to produce "fat objects" as a result of compilation—object files +containing both host and device code for all targets—then break fat objects +into their constituents before linking and link host code and device code +(per-target) separately and finally produce a "fat binary" - a host executable +with embedded linked images for each target specified at the command line. + +![Multi source compilation flow](Multi-source-compilation-flow.png) + +The clang driver orchestrates compilation and linking process based on a +SYCL-specific offload action builder and invokes external tools as needed. On +the diagram above, every dark-blue box is a tool invoked as a separate process +by the clang driver. + +Compilation starts with compiling the input source `a.cpp` for one of the +targets requested via the command line - `T2`. When doing this first +compilation, the driver requests the device compiler to generate an +"integration header" via a special option. Device compilation for other targets +\- `T1` - don't need to generate the integration header, as it must be the same +for all the targets. + +*Design note: Current design does not use the host compiler to produce the +integration header for two reasons: first, it must be possible to use any host +compiler to produce SYCL heterogeneous application, and second, even if the +same clang is used for the host compilation, information provided in the +integration header is used (included) by the SYCL runtime implementation so it +must be ready before host compilation starts.* + +Now, after all the device compilations are completed resulting in `a_T2.bin` +and `a_T1.bin`, and the integration header `a.h` is generated, the driver +invokes the host compiler passing it the integration header via `-include` +option to produce the host object `a.obj`. Then the offload bundler tool is +invoked to pack `a_T2.bin`, `a_T1.bin` and `a.obj` into `a_fat.obj` - the fat +object file for the source `a.cpp`. + +The compilation process is repeated for all the sources in the application +(maybe on different machines). + +Device linking starts with breaking the fat objects back into constituents with +the unbundler tool (bundler invoked with `-unbundle` option). For each fat +object the unbundler produces a target list file which contains pairs +"`, `" each representing a device object extracted +from the fat object and its target. Once all the fat objects are unbundled, the +driver uses the target list files to construct a list of targets available for +linking and a list of corresponding object files for each: "`, +, `". Then the driver invokes linkers for +each of the targets to produce device binary images for those targets. + +*Current implementation uses LLVM IR as a default device binary format for `fat +objects` and translates "linked LLVM IR" to SPIR-V. One of the reasons for this +decision is that SPIR-V doesn't support linking template functions, which could +be defined in multiple modules and linker must resolve multiple definitions. +LLVM IR uses function attributes to satisfy "one definition rule", which have +no counterparts in SPIR-V.* + +Host linking starts after all device images are produced - with invocation of +the offload wrapper tool. Its main function is to create a host object file +wrapping all the device images and provide the runtime with access to that +information. So when creating the host wrapper object the offload wrapper tool +does the following: + +- creates a `.sycl_offloading.descriptor` symbol which is a structure +containing the number of device images and the array of the device images +themselves + +```C++ +struct __tgt_device_image { + void *ImageStart; + void *ImageEnd; +}; +struct __tgt_bin_desc { + int32_t NumDeviceImages; + __tgt_device_image *DeviceImages; +}; +__tgt_bin_desc .sycl_offloading.descriptor; +``` + +- creates a `void .sycl_offloading.descriptor_reg()` function and registers it +for execution at module loading; this function invokes the `__tgt_register_lib` +registration function (the name can also be specified via an option) which must +be implemented by the runtime and which registers the device images with the +runtime: + +```C++ +void __tgt_register_lib(__tgt_bin_desc *desc); +``` + +- creates a `void .sycl_offloading.descriptor_unreg()` function and registers +it for execution at module unloading; this function calls the +`__tgt_unregister_lib` function (the name can also be specified via an option) +which must be implemented by the runtime and which unregisters the device +images with the runtime: + +```C++ +void __tgt_unregister_lib(__tgt_bin_desc *desc); +``` + +Once the offload wrapper object file is ready, the driver finally invokes the +host linker giving it the following input: + +- all the application host objects (result of compilation or unbundling) +- the offload wrapper object file +- all the host libraries needed by the application +- the SYCL runtime library + +The result is so-called "fat binary image" containing the host code, code for +all the targets plus the registration/unregistration functions and the +information about the device binary images. + +When compilation and linking is done in single compiler driver invocation, the +bundling and unbundling steps are skipped. + +*Design note: the described scheme differs from current llvm.org +implementation. Current design uses Linux-specific linker script approach and +requires that all the linked fat objects are compiled for the same set of +targets. The described design uses OS-neutral offload-wrapper tool and does not +impose restrictions on fat objects.* + +### Integration with SPIR-V format + +This section explains how to generate SPIR-V specific types and operations from +C++ classes and functions. + +Translation of SYCL C++ programs to the code executable on heterogeneous +systems can be considered as three step process: + +1) translation of SYCL C++ programs into LLVM IR +1) translation from LLVM IR to SPIR-V +1) translation from SPIR-V to machine code + +LLVM-IR to SPIR-V translation is performed by a dedicated tool - +[translator](https://github.com/KhronosGroup/SPIRV-LLVM-Translator). +This tool correctly translates most of regular LLVM IR types/operations/etc to +SPIR-V. + +For example: + +- Type: `i32` → `OpTypeInt` +- Operation: `load` → `OpLoad` +- Calls: `call` → `OpFunctionCall` + +SPIR-V defines special built-in types and operations that do not have +corresponding equivalents in LLVM IR. E.g. + +- Type: ??? → `OpTypeEvent` +- Operation: ??? → `OpGroupAsyncCopy` + +Translation from LLVM IR to SPIR-V for special types is also supported, but +such LLVM IR must comply to some special requirements. Unfortunately there is +no canonical form of special built-in types and operations in LLVM IR, moreover +we can't re-use existing representation generated by OpenCL C front-end +compiler. For instance here is how `OpGroupAsyncCopy` operation looks in LLVM IR +produced by OpenCL C front-end compiler. + +```LLVM +@_Z21async_work_group_copyPU3AS3fPU3AS1Kfjj(float addrspace(3)*, float addrspace(1)*, i32, i32) +``` + +It's a regular function, which can conflict with user code produced from C++ +source. + + +SYCL compiler uses solution developed for OpenCL C++ compiler prototype: + +- Compiler: https://github.com/KhronosGroup/SPIR/tree/spirv-1.1 +- Headers: https://github.com/KhronosGroup/libclcxx + +SPIR-V types and operations that do not have LLVM equivalents are **declared** +(but not defined) in the headers and satisfy following requirements: + +- the type must be pre-declared as a C++ class in `cl::__spirv` namespace +- the type must not have actual definition in C++ program +- the operation is expressed in C++ as `extern` function not throwing C++ + exceptions +- the operation must not have the actual definition in C++ program + +For example, the following C++ code is successfully recognized and translated +into SPIR-V operation `OpGroupAsyncCopy`: + +```C++ +namespace cl { + namespace __spirv { + // This class does not have definition, it is only predeclared here. + // The pointers to this class objects can be passed to or returned from + // SPIR-V built-in functions. Only in such cases the class is recognized + // as SPIR-V type OpTypeEvent. + class OpTypeEvent; + + template + extern OpTypeEvent *OpGroupAsyncCopy(int32_t Scope, __local dataT *Dest, + __global dataT *Src, size_t NumElements, + size_t Stride, OpTypeEvent *E) noexcept; + } // namespace __spirv +} // namespace cl + +cl::__spirv::OpTypeEvent *e = + cl::__spirv::OpGroupAsyncCopy(cl::__spirv::Scope::Workgroup, + dst, src, numElements, 1, 0); +``` + +OpenCL C++ compiler uses a special module pass in clang that transforms the +names of C++ classes, globals and functions from the namespace `cl::__spirv::` +to +["SPIR-V representation in LLVM IR"](https://github.com/KhronosGroup/SPIRV-LLVM-Translator/blob/master/docs/SPIRVRepresentationInLLVM.rst) +which is recognized by the LLVM IR to SPIR-V translator. + +In the OpenCL C++ prototype project the pass is located at the directory: +`lib/CodeGen/OclCxxRewrite`. The file with the pass is: +`lib/CodeGen/OclCxxRewrite/BifNameReflower.cpp`. The other files in +`lib/CodeGen/OclCxxRewrite` are utility files implementing Itanium demangler +and other helping functionality. + +That LLVM module pass has been ported from OpenCL C++ prototype to the SYCL +compiler as is. It made possible using simple declarations of C++ classes and +external functions as if they were the SPIR-V specific types and operations. + +#### Some details and agreements on using SPIR-V special types and operations + +The SPIR-V specific C++ enumerators and classes are declared in the file: +`sycl/include/CL/__spirv/spirv_types.hpp`. + +The SPIR-V specific C++ function declarations are in the file: +`sycl/include/CL/__spirv/spirv_ops.hpp`. + +The SPIR-V specific functions are implemented in for the SYCL host device here: +`sycl/source/spirv_ops.cpp`. + +### Address spaces handling + +SYCL 1.2.1 language defines several address spaces where data can reside, the +same as OpenCL - global, local, private and constant. From the spec: "In OpenCL +C, these address spaces are manually specified using OpenCL-specific keywords. +In SYCL, the device compiler is expected to auto-deduce the address space for +pointers in common situations of pointer usage. However, there are situations +where auto-deduction is not possible". + +We believe that requirement for the compiler to automatically deduce address +spaces is too strong. Instead the following approach will be implemented in the +compiler: + +*TBD* + +### Compiler/Runtime interface + +## SYCL Runtime architecture + +*TBD* + +## Supported extensions + +- [Intel subgroups](extensions/sub_group_ndrange/sub_group_ndrange.md) + +## Unsupported extensions/proposals + +- [Ordered queue](extensions/ordered_queue/ordered_queue.adoc) +- [Unified shared memory](extensions/usm/usm.adoc) + +\*Other names and brands may be claimed as the property of others.