From 3667f9496aca2267cf817d9f811f22ad226df7ae Mon Sep 17 00:00:00 2001 From: codeanticode Date: Sat, 17 Oct 2015 17:53:22 -0400 Subject: [PATCH] PApplet does not subclass Fragment --- .classpath | 2 +- build.xml | 10 +- core/.classpath | 1 + core/build.xml | 3 +- core/library/cardboard.jar | Bin 0 -> 508098 bytes core/src/processing/app/PFragment.java | 98 ++++++ core/src/processing/app/PStereo.java | 7 + core/src/processing/core/PApplet.java | 299 ++++-------------- core/src/processing/core/PSurface.java | 16 + core/src/processing/opengl/PSurfaceGL.java | 227 +++++++++++++ mode/.gitignore | 1 + src/processing/mode/android/AndroidBuild.java | 46 ++- .../mode/android/AndroidPreprocessor.java | 33 +- 13 files changed, 485 insertions(+), 258 deletions(-) create mode 100644 core/library/cardboard.jar create mode 100644 core/src/processing/app/PFragment.java create mode 100644 core/src/processing/app/PStereo.java create mode 100644 core/src/processing/core/PSurface.java create mode 100644 core/src/processing/opengl/PSurfaceGL.java diff --git a/.classpath b/.classpath index 980887b3a..333ce6af9 100644 --- a/.classpath +++ b/.classpath @@ -3,8 +3,8 @@ - + diff --git a/build.xml b/build.xml index b1286eeae..230d7c4e3 100644 --- a/build.xml +++ b/build.xml @@ -80,11 +80,17 @@ description="Create AndroidMode.zip and AndroidMode.txt"> + + + + + + - - + + diff --git a/core/.classpath b/core/.classpath index 03699eb51..8e74952b4 100644 --- a/core/.classpath +++ b/core/.classpath @@ -2,5 +2,6 @@ + diff --git a/core/build.xml b/core/build.xml index c26877e64..682b8c159 100644 --- a/core/build.xml +++ b/core/build.xml @@ -33,7 +33,8 @@ target="1.7" encoding="UTF-8" includeAntRuntime="false" - bootclasspath="${env.ANDROID_SDK}/platforms/android-15/android.jar" + classpath="library/cardboard.jar" + bootclasspath="${env.ANDROID_SDK}/platforms/android-19/android.jar" srcdir="src" destdir="bin" /> 3`;%hHT@IoSumj9FY3y5HhlWI;Mn^b1(6veJC8}6x z`jiKCSxp0>rjld<iT$VD~v&M$Wk_ zKJHOSWvFf=rBqT1lsRI_gpQwEUt(KXUE-xr;f~i5SdOB%&uWQNb?Txd3JZxci=Oj( zI?qQ*NKkOPKulifux_V9ZW49JLwl|~8>65M{(B~0!#$}6xG+b{pp|5_{kW{6ZDS6% zxso0yE4|howeU17!BS8#4zsK8!PqA1xC6^A556yMxPj8XFWm!ix{qG{ZqGed6E&Z@ zB}1BFE+hMLevi5;BP%ZBg;vZy`qTChULf~|aG=zxAeH~w6ul&RGMCyJ|MvPP2opsV z%R~>~MJO|e#QQ>%f=48tI-LQG43K_up{4KMmkXMmn2cZbdomURk+?4MgXUFk2PJz1 zoFYZy<&bv}A8MNLpti;>2LVng#FQQ=r@Wsv#BV!c9^a$PP6cpj1tO1EK4O)Lyf7u} z45B3?kpucwlr+C9URJo_va-Wtz#@GF4TE`^i5$w^wBFu5$gMS4$we`Sew;{v(H5q& z0?&%zLC$wJ$V21UR%yKS%>5)3Q!;G4>ThtG=&sW4&ci9oR)@l5^W8S+nuf@B`F4}k z=5AUjca^`79f>BR+mh395}9%i*<`@`)!4JG;m?vwFjC@Ge-)4qd{{d$^0AhX$XChL1r%0&j0f zc-hbn{bV$;w~3vW{3Qn!7|1o-=wIVw)wg-9&cD*k3QWGfWdw30R7kV?>Bzda*MmG? z@f)a{g;{>{f+5sCx}dIxo;G-+`%{F!)|Kr$&H3eaTJ9-FdM`Qgx7@M)^FJ`)0tBE; z($~_{9o)Z40sQ|rDd4|%{u-4nY*0i|c~H1kjp}_-;>a3MH&}fy*jN7)&@6DLk>$2j z2=)+i7kFb<7oP<^$Z)pHNa8Cj`Y4qKK^Axm@5r=} znCNu5KeG9fT1F8BsG}HCV5cxKAgl{P!;syw+vv>(hLK)S<2);IWt$y2@MvKU38U!d z812OQjl&As^~V^aV@gC*r8kimVnBMR4l4YJd0%mEEn6mmb0+B%D;v>4Y44&cvzm^z z7cD_fY~2s>_6*WzatY;}66_kk@D0h*j!MLLFMMYebXQ&i?`IfB7!)a2M=_6B1__Vk znmg!aRqcA@>TN(D&`a!>D_QgvjU{-xU9V45C-DO1qdk6UduA{)O4(seTmecfU@34& zubW=i;6V=31OF5j=r#k4bY=4r+ydLH2oza`EA+{A`mqO&A<6*c+>l(mJSvR#W_V-e zLmOU7KrY-tW96m z+*HCa!HO`bGV~i&xunN*GF*61+1}lBaiorOX+xeyKH2m1wPlsAQ-vE((aD{8d!$S= zZdWsKd6ag8$PQSH9+FgJ${db)p-4j9qqFclWzJ}Bqv@YN%TxCSk~~B{E_g=*tuH@G zpU@O8AFPh>e;#Yjy*6!!b+M_~sZTTV)6AU(uF2XAdjH1VWuVUnYQ^xL&!z&5PMWat zBSHX-uO$Q)z8@$lU{3hzfLq1;pEMI6;3^cngFX0GGpJF5U?6w~X+xGE{ZO9Y8fdhm z8!O|V|1i$62hC^Jed_)3?D2|T_{&p}Z7}oe9jYlL_Z|gSmDBka^H-5^w%)z~ta1koPP30a>-7=@wtz8h_oBj#oIA z_pKyFv16zG$Xz_B_s|j9-rnKozxL<~tL zr!rD`91cIZOpM=v>t}4=q7AA*$?VBE8H|Y{I>PLJUJiV-T$I90IS=$BF5@uYN%7l* zJt?^iCPsk`sw2KyW%*^1RihdpCUI4TvkH$;h9(|`3(c3nZ#o^Oyo@C2u9S4!1qqFM z7<38sv^mW9g zTK6y+eH@EYbHk7K9AZt7wj#6d`j^{x?LAfCcJ-@r98~UeWx;B9HxcBuRbaCNfXqeI zYAXi%<#o{PhI(s#uu~fBA$dV}DFDouMUQKFsLvDv0<@9~G6Y$}q_e)B_#AlOIFttSxN* z`drY31^Eyot(+lwc1k-vYeIah$4O?LH7k@q0_M4{%(zEgrd30%r+?tosrDc)xP+kl zIk}YE&tv@JpH^|4wPaIgGR?==I~>XiIMB(v_!YG_BWRW8={tU0*whUSvN{HBD9oGX zP#TOe>?F))ei+yc^$R2o_wES+U8ieokHru zN*0SFN$Amh%b|EowaFaAG-|AGR^BDstOsopLx9EK7#oxRpnwK+9CZ2|8!+qqez>gU$3_2 zip?L7`ziT<^OVAk;)nOAM-@6E2C2KnOvC)>BTi|t-4mdbGoSxf$oFdmsO9<% z0brRqIBpb|{Nkx=^G(!JB7u}r;2<&CgAKdSyty0kG@Uzu^=N9al$T>xaK2m^30^~_ ziD(H+r;mC!*xI9oz>fHr$-KbV^>$dSCDhmdLP!Rgy2HwqFP1Kme`=66m ztPBT*f1M-!>-(Qi%JhFesfvxIlNCS`;P#JO8{ogD^h%pH^D3yHn?tqfdZuY}0%jO} zYf;RFEuK+P-g07^kmBQlawKFIy>_&{3yl#M!M$&fd{Q1OTV&F1smvO1B(6s>0vR3` zWI=hktO`>P98VeBFPR9NE?2sp-)+Iq%wTsFps}=;Y=twH=bqu0Sv;$OA9?ie_&+ zlKP{X@ZGcO^+SRIuam)|eI*`Kk7U)?M~ySEFGi8zipkcZ>BYg57%HyYvxapI0 zLU}|t2vEEwzEX)_38aP6rEpE~?sC-1yq2#WF7=iW{#x9yK4M#r>m= zg&5dhF0z0YPgls`J*A??T4U=$D+za6h6rdPPpbgFn6->5xAm?;RVyINyN1#f3Wk*_gffwEe$To4CQy?Q?o({jAcg0=!_3yXW@5c*aNOE#TK1A` zQiG+rsYUWsD)-e4^r#3vWjAXMK5D+|ecH+ASePt0J}4l1pW(eV&}m|>omK2g8=pt5 zLFG1r)lUYESvZ4`LuAdX?rD}oZUdZ3rdvpt;Rbn(k5Mnf2pxLVEe=LZABo%+MK=~e z0xbw{^8JN$ZU!fadunh;bu=U_VQ^nG#SE)Goa9oBn&&pW7PD(eD6$4~UNOQjo4*99 zFTl%kffffXUa3Ow4z4Sz7Pb_0bhlfMQ=38=+h7W-{IKWOBdo>L`V-0KS^RzWzv^iJgLVs9GIt@B*s7v7NHG z*MIaG_`g8q!oPx=)xT6v;`)F4)Jeqjt&J@I8)nLstCjg8=6Hb~(S+m(_2bK#=4xVk zAVtpYZu+EmVf^4onV*y`3BnQtjx{tAyW2An6#`;LL%(KY?HRg>S;#*v8JW0)7i54bvJhZlBpx| z|Mm7r{#X2T_|Mo`7$+&&{~I-Ey0NylQKRyT%^wDh8OE+Kv`HB@7`;@gGtajOBXNu+qoWT4D6xh#JU;*s`*2N%A(cJ#LhiR zKdnA7;gDLSTr=p!WGp-o{p0?4dL(q-7ALn;_hFjmrLv!ys^d;c1B|~%E+O>w;2~2V zqR4v7j-yFXI|&jRy{l>RVP;h}ez~n-l>N#h06rA~s{B`mkb8O2^hHNQuTFz=BPk^Y zY9pauid6n)amTyB0;ZRFip!l;#gAASHOkX_*t>Pp~^ERTY*PA(@8&(9dfetZbc4dn@ zp~t^d+bQ=Ek=3;}q}AD1|C0cxzy5F07m@#ePKGr9#y>U#xY*j*JO1adj8fLN znKwrD-WrPD{4JwwzaqCkaeejH0|T<1-~Dy8VuG@d1sB)UqH@>sg3=4Fcv*KIThDfJxH9#he3HW)t-KWeY)G<{i(J4uY7 z4Lh$O#iwr1;v=f5Ci`n5`kjVDoKI%Mr~dMJDK5iNr6NsuRup&mL3-OBcg*(mlX0VJ z^me7+>{d56p)jCs|CY;bx3^WU&YWc#B~-b9PXp(HJ6;1>dJE=PiLt3^yXa(i8w|`n zVi4uCv6&Biivt_n|y(KE;{3gq! z0$}?P==3d=QXz0uWAl+?j~pb#8G}!y`J8dy=8YSDxH!c`G`@^6axvnEX1L?mvJ~8& zr=GX#ETSn}q#g~{Ff6f_G;b&!m`vBc_1CaoJ~+}4EE%lLnJsxppA#_MIHvBR&WXmA zJ}!$ol?Ak_abYd&G+$vdpzT( zu1ZVpTDaNr!G!Vy`Qpmq)NF&2E|so#}F58L+YNFw6ZPk5k$kw z#QfFl4cMzzo)=E-HX~?;AsJK7gaZ)>C1}v^1V7GxC}RG;{235?&Y{>I7Hp+x3f*F7 zDFs0rFp@}m`TE);yI=|Q@0>Wyk6MVbBqL&UMgc%wB?i^IW2nbTE8?uNMHCAnbCm>HtS5*~)-I&0 zV6V&E&!F$}yF&pFGk$JAjJIB1Uq7C~Y@_%?_YlbmUtu>}E5jqnBvAVGR71>5Zou0TIH=(G8y>a=;WGdS7e9m--+kLh_&59SX8!74{eXP@ ze=hcYly3VUb3Vg=Sz%EB8y9P)>}Y2BUv)&H>We1MFqSt)pvp)DXk8SIt{%jC2C~ek z{5d-kffgx&mfh+JKZY4n#9&ojdmkCk9BXBIgLJx%_$HGy!jpA8XB~r8+T-wt_{ANw zmr0`-NT415UTS9QRoYX#$mi=-=hHV&$WPcl1fEceB>$9NWvo^LPqnz(pT2~=lizL` zvk-casklPb*%_hv&j;u5w1&p;w0c<>w32JrLcLsbk+O$OK%OlTv->0b&+ZJ4V0OLdFq@)H(1Ba3p&{)zGqbwcgYDb)91W;HMnNsu9Xakei3Gf$qdFTI^2vamagn?NO7}_{%tkcQzhX}$VkDFke-kk zQgl!xf!y&x_Qwm51oBnmv^nq#c$q9mf^FBN&W^AZ;b_#=a967aVqr`wHOVuZw}sSjRGV1Nbm(L3zPywlV66+}l5flCPLnPh?_=ClqbF^! z$)BVXRZO!wRA~VF1t!~85cvDDL{~uDTfMKpu|Qj4UUjj8wF>(uP26Q;C#0C`4=NR5 z!dY`#j?Ujgd4_E?1^ASklUa;(Z3HU0b8T2pi|;=kV=R#zyqn8)a`G;~WNs(OpubRBe@a?8cZy`J9}Fssh_p-}Nn0a~DZYRGH1q zYcVD*bc7Oag9%%93Zp})nJO$R(xyd4+3*#|cnJ$LnsDrYIK!7`(q08?4(;)^iJu)- z6e)aq_KraMoKwxGIy;VR?%T;p7qhHivafGX6SPecvYVk-G_aPzkPVJUhT2B>#~2Fr zx^b88Ks*zA>8|ra72{KHr=*fZCO{Gc`ovP{6{^Ufy#w)?usTlVcRRAfqlkn_;r_;o z636^{hVm}kk$#UAKV6ltE#5_jY|!4}L6IMo zHid?+(B8lMpsM{9@6Be&*|Exf$9)&>waNu*qoQr}YJ)pGCj|aof7DqxluFVgN-YTevPY zL1$(b?%_FWcN-u--4I$+XQ1Rx_@=bF(uy`&m%1g}wq*=1mUeNMua21c@@>#Ih|010jgji4OqD5>2D!5wI;_rmIQedh zveoJ@_@ppJZ!C~B1(^j2`o_`GBE-BrylahTjNBbH-Q~#Z#C#*e#lm1mTVa*Uz7XSg zWlN>C0GdYf-|H!_3NW>aG4z2kbbY1#bf?K{@r$D~JkuWit|tfrpnTQoHRf`RY9*j5 zyF`P{{x7iXfnfQlY-uwAa`vUgq4zHh;SK(S<2L{1I_;?9&wvcS0MFO$p80nL387H^ zP={~*n1tZqVlMKsg*}~@M5n_`z;=5GxV=uo*3ceHn-YeGVn{$!adTH_(LU$n?Q<@_ z?lyKBDJ*Ls&e9AKkSq&HmoO~RX*-ASygTY|vz?wC{CMsX5&YHw7GdiXJUrZwKEIlC z`M?NvZk)#;Pz!d2kX23m4wT1AUxug8?@i67oE~$WPz)qJ4 zTL=H~Hc?A+*gQ4^@U7a2&NE+*xHlFPqcPywNXz-N>f2}UbGQ7m z=R(Ml*hz6!OzX#C#0X3n>H*YMvvYUMBa!4Br_7uM!c!n;IJJU(s6{9cyWkxm$N+kyoPs_kAx|iX8vl5S6eZCq){>NB27T-d zksn=$-x?TUXYGyY|4@$oy*%udRYW&Uuewuzucjc__s4YiMX|cqrRo3BEZqn%-Y03$V}hT#ze$k-^2=F{a?*!rLvU+ z4hy39KKqR%t@K`!!d$S9252-Chk)C!mWGw+J?x)cwlX>RDbe;SxU=J>8>6&9)n3?^ zFGWNA8T`STTS;3KkPE4Etcxm{xAXchj^}$d-v^j2N+mO+EwU?L6y}nm*lqwAuT=ay zMUKO3rtYeG!R2;&hIFYk@_9Wm&#Nz86WUnW4L$`IHSu2Z>i}g5);3}+|xd_`xDkG+ie;o zCh2Ziw>7F*HQ(km%$u{|AZR3BX)te=C`FJL$9F|GpY#3XQ|32k{RcuYv4t7;<3D4ZHqz6bbFzEf>; z()AC^nTEn=7trs)(Lw}M4a2-42}kERR}>GYG%M8}~ChM$k4JW{XP zNUb;+(aEgb1qzrr<}f*YpJ|a=(jE{8MZcBpy`4sEmmOQU3jO3%bI%mH6Z*bA-^XhG z#~2Rx&!8qr>G$g?$a52^S$s9G;FGr(UgNB}x7sxEhuEo!M}5HIZ8zc8aO(v3+1`6| zxfk`jJ?arMDU?uPb!{N+;3?8=JinAjC|9^y!%r28GGX0Yqrv0Pt#4*<7~(qQP2!&Z zFiItu!QJH)hGt~K^47cB1t0&hMF|9~)Bl6XM*d4o_TMl;|H5hhsrmnP1o&T~CCb{0 zIBcjqjKM6%iX|_Qeg$?4A!}q0oL2D-goM&?))|=bOTWqEL!vuWEP)SWn`nPN@?`Lt z=HsNe=D(uA;>qIL?;>Lfyp_~Ml{V3%EDxu~*SBoG50Gn)ChCo!!y(ViVW`mJ6MeOE zQadUj*`%W%!pQk8nFF{Rjn{=I-4Z)lL5U>1Jzn$NH8tkI+#pfduTrvKYE~c&C^3k@ z^3>5bqw!j4D{U{^IQHGfDX1FjJp3vmXa9yCl~Aztw5)1gq3i(4gl|T|4Yw3G8DcUx zZ)i1XUBg}f(8o+wtl#TIvU5ysGz$S>9YUz1Al*x^p4e4#;e7yl!8_-L2UA;P~dLHD*`UB4x^(!LvuV%1UWzygHb%QNUlujFNTVz~T-*zhgl zeQfzb*8<;i0&O`@ck9O(8V^mP4f1lND`r*Zi60?Z`hI?&ZEjWT`sz+6|M_U!8jO~F zlCd5F5%u}4m&}RgleTOS>R#}Sl`yR2RWczCQ%bWPlm+XOym87~b)Uon!xyLojwOxS zVv$F6uC(N%*RsCU<}!`NPK~)uUbT^288VFQy@A0m27`|Z(+uN6?P;;cKq=CT0wZgs zRNMQ<!o-Q!5V>#@#>48A<9PP5DBMm!<@X`o)$KuE796 zibB}C)eSrCTb(QRRi(&y(L3HkE3QAV`8;@mM4U9_wM$OFr&MH2f7lwRae}jfF{K&H z#Q!e#?StAvYG?P9ctgXEok;6(=aIl=Ta;%ERb8tXgQLO06gSKp=Q5xI;l(QA>+3`j zEu9Q#dp47Oo|VmY*YHBJ;kGOX4K6pag(>Pzd@>Yx}w1vt)v9z9+t>7lPlVd z&UVPS*{_L}-ELh{^V*|h%t+mMmsEv*un}z$C0#?6PR}(5t-!#b%!5q{>mSxid1YjL z!#L3<7^kL54`|hYn`Z7BVl&+PPnL*M5)EwBR~Yd9|0@g#+E^Q#nK;>h5rO|jDWIaR zh$D*lAwp33XZa`N2&=OJKdLCCKY@$CA%u}1S_E-Y4;hAfWiVi(PSRNv>2LdN?2Z@p&|(Y zM+LiVUsX?Akv1%;B>`0Xu+m?tVmZTFLU$nv(6Rk_d0^T9)H;nwi!nCHE!goqv%*l< z1XNp%yB~1~2Xg1W%-QaT>o2nhux8UG79EXr_?XoyQDCUtS}=_t-0t>iaD3)Sod&&c zIJR>V{lo(6R$|U5I|?^nas*XwLPQKlYYdX5eq!de6iA81=|j3D6BKn144+SRD0d9c%CmhIuqyBCtdp;82k{7n`ca$@SdB|JXt3bA z`YAl=j#zE*)Q%}7jFEAGx~5D|p#$kl$Pc)uxU;I{1RQR4V3*YGrqv~sjE$WZgetAR zeW}%%8U#}&Xm#Ok0C+NxZS;~sgr&oUW zBVn71%S8olVpWnqItAMqh(zWu6z?F{av2D9xDSS~rb-i}emMtv3JEfLHJCiPK<=8i zRm$3jU$RD{KeSTAlq#f~OVc##yOMr5No()b`q@e(qs(wOw(27(;X_GQ(NVzgD#p(_ zVV)}jbzP`3_u7@}EmZqpKx6W{otIwgV z&?#mpxf(9URm`H@$x}cHR5--D(95S3_-j!3Efv~+Gl6@Zp9i8>1(tSkX7dfLK&O01 z$WywTQ9y?;eGm-pk5I6&VH#oRy?}4@fu(w#epEssr3pL@e4(_v*x9Of_{+rF`z{by zIcGlqz?ZIvQMD3ZxNsrVzZ#y&{QJ$!{~?C`Z^g_%J{CNR63a>8&>(p^s5C3+fQW7A zxD@DGjUB(3rxRxi&~f-xT*wbd!@RIp1Wz(~65fB%;~_3d;rO(K5Z?35)b(_S>DH&I z`=jbBzHb|Yp2!%s#6cu=zgAM{jTwW|N7P4(<$4l=G|{a!Z84GEC4*PMHs=VCxnM){JU1XtHKtF{GM9 zdmWm)5j>m$3NaSDbT!!>2eXpK*apjm*=7Z6oy z35R-Y%rZ82pfccE*I)HYft~mWF@I9kHsd4F zPoFWK-57Iqk%<=Np0ry&soqY3*5mouu5-~#ai7JCy_6sm;u6@n3T9lK`KaL`S}-h= zBW7JglXas?epEYI6YHY+Leb&^yL>_?Bq-Va#6R$yl;0t3FI*x2fM&B@r-X6XG3wG^w}iPp=Mfyid5#JZW+Cp6|HyLG zzMSN5$l=-K*oq#v_t`O=irN3X5 zTs2BK>q_ij86(GGIWv;EoqLy<%t`BuCJw9Uz;+_%YJsw5gJS>ou3=uipsb>wgKsj*JA@<^%WoqIYq*W-e+hl?Fc;;d=`{rviZN@IC`V^?WwepB8U zRYHZSYtM2g`A&>88@|HGf@#EFguF8&!ey{_sv*Ao~zk6>hjUc$>wpH|!W(2O-xCl>vXot7r>+5JU z#f*e+;zz6T!=Zg>^MyRZ39+t2e!dPhbU$;0l6Aw^E(hdw(l@tp@gQHMeN2kj3<`n3d(237o~K!m$~hVw79L33;ukUvSd)a}yjRYrScDsngl zB`mhfX`T;r4azbST`_@hS&#MI2@}T1kGxUlls=Q!?!O9r1)c4OZIr20XKa%;&p_Q$ zZc{B_$Y6LN!z?+ElZqEXmpCQx*^GOY4>k|jEM}os;;grvkmCxV{!zFF{}DP#^@3Vv z03C7UBHbxUG|}qTvB}wrf8-?H3J4O^5x-9ZEhv}cKBNz;xec~u?wPM^6;7de&DA?4 zuAmO1Wb7getxYF}x1hwr_R41($8bC!nbMOcL5_x8yLf&ipXDf=uKr_CoNm)OgwPfxApnTyIny_8R~dxTvfiidS{{^sqf*9d#?pxR zJ0_?fQlo{xCkjM|Fb9KB5G!d+E;X2uCb5uO5TNObYdTaoF9`v&xiT#Fp({}lL~pwF zKv&eFpvuzU_mGp`^jEi0iQ+)*7$URn?`L_20OfMuH+Tx_bYl@s_E5p3w9<{Fv>>mf zH0j@*4%95FGu+?rLU(EIYsN6-2rPoiMid79r!bbcNwPfIw#UzO`2O+sR0l19iIY~xm+ofC(mccjkvZwl;VCv*6h z4Bl8_gI8-otC|H#TYP*lL-KS^kNdM+$28u2%(Ei5`(2Es3Wlt$OR;CY4()yES+|s8 z>JS>4?kTOLVqvL|FcbCsv3OB6sBqouZ{v94DiE)4{*S;PA?QzbR=w7e^0h=x!O$Xl;tQmJwEZKcJMk@V>R#6yPRIjR$PX zzp5F?%b;G{=a&yTHnj(q0C{1er;Ofnze@gGJ1Y2 zVOn+i-1yI|u)s0xEPbqqHo2GpE^)(uzg7nNVDDeJn;8UtwZOAPkGSGFai9|$i-_pd*wf{Xa0WUZjk07E|I+!!LM5~J5a$~yAPE_8!Xm7sB1Ig9F=jA z<%_Dt_d~+t(==8JQD@%nhL~Q}~_mZM0S&ewj)?2|-{2V{f5podh7#;1O!$ zG`%VcR<-T`3eqn?jw#4+{fv2N^H6>PLIMy_We*n8 z)EPUK0F|>>AAL2a@uJlO7-{-qTjt<35aMw?sp+Kl) zxSZM?kE&xC$PG#sdIhAqaL`yL^(0#`+TH3z7;+o@qTN|?Z}-C`L&oK}4j4{0^JtX9 zsZ6)MRvG|e>mH7Rlq=|a=`Yx8peq@CvA(&J=0C5@V(Blfm{ZZsTKfc`jj(U@RVn<- z(z;8~M|Q(XIgkgdfW0~B3j=72AtR@QYcl%Jlb8EZ_y7t z4E=S+8Udczxqcc*kQoKkRL4LI$0n`P z!KPF7BxqfEEXhOYim`lUH|T?B=-qzk&VA^%c*jY1PJN`voD^r9oP^eE=a#c{$BS0e z{KqN6K~=(wESw8$lSB#FtvEPk}Fyb ziI(I15O+HAQu*%QufTS!Wmn#7kAeM(vOFSV68l4EuUHcEY;Jp`v=NR_PqUt5#hL44 z_v<}&kQu}~RQd7YK4y`AW-^pp?NGN+{SA>fgISc@_1I7|Y2;g9vA$mbJ8A?Uo*9YV zk!jbr{QL~@^#e1TIB+HmmtrarX}gr}o9c7$?gt`rLzv6Lp{Mp zcF<-9brTm26GZG8@~XqobWEsZ@%J_eF$R(XMOmv0$>^3j4&)hS?@~X|_NJ#6iBoC> z)3Bgy@lLaksma|>4Y|`RMvvs}@y7Xe!QhJLPh4%0#bo*}#(;!Dll>DjeV~sS zKk<4B-l&B6kFqyRg>=SJoslwA9zunh6kv}e%YEM7RRd3h8esJt|pzJu!)8h%d4uXWY-tXQZbI zldY3AB}6n=$(x z2(}KwJXMYE;Y94DfT2;Mt{IPLu5NNYP8&8uPvkrUHF$^nB+58jSK7vu<83lmH)0TM zZlB1tl}z_$5SiQWwQZi#Jydd@+F5Sap6@%#^;Sl1oQTO7YfRnTw{^~Jsjy#vfOzj$8UDR30;ahi0d|`?3Uss zE8Jq27Q7bn&HgNO{!wc5<>*cKQ=eKRsOM&JnYe62P;)TTA#ZJIDKi0^SND$`8f}Os za_bd$EG?}mIT)9im$)}ghhZ5m5eP{!uS~g+c`W()etd!OoI-7zeRQOj+ZPG~Fo}Z_ za*9sr$B8c0tNuQp=_`eknd9!(c*X(WN=lW~UFJ7vr>MK=jwG2#vq*llOQqI+G`TXt z&}w<0IO?p_nK`FRjj^PH;t4^9?1`ZODZH%AZ6kejVF!ni!9=&O?he`Ervl=>V0GZ6 za&M$zCqR;H1SnSCCmQWr!Abnir~EFbgyIRc zd9crQw}2yerPYSe|A_3FDRKAnO}1NWO^$xJ`4gO1*%pa6TWl;fpf;iXjIGR1MfIrA z)k|R7HLjF|i$7z-(1CZ?HRYDHJwl>h*hT~H^Q;F2a0*G>!0Gn`tdUfl-TDUldTLai zwKP%u6>Nt2?L4(^x@8DI%<@ri;uS?Rkw9^vji;PPbXyR($-MKLcG6n^%p~Dk7X#AC zb5DA}-8Gau$((QukTztzO_ub!3Tpp?$E12)W7ZQoNl$pd;yJ&;Q<>t*uL)dy4%Y9j z@Pvu0o=?|UBo&LLs`_=hI{BKE39YssEsdQ7gUyMp&n z#o*mN$Yov3(d68nOvmAffbLGNZsr9H@-@n|5PtWGDfRD8*Q#w)*d@Aj?TYmq@ zOVf>cxR^41v!*HMgM`dMKtK?R{X0dN0*}PV+0Rw8-l(*K0Pd?J{T6BD|Mw_t_5aH zKUoR#yTn#+Xmi2@arJC8`*m!KitM2t6hGl0h!^lCyvjnDbisUZ1G8}t z#J+ABx|U_9Fa-x~&ju%cV7UQG-22^25V7uOI()QWu`z3DVn@k#D4tz zM`aVI@%e)JtBYy=Z($Y!{~u@bzZ#hQPL7T?*78QyUnlkdEqJP|I$-@ne39F}bhBa? zM;@s_W`{Ufz0W++-(;QES5Gr6M@1EBR2nCHR$rH}5be@$?j>ew3RUdOpA9eCjKbf% z_g$NDw*dGhX}k*@-lO}2F(R3~?Twd|T?ezNHeAz7?@z{kw0dbjap}1TDAl-pKVtbd zcm+UF@GcU4y;$q;YQ=bZZa@vdT(m!N*Dt!1Mf#~3az0ZBDhQsj}c0uETw@_ca!m9YsoFPBv*V% zA^TR}TW!mZTZ~@E*jJK-j+Y@SBs{3^kAP@Vc%Zr1fXl*UZEYCMC%x*nswXR*lyICO ze{H88J9doGi(z+GmOBY4ILesT-KI^ADFocLx~>DPCfA=^ZXBh#Xs%9VvaL_lT^JTv z5~lAOYj*0g)3|Kk4Xh}Hi<_B11EuU{84(?76@W|yGW%jk!K-F~%o!YoA*1}g14&Lh zjTu|5*%4GQ?n4onFkP6N7MtFTHe2Q5vyFPnvfvC%dEhNJzOPX8yx1R+= z-ZS$!2z=q(g*8g4JI#>9C*n{uhe7v#i5w_)C?*&sp+GKG%Bs18{Z8wOztdVoMwn0_ zt9BT$ACu-473V0gr3X}8t88u2GoA!u^ZB8aVMf9u>@R+yqm&uheZ=P+WLAPwdebAx zJj}V13a;f?rC~r^YBSew=a?<}g45tTkRsWCx4Zy89fU%vLNVPyV)=r+Tl+ zFE{DGlRFNW8E8T;Z9uxM&`>(_rx@G!5`4O?QOpj)A^aZ9j!^T*!$C)wcd&2#6xAhU{jN}xC8O41Xi<0Uz1G+fS+inj} zuwc}iQ?ru?eTl{G-Z?m{Y16uN?g|Yq6IB<7xt$6?iHYPoW#|D+V~|tl@x#J5xP#$iOnk?O_tGe9w%~>)9H)4P=fq{C_ zkq#OPZ$hYjo4u+VSU|(kJ9ZEpjncfY8oJrlR>v< z>S+!>$5?1((qNG?&?xmJ6q%iT!4+?vV1D)+Yvq^_BD!yy@21=7=A9T%oy;Z16J3Pz zMlL3*Jk~<&LY)ju%zIPoNpq}lkar7U^m4!TtDIeIjbkPZ%f_K-7v)N}>ya@}c6Riy zjjM(<0?hB6u*<{0%agLb8-jpWkQdQS&6VIF`fsk-5pdm*(%8cxVfgBt!Jm<^6@+Q7 z?>nX9ZQhH+zm?_|X+ZKxF^jV5=IRVVN=)4MKsmNt+~Yt=WF78>6fFQJPJLoCqLAjk z>Uv2VHsx8;s*y2GA=Dqg%i$lRRb_S_ewPcE`EX`QDJ@V2%oBj+Yx-j@t>Me?Hu`lz zHgNMgEX<0>x*RvgeAM(+Y$nI0+ONk{YQT={og8Pios`TV#EB-SLjN+$tii3c{CmOb z_Lq^bVlLCY{-x>cRM`(w@4_r@KPv``QbnFbI>i!_GFC-C5k>vYICqV_lhnkMA}X3u zN<}_9Quvv)Aq4Ze4O6S%d*ob0F;^!i^gZ?vZm24@EwY-+U3e?#mAp%Z4bNB0ngeFf_I;BV+ZnM zLaA+#BerSatu4W7+sTq_vyU^Fw}-8Em%FRSlgc9itexli`+YCMjYDuzs0ig6808v& z;Hs3(`E1{?X+KjiLg5x7jNq`k$mM!aaV_y$P66+^nvZBOKUuAMoogClOW9gHBNm}Y zntN4fAj6rH5zMJb&+QTE{&{$pfwwxquh#K`{QN{<9EVdzY0Ad; zLl@H@`AVtu#o_XgSFJ_z48m(Xm=Sh)BS_Ank;u7O0T;Q;>R42rQ#a>--EtEPtn!uO z?d03sP26JsAhHmCczh~H8~rhDX3O0#vqSw zJs+r6AW{~vXYk28Typ&`dQ_Vc?QIz8o^X-3?HK~uGjb?F?$_w^;d)fCQx?16*=IsT zJV!=|JGj(b&qzHeDa7e54j8SLkvan5#7d7iedY>RcO5 zktN%aY_J`;?jT^+Q`t_Avf*0>iVLbn-_(!CAvYj-dH-;30EIWCy91_VJd<4TyW#ZX zHZMU6+|;BJejRKrS3 zz#mW)OCbvwczP>*(H})c>|#JeM@A&FSn~OWmH8E+()CBL*HVCpsdUsJ+|=as|sn&U3AbSpy`6E+fu zXj8Oc=+6*|aXa;u2xvoCVz!0tGAt(c!vOuC73({3)Po-fNh8&(Fz9=XDOen7hlcBc z+It+vwq;$_goCuUXM|w4*xZ+WB*6NggS**FXRfCD&g_UV0~o4F*=Di|x47jf-0WCkG66ySwFQJG%zsg08E_-U zg@b|&2o!MlL&QSk;uQ^&%`CES2s(Rm3lc`P*LqP{uSrYZK)tUtu$WJs8Q_=<55PDs2gU^0QBTQ2KIW?LI4 zb(f>o=&_KHHFv-G*HB^wp+CIhPBaDi9PXBYs@$l0d`3lM8EnEjZWqg7nCk0jz z$t0f`rQuOe8qoUyrjRQp&q4k37Fg#9TnG;3SLyu=G+c)^@TXhDP~(eRIW8v5EKFQ)ZW>_Hqjx(JES3`ST;A&8E?K<4 z%nx#}#+YUqQ)X9_G4wf{HL!$hT~@yadi!etT1$EMK&bO`EGo3GRaE;X20?n-fB@?@ zm$|Gsqd-nY9V6y;-|mD-Y(jH?Sd=Q(t=L|EJ#bpzdN?c5wS>FySS@UZONH11`7MNG zbjLNHrrgYE1p6f7Gts$MY=AB^=z9n98XPz0?D(O+o4*9;u z70m0B$sde3%pb5Z2eSeB!P+9Hq@Q@YA1xqrcDlE0Y@6jef7UnazYSg%JP`QdAOn`b z-#M^>VIb8&n4AclZei2`raqfm%WZnlC%SKX+@Qis_(1BYvP43Bs-|V9$z+OdHU3^g z%`n@j^D}k9Tq}g0y3W^)A1QAxQ;I}21)Cezm)d>mh~^p2Yfg_`*ypes5V*WFt*%$+ zuw3PWH|`puofQGfHc*dsv#ZKI?w6p1E9`axYzV98sP*juk^9txM>3Gq{A!Us!vkA- zawAvd4OI|NYS3QPk-e6X1gsI@TtIfN$XH9z+B0OvGiGRK;06N1q8cPylA-d!-*|_7 zMmB_;3VI~00dTj6saLySdP`FxpWc%@93=|Dy1#O5ljMX(0Z<7Z2RWK&abpAfQ|oEn zjCTs8DlC0UcBeh;ktx<>@KmX<5&XMx0fpC|5UJc>*tg-jU07U-Z8<29F>5N1RZWVr z{^gyky1CU9tl)dsWcePXcz(7kT6cBJ02{5yS(#`*iXsy=aB7jDBW~v^ZucbL@6I73 z?ijIWkb=(hV**u#)Q56GO%P<&QOb0B?TR%#HEJ>z@E8A8R^IEFAIJO}$m#sI{!qdH zJay%>G&8aO$L5Wcp8c1P=YO6>`O51GSV~`PBu^T##G7fv^7(@)PVh**jhipN<4hIa2>Bn_wrW z7)}BXHvork6PFq7shgK?H85Mm6~gd+s_0-06Z(W#r>TGZ91s}gxtUP9Yej>uu_tPW zs*?8uq4c;z!w@8Q5iOXw6T`L`jeicaeOowC<(}LD>9EOgXdgQ8^Gp2YHyoB6#`J@b zW~!MGXK~2lAmIFHCV9bey$W*HqAmr|lmSLUn-=rgNJ5#C8w-=+tIDf%RrA}SqNqB` z01dmGIIDn0f>TVPRMAjKmpx^8HD9p10jfZ=`Z(UyY|4uOgUt3i~bcbOTN3!H;JDJq!B3@t81 z6bp`(pF4m$ZIvG_x#jY0(QU^p;PY{{rPA63(AvtUad$e?%FHMtSD~RIQ(r{e7UVWc zTl>T~W21am8u!*BD0wW_$4GPD zNb~t5$5RUVf@tzk9I(4|<#8aerU@5Iz>KQV8Oo%PvI9=gbQp7?7PE9n*0p=;d(h_m z<UB>|VPJ@q)@?4ui|!E>SR9&BnQF3h+aSdvdc#`xqh7+CliKMsv(n1dg3 za3V!1Uz_5gXG?au`;6(<@q%96m!j>?TsRTkenj~~2RUl_sIcb7&7v~9xS>`U5)BHN z>N&tD#*&qge2zdNV=Af44CeH4u;Vq5w>ix@?Y!rv!}jYcwwn_KZrCr)uVV__)DmXc zreCnrW&oY@8R;7vca#C~s+(4uf0ip6!ZogX-z&THZFLHsbQahZ^ND@v2&T!M8|L9% z>_S+F`@rT<6o9E*s!`z9`+mmrPlc|>){JK`a$p51tGYmjqNwrCD&MU$`zhY}$@&Mj zhevA*Pm;$fUB%`*5$feTMmCmqfA|A^`y@V(pr)sw$owEX5l^=oCRu+WI~|V&J{~{T zO9CC0E5EW~ue!LKizA*wW7Q#UJ5C$H4is|;UA2s7VD1j*OW)$7+}dVV z6Q0a2^ZvR>*Q6^lUSQ}pXFm~4=qCTrYOvi%k#&w6l!t}-Xq4$X|EjP@>%Q45=E?`q z`A6wlzojBtDZ66ddNx~bne@-$^HjDLs zP5sXQTN(uIfBw?^7tAsuoDZ_+i;_pCZdL9F@Pk570lfy#!6&Ef`x-~XK(^dBHG6b$T* zjI3q#zS@xg!Z)NVzkZcCQ9c$D>TBA(ho$+?@|0HV;z?Q|vmppz39iG?EeER=3Z>P@ z)K}CkB-D-Sz4HSSRLtDa$p6NPWRc{<!%He$@h!q%`doK?)$!v&l}P=o8CwNU_D_W&S1!~U(-S1p=DzUp=masHmTa> z2NT8SMO8v0VSB;MR5NL!w}doLoF3Y3_%r%{dyny9cf~Mx@Ov>Zc*uJd7`e-L1o-N7 zN&mo&z9C@nV0H}}dXxT%8hx|;HVJYCfxwH=Rruq{@mnUuPVG~g=2cthBvldK8DN3y ztHQa)#W>A7=cVd9Q<&AT`o;SOoQ5ACs|oN)$k=RVi-1N-IpSa(6WG^%3SI`d$n(v& zB|FMNk#-R6Ur}3e5Dm29_uNibY?+sBUPj|Uy85&@L7luHgK^_QrtNh^qSQS)aYHMu3YvL-*edFVYBQ^*^~P!EJJjh;iXEx4zP*$MTVi_? zDc$!1Zz_2bGCR0Vb^W&!`Deb_NLX^$;8Mt6O_7OZSkIF`9QU;XlZ8$u;Lr}%FEj_4 zs3jsjzUO1b7v(q;xPy$aD2D6s?dz6#VRWd-0*L*1F(K=8gq@rr_+-kmi-aiVXtSjc zUPzb)1tKKCh3FJo!dnujNoReF$bZ#)4X=Y=+=qxGX=r#d-(tF%8g5FW#=C+gLuZE= zfO+0Ys*4f1vCSq*-Q@DJ9!|FkQ!Dd^cf73~t%T%i#PRk(M ze)G<#By{Js!7xzV97b0{R2c*`haq&ennF}K1~&w#q&&EzH*1?W=G^!Y%NO%2O&7|S z78RAez~Kti-+|C&>ApRI-Sut!j<-L?oU;Qqn9(enO=;Ywgk<0z!fQ>zpYq5vEchqN!oQ<{OOa5)F17K6!uGTh)Psh(7;p7tvBg40frH5|GUA3fH`B3 z=pzf;aKO2iqzb-J1F1jzc+t2nmVfh43{txVqo(E7Ec82AM(&|g6nD3}-@CtkfxIgt zuQp3?Eh`*6N1h=xKGO-CG$7S1e$#&CO|76M#B_A1QqNlZ3KbaRKat1Cp&ir+VM;@| zN0}ze1q@Yuhlq?qn9E3SJk`*Mw>n1dm# zB0>^JQqWB@%3%k+*xFmsBJpCL^PPI^W~|g8Yrpa?+W=*xW_4EVsM?A4UK>Q35O4X= z@*90>_wPy_Vbz&@fWrzONGDmseq1FNT#r73P?$r6*eN;a4qI3k321VQxYPiUeR!jI znkf~xYE}Qon&Th5Cd!|FcN@Bf8-g_6{bwI6fOi=6>(-bRF15QCVp7%kH^g0ax&>{T zlDCg8C&%g+SaI+t0)?aD`8NI^k1s5BRd|iS1{#CbrfMBznAFOxim7$QdRijvmY^QS zi+gw&T>UWo3#u^iho)dKkZOO*oQqD3?09@!@-XnPU(GOZA?|DWYX&^spkLmT*KltP zuS8tanY!DPV-KBMB2QGA&o)iK&P48q)4(GoB8c3pCFAXCECZEk)}@PvMblR$L7Tea zzpKNa-I~v2Q6FJ4cb73_X4DP6!rZSRm;z?qiYdw{-%8!^PsZ&-fgTnH2Qifk&4OK~nUChx2 zV!w#>f`-*Pv)DSRowW9-H4%!qE%M7TTy+RNa_dYoxS6rH%`wlxR~)9?pvm_)ro(S* zw0dxw=;Oi^1CnVBR~T>$yJcW>+xysQy;K~o=#?c0GSF|uV7Q(OeVInJK2j`|r3Wzc zZ_VZ(J^m<9X_)W%V9!rf^PU?58$MQBP$ve8EINvDbZ%FTPh3bom4aSsaveEwPv)!} zeT#~>PV=4uESrk8n~YzU*w3x**e8+sw^*>uKHk(PwE9mSl>JTUHxJ`w*~1{ow;=tG zOwbO4omSkkfyX$xO_gyt#an@&yz=i+^BbAyPsJghH(5V6nQS+@e6X5ycXGg7c6_*( z{3LKK2PWfS6XVAkq2JcJn!q$b3W86VmTYScQ+7s#I}GL8nu=r5ak;4qD3*b)(8JeR zTGbXvVP}S*WY-B4OaMj+d#PkAaa@E1j)E~3qYR2$sbMxFUkYsn)RZrOVt)ZOgHbUB zTk_8B(0GmH-&sa@Q(Sw(=--V*RVM-jWb!z5xpHKbLzb0!8E!COX9TU>ra|tbtNPKu zi(GPbl{Gvptc-R)8deG(UJ6z~ednNz6@vt(lW;=M8~pwE*mCppy?t&kRu&dsQdU^` ztkdRoso|+@zy%Eq9Fn9&w|(Sv@(o`251b=Hju$V^fgR{__nQmOF7G^)8^s9Ii&pGwWRabFCaNb z+Nw5TFB*ux->2iZ=zD$tA$!v)`-jlvfwNl7^&oE?3YRL${3Cv71AiaW99FQW+E#OU z|Ckc(!U!FxaI#^S>pB}DMq4*~(kS2$Xwczc;TLh_68O%$Y;r#f!Y6)4R4LGK)8v8g zJI*4cGybdlZ5WoD@vq}fctg^8XXiBT)FyC^@aatvt<4|))yOu3ZRc(Vk}PJ9N*!-U zWr%d_^<%R~YJV2`Q}>JLra!zj0m~5-vkUium{aDM;RT}Z$AK_-Q4tpKdMfbKpMlo- z%$v`l$M1I&cSJ|^)j;mtx(Ej)&Otv%&``^X=vXo4*|8m=rmk=ZX&4gV5SBB0Lp8H2 z_qo_;j@dv5rIdQt-Ju25U1(8P#%&0e!YJrWH>*_$;eA^-%?-)K9PTyUR}~+7C28jO z@$1<1({zCsG@ zQYbiJ%PdL<$N2btch+pFW0k=~AEtovOn(reZ_+HTHEwwRa%1h5u#@C*{Df>_u1I2S zKxf$%vDA03)%DdFJ?!M?FGblLWx5%FOAp4aD z#{Aqs0d`A*0D2^XWXg^r1CckcjttvAG`b^{4i`3M*7K6mGV9HG_0<+Pp}Ia5h1S-N z7G*fBR10&gJ5voK3n>w!QbOL}c1S!H7o1y91_{Wb*#trf$Pyt0`3Z4i%_NN@<`UMi zt01S=Wv;3{n-hY-4IZnevg>;g(NOw`MPHNUB9ouOH*xr z)7%{&NvNqCi^a#OvPT?J3nDP(t;AsF8tRi3ax+@t6+#*I)T70}FLjICR}eIQ3R zrG@ePGVmC5YFuZIP?v}M+`vd;@=Zdg`qXt2wKcbE^ORQNQdeoP%sQhE9b4UgMdrC*2zDS5l6r!hOwKFqEIf!{)sI46!|pYZw3YDrsKr!Q1jrSo81oBeBs)h&{>cmSsT)zd2F}zd%7Q z#Na@vUs2S7<9OlUMlXeSqfC1o^>Q3!8ENZc!x$_MM?ewoTO(>Owkmm% z?v$!>rM!!ki3T~=&6A<9c%^h#yKeHMY|s@*sD%Po`fq?cM(YlkLPovLtW1iD|6V zJK64`T4k1n4}}OY(hj7XL&g@ zjdfrz$jsyZt3~k6(3o{4UhgIhmJ{JTwuvVD@rB7q(Mo&}ztY2voih<_pGozI8@WH` zB!>M)xy^~FgW;s_ac644x6akHO2Lz!GFeZlfCe*J&j;RpD(Wz1nvDqD%o#@)uQP+qAjDzAWds5ejJWX3d9nH}2;f)23o;3g++G zGGMyw7x%Nm70qxtI@l|qf}C6t?ptDsonVcwj*?e9q>xJ`Qf{xK>@`#CX2>1qi8`%m zvvlsG5{mXF{|PqK;7>F2wSuqmb+;2~_9`Civl3}#8fjDEI)hD1Ah+v2{AO+dfp=QJ zP5o%a1hZWEu&r~qVW@t?7Ntz*`ZaraNhj>I#+&2n&!1&|elw?x_;%3pmf9{>5*AiY zMjlq<3q;YjN?i++t(-jFJC*GtO`~BIvp$^kYjaA2dn^WaN4w|+FSCBWkf6siP0<{*V(EP?&Eenum zR}cP<9f03s2RiaJ{z}^kcK--pvwR~ZFoGaIvJCZFmLoUh;6B{C)WTwiu`#|7O4sFa z_02;;tF<{aH9zQ7at0U_9i3>_2CZUZY^PCJnpe(LT30@M?o=N^U;%v*nZrc?gzD_E zZlVhrxzlbQN8^f;0oiMToEYb>MKr__YTZ9N;$&g0y$dpiFEBqztS~<*AHICp;DlL{ z2>`Y=NGre`7U}WlsL*A+cOZ;Og&*2-SN1xc>^*rf%E(zHHq=3LSaLz^tv4Y(W_^F0 znV{t!`(SvwW^mj!V|N8@_XOOT2{v?Zt-yQ3bWR|g5Bdk7yZ5>L9k5UZ0E1&OuZ0A` ziV-q}RVv_#zx7RudXJqwn%P*TQ7e0rA)@MKRgjstJIVZ z(svS$rrv`ZrwMrt9FJrAHuh-c>D{*sR$Y;!B7sDr;s|8;xn83uIFk3wL>|iP zQqNvM%T?2Jhvy1~=gAAtoQG#iF;|CDl77!Rid&wis4Z16Rw*2-kWNYuq5`=(g<{cqv7Bn$k`uP|G#i}ia?ZusWlOb(mGXeLv5DsUTXV7ynAHC$t$N)v-* zg*;06@H^wXQp#Yfho{2;YdPYT`ZU&1%xv=kx-ttgN>moU0?VPWY|^#en4&I9M0S&a zbgX8L8jA+%VZ0YLj}mUC`b~`5HswtVV|#@eD=GJ`Q^fXyO0-W4-}t()bYqmB)FJo+ zuFwPcLVCcw9qQ@h1ztan!P1l+qLBN(aK+kP1JypWlmpT{xN`1a)sha-hKtrCq50D1 z-J+@65|w{`Cg*I=`#l>j$=KoS28r$_a#h90R1jMDJ%b@`^#*!(m%6AcdKm0EBHg)t zVLg!_8MIoii1WSt5N^dPTtjO!cg`R@QOOjl4YGsMcqB#Q>^^tnGWjxG?BDs!vr@bTN1wrgj&vTOS z(p{?UTA8TYxYju^nD@GjL^~XM>;(`QX5<+K&j3>H`ao~_`X}3IC{uTw#-fWg2I?HD zHm=Y$x@ImW2WRJ&r_}h`TOnqIg9BkLk`(dV5#gyBIdyw!r~Z6uG@>On&7J|L61jX! zi{X0t1e3or=8)n}Sds z{V~s05!;yR3jB0w`a6cUgNW(6$(jmTNFwuHy)SdVxB!3Ng14YL#l?~h!6Bx(TNrK+ zqq#yU;vboPvv)pi2@{2mPQ+=$Ys3*I(*sR5G6U}wa%a}mlo$eo1u=`)?7qtmh*8Yx zePAiUiWGb$w#P?W*(U~+o*`?_PGrG@Hg;f-8#tS-VID5h%crSzjZQNgFy@tX9gCyw zx0E%aRXYLH+Tu0ZYL20UeT>2?1Tc=(8}W<~7e+J=h@0O@yBT_(40m3CMbH?PD|-Er zE&VVn=%+uFp?8%z;!3tZX>G!Mg2lPgx_IM(d&JZI9(9?|E)#-Aev6o|Er{?c{}vo_ zYj6XQIYuM@L}Y0i3TPIj;O+kY7FRQ&5DPW8k67P4B<>M1GokPTGSVpsL%Rd=kn2i? zf^Gy26EB~UNK(s`a3!L!E>^;uZcbdheyqqO<}_2>d|`%mSm1gm zNm!V4CrxN#VUPC-asxY-5dS8JWYCn!Vt*272+>`vGbzmd@Y6#@}rhd>Ph1lznAaiVghabBO}?eF}J=gDA~g1$=x_aQgnaG4@@ z*N>ih$F&J)JY2ivYTxwnd_2_o>C1p51g9v?JE4hIFl<4HbZl@dSqJFj!sqh4&GhyU zDYv^FV>{#i^oIvZQjUbh%=yH$1S>&iH#2O0b&_yRnZ8;-bURVguNl5GoN|~@hX)gS zkLs{+tz-V$#FnXZhW4;BK*~9xNz_3LJx|fgXu#|c66aJkzqs=87|TgZB!i_cq6>YP zlx8*^?tRNHWd#L{gE)|Oct;-Nu3+sU`3QYMXyYb4hqQd==XGk(Hmqcv2-C(t2q*V*4OV%*}5y|7e|wcOz;z zeUVUVzIurNd+Ut(KX|;2?5)fk9L#L2|2zC#Udm?nH@ueymz~90r7Yrz2>w(KaeRv? zwm-Z)NuDSuVc^5ms&Tu0gI!yEd-+!76*-_T<+qIOkSIz_9&3YIa2LbQAA ze91r^CFC7#v}6@T7{QoJL@Q;kWd5w}duc_-jacYMMi}utWy~4jkuCr#Gm(J7TDd;F zg{Q-r>s*fnfuT-7R@r~O7Q@R-maJIm$jADD(4oN$zNI(a>;DaI8uAL91}^HSrCzG# z+ollx*BYHW7pHv8+uX+r0|%a=a7o$;01hY@rf;>;yz*j-7s9w25A!^Nh`YSjhfr-?tgJ5sg$1Qw^FF;h0-_ zx6a=L`#DZ8(hRn-C(xSkwwp7zI879{KaXeft!h#@&1UN` z@KofBcR36yrCn3b#J>#4%cEPtKDK|AH5WK~akE}{M1>LvdDBgAT_ zx1&q2HGb3Ua@np{5nSVP-D9%-(8c?3!(qa!^L0b<2%dddXdCc}W-nGyE2hMu;`~2`A%#uSGcrb5|63Dcl zwHT&`7Nd+$FPr}2H)E|vVM(t+YRgoL8Mf0E466BD1@sfT)S6G5jpnbYyxQ$JQ&l-^ zxweu`X3^;SE5R)uGix)~wWd=Du&t>s=Y~n)^Yc`h8y+oYTw}fYY}aC|pZ*&xwBpXN zUW5s6`fPFP&zZi_M>_iJmP9+wPAv4i(Av$-s=J42$DO3facW$=WwfvGBoZboP4hnu zr06-*W=+EaxGpDo%Er;LoCCLl2C$;yuzqot6T)pei8#o~tgwi;%Q}%ESw@S$(L8WY zhxd))S?V&(k1H-72F9&Wb@AFP2~vThvv#t!sa7V0?s1`NG2|@elpoz#jqZ}rIcteG zN>-btKPe9L_G!lz{7q3?2W&)`;9xHl8u7#pZxA)8%9&7SY0jNcqxROQhFv?^>api0 zic7x-LG;+}I4N~mu1+~uUIeKvDaWO98Dqn9J9|y7RkubFFUD77L>y6&sp3Q*ag+f( zAbFB<|H^la+?(bcNYXNM>+p=`qMt3yU~V&+HLV5B)lSA)#@RabAMxCL!g6BI5h0fp zmp9aKPm-E>Du9c@0FI4T7ddD|iSD!SvLT;(0|oA|g8Cg)+3$Df-hoP9_kuXukS_4Betgt1-H4zc*JHaY3Im&S z5}yhoT|JX2Y@nKHrwI2w?EbNdswG%J%QsA=4qEb1Ct}R?yA<8Ix27Q95>`k2Q!C9f z8)>aTx@iEj`Eh>!^9zscfp1-JYS=PKwv(G^XHSg_Wq=J`xTf5}J9)qqDIs99?oR4s zu<+&%=1j)jT~?YZQsTv>j?a;fBF(O^ea4*m3pkD-2+E0DZWG08<2N%jX+7VNy@5Rh zC+P03CBqDWnQzzzW*8&rnw?<8KY}D;g}`f)JgXCTF&3_f%F~O5UqiB4B#XI(Q#?~p z%6TJlnU;k+n}u063-jrng}HhuWpHi1sh>bK+{XVOV7$vnczaf%PD zSYEN$`u2pK4U$Z|B$>zCM45UirMYXH1lTzx?lA$L{n9!#m!nJrI^;=I=17e?jslX@ zHkfqAEET{gc^#pXAHf!$te8BUh>0=02y>(bT{7gUSt&ybl;h8P@WYs_X$n1kU8JgT z??cX<6yBm{Z<0B`M1Uq`#xpI6Wv~Gp44uqk@YCIHpjY(y1d<-n98;YOVF#Ao>vBgS zcnZP}0L*b5aHH2@k%($w1yU2bQEO4V{ZrB%tUS3e(j}cK7q%HnmV6ZolXh}q#EHZw zpAy<9JMj)zY{(tcL|*BEH}6n+Bep#A1D#<=H5st;FkOsRANi?=O6(zva>wil%#Uu`Ls!*7 zGzWmYhwGv23)PPzcU+Af!Zzu^eqqF2YlN0%0{+;9NgUTQd*B*#_|`dWC{I4>{aIg( zmzIq^rMzdUYbfx-vVXj`>=D+LKN=1L-`x9U?K8ru9(;wI2kv{vdL}vyZrq)SeRcid z6wFJ{o@A7WpNzY*O(%EcyrOXSY&Q??d;4q~a|eEJqoUdTozh+JMzHdSv9AiyH{fcq ze!n1ljHtRO7MY;*=1l!{ip@zbmf6kJP4Cym(6P#zW2`bd7eDruxS!(`YzqRI*BR?o zLYrF6cQ`dtGMs$_8m;y0V*$VjOKfE6gc5HYCONA~LWbO-D& zuk$nf{xgDoq6-U{uetR%T>QkAf4TL*`8&XVk5~NQD|P^3r-S2q8z6T>{DRyx2HRmS zmY?lO6$2aOfe+sXZQJ~dyYR2u zDBEUF4`5dM@GJHCxBl^$y_Z*R6LwE>9dj6;Wo3JI)^l6`xj6stSHGuvEqiXt&iyYs z46ELczcBy6T=L7cca-nd^W?Xw#{Z7FeE)Y5{twKRwRg31F*Omfbat>Y^prKUGc^Bi zy>70CrGd&S>K{9%N$fE6G(s9fT;L2-q%d8`Kr|wXEKn&8td>#36H?5KndoK`1ML;H zhSfH^6|@UIAmzp|Dkv;e+iF#t>LA-|vsJ6hty!&Bx~J~j-proKu*rDOmv15)@9EBC zuJcW=^Y`W#51c`rL#JXWRk#2^1-9?f_?7nQvmGjOFVILuMQerO{HfhnE~ zVHh`R3)O2OjQe3iP`Bv^F?!h{9{HAuw}zh|>c0UvqXgk3i>t{jf4Lq9S?$ANHp z5Jb2UJf0K45Ny1JGM?kUq6I)M_o*^CUou3E%0t$PpFZ}v6Y9i6I4R%dzCIViR^=WrJu90u9etY ztXZO#UQ0~nFCxKh!m^vMom01sw_1$g*F|0`7SRyAW*dDVeHr)T~NFu`JIOk01pGpcQupy*C@*SDe_RU?d~;aUt4Ejab9J8-ew! z-C+Zv8`Gd_9ARioqFBIN()QJDOj<&T26;uJ=E$VEjK%)eZ0bIb$FqCN<+JM+4MUR2 zVk@H`Zpwx=1M4^K$k6(LOb;zr-&YSneLKm|32H0gLu$2=~sonlSAml2tC>euEd^!ubJ&@9!fF;ptOH0*a6y>s<8O`(s}S|e;W z=I12C79K_Qa?#cT-p0(4-$qG%sy%^{w@6Y!N9AwlcL|DHFJ2rQo&6b%^>jCvh znf;UV)>L}q*i?HdZm}1nJz!+d+S@2Sr2yMcT?3n!>466kiIe0g|ATy`^?r=!OX98H zWV8fds^X4$5qK{vl7UaDq>VGhfPD|~QUANTC!edyO$@rlA$cEF}Lx%pI$`e}M$f|_0DvS$F# z2N!!wZBn&IA>1cM#otHntWc(&Rv&1#Qoe))GIF+SIMW25K<$k znKqw@xEZ@M+oIVouf7DGJA)hA%WK;-q*cPVXTZ~UDJ^zLZK2xUUnvoN9izSWp68Vp zeanizlr(mN@m8hKvgiV}5vQqRU9(WcgxiI^5lw7`;L_-WYvJ-I+Ibe4xV#jatc4}) zcSJV(DbvnNnnbRq68#qQR_8uMk(yjD~>4vgq^3q**@**ou%E6=V6I#>{p^{Cxs=% z9e)|)gez-f%WVwE**%~Hdr&$%at^KmY;M~>X5@h~;=zr%osi*8I!IjzZCYt88fY?X zngzVp?F8#&yD{0;8+y~S>dQ}f*=m!OwaBsSnyqIO=<$@T$CSD>4`(K4oD^3h8(VWR z)GzV;QINS98bOk)Xw-l1O#T}A0(UFJ8ChM0a8zyOE`OqUn8wM?P~$cd%L@*6lj&~& zVcs!sDJGa7l;?(yFR~y`&$Fk~9WS+BO7~hy^IA?zn<&L|w!}-1qnjoYWQEc+-SpHP zC%YPE0N1NrabAF2&oqPWQiwo0i3rEekL#2<`vJ6X6-!JpHrs*wQR`U!iI5eSXbbug z^BZp`+HI~K@NEv(<;PA6nNQji8Nl_xLMOEPr3e<5SCp9vtx`w;?#F`)UB;Ge z+qgO=&uH6}ECZX?F-W;5KE@DQ^h(rDdJ;|JM5wz z4s%-)MKGek8*<>8A##EB^jJ}Icu)p2N9qfqSKe1}@+DPu2ov&&;Q`||ZJkW;FVY~p zZe`;k*AysaG?y~&u_d8RDM=)uWvU{N4o_!GTXi#VOphFmQ96L4@=ppq<`4r=#tbpX zl$&QRkz**6V=B)l-g;(NpOnbZl@?AGF^Q;+Db~a!oi~+a5{a;BQrG=V&84VMJ!>(J zlzAw{eU&MFq2SXNl{O93R9jNZy-LHYb~$xm>YtKO(vPGSPiN+pPNLKrtf7`XdfxJ! zZ+b+tMX?>b=Kx}kd0>gvWJ>+g6r&zT|Cxq4_IA+d(~>d(MDMT~{j?^H(<{N>BZFCg z$K#p0Q@_Ap?=<@znY?~p-rn&Jmq%yMWV6TisYVlxZ^rbeU#fkkOx|=1@?m0cJtp`N zdb(PWxW0*hj0G%xIk((|f(e8psS*D#h8#vD;juz$e&u!sa_C9}^{?L$9rBod>zQ`9 zBT*)Xx|Z%A3g?%>4l3y_shk{YvyN(-YI(%Cfk@rz^LRgiPd7ZJNr2_vZL#Lf;sZs# znd%wS-QnTB^^D;1mY!f#0Qbf~86a!*M#i+-$Qdm%+B^8t9+)@#IgB20Pke><@RYw$ ztalY=+9Fx;EuB~N1h$0Rqds@(k3je+nic4o7C+&2h?{IJXqy(OlfBX2c|9MARA~75hnD_)HnhNRTjROp+yG@_@*an6hps zchy`qLN|=KB#*TGfCs711+RHb4uFEW$aOPm?v^+|$Rcc54yzwnj|Dl${`=2iwEP?{ z+wga*3X^P(vzn4%6Oa4$|!vcinl% zE8FR1xEnMWcv>&LzSo@Y9vxki2zEQQ8Qp0HOtdXRn*13Hfy$TKs9(GW8xn3L03V-9 z*06&nWs=eR9972rwJES=-$59*+@}+q;BD)jR*@@w@Lt*KsRY~cmyzR9)pE7_89^vjGC36d+B(Q++#R|RwdBsU( z*+bTu_YpXRBoKUptA;t11uh3z>3Oi*wcMB%B_F{fDG*ylZ8yunx5mlL zD-UfW%dB%u;F6l5&Uq+t!&O*6A&jwx5JDGITr&Q(*!hDeDR=t4)Y1GNKm6~bhyP&Q zFD|3}z0)xjGBmb!b@5`WYXm<^j@{Ngl*g%?h=Vh%bT653CmKMWAT1U(Xl)aE|ald0A~?tq9o34 z&E?BYr=0e2F zsb!DZLUMM!WNN>zkc+#tywthf$Q;KfM0gfg%&&8|Y^q^7JY`{#P==G3w#_-*Y%rD5 zwQQT+R$OSul!dpvMt+o;nm-4v$WYF}eu`zL!zqWQnO>&$jD;zE>c9#+!&1(h*(46Y z+@8x|%KJ7EV+)64&s)lUDvjtR&Bu^5f2B~Z>iJ|?%$SM zPGglEPO^3;4qiGp?utw*$z7WD+hz2)!u+~P5Dd5IE77o62ItMaakd~?Mh6w+D~5t6 zDM6Rb;ifGtRCMHdWP&C-li=Mw+90k@a>?kCE4%p{NZf@}QWCa)R(!Dl#3Q=7d4f@Q z)$CbqP@n6p)HJR@Bm1~9(1c9Kx3>Cw++HEp^O0K zQY1Zmh3Q1U5Q~b%_4o0dqiq;?{y;PEv>~gm*sc_JTVniL(b81Lsj;cORrJ6U2hjsa z9L#QL7Py^ZXUYMV9vWvHDlpkY^1!r*Xd!wP_=PcNs2cd&K{JpYL(VvNAlpOwz;;dU z5I2z7L;ZjkuW$YiXm6?ESP5Rtw3LF$l^R)}y+gIEqKi1WhE(VLjBefZ7(gbdE5a_@ zwdwPCaegwpBVlDuWzjXZj3!h6ymnTK8rt>5R|O*_#Nv4vxs_GHm{tv30F%k6E}0HU z#yme}orxtggVt769FsAT#!Z&C7QnRZg-%zS&+hWN!1VAfRWz!n+e+!lQ01~TkeIJ4 zU8~Z9?0nI-Qqa!ff5vcuT-D-CE0a}OAu@JCre)H?lcgZ4f;s6E8ZYxpVdPe>OH3z~ zRvo*db#aIaP(xiy?0(kNyg2HSjBj$2Kc5e@K=`UWGMxeDoZ5#b)?Nt4Y~J^7KY;ei zZCkR|DTuk{vo!VjO6^%qR#}#6^K9BpcK2u+PM+rJ+(}kBkWyk59+oP7Daavdg>52{ z;D*Du9N2AiUN8!TO34kSKT%)0ophSlJB$U%t9dd(uz7mODW<-E~-Dq zgyc6R-3Kr$w(;Y<;Tp#fHkmtY73MW0vhY=HT|?0^tx(>rBKM9q;Lt3|rqZPUC_?AV zmJ@j7)Wjy0)V}xIA{lkI#2yO=I$SOpdmq%w_;4W#YKAkqOG6_hRZYH)v2+$LT9k#J zB`|D)M=4@-t06;F3(PX{tt6#+Ng^sg6|6+1$%&Iv^-2${o56F}yhErMO;dU*6{}BZ zHjDH~!{y{w{|$%FH4gqA7-STyM0rK&DP8$f(Wod@ZXwLC3m-f36zJW^`$zUY0W7Q$ zz0yWJ3;Ysc5+{ z=(mugj;(c`Kx?A)2gc}Phv)g3VD=a$&b+;m7|LDcPtnqz3YCQx4CO1@&Nxr}aU}id z^4Dl7PsK`$%z@{U_1q8zO&h*os?w23t$DS%il(NawN9%W4aXae!3*lKlYjjljjS_g zl<{C7WoO1A(T0YIVhX|FcNb`WO&0Q;L_XT4)Z#WYB6myN4BAbN8mr949}y?zA4vMd z`Mzc~y}-dAa8Dh)aKzx>)A$vt-`jHp?cW!n4LQ~Znh?vSJaGFn^=}1HzU9VFJyy^h zzsUFK=?U{^wJ4%a{YYg@hi+A}vXEB%{ZED0q$RR>%(uZv-oG8Qi~rwsBUcyGf5PCu0I*bfSMHy6BrT0@n-UC)U`0g4Hn1+}Uj-vzNR#9$^q)Np zjG1=fu7;b0%d{6TuRr?&)=7#+VDJaRnesHJ;t}a1(7k`pWIFdf=H|b>U49_^aMqX@ z8lpw!jLGhZh4Sqw4z(@F0q2X$JQES!m$kB$inaua3&aew!yBinXg4}!!^oI6h=^Dh z7A)`EV%tBJLy;Jd1(dF>r76f`a2>S^I_DTwv&!Fa^`-bxl z+Zu~Cmte7lMvZ=qCQ~7+fKSH~6{ZRA*+4&N^`Ye6M>ACNC`0XOs5-gVjwQ6Qo?daI zju;7BNymNmTiAl~=b)JNNsVez+@ z5LTB5){=}uVhZ-_K>8Xsy1}6G>iSz!`os|6qZd!v2{c=U4=cK)x7gbTt3rk_ zNVT6(WfGUbCsM}b6A>2-Y7k%ogqg(FltIwJ1g7o~OC#DjnDAJY!t@ zK|uK!^NjPc0Ns@dPVY-4OPvkBk!>YBZ4X{@%7KFTim33u&D1+ zZ~Wg3<+>SL4~oaYx+=CNoqdd`XI-zfTRRN0sP6_QaFWP%AjV21{=& zS_lkB>Wf8-C#jM0m?==xRev=NhX{nkFuNcv?$WeU#eU9hU0Rc?*4nnPX?L@d1y?i0 zp!Bx;>BP>`v5YDl@Wd`0mR;y;5FQSj%;iqI-%J~Oduv@f(m%xToyvTDhiE#108fbl zd){OY6-M249p&X-Py2~x&wbok<^7EyH`|L`j%CBT*%a1Y=hv3F^Oqb#+;_tB&U)L0 zW={K7-X<+l>yE(7=tH%LJdT*f(4TiT*@hJOiV1F!xx_wU_r`g81-$3p=XVm!$0wIq z`|=tw-Zw98)}HoMd7E%kE$0cP`QP$xx2k@ zQTY$3%oxgzpqG)PsMZwH8s;26^t~Y3Jc^$=S30J-hvv^e7cRr*JLX>~n!UUz4TVL) zvXQE&@{Dpuc=gMnaaogo3r(G%5tq55!r4?(7{p!h4lfcE7e&g3b)yTJVZ??k;2^16 zx9CGLlN>^{A_ngu8tTJ_Rr(0x7a;8dTK}TO(-{t!t^7(;b@U*QpljD+AZfuUlecVN zYsIBDx3OV8zbusF%4A*7zfrkFsYB{?HT3c$0UI9q_#|R)tUjjSSPs@=wd&7av4?B- z#0W96-)6fSu-k^8T(MW)CFA$~LTbZ2;l~;OPB)one>n_hOoswE@g>y#_JzVs`y-FE zQ}9A7jbH-3j4{kXVcL^LB8`u*$?`RSfOV}?t{M7UiG^yExB)P9EAfRi?l1G3>CBcm zhQ)9qgh9G`(vO92uv~yAS^;y`&VX+46EPi7Q3|k^cxFf$Mc~zWM;$IU<~P2fEkPHb zIGZ#>c+jSxkAe|@t$<*i;zKddCqYq|Llnv*xYC?iw(j$oF-p7Q;fr>rC-rf~!>aRdhz7S&@Oo!AF52ND3U+E)fpTM)zE2zHWd(1{(KAQf2 zdO<%qZ8Rr*)3|{CZEwf=|Mi3a@8HMO|3bI0w7Qg0G%ds^en`}=^ddu`HrU zi`c!4bGIdU8TW~swlHk`k#+_|S(baCo`=X7^Ry@=mcr~SPG;x1x4FMB`TBi88za0h z(Z(3!dkNc;8yZawHiZcyz@v&H`On0WNNO}SS{ls_a|Y`?@~^0)!2+PLN4|9rxHqjS zcbHACTyI)!IJg|~@_OxF zkoIEjp^UxsJXm}N6&T^IKh!Bk!GwB*l)_bXy!S2Zw$Oh$?Ww#ntE|(j!Cy){5%7-4 zT*4k4<{nLHpZ5S|{!GHe*Al zD@uV9x(PQQHi$r#sc#F*5x@dAW^?s}x3qL7?(TfjD6GKWY zh!$RUuS;-q=191kNj_tZ#W=<|cFd|N8v}YKYf^k@i3- zikwB$^1uN=<$-&k9e4)NhLvSYZsUS_3=YJ%plvFQu0c;TV3eBS$;M_XhAfPm5p@N}gT6>wox@}7y-=y&#$jR!H({!YDMi!2@gQzm=1@e{ z#L8e*JLX8<(g(ru^9=i~s*P4W)2x$t_t|5s51nded&m*(NY zurnjarEi>c1e?Og!Hc7F1L-;Th=q4l^B@Xuvq!1alrOFy>y*UF`69okS?lI;RYlA; zSUydbx*GYBjW11!P@U6-GY37B{Ep)R`$g14{Ay)`lx$Ch%21<}XZZHIaE}Nj)gyK3S)tnIWpRfT1Ug*ew?qObtRP z0?kYPV4dRM$T2t#jUP{vx2ORzXFZlm)I;d%& z)jGdPsv-ZDr1~FtHHcZ7+L*|jsacx3|EpwARkya$Hpldf^QDWsY^mJl(9NQ!VyOg3?^z47}p7-|Ln|{eX?)^SMYyt6y(T+RekKoW3 zHBe84LFQnZsK=awe5mAaEd1!^@@_W{p3S6%8n7hQhbgauXHvUT{5 zRC50*-YFwjukcx-Wge*mE4RzH`(EMD+oM{ikf84*scJX!h+lyeUet5Tf`y|?-H5ea zbggFP_Flc!X?LH!ZYKRoji!@iJKbn~P%<5DtjAF|C~^KoTx>c=Fs7toS=Vpp1?$F6 zTW@jB>vkM-_HEy&qR5b|KOy7CLD{WRPNWo36D^#7Q#%I~twJtEf84aWv+`29tR!uB zloixlelQ2t3i=7IX~<5u#9Vv;qouMjQsvmH^Q*yW9vZQoiR!y%uT#!Xuc?5TAvkX6 zH5;b;oHq4ZyyZEk)@h8b?(|$~?Y3#8Scop*#(sMsI#Q!@9h1yHR^AszDIF7=4fd@x zS;-hO^g0Z7*_c|_h`UvK1g?#f=cDTO3(H8S5Bk2~7_L-9|1KlvZrM_@8lCT?tv5Nv zQJf5nYvLzJL6$I95{7>e8&)Fx6(+eU>`!C|R>zcHXYds?Wh=^T)8>Xe%gR zur;`z#6h!%;-G?iS2Jz78k#YtCt==z^lMJTAD-%Ohm1R1=FmGBAK#4nM~^Hxc3Drn z_{^FV%eMKF4GgkH7SM8rB?0%hZY@+5?U{i&TS{`1Ttc6h8dbL%FJ;)1o#Pyi2ee20 zmJ8E)*D1|*L+6m@LjlzuwPkzTJ2J^Titmhy+kE9+D}~mY1BvPx^kG8VBM=zsC8~< zZ3HJtiuZ%5D#6B4%BD%)N&7~$X(j&}}TYqW!nG^{9=BA&by%xIobF+$@T0j>$;r$l}%d#KZk zFy9L3(pBiR{0bTq)u%htiTQylG_ zADCBef*vKJZ`41%Ax=(4h5L*Jcgc#iB8`}?@biJnH6&ccOlAZdeUMC~gs@dSN4f;> za&Lt06+@)j7)i-6M}-5b(g8{7kfdZtk|RzW7$qJ&@)Bv(ZKWfnPvS4Vt4T?C;uAqq zko=PPwz}F4&?3}xw=V9hk~l<514#Tcc#$iJXC_;3xX$fOd zbC|cqHCz?&usr_9zu6c4VYs0uN6_B=3B103Wp8*Qch~hWxgA#2coO{dcEo#@0}~cF zQ;5LDR0(e(^qs(nijCbL8PGl?bqoj$e95?%Z$RfaE%zU*K0F2e4O4TF&STS`w2*H- z3`4CjdNjyb0f;=nP+^qct~ky+9xYzlrlH4ArsSWnwn_YU_9*6%oh$ge+mj|k1W8xa z>*4`EEhuO|9S_~W^K5Lfc&VIeFQ{BE{{@-2e*7mqf+lJS=j1VUoq@DUNRQaRzXH-T z_Y+SM_5s{e_=|1j?78mBU$&&5uxbAxKVttL`3^!25P$WS-+=F*w%LyG;*{~lM4#Op z(wRRouZWh2`6Rsjyy5S#B5)jn0shAp@%X_z>?f($7n&P-TY}8Z=7=7UpByCk&E}8+ zlj!0GSy}Ew`Z`-Wh{>e@E&rsgq z)Q|o~XaDeM{{z)eWc|_pJJ-){;{tsI2rp4DkCT5!#-pS|B%FT_#OD63c(II%PwJ4%LD}fnM4PQhL}YmdaWSCUWim&IC^Op1W+H;@x?IVBx59l4*gJaIf zIHQZPRum>kv!e*`Y))XeBgWtfGUZ9BMuL%Il(%D4PEQj_?2UAb&A0ZiDi8vTD4N@} zaB!xpu0kg5%1TwG@;Oy)+KOQ$Zh{j)4Oh4t6J`g>VcRqKgVYi5ap%fJ^ zvZ+F4`k`Qq#8_raKNHn0w46z}b$+6j@1!HnKl!<&X_%8PSuYTcybM=;#?HPra;m6T zt*Fd&k&$UN!UPJ}imW?L_6iAAa)|gVx#2Qd`c9 zDD@Zpa6U`)wd~Osh)3o(F^{zTz&@d>_sjMWg}CEF8@O~yBBPR2KmPG(bM*|FfI#p*JJwM5#Klc$|r(oPrPHfhi&|GpR4 znBDjl^~hRzcvow-VxCrkmqRb?D&rdc?wAf#rG)*I5bE;i2~wmZNv_y#qEcHTRZ9|Z z8FCz8ErC|Awp6%QqGi0Wks6(n-mxv1K|T=i44k#9EGDa}CE>flqAvuS`D^34qm)zT(*z2%fVKyuI;Rvcn_s z@q=)(L*dte5isMs6fMcy0-B!szgOoIbX=ymytcev@r%g2ro;&5YqEa=@Xwzp`-{wv zKgmrIFpKLlf{6H_gMC`uMc6g3L9MG!;FHZs{lnMAsT@DVYgcgdpgu=*LAsIs}k zTg*|ceQq-k&n2$@*#^2*i44hnw}8k0*4~!(Kf0kvR6HI2>zayHkd+@&_?c7ss~S!4 z6SUVt1_j~wfugYymO>IV6w%B2L(u4w`IgYo{DTQ#5dR>a$*vm0&g)xWxVvd{@_6|L zG5`h-Yq3FFq$rZC(0BXt{=3+jnLr_3p-~lsoJdBDC__3Hm*7mUn_0%2=on&myF2C> zGL)MCDcL&6Z42u@uXZd+!Sz$&_X)GQnD8NZ%?j?XNCOfg{$Kq?c|327>4y)YnVWFJ zn45tS#*j@7p!_MByxmaByc6&PJgu_zn{kwRcR;#-a6& z;^)~hmo*xg5D(_|1?x7YQyLQ^WL7aJ^T2Eksk80OJA-8E!RDM-g>~uwN()g0S&QQP z?!a!o-~XLA@E`Q&-#UeF0q8%(p#RgKeU=--LuYi6*;%!`+%1h}8VtY9M%o;eJ?4mR zI*G=1W~gK#XMH=X=fW=I-WZ=J&Jd`w-9nwO9OuA=zuG0J~dP$HsMV{?5fRk8m_o zDd*Qv^F2=BT&htv$h>pl^uT);%Bl1{93|aPto;;#5QN_}aD#6;%+9NA7@Z!?f~b&n zH-Qe#Yr2GEr9!t%!EJ{Dyxz^wxko69`czDHNrzUHbxDWXom6f#+Cw`7#Hqi&n7!%Q&@@<=YymasFE@xACx9I~POv-2o!lXSF4Mmq z_C_+e)gxZOyR<`{qg%e<1I$aH00PW3AI96EU!Yg%sq>ETGcSRQpad@sfC#}yr4irh z0Pd$BHD3AwLH9|>M+m~71dz1kBOU!Kao+;se`ORj54oBzabE+HpFBC=Z2;1jFg6-p z6qp~Sz@H2_UHS|~=|_?Ml8Vxw93=DyW98Bh5y>S?VTn=%SRhLWf?OOqPMEWHL2!KErMb#UlIOR6609q>U~5xHkB%c>-)9F?n5X7W@n%dF(G=@u;ctjiJ&Iqp%(rW}{r`w7Rnbq_Yn zy5J)Y3%+1ATmG}g<{A|X`lrSP9)e+A*xpk9AU3jbst-S{rQ1h$meRJgZ0RI z9}UjaWnvT=FVZ~}osd{RBB->mC|r>D8<~E3JF;KiS>PH_D~fsP(Fly5qIW^+vh9vlR>XwkcweuC$) z71>a44RWuUr|%57RsX}uXa4jKk8WSgd zMf-?GJIHgdiKlZ%Zx1Vu9o)q)-9!xzoE@BqRQ3;|KV=N)zb2tvr960*HuAxz8Iwxw zu%o=hstJdY^dC>=;6s`Y)v6^&&8ObJAWN_UN^5gRvp8`EO}pm%iFPof&i%~lh|jjE zyx3C{Sz1KJ3&K!~Iwjm+Qu#CtCFP#l-!|Q*Z<=dU7UH^d3Kb+r8IM^-9XeZAfdmxxkmzRgLK`Q9=`dw_D%$3nVq|)p-te0F~+K)##l$z8`|qmX$31)8l4njdNx{j!Zs27w zMe-r;`WRMg zWog(Q>%Nxl&1!Xd3d?B`7|bEjL8>uAS`9CbflJ78h4#eWU+)v5p*8Y}vkP8+)!U?g zbt-jh<0X5jL9;XG(a3O_+SM^(${4m03=?kZi(yvvW?>mWp6ek^SaLtxtPy^3%MB;lgH$Fo}3i_CS5^{ zbk9NHHiqkt3qMx$ne`7mGHBGnSafwc4l)g*nN% z*~I2I;_C_zXN=C+m?{KG)d_+a6*4D_2gKfz12Z^lOR;e9{%|$cKcL`16@qrjf>G7t zPW&|)+vvkBqEwwcuKiq zWJENd(q=gnltl`vpz#p}bpO?2iDJ16q$X{a3p9`iiN;j9^)pz;M9C$ZnFG_fnximP@~&ZYmA{(02PdIAG5Z`%4hh0K>gZ^oQ<@9JXa!Ku2?>^ZI9I?w81dTX z`0mBhm1>s^aEoJcX5A9)#&ro7a|eLO-XPK4rctQG!(m+`s_m+bhFe=V5RJ7@vK@V{ zoZ%VT*Eg_Jb*ALZ;XNAUPE+qvAKw`JS%lJ$>9Dyr)pb9eVB+mxIItAZ9n~F6z?@<- z#?$+KNaHe*t)BZi6H^Z#M))%b#geS+$25^_RKAR#J&3kRO(-Af2Ctp*^Xxnkazqeg z09;8&FJZx6$M)>tUCQQ^*zNMB#AC~M(IHV$z2_V}d1?n^9Y;OUCZd|7kg{m*WvH{& z0GWDhwH|oI@F*eo5Eu0|-qqvW$6a}ZpoqZ1T>S|n0=iJ4fxh|@1a(xI87kYFbR#ch z;98$v(dA}uV^v=2O^F^^n!4($n%er^R=>tfTUn=daC2zDii+CU=DN6HQ|Fy!SArFJ zO&fGyAh@=b!-W3`NcX(gZ%eL_6Ou9+TMFqvi_Is54KY@>GU33Ak0>E!Jz=RCgU?|~ zM}sF&VUlP%YLuzVIKN?weTo$n0EFx*)XDavO?RM&d48 z{Ms1U6tiv+i&v$)=sg%^J<=QS4dICMlpeZ2_JqAglD zy8*}Qr4VBrrR5%LI2{=ZQH-C~AS^qLWiWsL_1Qy;Y_W{s&+8l~_HjISoi!a-rpL_V zb6Sw*7x`FKCX4f=8L!W`B5$t!2g&}trjgiF;ba!;6Ao?g9ENJ~{~_(2qD1MIHPN-o zwz^#h-+UHJ9ffe)-24@Cmk~dYp@9JQDo>4nWS{L(b9;;4s@OG#G!B>-4hTgMv~I4_ zs@j42SxAZdb!gs00zxvcV%%X?MAtImvEtAO5)WH*1bCvx2YzRSrd`mmq*KVLRSHJ_ z_wK8_t2hM^;zun0Rq4b)9t=G`Rfa1YL^d_Gi3lO&6k1oHKu5@)awgHka}nxrz>((z zauF^&I-q=_C5K|+SmyBu*>y4l$G#Q48Ii##*Y(*j>dr3zfSEn(f*Ip%FsADT%=cG0 zdvLE(wqx&DWj$lJ`TCyQVg_zr9Kq!;Bg8p4KeC8SF z>lnHgh^tA%Gx~3M;JL?_4-FDBHZ_$Nxi+B(UjNq_R663jx}H~64a3Ht>WuX01ED*x zEX!gFg4#3n$4B8sQtFD~xRQ)MuT*Elt$32J`i}2lnR0orh2$M5WWOZBZ=FDWf458) zsgcE9pB2pO?0`^c;U5p@b~kdPK=?6wsAwq{7j_Zw{a9vyb0*#klN>d+j zLuEN6Jfk(42=(=@lA2o~apebt?Q+?rd3$k2-eNw<`9gGTzm_deioQ|th%?q?r#S{C z%Iy8g9*WuPm>#b~F!oX@&&OkiH!_eizRV-{cBr=h$ieMxTO3S7vOXOaaLQs9r+Yj@ z(9E|-4pY8b!1Exzf6FH3i+`ns&r1j?-y$&$DmRREp zNE()xD4e={)WbWY>3k5(&t&&QQIs-jZSC1d&Tp6iw?SE^5gR@`I-J-sC*YtMAE|G1 z8tQ5@UPJ`$LrhX($n{;kfJRQK{88!RoJc824>G({!!!dg_nl~gA0iqHD<`q#tdAH6 z%$*E%D$3Jm7CM11#ReZ!wH*r$B?ubHUOn^h@)j6a?ofR$1__iB&9@5{6Hr9y+a&i4 z$j`;}0{JD5qK&odQOm zp{m{x*`ie0u`M`(3HU#SB^BA_=SEXe!}VbkRiP(tgf6|4gU#tdmZi?`T(^p5R7$P0 z-{nZmWEWcIxU6nHr;BcXCf$E&M0Un(0jeQPv}n^M4ILW9*a4{IhUDsv0MSJFly+#4 zx#*w>4EI=sgK9<;qKoUXn`saj5w5U>t0vUaS2u#vcfS8I2W{z0(i$=PvRiVc;)*%M z>HVDI9&tRT)4BGK?F$5sd<+~D(D4WC80(J#jPCjClF<6{8>tUAHJLHa_cv`hT%mpU3>3fOq2Gbv1qrP--vas&GO18trZVeqR-H?FNw(b zseiuxT(VtiR#w$xZ$JjbiGL`_sYMmUb8i86N{4zSgCQ=Gt$-wjRG}GU(cEL$i2U#a zzbN?-YJPIs3FV6HClJLtbYPGURHRe#b1&nwgE;Pl&2+*X9A0a-az7!pHV7z(J#qUn zsng!=MM?asXmMS-l>V{C#FhM{BNfL9xziNWMHES`Jaa83$O?M<3iPz$ak~$;H3!Ff zFj<49xYt67~T6g`4XIBY|u`fWtmo zVRkaX)oAlie#s|%D^YRn@!_E(C&R1M3(y7Se zCC`6h&7Wj#LJo5e<(f+EFKE4}!A3l~iO;#~TER}-yNRRQZ*iwouR(UaP7L>zTGZNG zZUJDX-vG-|>lFm%%D_@8W$r5)3w79s>T%a<26;{yqW|LP@h#?q8PdUW>P6bgl0pSb1D}ARNPjS$}JzhrzVYO+q9=^`tpQb*J$hbKkvc&^K-YJROC zV3?>uwKX8LR>ZAh_Mm9nXu!Mufp=5(zIz#r0S*osl+&sMmiAva1VnkPk(Jo;gYW4c zgAS0Ry~Y{@=N|BlWuIjM$gN++`;j)_TR_b_QZ1S9S3T*wI2}T!L;8QSS7JL^(Thnf zF9-31Rx%EwMIpk3qXT6ZiZ_eHc72iN+h~uX0jrSt8^y94agae znCHTeqt*2im-N{MU0_vp2hF3|k?t?~aQoiEWL)*2TPb}?WEhrlhaZop$v*8bqCWS6 zd&)SgGO?WPN3tndF%haUTUClST!89W<|h-Wu`J8(kY4zX0e~7aDgsA|zAhEvq-gKJ zCDJKOY6falCuiZ9P}*!H*EFI3dF@Ax@#XQOdm%*Hm%n(I?nn6eF^Du?x%28Pb4T%b z!2-H*J?TM}UqF^Dp$HqUiO%;ks=on3wB^BM;iYF&EPu?(@hfUuXm> z+UJy_#GaV-(9j9;S!R8OCKD2qkm>Ak7uT4gmAR1V*#jB5kAXn6b zR45uiDbWa}nqeer;?+}j(z1r9W~SODw}M=v5H5a=~RBhG*oXZ8IqI z`?&4h7|6*6RqTt8zvU<@#Y9(uWSBSeu|!yW`?HfZN@?$qzI)(iFI5#N>nEDL*<(z& z!*TKFnjhs0*zVT4;siDah$kr31&n+YU^o_>}c@*y1$Lszl8bg^xy{$vcdZq|gDV3>tL+NRZ{C z%mY!8G?y1NXA~L_QajWhK`qcv^oFM}Bd*e+qpSfFrs%D#N#jxmVi8m~4G}(-5dXk9 zI1}LLwKN3BI0Vqq9HbvWt9d+c5_K-tn0j+uFKiE&9-z{?PN`)Bj>^!8>Q+CTI_2&} zor3FB5uz||oBrXWUUH9nPN6*|+IMawnU}h!`?4&XQPt2Nxn6NrEp|$nbv3lzZ)h6> z!XLSOcvyM$7dZKHRKs?$ttT1VYqua4;rLiHwRLA2pZkZu>A3HEwYY#5Tn39f`8Qqt z(rDAwr_oq~+;*MF9Ci?fc;o^{g|d|aS^Fi$4u5xQfF@mh1Cs$!KMJb20M%F^K+xDH zyaqJcfDV8ZFkgZ#RZMG<5A#ASq{AV!3lY`}y#U@ki{cU^6+C=m;Sx6$Xl#o4;WylJ+i zzzNhi{-lTfD_F;|ul{5Dck*5L^ozwAkA*0d`U>q?ZEwTtaw1DjYUHW^IBL{Bp}B@A zt_EEdY?XpLy#(7 z^k)^X#U^aN~X+C_~l;l3LZ?7kn_RS#41)z?g3*K$c+%piFhO6`543ttm=1^ zF2jvBn+->u`it8(Yl__^3-c_+#`hg3x_ayysR*v=p}C8@Hs|`&qt&|#vPkY00VG4? z_>TIXskFB6ar$#9)-lh>cPjxRzeW+>-&eI@y9H_ss=O?9cv}OrRwU(zMoObpv`JQh z`6j3m1)DO0&NdJ2h(eO_6I`W6EUuf< z=o3stMPJextwlh0^PV^RI8zE6(`X}>;0M{HNl0_`5T%3XUQ@hgqJOxmW3I$kuBBJ` zd~uHT4?!*3rF%@?;Io&c`xM+TjOG|>e6kL8-mq}Zr|r4#iqG5C?JpC>o$eiYk zU7~<*0U&ps!hva;Rc_hCp{?s#5qsGYiAy&^R+^|zf}a=7hpPmCZ3nis;Zybagf_#Q zLvbEb?elQ}$+M-tpFP zIb(){m?l*qvDg)IdZ{J8$9+sTie7Wyqvyn)GEuMmel)t6N*@a*%1$h{gF1d+c)UVw z-FfeWHUdl5#6gjb_%oX2#@-n5tC$FNjLNlUD=ym(Q5t&XH?l3EgmoOCbnTT4>=9P6 z<{i&piL2yWh182Q71mr>uQAc(t*_sM^z4S$^fj4i&m4?)+yayj|HNMl%L0i9|XTE>`1K|~b=wjc%{`Koc@IMWZrT_Pn{r~R( znNY^g+W5!9^{=&sfuS9r-jC4wzto2Rjqt6M9~UFwL*i;iw2Z8LGQhdDT%ct14aJMV z9OT0{qYWu(sV)dt(JzK1$G&AaQZ}LktG@yKDABcQv~qCJrGS23JjSxZF1z~rY6X@N zAq%E75@DM-qz!OI4W|wR(#{y!k||Z1LoIj`|GaZGk&I z+`6t)(7#Hd?A1@Ed;*fH4Q}SQPn++Pozf6e@U*i}P~MC2ol`r05+RgK!IE>lI_N&Y z#ZlUI!YnLd%Y7$&*Y&OWF4K1 z$Zjz=l!y=SlZVEqAG5Z@z3ly>i42M>ZQ5wE9NTrd(>EP*uprI_cGzLgbL@?8ET^Y* zJo`9FJMJn2is@WVHN7`)JePVmmgj$VO|dSdql8RO_!U`!1Uk(-Pqfv-nL9Jt+{9r{ zl;nVR`9miWHW8{5PE;Q}%|RBK-bOIhw2RJEWdW_M?;*`PAs2X1Gf)Oy_kLy9@Xu1% zp)S{mb@F0cC1N{;YBpbN9RaU&FJ7YS7g5)(GeT0-akQvU*i_4G4MX>#7(#RQIrgP1 z?a+Jx{j=B1Sn9aX{RENVe+(jl|4|VAKp+2M57_)*SpF-76xXE?Wsx+CsT|lN+PoQV)M1`T>K3XXIgSo*!BLF)XMrLCIbcf)< zmC>s2rb+_nhHSwRBW%H!(W=E$3_9?3ivj|0<-H^zLoDA0Pm_^JSLu^78hB0BSmaDa zdWwx7->E6#E(;^0UbPMXrYZ&a#%D5UXxtU^e5EjfX5JnN~J9;sL!4Zr|t`) z*O5unN6zkpx*COnffGdM7cOffn!2jyk49!WOu1#Et%%r`D)cdp#B%UA;#8KH8%=~6 zX(8t7xqEkRUB0odY2VuBJ3fi@$C26S7Mf2LiZj^d3k4VTD zmzF}1Oki46>15Zg}IgHn?Y^_ZU|%vU#RR%UmrC zpg>%KNT2)q5&1q`$J)s5;l^T@q;CYBc0Hw2K~YVph@fxKbk!0yDD#0WThkbUtbpMQ zX)u&m-T}7zsKxjTIc`L_`7w;~Ra(P&{}Pv(f*Rrl`e9?)BM-xpjzN<9RpkXClR%L3 zSLG!klR%P_YX~t>NFggI;K(RoD+Nfk@3!*{366m6fCIRMDRK5waRvvXx&$P@_$a?b zEx-7(yo5G`PORHcLi$}?PptDuA$M9h7C55j)jXD!kEl<}M&QUDz*?DQrc;F)N2C65s**8#rDdjCag?FNxBYXhq!0Y51L)Le*Y(G@ z_m};Y_f+T28!8PJU=36?Dn9IT8ZG9ss6(fP7405JP*SQ7ILjU}V%5-OUF%>?*?w|2 zy)KJY;-quosU`8n;Il*vw)0qR53=&gof76vsZ^rfxf z=xyvQr}-=3)t484L=En58mw&}U6w6QRO@pq`-R3&jYvb9MErMsl5!Fs2lu;TlX7ML zhBt$nYEb1to6H^*#AR=wNG(tssVu>VKr=oM>UqLfy0T_P4C1f%j~@BZ;5-bMm|8)T z#MQdcV}(1J&gP&j?@^3?ZrCtpa7OPUzoWloca49KE@a-X%WYGkvZ5@QWU}|kTK3QQ zXotIdeu0rCMXB_lo<0rs#}yCy?b>K7h!cZj1atbf6bXSt8^^F8EIJVf@2Np1GR^Li zHL%XFC)H8oWQ~Q>e`;b}%Fo(RGh9tXF~7 ztu4%Ol1%Hecy(>;BKmgz!c3tP)w5^a6sjp5`lx>Dw|YG*RODbHR5Y`t9S$*?xj`NafY6)c=%gfy7c+YelRIx9!;%;yD_CKt z+GwU4)!915m}M8p4M>`}h;uyv5|z9bXBW0jGxAH20vV+?J{<{7b7if#L@U^!W|v*d zNE~B`<5p8@GCEi&QQbrf3jj@KJuT8vN0aDR%cwJdB=UqBQ);fT(iAP^7j}?D4l-q^ zV8Rb*R2)_*9l4_5eqgDrOfiY{}JV2<9e2_v~F2um!X+ap7k-bW|MQnUrqC(r6{2|K>^gXfX6 zMWQKV4N6w{K%>FDMJ)YL7^HAXbecwm9@5{{vA2*3e-cVNE!1M^ylS zyA$%5?K+b3?ncRpRJltu9+2@~<91lNyfdRp#d7JCPHM)p70nQ4Sy4Y%Cz+Q2F@wa< z72VX7b~Mc5G`7Sj+9jOH)YnEPqeP0`{*JWNpkolqboK7oG~uNE%wGSM#FR zlIQ6RsxDoP%dsTW@Y^9`DPGLTSUN=exUzucI!c{=;_%E*g(#cB1ag?5UO5 z8^kt%b~Gj}IYGe96TFO|9n+7BP(8luwD-ui!PlXi=Dp9jmC%n0Z#}ge9!fL1D;`QS zzH1E6Z;|wzHFet5k71^M0@$9iRGP|d zwvGiY(t|b4XG<#5W2jH+SjC;z-Pf0#e0vB}-fzLv6Lo(Gy#x}!|CY%xnt)S3AffvZ-ceGoF@XT=6^rYrHmI@6q&|`K zWfq^p6~w>k%&j_I?E9IJRv(8IQsOl>YATM&B89OWXKOjs5*A_3FtmsgpMvVRBu~6h z&N7&%#mw-L$IS?nwhAy7UGZ2X=#&Iz-(;Vw@(1N1JWx;9sLm03U*=l4mHbT5v*GXJ zSXfLwKe8g8aUwanz?7I`NQ`_*9{WLsQXthq!z$$x{gyiA*!$uP za2#5Q3Ik!a@`_{3Hbt3(&IR%!JLw5>B0H^oHdSCrJ$_(`vIg&T-&W`NxG?5QF3p%Q z_JW;A>6$0dV3e_}M}tkE{~2#}xUhMC>(#HI%E)(FU3(SG18squ3oA1+Aao|x^b)O| zCgw|##zs2p8yuu@3$ib~6fj_L(dvfa#tL@`hIRL6r)cI{0mSKIu*1c_7jEf?DYomZ zVncNLP)BqLRVEEgYn1vmH*^V>b!<_Ghfc}WCUs1!So$?`&VxlA`9;X#cNXCTwOT6@X6OkQkTJIXs$U69xJn=c{Jdx&1pQTJRaJIi#5+dUQ^MoRtGy5%og zO@Z5^_#Zzl%5$A;SG4B%wLZ(;`>N%~ul8`Bo~L{Ni$C5mTz$BD(s#kD;UDl%?A{5T zleqfVx5KN!AGGfr-hQ4#*$PNs33+$M33gYCWi2A5yVj(RAIoA4-twwr+j3J!))dG0 z+oY8r*oFk(m35)tQn$CxiE!VY^gY}1PB+hq6tB36n6KFhp9{`0-X)yE+|u_v6f`&8 zq}6xb4zq_{WHiP5h-iPEnmW42#3Ry)~tiQnn!uf`tS->}vP!>z9 zn;=0-uJ5|&>yqc!d62VF{gePKxpol@JZoS-6xVAV>|6*7Bbxlon4WhFqAsZt1l(Go z7Z5y5c~x+BFhx2{eHG~vjQ17f6;sp9pKA) zshwyz1CI7!m?3C#U0uQ}`vU`x^!*g`(`BgC19@~1bAc@&JwG)CP4EuA(9*#dYt3s} zmh(wW1;oY{y6F=g<`LW+N+OMpy5^WxgsmiUr-C=-~FE4 zv(wp@yQqao47<_YD9B(^Ab^k z)VK>2Q6cP5`-+S2xcPJfgicT4i0z$K(%I35 z93Ylmrg4WMe*N-6{!gVd+yAI^ru%oboEXU$20#ZV>vE zBZX?2ApsE=5o}Kfnj#PipIlXu_f@=e|Mh+O2C5UP>zmg@lFK<}P1{i$1s-CN%#iALhS4hqAei`XKU`(sQZ#YoSVQ;>y4dYi!{_6f|9}Xa;MO5PwFp zB|y};K$4+I6J@ITXaI=QsW&REHRj%eyOo_QnQ3))7(lqqb>Xk*ZrN77 zwV3OPyZ*epQ@z{@HP)lVJZab67$uM+g5GfQrco>~k|5i^{c17Qec>$EIuWO% zPenp71_tFpXPda27trqgNlzV?6M&}YE1VCtSO#XBJ0Nx_XyL&Om$rzOY~4+c((I_S zz~RIQmyau%1<7+Gjsx)XvlEV07|4ys(!j*;B8??PE;$#)ACeavE51^KmPc> zh$JNriOE;y+Qou+DIu(IIL!$rnq+U)9OFqWN}FDC1!|fo{d9V5^Z`wrVxdMy(JQGu zVpoHn311bXL$H&rdXL=Rlk+eseKC7<^;VGa6wZ`8PuTQQ01X~j34Z`{C>ZoM1{PXQ zEtuIi=$nHp2(ktT)8k|a1Q7Q928+CH9jPQ`N>Xw*e_*6c4HssYZk2PYU@?lw7~xbHmpCSFNBX4( zx)Y>pw;wI*pcSWPIo@UP{BmBru;U zHG3Ur{EEO@zdw#Ox3X^Sab-aPe^O2ZyX|3shN$<0OnLsxy95vywE4K>yVZhzalv%G zmg6L}H#}Gwwp5kf8bQ)fPZb>T6ODM!t_z9cMa8v7@NPI3Bclt5e=h8jJgSY2X63zq z7_X0}hXM4Esf0$reXCaWQiarlK*m&dDpfej!w-pFbv-(`0F9MX%HGsB1boVNTkO*lJQJOh+mNV?OvCRVIh@Gt`V8ZbMc zHaj_I#8Ot1qKz)GXjjPX?2g?ea#`ZSX#Ht=ib9V zaa4Djm2T3Teat_YKkw?S?;l_C93A)16+-8#fE(p2+vd!GB7D5i7Wt@jDpZY^l*{&K z4-<_(Uu>o;@S-x__wS4$b2WP}08Fj2bA#mr8fBwR@9@QqRvw<6hErkMl%$i{Yi4Ur zD1f$y>VH&HIW^WrNB3n67>G^}FdSs%G8Ytj?O_sWQ(<7gQxJN=z9S7AuBd^Uvz+KV zjWk=VV1)LkwGuMiQLubfZ~7cM;ZDf@e5Q^vtXP-czt3@54COoS9@>-QXcjNg;BxuK z`6H8ZJs|Nr?z$PPl~*s6lrE4j&OW@Huy=M9%S9`hoi7j^Zd4WKIPP$}`g7DUX2{%8IIjzp44c@V(bY&_brxLT5QB+?z0%w!S z^qu3RTPgx&BEN4V=bA@dAU%Y>6A*$q+*_Y6Pvi_>sA4m1NSDHjI30^)7B_ta_J}YQ zO+9_5*3Ve|n`W^!WzmD@=O_FzKD=7Dj46 zxzAraROrIrMR{S*vKHVv6wHgNs?U00@uhMlU^~?7$^WIZCGkGrWqWta+&~(vaU}}d zK#J>gGgR|HpDDF1-Jbn%{bUh_{#syx_1t5_wy=JxkH_VD%u#E0$}DkB?`nC+BwUc7 zTA{R&@OCEpx2U1mvOcV7=}b6g$zu-^op7f=I(dGuzecg10_lplsQyLuUD&3OHg`{E zhsm>zXTU{wXx#Fy2d>!ktn4Olt8aRs&NSq%K-D{#P#CMfVX>?m$Xc*T!5L)`a_hvR zVs_9qfh#Pk5jDr9Ms4%XlE)ygO8ReRt5d=-Q&Y%4#t91 zPMap|S+UgFC8a2XjvRMHSPovH&#K4wm1?~C_fc2QrO^zOojRAvRJ}EgwO|Yh#Mhuk z))A2n2r~b$;e?z@N{gI}ZDUQ1DAF$bZvU^t&O9LSs#LhckuV4>xZfKTDEFu)zk&sk zv+$;)LWp4earVtOq(Cm6Qs9roQT8sUKthM_X_Z;>@=k7bdj;>nIxvfucTZBV?P?iAVki^XmbowDC!HbhVlMaITP zFlQ3Lo_I1Yh5u##VsZrNG! z6~wbg3W7qA%9b;F4iz?HvXw+&`omtTV;Jgj=FT@mx}{)V(2+8Z6<12n9xFbeN#U_? z?xRZKGebfqO^`J|sOrEq_tfmn#PQ-FhH5w2l-ZAl4vxz?N3SD3MC9laqGfb-V!>*) zQVS$@`6_SDTba83FK4(!1x;l{Wu#4(010{+VSGRQMSK$hxS_C5 zUeYAt+8MB>(5`KXAsa{fcqWFSIi7`L?iRJd#o(t-p0Pzw>$*S4j+IktKWgmk#@C)x zsjtVE+1|fZdI>OzDh_PNhfrVakltM1YxMF%sv)qtnrg$=-I|Jw&);@1FY9xSogZ#0 z10^xHbIYtZ8*Qfhl6wB?-*@qrJ}EpEV2;#WF3qb1UNZU8S@VQ_mSB%xb>TuzEEueW z5iHudk9qGZ1xver@{`Ih-d~sfJn#R;cXBx_TjDiar6=;Ixr#s03a+l>M&*xsq*@nm zZ4tlsvup9`@Q)>#$0X66!Hvq0ST$(+s)IHWK(m?Fg6+EO0*ps9YOyR5r+n%8Xv<;* zYs)nsN#h41@|X`~SXuF$`xCE|qz>ddz*A>7S9f|DDWTtDSd-rBY|J6{qGjV)KR!r=Bq`6*jJ5Rm+ro^gc6P zBonWZU=_#ivx;w1M6ieyxC(cStukrsh0aHZj=v-@m#2qkVO)c!8k!W7N0?#nA=zeX z>n=BFe!LgjPRN6}$O=gEe=nf4HV@Q{bE@uTaR4ze`Ly;e^BYa~X+*8ijvc*d5tVnX zX@X$Rw$h#?!_qm)t()5GC$?GXW0`}P%-K*w`#fAQ9L06hB-GM|bn^2^7SqZ&y*1~@ zu-Vtp4Yba{64Af)GbZ8Y)_wp*IzDnMZnKgvR@@d?m%d;adkwc7Q3m}o0()-#-5Gjq zYB>*H-jYr6@vk=jTQh}R|3|Zq_CHR@sQ>p1S-{%L-a*&O!T#UPY^2P%7$6^9#b|#d z9nC(bv|n&af7Ks1*?<;dcz%?)njKN%bluFBRNqO$9b;Dn&X?a_2`lZhC$r*<3X;z9 zo4DE5*T1A{)CEy6QJASL=oU7WuHVK8Tx`_+pDLHzN$MGn?5_kh0;RSGcG-7g zr}a}$tQm}P4ij=$!5;>|8(|1`C-n0j9|$86Z(JA`fTpB_$biY89w}i4A|*f+l6air zIs@>R&@jHShh^S1S23f6bkJZ**R>qh<*)@nFXi8%Ku2bD`C5Xp z?sCEl#_%;?@|8~$Mfc#7M{GmTZM$9}p5l@cz?J3fagqDx@_s2UgrG0Ym%X9>GrI&C ziN^g$&tm>Ro-_P66a|0&jFG9aqJyc$|N1wI?mx=NaNn7~Ap`y-D6jD%5}6|2gPGl% z2>hM%qYDj>BqJ;;FwLy@0Q04EEnpDn66@mqmMmt7A!E4w{*=g+dNzPMnk`^>y1Ja= z_G))`e>>0K{{CeHs?JWmmlag);1T(bQN(e}D+0g}#;I@+iyzJ8k-x7#VU{A#S=ryy zfuAZx>97~d&b^pRP(INuZy+lI;|eVfg*snPac>WdU+AD~iuYd7ATu&)tc3PvukI17 zj`NIdt{7BxJwf|W@FNtlkt}qz2;6^C`|eScB55o(UQbc~x;V$rEb&Lrr!N%rOn0{TkkwZw~RtDk*!aBVFRY7ZKD(n9yy(O(AmF zNZ94w#&Hyw@m4U!`SMv@gP$^4aj*JENdfGz(MgzRQtO7n3`2WUiD>ds`L27MvcH>2 zILJa*(wAiE2S`;Jh5{^mk?&NMVqtNFzE zb4j}#R`23XUr)4)sPn5s{n1%fT8wY@O+ADb{S8D$n!a81nv$z!m?leH?C7a+*{f9A zVH@LSh#4k)JCm-sES;fF5-|Et<$=Wa;x@*M-V}zWj{?H1V{QXw(N}1Ny-%9ZJQAoo zQWcCRnX3TLQAH)jgmXuZY`wq?_^pD)nr69M!X31GMCv~>_QGL>_M#Xj1b2#K>{JNm zxtQ>$pmvId4k2P8mBWL}QOJP0`?LOxj-pf_o9dtrOuq->+V(gR0S<>_Se=SzuC#)E95=1Yd}ljY)VFt}*N_pM zw`aPW;xJaelsM~seB>hW1n8D{5Fusbv6R3qp!LIbzG(bhXjFTu_I@;Bz$UJ37XMBPn`+=58j6cN$40KHqvKo5lF5vkb48-!Yenv2;!Dg#;_D80 zR4Q5|)uRpZskGv2NIb~0yuk4A@Egl{D3*Z+V&yqXLaKtY8aBPaGP1pzstMN_?^_+K zTL!5o&+lGxcGsTIo92uxu#0g2Op76gEZ&-CJF7pF6X| zVQp^tuHNBLagX*0HlAgzJR`!R@ApYs9OJ^5!CI`u=ua5Q@G(3{FvyPU~ zskw&-ximJ$X@oOuFr(}!CI(fhulDz_P>)+*I8n7_ZoEh+dqH1z!#CdI5W6E#?QSTf zKFGZyM>$Uhs`ptkY#6u)2KzNQ`v&thJmOushvvHrcbYS6U~rFvuSs7tNh}6rfwOJ; zh(EIYww?E2Z-S*(BBbv^aBY8d*gp}E?&P!HkWhK{_l`9__J9=f`Hhxhw^ykS)9;@J=FD-u6th-=eKb+U_;|?*Z-wOyOV7mc) zv3w^&#Laa`v6%!&BtSw@h*Dsns8ZB+$hmfz$4IYvJ!B9<@bRR?z@Z3oi77`&^Mer@ zvgAhOc@yBvbq?u+ltL3ueU5Spbiv`RQnFFFvICrb)Z|EX+u$srz+ozX&k0b-^5(#s zLk7cC_#w&4kZKj+7sE>UMm8^(HQeH@bz~s%ODwgjudMHWbeeH^N45*y-5tBHwu{_B z9C`SMu7WDT1}{Y#@G6(`UEj^x{k@u-tFwmQ5QnTRonJxB-aWdwqqR5=VBb8l@~?C% z#qXbS?qp@xkxVZg&xhF?bKL)0W1>A!h8c?$WPSp6Vy7ve>(^lp6SPY%yK#8nS<75o zI)Q?4t<|t4lO6)U3G`}h(^DdaA3f9GseU)SG4%)Y?$4z5-v z3G(8Cdw6xkfLr)6C{D;h)n%qad<5O(wvLZZnj54#zjTQH(cde%a)f3;FZYJ0nfkSw zUA`N0^=wX7gbLOA-r+_Yq*-{COV?3TH6jMuC}0)+9)QAPU)8z;jgv>q3$m2^8h!Rf zdN}f~BV+$)FCD7fCXf+4Q)fkjZDHrW**kdvs+iO^!tWQfD(A_m!qbG4d?hqu5$8r} z;_Uu7HS;U9GrhLP{9Pl>xcbQXzJ4_o{lZzEQ6;-bpnkL+$^^`iOcpU4kE{s8=GAet zUEtmvaKP!+#iCt52r)6E->O>JoVSOeOl5^r4S9JM#!@CMKg1A8RxPUiflrH2F9vhQ zKQ<*lBs_%wp%i6ztW0#&GO+rsP`^sR0gEnTKq|n|lwN+|hXk|9=XP^hSAv~I`1JA` zAG5PZc8lkKJ?}3m{9uW`L?He>(Q?DKG7obEjrH^jdNzzHS@69b8GE%Nt@lTRk33ae0v_?3W<~p0=7YXw44-%{L#4*LUISd_>{yVgTwnFz&o1F+6cccuO~BiT?P9`cpU`p3nFq`JVwNTFo#o{a?(E;>7l#nat*&)Q*V2tIR^9PiKQfSf z+R3u>c2$4pPu;qb(FcH(l)n5$&i&O`^x84m7W>{9*MDvAej34#!&^gQ1x1+)Q(DW{p0__L_|;3B{IOc6lS(cr)%6)mAUpT{KE4l)OxzRgf=Wnz*^@ zyBNP;3o;o-g5XWMV`y5(Gxq~A^H$uTk%sn#i6l_NtOoLZ4DQhP%|!m@#u2HdF(nQJ zMF{N+**e0u1Kl80^ItxPG&9O$wIXgK$$4gm!AzwgtM5Ub&bXT@=Xd+df(k*fR^x0J ztjvRATHa|}4FM23b<79@W$D1Ya|2iZ_l|b^YJNoNT>faw(z3F$QvB2<)_BIWXmb1- z(`bErDqP*b!C3^+FyO81@|1W;uy!FYC8eHOBFRc`PHe##ZK1uxsBP_Fd34#`QY%LD z@izRT?9$SbF3-s|{d28WX^xsrH+8moky^yl$)n{PTeQrTxDd%_BmP-_tac<4zq6~? zq`34@Q*_-rwef89m0xMmDV1)jA;B^p-{SZ|*N8rG1PmX)J_L9vhVITE7^RpFgibmv z?GU9G=}HX5AxD-NKz2OJUKUgxtzC72yFI?{NN6dX?zstAABLeh;|{I3aZ)H*#4t@J z3w_aDPR}*=(aeu6ztopYw4JI_rvkSQRn7fEFMK?!w!4ItDOnsA2&Gb`)(=pz4VRh~ zKWv{O??H*aGkm_t7_Ei1D=u77wys=h;HD(pQw96I#wcv=B05eDQ`}keqW_I7j1-lI z-vSVEJ%O99C=qk66!}d@^A?f!;pT;$r1jt zAjzb|t$I+nN_98rnh4DoVVcG$ITHSdGP+HIl4v%ydK6oQCe0F+Q8zVvcuYkZMy9GG z6GrB)n3~P*9x}B9S&i~8tT%lA;kHx#1R{>AyMXsM!^MN_@GF^-7C|#X99PHN>~i7^ z)md6?chO2{w*hliPC2lpdQ;xPsJpb4u_1P}oM3|TYgS&CPphItFS0vJl_6JmakSL_ z+WFEZ>W^}lQw6>3&jmJW_J&gqG~;og~~q| zKancCbIjx8Yg@N{0lo0}%4Vt2JZUD9NEs?a#rLwB=Y6fX}@15>B+1a~?x2 zr{R|M#hK}B|KvQ_OCYCl@d^e`Ua9sLM@im9L>xeja-dU^l{bBD2x=;M7kpnc02yVh zw-G+^&{Dcx@|y7`65!ZJR$U*Fzq%pdBS2! z69=SU?bHub`b`4i;}27glmO=rVCkZy+_SVRNrxS4n32FPWc}OjrXqCX^B~-}z-ixx z661=h(*-(f?#%HF_^XDJq=u@~I$CRP&#y=OZ*6{zJ1RB)ZIWZQ+ZXL65;H!l zCBsI3>!qjk2d+kbhBG7nMwJVS_oo36RbQlUwLlOi%2$PphG`nvT)=3HSR{a zp=nO+$v&$09$oaQ&)Otf)WZxXA%AKx-~=>_I_Mz)X$t`3ly%orz&?<~%T3Dhv0;Wr zNqjpsbe`5)K@OD>&m+1lzll~|Pc5o*F53_zwj&hc5aw?Zglg)SU4eEs#G&}>qqD`FI=e7$){2rbav6?uKFnq9JHFAngy)BuwC7V?vGkO|!ll7%`=~*@8`DhhU zq;aO><6kTD#u_9HtrsM-61Ud#5$zK0Td`1RU&XGCpCcAbk={{r5(}et%ooPut8-Oo zR9bw6s%ckW$(k_%^ViW(CY@AHz7IB!biyoNs4Zej2QpTzv+r&q_#5~nmOUY)1UY2i z#b2Ljo|~mw)%ih8kVXSl(A#ZRU$!ts0L-I=@58{0V%^H=uvSbSN;(P;=ZrQ8B6h?L z2(vQ?^BGyP_25V*)2qZfS>fmNEdXC@B5TIQ!@N<+j1E@EZuz9i+=yR$b#?mmD9_Z0MVlroTRMo~u84sNr{FLJFWUIiM4?=Tgx7+67?!6v8oiCL` z0XvtP;goMgiO0uhhpLhxtP?;|z&hBW)gcb=C!I3}@3h3#vmoJhfH-j4`{99EW8jIU z6xHtp81hgIyfZe*G8^TDV_{_Jz(_&Nq-`f*&SWdGJk-`&vqs*-R39dsY>uZ+O9DO> zLOD$~oIy@dN14MG?%2RDm-X9==LTRZ6IDxzcFdt$)|ht8hRb>4hKNL@bS}{w6nLfqM8dm9#vHm`AU9q9nrGp*w%0Y62(I)C;xjeHwz z@i);CgtiHwj1Y8P0j3%xc6O>PFYum=rEhlTl;;7@71&I7? zRpyl>tk6nv!NZ>}sPFG)sK6BY9Uso|D!2uNj6cw0AENtjc>0*22PlL#-SFkl1u#P^ zr~9p+)JWuxlE!JZ!^D0>GppM&i3#_eL9RTYlGyocJ*%h1ar`3o#!=miaiH3Q<+(dsWP zaRQ8V^v{M=055FqIB&8e^xhPaI}VW#hgj44DB@)}Q!wy2A~fXohK1-jiQ^cRDh0Rg zmo}4XFGBz<1uU+bG=WOPhrP4x6)HIsmLwvUMuv+*+WPp@R7vMLqAYxzvJ4t#*uS2@ zlR9mKMv1L&nVlN|vRNJq6S9VrRZY>4xYY>9+H{M27vIU3$Pk2GCqq~ktT02C;YSB)BO6wYB0NI_XzaACf=&K_^@|X} z`@UHmU$~N3$RrfIhslLKJ>Wt+@^CtOgO|A9Njic;I`SkHOCc4Tn~2*>#FdlTh8uV# zIT?qkGnsr4uH*GL#S@drE)IhOc&zcN{;NEj@+hkj*!tN`J%0i9FCVv}l>3AcEai4nQtwY@21!OnIPz!Q#4PPca8p<&D5(Y^>a{7mlX zZm3ObNoV3%W}@R)6;8d>(&P&9nfeCxnXQ>0j$P_Q@lSxmWPc$m{{lHQUhvdV}BR zXQAqJCQfL(xlJj~t9tZlg9~C0;kNUd6NU+*6dl+o*J%>(&%lH8d#MiP_^f39QT+wm zmiVIi+7Dq|`2cgXSNB)tcv`t!69KX!S5osLkz19-10-In#0|+p4{z6pE=JkbQVY8s z^dXxd;@KNTr%cdlX4v_;fJX(W$teCzFgmGsE3@9bpq8X43icQ3dkUCFURW_pND(Lj z7?i8RI*86!REBXWbBRLGIltWlmuk>argnixVpA zr99l6JwSX|r+QhZyJXl#o6x(8Z#HaV*fXF$Yh)DJ1Ga6+f<;ksqI08nbl`cnr&ONP z?MI4cFB0tTe9U41j~7c4miAJj#uaIg7vi=F!ex#uYfWY{!fD=DvKQym=2W^k?;bDAf8ikFrP{i$&z}PQlqIw!%$}gXI0*vV2e<< zjPv?i7jl8o5}Xv`9x#oEx$Ecq(Ry;Pp7#s%4%H(yrD0{X?MBrOy6e5`dcPh_Cu}hW zbIPg=cw;w*3FQw}N=$YyX7rEK6^v2;HzYA^KD28K0806ElmU?!gG%Uc!rg$AvYTLY zSb2_EvAGEM3}|Wm2Vgc=3F#Q(-Kj*`@)KDzyS}6uji&bO?^}wI2tGNZ=_j!iO4e|m zf~w!6P0k|-lc>!sTD(fVhd0AVNS4QuvEtyHKCL{pW{>xE?+L_U*%xpZia^yWZ$bpO)zqE4;XoOzvkj@$i_UaNqCfgW&m^8pHG&PQh7w$_XLd4Z%~ znm#$~2dx3+{3zKt0R2fIXmXTEF~7SgXxL44)QuhnV3*kZfJ2`VSFU}`&i|{7gTH`r zTOf>UI?O^E1gzlQ-&Qxz2AD0W8i|9_FZsN=D<>IhQ}?&0yhXQ_%srQnj1Si;Z6AA- zXvc--g5oFCUy%6_HU7N%D#g3~#|3{f|8vOxSvDbQ zYUA+FC8)20nWpX{+UJ#NCe| z6l`#jtIC=3mkC%BQ{CLWwqQrz0%W9pfvwYd^`_rhtKF&LHRTm&7%HfFaJF3Q?Qqq; z-u_4Hvi+$mjv~kBKr9W}n$?;u_8@F*3#^O3qhBo1-MH8>1>!{4xf zm&|z2luGbbu9Y}$ubJ$;b$?N8Q1(%vd5^^iXQ^Gc;mBND+IfrrLg77ar1zeRF@5gB zp}7X5?*R;bRhQDwYTItqykjVQH$&{(Zsfe9aJF6dd7kMxdXM{`+K(Z$o{4-11%1y$ z5d@U3Rcic>K>r-r^-jc4+&F{(f#HbVOVxdkEd8VX%YI`eypjGrP!)KL z3M3{OkmbsUy~AmdSNPxcAZx!M9}Zfv zfavD(hx#{Kc<^9#^E_gCQcAt>q!RF!QTCU%S$UL(yQ9e3ZBn8rp5YrEhD1Oj@+>E# zp)Ua>?symHXmUzR-(CU=3o<28eX0ucG!$522T%G)GvLqOn$nges6CyuS#| zj0a!Y6*w|A|4dIB@gBHlZzsA>(}x%zndaPS)KHUpvPZHqk`i;DD*4qk~=cpv0984mX4WtBRlE zCMU)ZKjl9CG5Lf1ArqyVq*)7zK0pjLiP$R%FdTUIvRJ0GX31E-~}xK%)Z#dhg!VWoFE#$5@+ncF4%2sxkGl zl`67GRYq^7T74Hpzor&U>?`4dvLDB1%)1aOHT=^^BK>FN3W`}RIl$szJB`553p3SgK4bM1Ni~& z-I=Ud8LinQ)<&zBL9;b#rG5$~9X&3>3?Ww=Z*tL}!VCALJ}Ep?j$ zy&&Jlutd^Ff&g8bK6T35IP~aR0jn^(OCybv{o{|S$rnWtA^5QYOQk%c z`m8HZ_`|rrVF9OXxXUz0f?le%c>PH2gIBA$q_4tU|Ay<%$_F3H6nOxA*x|W1#4xdo z^#!%el+^1unv_hznjky_s%q2^pFr+iDnIahnb99_rjI`gMdm*hGhTkWO2SYmwGIf<5u_0;R98$izJ7Q0U-h5f;jIZjFu{L#Hu@wupd&Jzq^? zrp&S-_EW*?RG0NwhYf7CN-R&JwUa{Hn6PV^p8W;Tp)6*8ebvf4Z%Xl0yn>VXFt+q_ z5@4~9nBpsuYn_Q5eJ9@g8NY>?#j`l&iS7k$V{(a9-5`RL z3PUT`gSf|k2c@<(yKrg0+8M@cmvzf=*->DM(2eXwHU2;__c~ch=26sl8+qqVVY|y? zid1bW?`v=u=kq~Xi0QnAKp1ii&kmR1lZw>q!^9^)!KywM;E>y6t6==Ll_Gxkw!h#o z)u=~9GFeQ+_u;aW`N^#C)-NQH;{HQBSGHjSBk*HL^sJO`q}N&2`T2aA_J+ogO^z?? zJ`DRYjL!K9;w)1%QP0+jT_-hVeW`kX3Fi2Wu(+y?ccTQ4eMp;s64mp_IwBYyl5Blw zKa`;8!@JAUc>?o9q0{$lqRaboq~uLEOrHN;nuh%D_y$71hiSAmC-JU(rqqw1bXOK? z!nhO*|9rp~vT5Ke#o`rYBU?9<^XSo1sjy$l&?9KF9-H^?;+20Z*Aw*iL@HpGt(NDs z0I%!sd_`sMCQ&ksl z*OQ8e=fzn;&oQ3MJ+5b>-jd5-g;|ii;)FL0{-jFL zPdk63FwRYy;&&r{a~bsItFO%s+uA|10-t|g{U z`Y|7R=D>I13-W*;u+Ig2s9dM;s}gM^?NbLb-(c05QhZ631vN$T7xdW^SHH(r`CP^m zLO+!Qid{={Z%jPXSYeU#@xFsfvhz|EuG@ekvvuZS?BPfq=bwHhT@yA9xI&|KO6t3A z*VK!qLc-Q+Z%j20m@oT&w3%%~&4IwF++1#$a>*5cL=2{~Q(UQg^p}qq{50{xNnu$b zQnD8=Zxr8ngEmAtsMEI)C&Z{jL+&nyA!!df_0iOP^&Z@_!^%1-{jls?&+|l%eg^w~ zpqH;Mz^zDp4+x`Md00TFgJ=(0E5OSkvkSv*)Gcl4F>xrC5TkX6t>hw>yxIq~b&q{+ zLAl}D`i8rKeccX7mn;1lV+_}{Sd1RK2d}nuu|4Uh)MW@tQe~1AQ?yIT#4TnG6_pdL z@yB|83bT?QLrq=)oSQL$M=O`=6)VK=Q%;+6?Qk3k2glD6LmPUmVX~K0WTmk|bYkdi zW4(}cSz9tI%+wpKYi@bN0mrs3EY(uY%HY^3c6+H)$d)*oj-0_DZ-3Medgc4KdR^ad zIENxD)Cze@{Lz`^J#sny*-oG%2PE!_{E=Y?#wEnd=`}xy%X?5-Uei25E*TNVp}G>v zU};NpcpNdP-oaV6C`+VA#o|6ud_#ivGOx{eZZ{$w#;O%U9|x+t=gUkb(ggCTrn-M$|lLh02n$6x*hd;7U9B957rSIoodGe zb(0S$)E5=y>mP?h~y9A^I|qlA;sS58<}0B!bi5{I%{;oeFZz z8%|n7+IGq#FTP~rSHnTad6+`OqgeUw(?!I9^oZ*%D$z8fmj&W3gsWW8khB0ai+2#S z7esi)P3TX7a;4{TbEv9Z;LfSWGx&snsR`O2Dj&iX>miKm+k<6gMJO*KN)$^ZX99m^ zkjc!1yrW-xZJo&flT9J_|0;tdW%<{o%R}{bWfUPqzNBCq(qIhlfQPmkJ8EFJ^pt9A`hkqONv=?lVRpo3i``@c%1bl( zN&tXee65y)TRm*jT1D!x8Mp>(>SM6IAdtvM!*Jg zZNtJe%HFvZ?Iqxh>a^LSIC`VOYScpi0stM?1s;+bi|wn~Wwc8#@|hm5mLH;z{!2#a z*D8%Nv>v=WW@NmfWh-84uO&{;iq?KYFP(Y@L(pDr*YFt~G;7De%KRLVPl)gZTq2Aqw2*CRL^XCaMt)Zp^08{)UGJw~ARM=j1L? z(9BxQzYcOLQyvEk?7iXsgqrl*#1QMp>*oo7Um}Po%dcR+-0g`;;xyiee6@w$DT^@% z2Zw{j;mHJBYnPNAz>(G-iQc=Bfl%wU)k?=)QUZ*3HSNaj9{ zEHtM4%vR`hAjHQ4|4mHob}JWh9c;Z-6z#M1aPt1fW=~xPb?!#~gP zEpdU_$fJq|qSL92CeDq_C0z#+5d zhpKdDUOY}kvNgdKS{)}v1<;h>xJC5FeS}RUi-LiSA6bMj{QlLr2}ZaStsy=w_Os`0 z0vl$6)4p$ua2f5&F}w*hhBO8>1|QoJd&z5sl-b_#Ic%9Xv1o}g$HIVncVz1V-hSB& z+4#l^B2}{FekkQJ+&~*H{s!R;6Ov_`~hI& zz44Ba*oviW1k|OSp&W_#{EDZf(qJsA%t4jed@O;?IaS3HuN>R; z4T8u?@fr)3&(7b-g=|pyxhy!7Eb7diw(B{VeSv*-zft_V0*BLRYQBF(La^5U22UPq zLV83apCXeDsrje%EF{s&?ODX&g6%5q^Hm*6535w9L@ttLhBp}~R>YAf;-TH5`HkkX8*Jo(bC(pyH8 zAF?gert|t+8_4pa5O=*+#WaUP#b$4N3GX4qR#gjS6lMrI{0UJwrr|uXkOSunKk5OB zry3|n9I-+Q56!)QaMUB8r=XO|#q6^u5?@ry zY|J_3@RxZxtcFt6(ut%Z!FJhnSd*~G&Ng=tF2j|hz*XX6vMYTreVA3~k8z#@a;ji4 zdjbNyyp{frGbwm8Lq#IyIOjkFH> z;o+3t;PpTl$&1X%h{KO~`PatJpg(tCW7`lwX-B6@o?9v1y>WisqFly2r+Z^W@XcC+ zend!wC@JTIz4*mV4SQuM8pe(o=87f-T^)#IjAUtyl^R`|#;$$?u*kEjGE9DUG3JBc zRlYp_PkK5yI3Q|5D=@KgXfP=qP@%l96>4;xAn;Sydqt;mIFL|D z1lPZNcXM}PsrQ58_@5=XF3H4pe_@@HrrSI|y7qoN+Bv^`Em(B>HeXhhZy+j!aY=dd zOOHrA1OVm8Ah*{O2!W}>7~2&Mg_XpN&s_9ga(WoaT!QJ@(x!Jz@Alp4EWQ)=cZaQW ztI=uB2wy0M+5p!KcI>!QCXHDA3kt9 zadNT)NajHr;e7YS+3;tm?}~J(4Nrje^>GO%><7pXD+PhM@<6urI^5|d9Gne%ZWlD{ z2I>w+F|phk=rr{kNET|d8_glySG9@#h-fghD9uDA_4;U9TP@ikCKFJ$$+?Tr$C8#2 zxZIS7T1%R`i?XR^O=jjFo|ApGJR?ncdL4!iaUDNu6yxiKoz16U35=}sWOm;p^f@K$ zdlbVP3*8t5Q!({Nz`DKgJ5>>z3Z4CbwzE6W2v4+Nc*II8DSB+%r8k8cN`UuRT80|q z1e`goFH_4KyiJ!SS9I93Mx31ZwJ{aNumnY`g{HT>1{vNmJ7NZK4xXNXjhhT&D2#N9 zDiFMmatmsw5BC=wQ1AyG_6onEzUq>t6B9_@VUqeV-uAQULI}&{F?HAzuJ=O&!iW{e za{aT3Z$JhTQr^SAOh@_I8+zvA!86cXD(+rFIw$h}te}&;tSHR*6h_+Qgd}yvpXws; zR>50)4lL1zT*x9shlU#kZi&9~tqDYQGAw-eslSW4z-HA3Rema;{yomL{wVJy?rWUs z@Bi4W$^Sn;L2~^oRAv7&b6P~CF**f!-@4ELn=N?)5hK^c5+0h?{-xT}YckK<#8ZwmFRq9AAT8_+xZuKqY}`-7oz zo&1+CZPPPZcf8chIWXW$<`yd=TB16z(-7%7X@^Ukgq{$UIB67*&bWSUU#^t8HT*%!ECa^9{>rIh zrIcsBs61m0W4JxmZ)IGpUd|qx81GW|%&y;huHM%ui+bi4D**curJb@iWivEO&@Rg=?gUKwJzrEK?dN-66|I~9Skd}l(8T#Knu?RQ6}}RX zkzN@YgxDZ-YU;q-0bvWdE^<=!Ci1@zLk|#{*6ud`k&a1Q`Jt@7)dPxO|nn`{iy(m|Cc^XHBAZl3^>I ztUz>hgb^0Jt(B~I`JAG|`WZH|;aTpI((O8x!lEMnQ|+FQ5iVu*oJi=$MOVCMSpEt# z->9M;4V?nSM@>_%2M77I@H!;ETbtSxK37zYW9W{iwWSV|0nT1M&kSj+ z9?NGsmL}0QjfVB1fL1NTbG*ukg!Ul0689_Nyz~5B9l8PD;y0Bv_#GZw5C)KiI;o(k zbs~|WMHu6n!fWFv;mDt6EUrG-7Cr)*952$06WZlobG}NpzI1eQ0Wd@;YjI|GLf@ZE zqSu_uf;P&MJRz)`=ExY`4U!`>nQUJ{@d#KB;3RoSdG1*CH~rasjrP3IS!Cu+1ED4o zKHYz6d~Mpbj2%AF6LcB$3=13=Y`+Oo{9&imCguoxj~DDSgd4?d;XuG2h<;5OrCVeq znBd!6T4tgZU6a7)_E*?FE3H3i{KBL9zl8_KKVlvmmSO{1=O{*U{vi`_c6F z_g*00pqS3#m5_gYDsVlqJ9o%=w%`M|gSzyRqVB#tE z>+EdxUvpAqkQTW>VyIF+doySYmoD5LgNrX&n|D{WpxbBOTpIm7+auk9Z=2;WR*j-s zkXz=a=QUQ&_CCf@L39Pl%Y z=5@;7s0 z2O`pF!ree-BkGB&UN*2|Vbfb?IkLqHz{ZJLl?z5y$Eg$_fvwS}1{%^~JXTLsv#VPr zTNqP9X>}eGjGUo-Mqsd8fO|9QiWbj03_(b$ zP*})QH>o>B$e)>z9cV}`7fzzomAM2;-=i#E4Gn>hV(WpP?J}=ciaFrP>4HIz3(cYK zVrNeRZTC4NwIP2H@@kh}ORC8`8UkT+5!-u=J<#twL zwGcCU|9kq3R4+i};ESjG{}xYd|BhU$|JuEwFEY^3C(Xgl4-QL7dq%1ZWh)H(s2tf; zj)N@Xvyz#logHSaAf*lZ2O4Uy3BvbVFSzA(e`wes7Oogo`K9vU~Kp3MEr$g`=calvA47c)=?@gh|0O zfe5AL(?gGn|NKric5rG()D~$Nrrfk;vJMRuOzVu9lWrab_71On=+gl);s7rWRjdLJ z#d+~CqUlU(roJER9j{t!PMKE@j4l@gRdGAd=VxL*IgTdNRsa@xy*nM<@~vM*4(=Ti z#gHu?O_KEHHp*(kX}kN*KGAP}v)z}pfr2;*_j6;kfH*eRvUM?2W>s3tvbM`G`+~3b z_=P;nlMBT&#~}77B}UM4z*?j~N}=hybO}YIA1}b2H2GcBL%h{F5+6_4A&nzyq+aqA zn=KQg1GH16ECxmxPd=ZWZehG%v9n36YDUHBmjhOna{Y)jgH7l#u6Lw9k$vV8`ySg; zZy;Nb;gNHWbFxjk)7K^!3LPBt{6Ok>FZ7t%R{tR=bqINVC2MaYO6*d~7>Z-m)RH!} zF_0;#MTXmHN4#EVct2gfT}q`5^@TdoMiBx3%(fJk`T0q<9frRY3Z4h{{OF4)*8jMV z<9~4$V*R&5{c{#t&*9@j*HOCBQ0uF>NN^`bHUgEC4T35X4lF_FvaQWDzUi>OYTju}mn4t|e;2Ds!0_NWijrRoyOe4~*;Eh$|V%CXQJoY8lTdjEUC+LP11`f9p@Z zO8c&2sLLH(o;Y`iMcWo9`wY}=(!+55zQ^jS!IBR3RIqFpz=tz=oE00ZTVbh}d?Qw| z^Qk{=2VgzdEHR&z5KoiQeNT?gYZgK%H#3%NxCn&ePjf^ccN=@L`W*TF5|IWO=`Jx+ zKAJ4QCF5li%CC*9aQ)L5Kg$>%XaqQgGbev?R!H)c9*10HfGb8hKk3B4f!J6ED#I2p zwmFB~qA?4m;Bf9yt)RHs>9|3&%k@SgAlx`zWvEJJ(kA)yYHAC%c~`Mkrtp!Ho>pb^ zE8InXg*#;U_>yxKdsPeC9qjBS%cWwM?RBrp-uwq4SrH$jr8b$2u0@GM)}h(1TJihxxxZxY6&V-2 zlp_XCO$a9-#(x?%m#XAEv?sXw`JQMU!S41b_mg5xI}5F+l3_J<+{ag>QzzQWkh|BG zlB3xdO)kDGEHt9~w6sJ!WV|SwsX(ISE3G@D%M;wO~p(TQ>4{S!nu?RaMEV!bV zNy;}&8phHne70~Po(tr+aJ;vxSa=W0NtO9kmk>pag~ONM_#<`905C&6JFLjw@JP=M zuZkQeV3u3@j6&p?m%%3$m7`#N-8cgG) zMP6O_jr!EH$padlO+hK5C;xSbi(PUFfb<+vNxH1-fLGZD&p9qU$GHo>ISJ&p+a7K` ztI=QR0v@M&2%C!jm9D+Y3Hssw`wUfb*A=o}#Fuf<`NO=>Vo&$qF>hsFpYZGptB?N{ zR{yrCvsI?QvNhDt61~nk+Lkh1tyvb8Ny!W`y zp$-bx2`y;T%tA-wfw0(__X$qibEKKEvJNKVmc(1q7?qy{wdSSX6A?Ex@;^t5@VhV` z2k(7Y|AxvLQe=V{k}0kj(b^)^f~epJM)9bkvyk!71L5Zk4_ZVqs9YSpgth{5lNv4P zfD`$7KA=i!sBKcDODYNv&0_kRx#0t`~~lkwO_(>0H+U}p=~5n)Foe+&wh>S1hI>$i?3*0iCwT5lv- zZE}dKrNWA@ItG8;uD*iNhOhR7UY{7FcEP*hhBs8NpRKeTX%v;JFmf&prX#qerx;Vf z8+Y|NWzCJsJ7hOvghQ<}A`FoNL6O9kG+yfCs~WB|+u>h=<5jE+kOM(Lv!PlUh95Wr z@XfqaikD1gm%J4CQdarLUJc$?>~nVS>kw3fKm3l$d!6=14~+%*X;eFpBlE*q1`PkO zK0q43V4=;*XBX+B3gl=&YU;P9XNgYQO^=^M$6FXQNU~FM_dQWAi2c(Bd#+;QaqbDX zt9A&%R7d_QS6x+JgCDc8=-aMKo$SOmF^^;9zsuXCDlLa3m?$2(g%$J3T4M18Y$>KK zAxVA*BVq6|L}Kw`AMOp0$ABE0K+*(SB9#jtl++eXBUo1cGr9+B;t|DHR99?A>J#R$ z@DHXE@|s50SwwwK_(M!?Ru1yj75viv$c%#K1R{b3O4?GQ=A81%EP1`eSwRYXI#zdv zj~UWLNP>oAjLA>@F%MmGIf`0Q0B-N!8yvyq`YJ5H{81OM|5Vxg-%$OJNUH8C%nPFa z(bG_;43Ya85E;qsf+v}dS@0{qEda`-K&g?zyTc{bapj@uLj23o5{>xV(Tcw6z%p7e zvCQGWouD97|zqB~3326xNLce60fOS`d z9~!mBztNwlTfJACKBHcQ3+4z%E)INRzVXI)S&Ix_ezv^`54ay530kBFSR?b)OJe4G07ayp1eR+E8E+wK{DTw|h7n1pY}~j@i+;;=*dT zf0*8t+MDJxRPyishZ2I&0cBgW@n3bAQ3tulVqGKl@xAbCM?DNizZYGo`_zx*ou9Dq z&53?7W|zHM66Z)D2^6bWw1v4i#ab+~v({crbUh-R*};t8Unv9{LW|dz>3k!U`w)Bz z5;8^yd(|eb6uQGb6?Qpz^`Y((^!DmdyNNOSdbHJ!D~h zdiVD*MIs4@ev~i%uKr^d@xS5k-?gbPgWmcpNb|Kutg^3WG|iSZ&tezGM6|^OQYP?Y zqCsb(+CV*XuELJCWM(&XO8Er}3>^pVjRXaP5xgS>Mt(vf-Au8sLEMmao^SA&n@{mQ zO=ZXRZgqhPZrskaafdzOIQ_6`kv&r;E8|oxBFV0%fZWh>HvVX_ zlKiXX#50<9Z460Y0<Z9L6Z!txMJyt_};lb5kSi0N0D?%faGB*4ZAg4TlsF9`BmOQU2p_q1(a{rt9% zjaKb2rTF25#W`bP2b?~Ruv^u=UR&z^Ocn*8*`1<>^Q1d*=_y>^V|~s67_Aywr|vMz zm-PKB7?_+9YtxUFu0VbIr5<6De6(o4)t9b@f9FquT2|3dGSDgKhv2Kh zElVO>g-tWASK#UUx%HjB1m+KVNqY~kk?#S(mf&7tgL(`CdI}`B>!i1h$x75i#zaS{ zJ{u(8MP~(n2L#Lu#G51vXANRynPwiWcLnRxX0X=#`u^>U>@JQn{KenXe=Vvr{$sT1 z{T0>uTEA*v>K01x)Y?dNfsRDv;z6e{R&ypYC^C}XxG7Mwo#*VGFdtB#sJWRI@9s0A ziB`V_n1|iXqaJ@f_uIK%W;e1N=Xf1Yjn>BHe&g*MMxNT$#-^$&b_5%Oh1KP780hN= z$P89xRW)pvcQ@hr1YkdZ_9ZWohI?;sYW&6C_MJzawqI9GVwf#bdBg@bUYp#JdjT(+ zEpkS(ht#Dj)M(0fYH(FG?<#(rC-X^o&N!grf~Wr?Qt83+Y6?mXP{rH%Pd`@8-;bq;}NFON2}`J@TFrd)BFuz4^Veg zuf-jHgt3YF76d6&^Qkqh-EzqjKf#S>k1^#<4l+SwO9ZD=fJ;!U;fzMr3x87-clHay4yIL9Y8Fo2qJ^ z5%ErWcYIR!Z(lwyJnuJz5KMdR!$DJooST&#d;aO^+}>Va5ck*zu7#N&d%oWY5P&y^ zL@3m~d2j1~8^;*>_N&QQ@GBYt`eHGy9yO1u;X+fp2c!2E(o`edzYLUx@+Qar#@)X7 z@XplE9@Jcf_GFZLj@P0VNMju<%WX!R*6~1GmseQ*WmqtgZi;43+&FOJx05tx+DF-b zwOsSLRgAE|eO^nthMGMOdVsfDqL6hGzw+ep|KaQ%V=QgAZs9K5c9(72wr$%+mu=g& zZKKP!)x}kIfA#GBzR8!9oSp2GtgNiuKi9l6?`w`R<`|hKn+gBmC#m6W3nSn7$;CQU zo`X?$6^f}-#UhAd-1M9{^{_Dy6k{C2Fm50sj0Q9S^$HPBB>CSsuSIpc+@X6AN`i*e z+~wJ)#)V~|UNX!;eKt&2kx8Yv&?ZQ3PNdCqqj|TRVx>QM#CU}xTe)kiR9a6Hf6#`@ zH;f{Dg+gDg@cutA%H21NLNpit%^K`sZ?9Ocl6HNw1~qvBqSMU(W)1Ma=iM{HTd-A0 zI`tA3a1;+u zh^g;^ciY?LwA*4dvi}9*p96)Y#@%xKJ)+$F#{f zUT~7aSu9X(sj&qv&?R$5b`i#9;9Zn%kk*e-o+l=SW;C9bEbu3b9(y1!2!25$3Ds*E z%k6G^VEi5zXIu1%C$oLO{(}6#7ijv?0_<}$FoNoeA{q>>3iJp6ca8$SP9;=8Wp+Kw zNb?VQ-j|WOutt<&rBNtw-jWiT*miiK(!$o_zI>m?jZ+Vwi($124Ra!;MDc*j!tf-6 zvYp8#AQ(n^b$?xi+GZ9cC)Du)&h3-OGPmmirRdIV$`B#-x0h(j6-nL~>%w>P@j~7a z5wD-BWh|1JGJkJOBH!_8=4dY2ahL`p4X!|m5zIbLLzxNk9C$po>G_@wLQL3E@T1_D zD+iX4Dhn2*cyir?9<<6?F&sNnENMr=(c(;LQKpvK37HERH%=_s4Sf;t-$pF8lGLf; z3N4H(ON27Prddu3F^4*ZwT^{Jxn=Ghnqs8pg(4e^1E8j@NU-FoJ1nf^N(#HhW6=+p z*?beLNs4QW_X?&$fNk!B|BgC|eR^2UlQzDg4iPVIl3?^Zv`q?ChT8hLBHl_@WA#~$ zn#6c;`;xYCNK;pw5Jb*bim?x>X`jzsjlqYUxT+81?M!HdjDFmRSo^^S2^9 zoSNJj;RkSCWPR1eMAV}-1~;D+=NDzVT4=^6JEt!E$wb{O*YpTiOp)80)e*T%$7iN| zGC{{z^Kzl|tiMJe2*KwC78KqXhHWyrZd1MMrVhp1DGaDq{z)ODvHJN2vtlebD1ytv zY>3iCtF4-WS=E}`)=}nxTf{XoOWiljzDy@QFHD7dp`>1d;uz$^W(|l(mSwPIa4uL9 zVJ~{1Z#F3vs&-NyJ>I(LSU-N2abvMP^>mSp;o_#6vU>-6to$*1minc>3k&u#AGE35 zvxT4hHS`<+;XYd=tNdD-Z^nDO$I8%W5NgMe4pQ$ie?Z!91Ax|PY5!rbrQ`CDSX9U9 zwLWh@;2Oog^%c3P@A@Ds{{3is9w*jsbN+_oP1j@g;N4;Bz_#sgKvEY-?+B5P1%SBS z8erUR&glP+&hO~P=lX__{be5OcXl?r4-*xay*)N_lNL+I`7yb_dK)uhzt0_&W%p}p z-c;P4n;-48%qsp*pYh+kewuwM)nDL#{_JL_1wY`T?nU&|bN>FTceJWhEU$m}4J4TV zGzc>Nm%ZbE8i$6r59;?$t{vF~Sr>@r-47v1v5-cZ@xZ`*Mbt$9c~FW7MFr}lX%ptg z3{7)$5TKg4w_0Cy?OoL>B~fjCk>+J9g4T_&r|nAL&9FGN8eh#8UURp`tm)tNP+!U~ zpK>$5x88GZvc0c6POp`3_&zB7iHEbLnh)lGZroy8>%%2_WE12;?pwcbS??NLWzpoC z0BF&7%>bxTWtu)=Bkr0$aU;)~JVOVX===r%VRU{YfH6A1AwU_O-x%PG-e&;7jXKrr z?mtMQ@f$fz~-s?HgaXqkh%Dm?Qoj?4t&tf1&hm3gU*jbEw=jzR*Jj_#*-- zA|odDFVRV}sv0L%KF{kb3)ro?F55^_oi}H~hbsj{evCQjFur@iA@gQ-`npP?Xlx*{ zgBwE)NsuhB#am*DIc1rRIDr_`9+tAe$S~p!Ke?n?L50%-ACFmdn$;ku6h4xYF2SI-*5vZm`_%qMT?bmVAKLvg@dMyRSf3YK+%ArQc}06^5D{E2+xLr zBRluk-T2a$MZiwRz!=p_8i%;z$+;W!L~aV>D+qtcjA&%r$K?%IG0zCBWCEm`;g#9K zRYCe7sP!Z_vQ?VdasCMP*PhuD|4LGN5#^i}Yl`XNqb&HQjO%R}=#qs=1?_D-K}87* zT?1c}A)y^Z&U&VCt=Nf0Wy3Pnr~-_}hi|$}lNO|uv0OvThZRjmnG)8_&%~&ZxQg=) zmFkY$zMN|xz$8SxnaHxu;zE1 zo(-F+f=?@1N7hO;tl6XX4=yXfiNme1C+Xr~CtVyL(}XR>$D@`ex81LNdHsjWh^*?e zI3N}E(fiV4Qy#%++9J9)Gl`K0sL zwQ;2Y);V(KiEvvK4o#L)+WfB?CRa-O@1GSwL4ygBN$5P>MP^H_gq0b<%tUzRl)_Rp z6=xA^rO|dxO=+_68CrF5!1Lpvn~nMY-w;;Wy{orSnq{B z87oL}l`M6WQAuO=VGAmgcuTWCPk2kc{5i;$UCIVkTXHZGS5k0Hp}Udes?Hy_NTpLD zDUvSAGRb>m?sdH<;F(Y_nV8IUbgR~B-3Q7?x;vTVgu!Wi%+M@_&4X<=o_{KLpt8->Iz^Zk} zH^LkeqN5xmqNiQ~&|kNPI+TaRFXhqldr3@uA@Wl%uzb{q*!VuQab2-vy0aT_)!X4& zCR>AxcBbW<8eMqm;36e7fgcVKZpxXcBrG}LR-3WynUii5(rjd^q%~~wY?h7SOQnGZ ztT9iAve@d#a&C>Cg25)2hA&-?anarl+M}N|_y$Ja8EcSdYGhMJk?GiohMFpeW>$w} z%h2?u!mN$uXv`*zNw{c_5>Pamu#jjmpSD^7C(m;^%3&@7>Zk#pD3v5C59AqNz}g5e zPptdWN`Jk(QDxT@TDsts^Nh?WEH6gYZs|H>{y=qIqie@M4X7v`kFH;bb*k7MwwGke ziJz|Zl4Hy^kvX_O-5vgrQWyALNR)Y19 zFoCWTInVRXaE4ua!0*wxQdGivty8m)UU>lJ`k(+Az78CQN?`6D0w$i^6Fow{q4V;? zT6=XrxS6y<(cfEz*;bv5?}pu}%nH8ZRS-uk?&0=D0ZgQ*zY%1gh+&!)4x$Ln_J`CN ze-3)9m^s+rafktNh>7RLMKNzs#8^69K}i)aL}crd=M84IglaL$i8RH~A*5mI^1-UJ zLiWX``?;7TAnl6*%HYYfGOn{S!NR}&&1Zw6#1!{ozu=BR2?j4f??d5slXKF8@=p4j zTCub(T7SMQ;t6-1WsI?l5cq4fBOD)H6_QWLC0~LUmYAf;O0`aCn!tKM5DHZxH=_#) z zF^7-K=o9(AlM0pf2p{Qyp7ARfqiDKl_*(jE`o8k1fX5^F#jh&Rh_`51;_wi1lbY9q zL&2^I)&+z%U82LePmaI zz`HDUK~n5o3tLca-zXJu*RhuhYp2vbmORJqi{@F%NnrOR(z(bIaNd^NmXzC8B?+j# zm(KUR2JPHUT6pYD-Z?FO;864`ge<}NpqO@7_S#5Vh-se)QyP{%_bhw}L@1fvH_IBN z^~*8|@J{L$$~sb&*J^u9O)8H{RSC=|d7XRfR+h7yn*ZZwv5b`O0{56ltdVZoPBEo0 z`MjqD2_z{dQ7Kfz(u%&yN#=D0AQGXse{L424}&_ArNy^51g9#|gp`IeDVX0CqV4Gh z>B57FL`l{H??o5fs9+?TT@5Go1X=8OPlhMOI5CQ3K~OG%v?>NOCQ{9cQlahj=Z4y5 zWJlZT-#t#(7OnH}xJ9Db*71FTjPWVh!BkY#kneoS^C?c zG~sOUOqk}KST#kyW~MC!HZRC`s43!82GRXW*~K#>a+ zd;;Bw&v_#wQuvXEc=kn0(_73w^ySbHd`$YG1Qs{bwam}~BVY19(pVV%<{h<55vcCv zRKvG1w7On|+nYDhColZ^FYS3V{yx&mVHTB0uKAy(Y3g795^>PpRDJA!4-W|>|7m~_ z{4WOx5@i=tCsX_Xb^7`DJdvU(EB~E>obv`0s2{!yup%NeGUjnoLM0_k5BH+)8d6%z zVcZ6OTjhBH`A{5nD}n$BTpE%wFS6hCJRRO&;r*B~?+85e;FWn9{+#C?K8DMK#O(A#bPBg2blx;Z8D zEJ29PlJhkl%0mcrkH$~s=3xSCbG8;ixB6?z)3Gd<7{MFZin;nD5YMfe_<%qN$a*m* zg$yavt9k)-8zO}#E;`57a~03PVEf`TjDcLBANM6m+o9KBU^%MSi4$Va%TwcRky-#C zZ;z$c*bQy1sTY=*H9H`NK2?9%C=Rt2e5JGhFTN%)(BQ`X8)EwXja&ZTjl;PA+baJb z^;PJS17Sqe5!MS@x=AI_7O6FpIf|P!ycoXiyq9rSgr#2tY#-F?r|C zmr7bBx0HLbp?JS!Y>NHt6TdoCxsR?o4-w0i1SwSKO-;!blat!9?62TnSN^9wQc@sb z^q;&Vf%m{*>KMAJP930oUZ&+Ae`p0+r>5!?k5x6CUx2I48^E>c)CrGw{HGTdxc>nS z=}dLsEx#+;_a7_D^50hUe*?=^w&niO#)Q)9Qozuvq86wQSC;(L9_EINuw=1RIs(27 zabLVL;jaH3zg-|@6kbO9nq^aQr zc1|S;T2+%8t_dfP_}P?EVPhM_L2uFGorvl9qT^;t3d&5CNfNH2_?OQ{t z?=Oj+UO0e4e=-DuHU72Xc2Hbt6db~HgIHN&jc911>7MvfLf_&hMu4Hmt@`xF41Zez zF;tnZnZ_4ESqsgFMbyu3n~d2M$;2Q(;3$yvVgnKv64`7k#Rs zMOESu3>O4GC{e+_?ZV4lwQ%~xCm^Bt9KamPpmJ#3Qbc#F2y(g^M%tN=Vvr6>opOmg zw~SY`I>b`ITx^?Qn;>NTNIZ(2x8E)A8%c711ab;Wx=@$xX^5WYuhO(`;pd3uT%^;Z zSZj3%GRjBzjP4wDSaze({DcwxOEh<&)P3QBxp~ktCeb-E^8TcaX*r5XRj5|!?Uf}` zRYFJlmDV6(1^3gjk|Ifs?DxpJ@OEKt-p9Wj3zd6pB1FHBXw`otivOFqrGG~)2^xO~ zE?K&G{trv{9Vm~Zj`p>Z*pk}qx72`U6tZvv)Oaaknbj<-vq0vy-Py3sf)EBOu_j?{ zisGrhtvivfK2;UMmv1joaJ-JbfQnsyEK~r(pD(jd00QzC^96$W7QxKlkmL0F(TaBJ za13F)=XuL}#$E3@yQ=N)^C3IXmj5cs+P5Gg12pq?p97qs>VO!E<*=yxB|S2Zd@fM_ z_J9xn`ZOp{W>5LW1vqcO97V+2f0loI=+xuI2Ur{69~tIxV+igMY|1m4{T!z0sjw)_Pd=8cJ-?(UXm>IHhXcXG&?hi8^4R~^8Lrmqfw zL)%rFJI7A7<`!->#p0Z8rUmmJb9!=VHP{R(OsL_=wZ))M*JCT=er;ld)65&0#;-BP zQ<>9ih&r}BjA!&-TI3ZLbR#uPio(ja*o~P?B%HBE~6)Hw8U-R z32mpxdKP@0fp+-gwcg09DTs(-XU+(vR=RE)T&-()5e5}+ww`Cfd@>ZP9MppX-o4#_dq zop?NXZ64bELpkJhvj%06OJ)57>PVcMm&;iB6>Jurb_PaQ8LCZljp7t5?(BG+RxVz; z0K4I%9041Z*$hWD_ggb{_HL4ObIIQ5V}we4a}Dumvo7NuaV#(1LgQ3x;4?2C7MtTA|cL^eKXM$JIk6H0GV_(ozFV0 z2TZtGkxFDnLD5||C^aZ%n2vONf9-gowVosZk6N-~Q+@#q|h9QB;A!Bhcq?t=kY0g%gT!z|yHhQh2k=sSC4LW;p{((}h?Kt~7 z60Q>(G=ak^Ehn4N$ccBOTc%*$Q?Kp}+ip}3jJ>Ami22=}<#Ny!+O4``f%(*(RVNNd z?L&*AAYOiz!WYG5E*%6`NF5S>;Npz5`91icbGosz+S6BM(fmc zBL~OdkHDHeObJ(KNIy#l5NJYp1ED?jaN8iT@Ej!=w+FGV2*b7;vBl;C%?S$(rTUgd zfWfgLkZwso8v5!A3*H1edQ~LX?BZ&g`?S3VGcK0APr8=$EE%*q zX7m;t=?$!?Zt;PIsnIM|u_$bP`cg|-+aw$8s8Dm`hUZt^@6@(D@!herwixfTjN=& z4Q?eH%dYh7aug=aTceq*V#OW9470kx?FGSG?M@U$(b?WQ-{((Pt8yUi8rCbT<8`(P z7eY-D^KRi9%7Oa!WO`CyvLmo4nJIFDSmMb%YwWCGxifhGf{UykTrNn+A$916y?7=< zz(yRT9bWhf4A8qQs~aR03FMW?MtZZGc$h6{`AaKOXQC(E3|$l13JB0IWM#hP+Ne4+ zNDde1z^00MKkFO#c|gK1xZvgRBg-KkmH<6`^+k!4Xm(9S3b}cHA}E+kWQija`LC!F zDH&Lsu?SU42|e|eOl5N~wgv{ua6`Q4bbzQzFX{bbVu$F4;_NS`;a%ig<%F~kh%*+>e96f{Pf2{oW8qq|Z7^QlBAD(?8~>)n)8+)w=6K}Q zn@TuP;(-d{X$xhiA!;)n?dPIoe0h>UktvRdJ$aQzy1yW8sVMiREkT?K9f(_u;JAGH z2{q>}ka{o|3%nqA6A=9Drs#tvsii#Z3ZZkZv)2pcS1l&FHq(!BUx|Kn{3YnLL$sxj zbiFC^&bt3ab~FyAV@bCfx(IY>36({(R)sOpD?O;EJS45;^`nmzsE@dN7iEV4@+OY3 zdP%988EB;jxk^^5HV}!>V17mf-kYxTX(94zmOrtG^`20h)YNm{xgn{NNG5OJo>$W0VssF52VWEk zh&uK^R-+0j#CftpN%xJyUBvAUact|N*V=FkTj@l+vZaQ*OfWZ@D?Cj&hM-#e=qQuz zSg4m6lT9exu7I?-ze&nEsN6kjWlOUo$n|?7SgJAZh_`8tY-}m!Uc9Kk1pnMzO=NQE zE56egV^IFnEW-6)++0OW-7Jkw6%3sWZJqypA*lJzUsPHC&R?85}LCi z@s~maoq$fTAprudbWHCiDVmVU&H#0&)95N+Ug;FjEw5P!p$ddm)ZU^}>8f+9tJzk+ zD%G#L`<(T*C!g6_d2)<#L7#M}$%Af} z3%&5|mg0f|vu}xJ89(*m@A+*FYK2-pAy4fYBQVWpr`Vx-+(OkhA<)IJNtowKRj2M5 zlt;f8v!GvoM@C?ezVtk~7eb{^f|%jImS!%{ANih4tkFK zsza5>NAN6-qsmE^4B_LG5qIeKhC_ao^srdPQ+^k3)1)fa+A-6)cgK{{_Wt6OQg^G& zEbik|GO7M*SreZ(raska{qcbP{ja>M^v=w3zj*QY<=MxdBS2acB+rH&-5Vx6#sF_8 zgPfT?-$~xkCR~djIY&u6sU;lNEPR${pBeM@PRk=D*aX|B&Eiq*QeNpgz2yL3CC-wo z^m2!}-SakH^)$}<`t3~TC0~C6`%0D9A^oxT`LN{IB`ow6*nl{05?rurp! zJPXsVeoSBf5kH9l!$$U0@evN`*f$9gj2?=w`kG%YTj3+&!b_uFtN6;8Lf}qM;B$hG z0!DPQ@KJic#9z&}*XDpKUtT}q!UaRx=eKgHtOgD)>OSkPP9 zDaGNHiI!MDU7UV@_L z?$Yemx>{XpT?sPaY73WBrM0?qrbhdGQdJ&d&ObmEv~Jrs%-A9>ntwp ztV@i-ZlGza>$}`J8awmoI^9BR8*kv14`otsq1L%Ox23oWzLK@cZH=?RU72ZJ53?Hd zjD&292ghnqR@q>v>WuPaX!ULD`$p|;)R4>9<3y1gJ@Q5uLqa`N;IW#D$(O=vS*}J9 z8T`1Sz_XM`;k3jPtIK0n$3mZjM@#0+>N-fVnEkNul-b(ZdGh-M@;;-fOtkr^I2}xT zhmdyzEsELm%~;oqKm|R5?9rnLUv^1s7=NgKWI}j7%!o=Rt|ZNM7_>qR!=>~?groLC z(b*w*VVJLnTeD5q9@@4l4(_|$aW`+_JFCkJJ$!}sU~QZ|1tQAj5Tl@Ac1CyZ0Zyiy(V(ksjz)($@DTE--m>rtv2$1EK;VI>nXDBD{0wQZDB4zQafZ=mQ^v}hU7YZK1^xw44VkK7}7;3R)s%h zWJkziB&rwK{O)MHy&o0QUXn+&QG=@n+#U_w+wjMLS%J!ewgBbWH7@Udp5DhN z*m82kgCv4uo+-V#04+LviqCK@W;edm6`Ga}+CGyxGcGPxN!HmNGlLZhDqvVEi_|rY zI;-p9nv6FA^6~6%kk^412l|asCS#~u79(-s_tu?QI|XJM6u~c1bR4g$$T8tfB&$g2 zVK&~0^nDoRNNHTBO3E@3TMDd6mkr{ypD7VXkpaG1+dh zw#28&9A&2-)TIU^VkTp$*LDeQv4ZJSgNJt;c1Ig7mtihFW>2PCx3LO}yhgijW50QO z%)2up(kohy_rbiwD! z+!%PPGzYMUUHdE*@5fccfQLq1oP=4o(HeM+N%M;8) zu>cCEdQsU~{AkjPXN>+{oz(*iZz*8a^n=98 zNG(`&p@Xg2!98wt7sK$=UvKG5{DJ6!55C4pM<5V+*}E{jKzBfa2(!s5*C5nrj)sKF z=K~~0|A;`#!ugc^1iYxh1pNz>MMJVx(ei`%t6`KMNsA{RApdF(33YD3pC0|7suqU) zmdMQd#YtS$JFN1^pXR~$RWjOlkcO1IpR~z?xJIn*wzgC_M4o@Fdu7M|6oh?jbNbzVnGKR;PM>ZS%efdM0#`cB+#3Zm3E63q zjStw^N??>M!~Prls}4Ybi2f4yLB8gr%Yz>UBOBx$*X(s-k$;0pVch`w4(PGs;=rn)07ep=~a89}8x2Jp*f zRD&uYfdx51-7K|T|*YNp`8#_E)s{=hUVWm(S-G}b*{J&SrEP5(_blsy#$ zH_t$$gVT^yAc_qqoDeV7>r*O(h^0I3JX9DNf(C;;2OEhwE{^YKnE{$1Jm6f@ws)u5A&|np z;WkFMaVtm5v6JaW0|u41hIo8=T5)+W;hH{2J`w5PED4KYuQ-Rtgc~in^=L^neiK*0 zVkgvmR*)1#bnC;vnV&9fY4P|V2gO-voL(j+Z$*U0LH4#kpFy73oLGtyK|voWFX-*X z{K;tKh;izUBtPCMB#k^AI+9g|gAEIo#jflbjKcyH2Ve<6w?0Z_@Xf~QR7v+*a52=l zrO}xgbHBBmVV1$cwcXqHsI8*s>lM#IB&5Y^f+%@Ifs`T_SOpMc>tYWyQR}9oR(C<#T3F3P`D*fv2N!mkmo{1I@=rfKiZ7-w zDt#S-Gnfd?m5uY&htPwoH`AcGqF$SBM{!&9NYc1I{bR>GugeNmcm+otSZ!d|T>eUJ zE-tOiGnGv76cH5(=JUmeAB?==xk4ppHw}+bbAO|2e$l_>wLG2{{pHmDYxlr!fAL(@ z$8P-v)B44G#xH^Zl1mu}EcPC5>&N)^elAeD8~#<)`noyKZ*j33;1>yR`sQ937r2!F z-frsy^Sxp8#yu}?Yuz6vD8E5o^F&#l^kf+nOB6>b_Fld0myyf7LF}?*(I+%plmoHx z-S+{X*j`g}2Qz}4C2J^slf{mZiYRl~N%QB+Qv%sZ=&a}}BybLHU zKEVqbg^wmnU5F{RLASEtq!xcKqmu^o!iB?S?y_1s@!gs%$Few^icfq>SZYRYK}-j0xxf z=6MKc3E${jP=x~d^D$^E!~XASQ(@JObvX{g_`mn@_X z*n5k+W~=0u$k86?upTC>N}IL#N|6ng@Shw_=dY-WqcnWNZ{kq+J%^WYk;w zg_AM03r~hx95PXCw|sUqa5QrBShC0B#3Ijg z8Poo0v=Z|jL(M+Mk!qL4*{C^fVJw&JPRgf*mB^Le7Qid2Fci`L5t+UQT?ur8nA%o& zo+z*pdogzDaTwq%Na8ur(iw2`IgvxNLx$3hTgMN~TycJqst?p!vh+cd_T@Q#Vg2{s zbMGh=UqEV);+=4}cn=t$E9$U}wLg~EUp_PTORiXQ{N(!jcN8%{r1Qz&wv3@VB0Fh` z^<;C_PJuKcA^m78b_O-aEPy(E9++r0AP@`*XnDn$$8)gmCJLg}{9*^D#AYc^hJTG; z1i}A`0m0-_$#nEUXyvr}!yu1W`X=VMr%LyVD>rXt$}SsBgA;o0LjhA{ojPSMYM2k; zGcKLT&iE8{t>|j*zoK%86Gb7_;G%WNl0r)fH_{fUdE}U+NeHpkSo>;)@g#u1E?Kk; z&#b^?N@>lcW7?3zX3@&%LvTv*v^3Sz%1B#jj)}^rEoA?h%RVthx3DH#Rv#v3Opn$i z1;Y`B-jp|U0@a+zT6vvr3z@H6b`usV@iFGeJXsCop8T+pt>uomX$y2K2e^Fke*P+NVX= z8ARr>o3HHq(8gZj{|ZO-Fi$;Za8RGBe!NIS1|sZ%W{}!YES~ZZ&mPp`25MbHyt09G z=oC=Vx5!`p5)aZ!%GXR(?8<^wy4?M9F1^qd2R)e}wG`H`n@aRzY7*dhV;h*ro=hM= z5w7XPbM-ymP*0p~nz{ zx-qUg95?~-Ffvmi@oa3VczV}bj9s^W(5cgU-AlTAa`UBz8{JFFdz?Z$z_Yyp)b^bBA;vG7&&K;qX9kJ++yg3nHN_@KUzA)5fCTI@ zu>4aCXHa#!1^Yiyz2eDI!CH$cVDnZ?_|y%6?v$2He<&*z6BJJX&qydf3uc0sJCt>F zGl=ry#Ory9gVv))B(&$K=!qwJ@=hPYvBc5mOYKOU-ioRWVJH*Z2N;K*8(kMlcVr!G z39H|dwrU+{NpDiwHZ3FjIrRv#h8J3aHSqXoE46Fh5pGB|*eGtGpa!teL7|qME%bk& zK7zd|qr%b9IipGOMU`0m6ivIDQgJU`X&o}4hd5LZ1XNjI>&rI1U}w(W1P$m(n|2cy zvD%n2o)svG6zTgTrO1iPBzg>78rF?ywUy*cmY9lYosb|Y!C;)wa;e;X6wZ?YVl1Z^dcgmV+BZb$$3H`P^oOJ@{eUK6 z%SNj%aAkL_;4zvs!ACse$V~dE4?c`2H}b)XXxB{F&+1tjxHdy(-eBYuw&^FxnCXDv z1Xej&D47_+U}w#bHdlTUkPN+NVJwhrGDbv`C{&CTN_;LDvKAFZTk*$Av=*MEI!gb<0=snq+?(=2~ z(jKX4O;j~6f|dl4QQ=VNclei5W?7~>A<-&vS!NY3!b!E!x^5*Q4e|P5=fxh*7GAVt z8lRvMr*-Sqy@9h5D$!|D3Q|~L2&(@a(#2}05><~>|6TB{Se&3*U{9hpKB{`;b9RzNUWdpp&6&T}_jUwrXsl7rDdl6#|Y;)`8{b#Lkg8 z#X6BgO3k+?K{ugE7*oAge)a-D!XZRMqidFfC* zqh{|1;uFZcBZQ_PC4~I%dOhR>eA*WVW|QD7sF;Y!J+C ztH?C(t)P*fI>5dvOSnvVPbqaUWq&Ez)bOV~@5Xo~ec!gI=;ii;d zmt;=XMOEPw9GToUc-G@Wz&KW&{A|{HO{R6R9e=q5zetcD@g<{OzldQSXFKn_x2xd3 z5!{ZTy8khar5d|KeN2Ha64SB%e%=e>lJ>~u>~H5iJRXw)86<51pA(l}A4;Z7OgBIq zPE^zGR68QM;UH;S#;nkkBb+9bjTWjveV$}-DwN+9Qo)mQJ+}QvnHt6d>d*Df&qJ{@ z(=QIRkAK;1^nW0K zHC<&KRZKtlt}NMB>XHJ1h~QGl#NdrJsb%Cz@qmpbfqE!G5$m-2Vr{mr-;D!+onQMg zhcWDW&ELa$8D8n3ha#T&63i#W7g$~8jV7?{*$hL`#0cjp?d$+#%{lmI@98foq z?x+PMG95MMPSt4@4FKVo|#HL6n+ES~7LV@#r%T&CE1crpVtnR?zU+mzm}K56ZcXF*4a|4+lrpn(NCpn9 z5Fz_)z70pKH3n;wRH|mE;5EIR8HU*%Y}1r%YxhV^ym*I4;l$iQa*xzUoH?9yUX_}f zOIdzRdNZ*%o3k}++rc{bMrtY(YgP7SSFB;mV#G-!q`B<|tySzm%qnJhs@nYPI?M_s zQBkOAyD_XT-w{)WNJ4E_8yvJIg?uSX+aHJFcK5>0Cm-GGV2{AY)y|W(l(#EfN_Nhb zTJ;k8W8Io&zAD?L57^k$-?C5vC0OR zU-YS}+4~3rd67iuShehNJ&}Ulbq6%5D%oN(Bh+VQr~TjB8iN6?woCcy^wv0}L#%Ls z%vkp|UIbh}d`l8Q`uLCO_WopsSNMisCt1{_3Y~X3L+oQLD;7*k)AL zD0D@bux|oy9$5*3l6fDySUjEFK8$2Dix5|+zN{q?c6#zZrsp@drp$vq9YJi7b|gq3 z5D!w|sVo!UEKc}MacFmi)`z7avJblOwX&Q#Fk3L$+ zt53v)+QUHP76pp=3LIbuxHboV|C84@DD{&50{JHqalOFZ1EPkTqqjYV4IgQM8HZ4y zUVnbZuPF2#ugsFS|4ShA({oRg8>v%5#Y1NF*(rqmnFs(&h(%kWUyV z#1m-EC4|vCaboh+Cx!lCIC~kO@ia{U_N=3fYRVAoM)4}d5)CT&>t8x0OscCSu5XRf z=zok#_-}Md|9?{QJK)CH#?aZhMtSp}G*#ZLs2tF=Pyq`qyAbTeAA<*9KZFD%N`#Qr zhl9iTY_nAxuST^wuzBsAPJWc_KFaVl^4>UN-B@O6?NR+W-Pg{-=@>}{_pL& z{hl<(3BsiED^9TLGCJV{BN{qPj_bozL)=~Of?{9g)9$wVaaRQ^!laj)n3gqeCMNGZ zxDTvQU4UILQnLk&ES{soh;0-@65m=q3QpKjqVVpxu0X<;mVtQhKh#*`XIR3WYB!7~ z*j@r@QM6d$GcH>g1!M1#JSC}QvG@q4(a$+B+u`rrD(if7E{`k^Bc0I$lLg0H>)(c* zP?-UB4I!`1_zZ9*621mZ3_LAFzgB~3c@+z2jsB_19RtR*GmL7(gont3`+$e zS&nP8Dp>f6?%BV#9Z&xCfxns21-B-K6j@X7VM0O)JrLw->!bY$-yd)+$I>IHDkT0= ze}(L0JhZ}Iy;}LBU6VBR5?qcm9lPo?HOHl?ryK@?<&Xl4CtCnmc;so5opWZ7s%l2{ z)IwIP9!^5kK5D2Jcw;G$mq-HR`2uQvuDXS*r~{;Z#mbC+M*q$N#RhGHm?NV<~FAEZcZ-t_BPg*F7(ER zP9{e7-(U2?|NHCzRKr=i{G*1;rM0H<>>iFv)R5fdusf8HTPl{6I*4a$I9!RjDsDK8 zPX-@d5K*I@ZD&pl3}~&^U87Wx(1a;5l$2IBDq)!mAq`P#b>^`7`vQdPH%Jff0R7yH z6*t=GV>5R8(!>7Tvc^iP}wig7A4_gF|02mvB z#)m3GCpd^hxW7fh=ff7mB~ZQvFks(8nSGjI#vLdde&0c%76Zm!`prELox8cFfC*0b z?|FOzEaMpOFwlG=W`AV}_70xreQV^7LG%wnDrn|*j?(Xep$-Jiq z+BfCje*jnzX6y5BZvSZF)7{?UPI<@;xTEQ)FjVa&`g0jzb}nZv+i16eW!h}l%T}$D zSTUtB!Ub#xNjg&{uuZ$D$)i?hTbhwGcZeu8DIJo*L4}RTMJG2rL9(F!w(*nVFP@D) zYR;yM*N|FU;{iu^>bZ<4l{q_Ua_8NyvqhR;EzeVhpZj zqniS=Qfh`IY4qa6u!9soZ}DbpYU)n$I0<=Jvt>nh;7tPjIT+X0T8n3io|@$3?RjyM z7%+EgDnptlK8B>G=+|xHxSJB$9P9V#CG8vjkt0RVBbrc@!#2Gj&Fzb|3CDD$l&+pN z>Tjq_bw)V@It$uKHs$V>r#DXWNSs+ByT0&hJ0YbF+*K=AEHKOx`$yUAJ26E2Bw2pS zZ1J{tiv>OWq)gdmoeCNS66-Ca!Ow^d%m58J6U? z=#mx<9;SMKtHz~;!-QNjy>M2yk@Z}3cBQd}O*DEYYZQsrev!%q+qW~P={Hs-Av`>J zTT%|+F^q_W$Lddo_;*^gRy3VbT)ZW--#&IT1iUFnG$h+*8L#JZ{8gYZa$QEX`sh*3 z5s8hnJi?}&8>|d@QEu?) zdFAba>Z;L)c4+(~x>SCld}t`+<(MOkX!Zk8Xyky*NYt0X-%+V3XlVRn7gT-&-zEv{ zBUO^?2S*D1-yXzqLQ&?t*MN2(u@3A+JUXwLu#ekPSe^*`8? z^_)%3=jS33Tfb5|7S0jDnc22&>A>KQgL9}S^Jg|$>12n?JgSzXnuWmn(AV0dqo^G$ zCU)v&Kup)ynu?nz#UxK!N+ORD0=Bf}P48|4zZC9{|I`Zh?nclohYZhm6aIg#oe5k_ zTNuD6MYPIG5tXGyD6~pKyY`e)6iw4q!!(mwT5MTLt0f})nhHfki^$rFi0n(YvgFB= zU3lMZF>}V;nQ6H1H}743?|%RDo%5aVeCIp&p5t8b?0!jGlbPcD{cenC0^N+n_u~pNv@tE43kvZ>X zxGkjaY8Ybi(xKYmzRTpvTS^kIx8#NxR5P-AI5Yca%rN)L+h^Y6tp19M74J=!5%QMi z9dYh^B`4QE=AbRF-+>9C0Erq>5l zhTD3pR~M^G8p|3m3|{SgxyaQ z5~nD++U2UfDqDWS_fu<_!5;0|w#|N?&Tk6KDThW4J167g-1F1!v(!wsH}oAFIY_uuAc zCL{KoN-vZ*Y@D57t+>{Hfnqw9@{UTe_PlF2y2N(4)zx_w@x_(#FA~eg3{@L$c6hSe z*vG>T5f4`;7vD^J#MW-S=eYP$(X*2cyA@7n_j@P3=X;vW<(-RUSkW@9N5I|8Q8ao=za+d%^vyMjrhh^`AtShp{i zCrX~zw$=|iZ@$@={oHb_uHFx;+P3U5W0h2ceP^FM;C*WPo-dT=GFOU|?pl4wJ}=SR zf-opRI~lV!mho}P(K+ZMZC@~4eYnbonMM9DrQC89nrt=5SwPnTX;6Thn8Yx&kd zvy%J(?TLPi?c{q5OPsKKmtS0+!K+2Sb@9F{6WA#!-YrfKT{a!@oKQ7b*)>Po)ce@y z%$o}{mOadET(;))^3Q(BF>PcIw2gVEQreM&|8D~q2V z=-cw?O^Z5hz@VTy=i9Xd-SW*g=$32LCu-EEoGQC*5*;QVJ!SUYktZGAol>Q*qiF6@ ze}1JxwrX1J9lO% zSSs$a zw^!;tblXbvy$}3+7F(9;FpmAjRcCWeyo<$s|D3XfD2a!p;Y$t&)J8_syU?%}W-Gs};X>O4#4 zes16Qt>4Ud@mt`lC;j%Vk|cU46O;+PdxJp`hGKIw0z}pAS04h*<&ewOZn~AeqnrJh zA2pcippU+-r7fKT|GO>xl#$0Q;ZMIFb+vMHw72t`Zs2Nxh|!b9Zz&lTLe9*!1Wk`Fadoqk|D6h1|ZLd z{Prwol7y9jyXH#PNvvhS>&FyD0zn&*vQ2;#Z;CgILhXFJm{;V@e*N|)fklRcSQ|tn z@js+CKq*eaIz?(Z(wHnFmFh)iu_&}qrY(g?rH9%xh@n`1vmfhNJ+MPzbP+vfDGC+Y zb+|2WdsIhzHDHw!2s;3yLYtI?3+>$9msjZ436|BZ;6JwfR?;SA;X*r;T)aZp$SCzn zfhK$bwF(CUb6p0i_(I+6Z3OhVcM`)JR)Y3LV38xZBoYYn8p37bwY`#gqze;Dc~Ff& z&_krY9D*;k!?pz!R?oE8$4yYs7HBGcL~MZpzF2D_lWc12NoLa73=)~k^WY6T{Snbw zMm(as(nnbH;E6y-k~?@JI6h2}Fm0qfD#keF;RuUh&{_1~Mmoj#FY9-MsF&~?i-`0S zS!5WU*11Z=Yn+XXWHPE?7$?Di(jGzlBKVq!T3}4NmIwB4?oUv7NtCQ50ofqE5A-kW z;}*`9JViv3O;^6JBe%@o+gP2<*BPTkAeoqr9iO136PG$3lR#tlC$bw@3!7qTL z8QfWV{ROC?bwA#Eu3GJp@edS30^EZqQk3h{|3*=)*(?^F##wh1)CEw-9O5IC&m_~B zbOuvk=!15GgQ5$i&|p&z8j<>27hC>BDrO{j=*bX~Vf)r{t}kLp_aT#5bcRtde@odi zOJ-0{=x{zTgTsPr&b1~$9hz!H@`g$h=}U%lCy>hFWVP9DG*>4E^`Q@amzh+)u~BzgqdnnGmSF&3y^upSgWJ70TJ%xWsawYe@AKK~Zusj3jdc8s9 zl6b{1S>$jVDxEZsKcyu7$l1#vS{F!DI0(37W{6H{cP4g`V749%dL$(nPp2t+S{I~2 zfTAPE+b0ig>Lv|>AsY05=p_6Vi?Gg@{0eFmf?}u%9oQ~5O3SNVQx^)=r`mVDZ;(>OAVnS0FeYv~%SE;LfF}`wT62+OH8Gz=G9F zYv{YU1bRrTH1GWENU<2`F4$BuH3F|jBL_c>!VV`~3#Q|MX#1e_kC9q9QBL49U}lS3&d&Wl08(Z%Y) z$8RfuUdC>4@T#$Kvt1TwiAix;zs97OycH zRIwGbj~c?;cMd-hxdcZ<}WYHo1 z!HF~mDXo4=gN}-MbSn-C?g~Et0SwQv`d2GGZ~$CBbXpX*w(U=FIBqESc4d4r=&}`l z*!JX{%bw5+&9il7E=XO|-!aV2X_9~lN>fkLBN^1eai7JCi_?)-X*3DWwd zAXi?AJ4rr2TKiKCc(HPDD*6c160)&EUQ6&HbI+T1ZOZB5nrkxT)dzx|6}sKv6w}rf^;WDa-NE)lEq2( zPv597w+gsRfs2OBht>WL7jIaJZd!H339MirOleVap@zt0u~Pr?O;1|$!QRcm8Mz^K zyCV+^f07lscs1^CQJRLNRiVMLh7 z!Gtapw!7iq2aG~xys} znTRt2ejAZCBmF-1hkjXSb`DT@gyJwYv6AT>2n>Rnf?-{oX)`F=?K+U0%>DDx%Pf=UkwMp21);f>T9sm$zG}bh{WFZ#7NwX7VJc zm^bi4184UvQKV|23rpNFxs6QOg!}3Q!e?9FI)9NZR5WyHNSPW zYQ`O@6}<{EAX=Sq%2dcCkQr7%;ON`^B>yJ48Xmat8o+GJz%QdpR>M|5nvEDn&Hr&`hR0xtIg0J%)g045FIH-ELs`>+myR(?}9{o3YSPXmZrMQ550WfaVoL zBZV>OG|B?JQLR_i8cnSGUWXqV?`eQ15;E_FnGTahq_J@3)P@6A%uxi(J_>#xb!Ww| zM3D_IPzeZPYCc0#X312XLv;nKS@E12ze%&xJxhJQ;e9$Jvz0`(IGtuYm8 z<|oq9LhFb>NefH6k!|SV5k#D{!3M)26RTk$VCeAXRvl!-rgr&4L8~134o8dRLDe*v z1iK>YCJp#YV7zy{PADutW&&sx7@|^##xIv(zNT#8t{u?nLOyTntuz8<3{u< zOI|+#`}z+wN8d)cI81D`Ie%Mj&OY*@09bjyu?A|3%^J_2<+dk_-2g1?H9%Ca@w#HO z%=oh$PgmJsOLOmkW3A8=n`O$MrC=fVx(Qgu;M-8Wu8$I%Wx}7e&^#y$tHT$+>7{KT zHp`el>-P28Lz;p0{Wn&`Sg~0~{8>iN2fo5={>^W!N<*<(I9zM--=-O;p$Uqk{ z`kRQ&8i%9UP=|qo{*-U&Gj%M7a!lSTx6U2w%xGC;qz)@K9MDbyr$IkO6 z*tm~~M*CRkWbtAAZISy(S#M@a#a*Ny1-EMRs;TY#}aMJWhAsM&f-Rap?O^IkBRX(47Q$ i+l>43D|8a}G_m^(PTmI=OyODy|5Ss=d72C}B*OpJ(2K1A literal 0 HcmV?d00001 diff --git a/core/src/processing/app/PFragment.java b/core/src/processing/app/PFragment.java new file mode 100644 index 000000000..4fa56ae2e --- /dev/null +++ b/core/src/processing/app/PFragment.java @@ -0,0 +1,98 @@ +package processing.app; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +import android.app.Fragment; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import processing.core.PApplet; +import processing.core.PConstants; + +public class PFragment extends Fragment implements PConstants { + + private PApplet sketch; + + public PFragment() { + } + + public PFragment(PApplet sketch) { + System.err.println("-----> PFragment CONSTRUCTOR: " + sketch); + this.sketch = sketch; + } + + public void setSketch(PApplet sketch) { + this.sketch = sketch; + } + + @Override + public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + if (sketch != null) { + sketch.initSurface(getActivity()); + return sketch.surface.getRootView(); + } else { + return null; + } + } + + + @Override + public void onResume() { + super.onResume(); + sketch.onResume(); + } + + + @Override + public void onPause() { + super.onPause(); + sketch.onPause(); + } + + + @Override + public void onDestroy() { + sketch.onDestroy(); + super.onDestroy(); + } + + + @Override + public void onStart() { + super.onStart(); + System.err.println("----> ON START: " + sketch); + sketch.onStart(); + } + + + @Override + public void onStop() { + sketch.onStop(); + super.onStop(); + } + + + @Override + public void onConfigurationChanged(Configuration newConfig) { + if (PApplet.DEBUG) System.out.println("configuration changed: " + newConfig); + super.onConfigurationChanged(newConfig); + } + + + public void onBackPressed() { + sketch.onBackPressed(); + } + + + public void setOrientation(int which) { + if (which == PORTRAIT) { + getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } else if (which == LANDSCAPE) { + getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + } +} diff --git a/core/src/processing/app/PStereo.java b/core/src/processing/app/PStereo.java new file mode 100644 index 000000000..9fc68829b --- /dev/null +++ b/core/src/processing/app/PStereo.java @@ -0,0 +1,7 @@ +package processing.app; + +import com.google.vrtoolkit.cardboard.CardboardActivity; + +public class PStereo extends CardboardActivity{ + +} diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java index d805204f3..5a151ee20 100644 --- a/core/src/processing/core/PApplet.java +++ b/core/src/processing/core/PApplet.java @@ -59,13 +59,20 @@ import processing.opengl.*; -public class PApplet extends Fragment implements PConstants, Runnable { +public class PApplet extends Object implements PConstants, Runnable { /** - * The activity which holds this fragment. + * The activity which holds this sketch. */ private Activity activity; + private Object wrapper; + + /** + * The surface holding this sketch. + */ + public PSurface surface; + /** The PGraphics renderer associated with this PApplet */ public PGraphics g; @@ -443,15 +450,16 @@ static public class RendererChangeException extends RuntimeException { } */ public PApplet() {} - /** Called with the activity is first created. */ - @SuppressWarnings("unchecked") - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public PApplet(Object wrapper) { + super(); + this.wrapper = wrapper; + } + + public void initSurface(Activity activity) { if (DEBUG) println("onCreateView() happening here: " + Thread.currentThread().getName()); - activity = getActivity(); + this.activity = activity; View rootView; DisplayMetrics dm = new DisplayMetrics(); @@ -501,8 +509,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, (Class) rendererClass); } else if (PGraphicsOpenGL.class.isAssignableFrom(rendererClass)) { // P2D, P3D, and any other PGraphicsOpenGL-based renderer - surfaceView = new SketchSurfaceViewGL(activity, sw, sh, - (Class) rendererClass); + surface = new PSurfaceGL(this, activity, rendererClass, sw, sh); } else { // Anything else String message = String.format( @@ -510,6 +517,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, throw new RuntimeException(message); } + + + //set smooth level if (smooth == 0) { g.noSmooth(); @@ -539,7 +549,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, if (sw == displayWidth && sh == displayHeight) { // If using the full screen, don't embed inside other layouts // window.setContentView(surfaceView); - rootView = surfaceView; + rootView = surface.getSurfaceView(); } else { // If not using full screen, setup awkward view-inside-a-view so that // the sketch can be centered on screen. (If anyone has a more efficient @@ -552,7 +562,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, lp.addRule(RelativeLayout.CENTER_IN_PARENT); LinearLayout layout = new LinearLayout(activity); - layout.addView(surfaceView, sketchWidth(), sketchHeight()); + layout.addView(surface.getSurfaceView(), sketchWidth(), sketchHeight()); overallLayout.addView(layout, lp); // window.setContentView(overallLayout); rootView = overallLayout; @@ -623,21 +633,17 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, // println("done with loop() call, will continue..."); start(); - return rootView; + + surface.setRootView(rootView); } - @Override - public void onConfigurationChanged(Configuration newConfig) { - if (DEBUG) System.out.println("configuration changed: " + newConfig); - super.onConfigurationChanged(newConfig); + public Activity getActivity() { + return activity; } - @Override public void onResume() { - super.onResume(); - // TODO need to bring back app state here! // surfaceView.onResume(); if (DEBUG) System.out.println("PApplet.onResume() called"); @@ -649,10 +655,7 @@ public void onResume() { } - @Override public void onPause() { - super.onPause(); - // TODO need to save all application state here! // System.out.println("PApplet.onPause() called"); paused = true; @@ -665,6 +668,31 @@ public void onPause() { } + private void tellPDE(final String message) { + Log.i(activity.getComponentName().getPackageName(), "PROCESSING " + message); + } + + + public void onStart() { + tellPDE("onStart"); + } + + + public void onStop() { + tellPDE("onStop"); + } + + + public void onDestroy() { +// stop(); + dispose(); + if (PApplet.DEBUG) { + System.out.println("PApplet.onDestroy() called"); + } + //finish(); + } + + /** * @param method "size" or "fullScreen" * @param args parameters passed to the function so we can show the user @@ -716,19 +744,6 @@ public void resume() { } - @Override - public void onDestroy() { -// stop(); - dispose(); - if (PApplet.DEBUG) { - System.out.println("PApplet.onDestroy() called"); - } - super.onDestroy(); - //finish(); - } - - - ////////////////////////////////////////////////////////////// // ANDROID SURFACE VIEW @@ -737,14 +752,14 @@ public void onDestroy() { // TODO this is only used by A2D, when finishing up a draw. but if the // surfaceview has changed, then it might belong to an a3d surfaceview. hrm. public SurfaceHolder getSurfaceHolder() { - return surfaceView.getHolder(); + return surface.getSurfaceView().getHolder(); // return surfaceHolder; } /** Not official API, not guaranteed to work in the future. */ public SurfaceView getSurfaceView() { - return surfaceView; + return surface.getSurfaceView(); } @@ -755,6 +770,10 @@ public SurfaceView getSurfaceView() { // public PGraphics getGraphics(); // } + public void surfaceChanged() { + surfaceChanged = true; + } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -839,7 +858,6 @@ public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // g.setSize(w, h); } - @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); @@ -879,179 +897,6 @@ public boolean onKeyUp(int code, android.view.KeyEvent event) { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - public class SketchSurfaceViewGL extends GLSurfaceView { - PGraphicsOpenGL g3; - SurfaceHolder surfaceHolder; - - - @SuppressWarnings("deprecation") - public SketchSurfaceViewGL(Context context, int wide, int high, - Class clazz) { - super(context); - - // Check if the system supports OpenGL ES 2.0. - final ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); - final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); - final boolean supportsGLES2 = configurationInfo.reqGlEsVersion >= 0x20000; - - if (!supportsGLES2) { - throw new RuntimeException("OpenGL ES 2.0 is not supported by this device."); - } - - surfaceHolder = getHolder(); - // are these two needed? - surfaceHolder.addCallback(this); - surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_GPU); - - // The PGraphics object needs to be created here so the renderer is not - // null. This is required because PApplet.onResume events (which call - // this.onResume() and thus require a valid renderer) are triggered - // before surfaceChanged() is ever called. - - if (clazz.equals(PGraphics2D.class)) { // P2D - g3 = new PGraphics2D(); - } else if (clazz.equals(PGraphics3D.class)) { // P3D - g3 = new PGraphics3D(); - } else { // something that extends P2D, P3D, or PGraphicsOpenGL - try { - Constructor constructor = - clazz.getConstructor(); - g3 = constructor.newInstance(); - } catch (Exception exception) { - throw new RuntimeException( - "Error: Failed to initialize custom OpenGL renderer", - exception); - } - } - - //set it up - g3.setParent(PApplet.this); - g3.setPrimary(true); - // Set semi-arbitrary size; will be set properly when surfaceChanged() called - g3.setSize(wide, high); - - // Tells the default EGLContextFactory and EGLConfigChooser to create an GLES2 context. - setEGLContextClientVersion(2); - - int quality = sketchQuality(); - if (1 < quality) { - setEGLConfigChooser(((PGLES)g3.pgl).getConfigChooser(quality)); - } - - // The renderer can be set only once. - setRenderer(((PGLES)g3.pgl).getRenderer()); - setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); - - // assign this g to the PApplet - g = g3; - - setFocusable(true); - setFocusableInTouchMode(true); - requestFocus(); - } - - - public PGraphics getGraphics() { - return g3; - } - - - // part of SurfaceHolder.Callback - @Override - public void surfaceCreated(SurfaceHolder holder) { - super.surfaceCreated(holder); - if (DEBUG) { - System.out.println("surfaceCreated()"); - } - } - - - // part of SurfaceHolder.Callback - @Override - public void surfaceDestroyed(SurfaceHolder holder) { - super.surfaceDestroyed(holder); - if (DEBUG) { - System.out.println("surfaceDestroyed()"); - } - - /* - // TODO: Check how to make sure of calling g3.dispose() when this call to - // surfaceDestoryed corresponds to the sketch being shut down instead of just - // taken to the background. - - // For instance, something like this would be ok? - // The sketch is being stopped, so we dispose the resources. - if (!paused) { - g3.dispose(); - } - */ - } - - - @Override - public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { - super.surfaceChanged(holder, format, w, h); - - if (DEBUG) { - System.out.println("SketchSurfaceView3D.surfaceChanged() " + w + " " + h); - } - surfaceChanged = true; -// width = w; -// height = h; -// g.setSize(w, h); - - // No need to call g.setSize(width, height) b/c super.surfaceChanged() - // will trigger onSurfaceChanged in the renderer, which calls setSize(). - // -- apparently not true? (100110) - } - - - /** - * Inform the view that the window focus has changed. - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - surfaceWindowFocusChanged(hasFocus); -// super.onWindowFocusChanged(hasFocus); -// focused = hasFocus; -// if (focused) { -//// println("got focus"); -// focusGained(); -// } else { -//// println("lost focus"); -// focusLost(); -// } - } - - - @Override - public boolean onTouchEvent(MotionEvent event) { - return surfaceTouchEvent(event); - } - - - @Override - public boolean onKeyDown(int code, android.view.KeyEvent event) { - surfaceKeyDown(code, event); - return super.onKeyDown(code, event); - } - - - @Override - public boolean onKeyUp(int code, android.view.KeyEvent event) { - surfaceKeyUp(code, event); - return super.onKeyUp(code, event); - } - - - // don't think i want to call stop() from here, since it might be swapping renderers -// @Override -// protected void onDetachedFromWindow() { -// super.onDetachedFromWindow(); -// stop(); -// } - } // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -1809,9 +1654,6 @@ public PGraphics createGraphics(int iwidth, int iheight, String irenderer) { } catch (InstantiationException e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); - } catch (java.lang.InstantiationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -2075,8 +1917,8 @@ public void handleDraw() { " redraw=" + redraw); } if (surfaceChanged) { - int newWidth = surfaceView.getWidth(); - int newHeight = surfaceView.getHeight(); + int newWidth = surface.getSurfaceView().getWidth(); + int newHeight = surface.getSurfaceView().getHeight(); if (newWidth != width || newHeight != height) { width = newWidth; height = newHeight; @@ -3179,7 +3021,9 @@ public void link(String here) { */ public void link(String url, String frameTitle) { Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse(url)); - startActivity(viewIntent); + if (wrapper instanceof Fragment) { + ((Fragment)wrapper).startActivity(viewIntent); + } } @@ -8000,25 +7844,6 @@ public void updatePixels(int x1, int y1, int x2, int y2) { } - private void tellPDE(final String message) { - Log.i(activity.getComponentName().getPackageName(), "PROCESSING " + message); - } - - - @Override - public void onStart() { - tellPDE("onStart"); - super.onStart(); - } - - - @Override - public void onStop() { - tellPDE("onStop"); - super.onStop(); - } - - ////////////////////////////////////////////////////////////// // everything below this line is automatically generated. no touch. diff --git a/core/src/processing/core/PSurface.java b/core/src/processing/core/PSurface.java new file mode 100644 index 000000000..9131a8c0a --- /dev/null +++ b/core/src/processing/core/PSurface.java @@ -0,0 +1,16 @@ +package processing.core; + +import android.app.Activity; +import android.view.SurfaceView; +import android.view.View; + +public interface PSurface { + + public Activity getActivity(); + + public View getRootView(); + + public void setRootView(View view); + + public SurfaceView getSurfaceView(); +} diff --git a/core/src/processing/opengl/PSurfaceGL.java b/core/src/processing/opengl/PSurfaceGL.java new file mode 100644 index 000000000..56627b14c --- /dev/null +++ b/core/src/processing/opengl/PSurfaceGL.java @@ -0,0 +1,227 @@ +package processing.opengl; + +import java.lang.reflect.Constructor; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ConfigurationInfo; +import android.opengl.GLSurfaceView; +import android.view.MotionEvent; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import processing.core.PApplet; +import processing.core.PConstants; +import processing.core.PGraphics; +import processing.core.PSurface; + +public class PSurfaceGL implements PSurface, PConstants { + + private PApplet sketch; + private Activity activity; + private View view; + private SketchSurfaceViewGL surface; + + public PSurfaceGL(PApplet sketch, Activity activity, Class rendererClass, int sw, int sh) { + this.sketch = sketch; + this.activity = activity; + surface = new SketchSurfaceViewGL(activity, sw, sh, + (Class)rendererClass); + } + + @Override + public Activity getActivity() { + return activity; + } + + @Override + public View getRootView() { + return view; + } + + @Override + public void setRootView(View view) { + this.view = view; + } + + @Override + public SurfaceView getSurfaceView() { + return surface; + } + + public class SketchSurfaceViewGL extends GLSurfaceView { + PGraphicsOpenGL g3; + SurfaceHolder surfaceHolder; + + + @SuppressWarnings("deprecation") + public SketchSurfaceViewGL(Context context, int wide, int high, + Class clazz) { + super(context); + + // Check if the system supports OpenGL ES 2.0. + final ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); + final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); + final boolean supportsGLES2 = configurationInfo.reqGlEsVersion >= 0x20000; + + if (!supportsGLES2) { + throw new RuntimeException("OpenGL ES 2.0 is not supported by this device."); + } + + surfaceHolder = getHolder(); + // are these two needed? + surfaceHolder.addCallback(this); + surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_GPU); + + // The PGraphics object needs to be created here so the renderer is not + // null. This is required because PApplet.onResume events (which call + // this.onResume() and thus require a valid renderer) are triggered + // before surfaceChanged() is ever called. + + if (clazz.equals(PGraphics2D.class)) { // P2D + g3 = new PGraphics2D(); + } else if (clazz.equals(PGraphics3D.class)) { // P3D + g3 = new PGraphics3D(); + } else { // something that extends P2D, P3D, or PGraphicsOpenGL + try { + Constructor constructor = + clazz.getConstructor(); + g3 = constructor.newInstance(); + } catch (Exception exception) { + throw new RuntimeException( + "Error: Failed to initialize custom OpenGL renderer", + exception); + } + } + + //set it up + g3.setParent(sketch); + g3.setPrimary(true); + // Set semi-arbitrary size; will be set properly when surfaceChanged() called + g3.setSize(wide, high); + + // Tells the default EGLContextFactory and EGLConfigChooser to create an GLES2 context. + setEGLContextClientVersion(2); + + int quality = sketch.sketchQuality(); + if (1 < quality) { + setEGLConfigChooser(((PGLES)g3.pgl).getConfigChooser(quality)); + } + + // The renderer can be set only once. + setRenderer(((PGLES)g3.pgl).getRenderer()); + setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); + + // assign this g to the PApplet + sketch.g = g3; + + setFocusable(true); + setFocusableInTouchMode(true); + requestFocus(); + } + + + public PGraphics getGraphics() { + return g3; + } + + + // part of SurfaceHolder.Callback + @Override + public void surfaceCreated(SurfaceHolder holder) { + super.surfaceCreated(holder); + if (PApplet.DEBUG) { + System.out.println("surfaceCreated()"); + } + } + + + // part of SurfaceHolder.Callback + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + super.surfaceDestroyed(holder); + if (PApplet.DEBUG) { + System.out.println("surfaceDestroyed()"); + } + + /* + // TODO: Check how to make sure of calling g3.dispose() when this call to + // surfaceDestoryed corresponds to the sketch being shut down instead of just + // taken to the background. + + // For instance, something like this would be ok? + // The sketch is being stopped, so we dispose the resources. + if (!paused) { + g3.dispose(); + } + */ + } + + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { + super.surfaceChanged(holder, format, w, h); + + if (PApplet.DEBUG) { + System.out.println("SketchSurfaceView3D.surfaceChanged() " + w + " " + h); + } + sketch.surfaceChanged(); +// width = w; +// height = h; +// g.setSize(w, h); + + // No need to call g.setSize(width, height) b/c super.surfaceChanged() + // will trigger onSurfaceChanged in the renderer, which calls setSize(). + // -- apparently not true? (100110) + } + + + /** + * Inform the view that the window focus has changed. + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + sketch.surfaceWindowFocusChanged(hasFocus); +// super.onWindowFocusChanged(hasFocus); +// focused = hasFocus; +// if (focused) { +//// println("got focus"); +// focusGained(); +// } else { +//// println("lost focus"); +// focusLost(); +// } + } + + + @Override + public boolean onTouchEvent(MotionEvent event) { + return sketch.surfaceTouchEvent(event); + } + + + @Override + public boolean onKeyDown(int code, android.view.KeyEvent event) { + sketch.surfaceKeyDown(code, event); + return super.onKeyDown(code, event); + } + + + @Override + public boolean onKeyUp(int code, android.view.KeyEvent event) { + sketch.surfaceKeyUp(code, event); + return super.onKeyUp(code, event); + } + + + // don't think i want to call stop() from here, since it might be swapping renderers +// @Override +// protected void onDetachedFromWindow() { +// super.onDetachedFromWindow(); +// stop(); +// } + } +} diff --git a/mode/.gitignore b/mode/.gitignore index 7e0d4cfbd..ec01614d8 100644 --- a/mode/.gitignore +++ b/mode/.gitignore @@ -1 +1,2 @@ AndroidMode.jar +/cardboard.jar diff --git a/src/processing/mode/android/AndroidBuild.java b/src/processing/mode/android/AndroidBuild.java index 073f158b8..be6c023cb 100644 --- a/src/processing/mode/android/AndroidBuild.java +++ b/src/processing/mode/android/AndroidBuild.java @@ -150,14 +150,11 @@ public File createProject() throws IOException, SketchException { // build the preproc and get to work AndroidPreprocessor preproc = new AndroidPreprocessor(sketch, getPackageName()); -// if (!preproc.parseSketchSize()) { -// String[] sizeInfo = PdePreprocessor.parseSketchSize(sketch.getMainProgram()); -// if (sizeInfo == null) { -// throw new SketchException("Could not parse the size() command."); -// } // On Android, this init will throw a SketchException if there's a problem with size() preproc.initSketchSize(sketch.getMainProgram()); - preproc.initSketchSmooth(sketch.getMainProgram()); + preproc.initSketchSmooth(sketch.getMainProgram()); + String kind = preproc.initSketchKind(sketch.getMainProgram()); + sketchClassName = preprocess(srcFolder, manifest.getPackageName(), preproc, false); if (sketchClassName != null) { File tempManifest = new File(tmpFolder, "AndroidManifest.xml"); @@ -171,7 +168,9 @@ public File createProject() throws IOException, SketchException { final File resFolder = new File(tmpFolder, "res"); writeRes(resFolder, sketchClassName); - writeMainActivity(srcFolder); + + + writeMainActivity(srcFolder, kind); // new location for SDK Tools 17: /opt/android/tools/proguard/proguard-android.txt @@ -865,7 +864,16 @@ private File mkdirs(final File parent, final String name) throws SketchException } - private void writeMainActivity(final File srcDirectory) { + private void writeMainActivity(final File srcDirectory, final String sketchKind) { + if (sketchKind == null || sketchKind.equals("FRAGMENT")) { + writeFragmentActivity(srcDirectory); + } else if (sketchKind.equals("STEREO")) { + writeStereoActivity(srcDirectory); + } + } + + + private void writeFragmentActivity(final File srcDirectory) { File mainActivityFile = new File(new File(srcDirectory, manifest.getPackageName().replace(".", "/")), "MainActivity.java"); final PrintWriter writer = PApplet.createWriter(mainActivityFile); @@ -876,10 +884,11 @@ private void writeMainActivity(final File srcDirectory) { writer.println("import android.view.WindowManager;"); writer.println("import android.widget.FrameLayout;"); writer.println("import android.view.ViewGroup.LayoutParams;"); - writer.println("import android.app.FragmentTransaction;"); + writer.println("import android.app.FragmentTransaction;"); + writer.println("import processing.app.PFragment;"); writer.println("import processing.core.PApplet;"); writer.println("public class MainActivity extends Activity {"); - writer.println(" PApplet fragment;"); + writer.println(" PFragment fragment;"); writer.println(" private static final String MAIN_FRAGMENT_TAG = \"main_fragment\";"); writer.println(" int viewId = 0x1000;"); writer.println(" @Override"); @@ -895,13 +904,15 @@ private void writeMainActivity(final File srcDirectory) { writer.println(" frame.setId(viewId);"); writer.println(" setContentView(frame, new LayoutParams(LayoutParams.MATCH_PARENT, " + "LayoutParams.MATCH_PARENT));"); + writer.println(" PApplet sketch = new " + sketchClassName + "();"); writer.println(" if (savedInstanceState == null) {"); - writer.println(" fragment = new " + sketchClassName + "();"); + writer.println(" fragment = new PFragment(sketch);"); writer.println(" FragmentTransaction ft = getFragmentManager().beginTransaction();"); writer.println(" ft.add(frame.getId(), fragment, MAIN_FRAGMENT_TAG).commit();"); writer.println(" } else {"); - writer.println(" fragment = (PApplet) getFragmentManager().findFragmentByTag(MAIN_FRAGMENT_TAG);"); - writer.println(" }"); + writer.println(" fragment = (PFragment) getFragmentManager().findFragmentByTag(MAIN_FRAGMENT_TAG);"); + writer.println(" fragment.setSketch(sketch);"); + writer.println(" }"); writer.println(" }"); writer.println(" @Override"); writer.println(" public void onBackPressed() {"); @@ -910,9 +921,14 @@ private void writeMainActivity(final File srcDirectory) { writer.println(" }"); writer.println("}"); writer.flush(); - writer.close(); + writer.close(); } - + + + private void writeStereoActivity(final File srcDirectory) { + + } + private void writeResLayoutMainActivity(final File file) { final PrintWriter writer = PApplet.createWriter(file); diff --git a/src/processing/mode/android/AndroidPreprocessor.java b/src/processing/mode/android/AndroidPreprocessor.java index aa9519a58..9611d66bd 100644 --- a/src/processing/mode/android/AndroidPreprocessor.java +++ b/src/processing/mode/android/AndroidPreprocessor.java @@ -42,10 +42,16 @@ public class AndroidPreprocessor extends PdePreprocessor { protected String smoothStatement; protected String sketchQuality; + protected String kindStatement; + protected String sketchKind; + public static final String SMOOTH_REGEX = "(?:^|\\s|;)smooth\\s*\\(\\s*([^\\s,]+)\\s*\\)\\s*\\;"; + public static final String KIND_REGEX = + "(?:^|\\s|;)kind\\s*\\(\\s*([^\\s,]+)\\s*\\)\\s*\\;"; + public AndroidPreprocessor(final Sketch sketch, final String packageName) throws IOException { super(sketch.getName()); @@ -73,9 +79,9 @@ public SurfaceInfo initSketchSize(String code) throws SketchException { public String[] initSketchSmooth(String code) throws SketchException { String[] info = parseSketchSmooth(code, true); if (info == null) { - System.err.println("More about the size() command on Android can be"); + System.err.println("More about the smooth() command on Android can be"); System.err.println("found here: http://wiki.processing.org/w/Android"); - throw new SketchException("Could not parse the size() command."); + throw new SketchException("Could not parse the smooth() command."); } smoothStatement = info[0]; sketchQuality = info[1]; @@ -111,6 +117,29 @@ static public String[] parseSketchSmooth(String code, boolean fussy) { } + public String initSketchKind(String code) throws SketchException { + String[] info = parseSketchKind(code, true); + if (info == null) { + System.err.println("More about the kind() command on Android can be"); + System.err.println("found here: http://wiki.processing.org/w/Android"); + throw new SketchException("Could not parse the kind() command."); + } + kindStatement = info[0]; + sketchKind = info[1]; + return sketchKind; + } + + + static public String[] parseSketchKind(String code, boolean fussy) { + String[] matches = PApplet.match(scrubComments(code), KIND_REGEX); + + if (matches != null) { + return matches; + } + return new String[] { null, null }; // not an error, just empty + } + + /* protected boolean parseSketchSize() { // This matches against any uses of the size() function, whether numbers