From 76669835baf64b30bbf6a7b2c1853a80a7e34bae Mon Sep 17 00:00:00 2001 From: Sharad Vikram Date: Wed, 25 May 2022 16:01:16 -0700 Subject: [PATCH] Add an option to create a perfetto link in the JAX profiler --- CHANGELOG.md | 3 ++ docs/_static/perfetto.png | Bin 0 -> 98811 bytes docs/profiling.md | 41 ++++++++++++++++++ jax/_src/profiler.py | 88 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 docs/_static/perfetto.png diff --git a/CHANGELOG.md b/CHANGELOG.md index fc137bde6..f097bff61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,9 @@ PLEASE REMEMBER TO CHANGE THE '..main' WITH AN ACTUAL TAG in GITHUB LINK. * {func}`jax.numpy.ldexp` no longer silently promotes all inputs to float64, instead it promotes to float32 for integer inputs of size int32 or smaller ({jax-issue}`#10921`). + * Add a `create_perfetto_link` option to {func}`jax.profiler.start_trace` and + {func}`jax.profiler.start_trace`. When used, the profiler will generate a + link to the Perfetto UI to view the trace. ## jaxlib 0.3.11 (Unreleased) * [GitHub commits](https://github.com/google/jax/compare/jaxlib-v0.3.10...main). diff --git a/docs/_static/perfetto.png b/docs/_static/perfetto.png new file mode 100644 index 0000000000000000000000000000000000000000..0df1b6ebeda5c2d39b8d218b42b454f644a46894 GIT binary patch literal 98811 zcmdSBWmuI>*fxqu2m%VyEg`9dNb6EUx;sQV7u})KAk6~l?viehmhSFm(H)Bg?BVf! zzvKJAkNsoc2kOm=xo57Kx#B#}F+f&Y6bpkG0|f;I>$BJ=c@&g~jVLJh%h2wFSCab` zn!rB~Y$2Z&(a_LlmSh&euS9mjs&)!cLpw)Z8v_(0OQ?kbi>;oGfq|v1G1PAVL6aZ~ z3MIFs6H&J+&$cF3 zcY*_XCI*3Kd3%Szzj&1dzuD_((1^Aen_HlGLPFJ5sYx5Zzp=CwZYVnKsFDs_NSq_e z^Bg6-KbWm0&i@6D1A2yn;=(;WeDA+Ily4Q!)p=1+z6pk;F?@gjeuPtM1W#BF&j9WZ z-dArcW$r1(Y<-QHJ_1*buCV*`g(ZylK8hW|_xF@|7?19M&wK#dc}?IL9hn8yO2`?3 zm#Y^_XP22Pe!;4xv)4Bd7>=p5pJ0truEh4}4Ju-af#OILmnBS%8zF*% zvbp>4K4@?dZbuyKt4k>1_aJ&ScQge5*`@4veqYnG>;#5g^axVPD5N}@gjNIm_f@G; z3;uv1mSx_*mO)H{99x-R7=h6so`3)&47$;sA#ydoZ z*<9C$<4~te{z7q<{N{F=(J~PF*t}sim?`sK%E0r0Pt@UmhvmSy?F33xCFP<-(o5_p zzYvjqCL=hHaS^cQL&tT6;nOd&7x%u?@ z6_uL|N{anol6xpA&=rsM1C_(M0Mq^Y5OpK@dik6q_Fj@i|F;2}m^Ec9;W#Z11qP-c zqq8eNhXih$lWPbuWOt1B+6Vgw6LC_`9$={{4^95kQH_dokjj*=Vsbj3<91v(V-uo( zb`4Vxjb*QD)Sj2h_pZ zH;QF3>5SbvOB-qWvsrLN6TO&P^Vp%S^39pmR{emUxRPNaEcrF7NBgi33rk^s{;k8D zuTIsD`2^jsj|_N?C$kIjadFxnyK_A%BVe{wUs{@*noh*Ol%=iE~_9IyCEva5xG z((qJjGxy`*KP8f9JXV~c&$0&kV^ z$l$cM6TYvrxtif2khhxqQYK8+c*nZCyJu%- zx3)|x)LC8xX=!PFgh2QO1YFtq!7eDGeHNg|2+K_WMm`oYTH--yVdY6v_)<{A-ho>( z0U9Q5LE(9$AiiUR80<)u`k6k@l}GbxOf%0J+icGu|H#*Oy4K}7Vrwfd--JjsgqF^H z=AbPd+kB>>DfNTyjc<9^NUIl4go^5<&ptYeJ0bU8f;CT1sY;P%S5ME1M3lI}=l?EQ zSy@R*OyOA9k$0d|N=x*+zwIaoZF>_ryznFPUO6ge!9G<=o3TSP7`7U!w6UAcjZlMhM?>TPWQ>FAo}(w!^P03Fr4)!8d*?I zlpv|_kHj(D7!QB=`}>=WWc4NTIZl_GJV1SlhxYLD@)Gn7zVyyjQrr|#v0a^UA0;K! z48DPlV6+v2UdrAR!bYX?{@rGjFD-BAQW@Myq0Qyoq6!h4uGm(aa`v7SIJRGn3Fm$V z88vzOiS~f5*G{}9xdN_#0w>}|qe@L}_9h)+%VuC?kX>J2SJ%?ga4P$oFhceASwLBt zo|-c)m3Nj2#J^}Pzlw}($Lqd9`TMYB&$6P%MpzsfT?%|LHTK4Bh%MdIkoxG29_U936dq!A#{&wsw*vovoweex6udT%67E z6Em~zIGA|q`^B9dJj!E7N88=Jb5scKFeL%DRT{Xd058Z2!5jgu6vr*X8 z!AabgnjWxUc$s{2krT8&fH)V@aXJXtV5QX}B7R=uc32;<(t)hC-`MkBI5)oz$S+%O zn3$+P=RLoe=;IT-xRBT@39Z_=6}UZVvpz&p1ZA$_Q+S-Thp%K;XSe!^++57vR(Hzq zmu>}!Dj#lZRU>gxQR|eW4Gq_DAZ=fVMnZ+kjhoF~`S?6cKAT)R3YpK=7gLPyG&j*k;UY!iN@ZJ&$5<+?IpuvLzT{&%WfR3 z`++Cv8o_m1Sv)h6$^K{7*fU?HaOt^?6=SFjn%uV3(BbCC^J0&q@ZN$QXyffG`ro3rAE2z@}B>hn>*dGPj;=XyDfDV9bU_?sIYJT@co=E@pdZCu@Sk~xj$|} z>5WGa<9^xaqQV`s7PO&LZ+D4o??Dph=b5b@`6@@-U<+O@79Q$}YSqLw?w@~r!veqf@cR!pm7G zDS=TF^G9e)OKlq(`28@+|Hf3;)FQ5~mJP*0Bot)1MuQ~lD{ti-Wu7YV%dvz<{mNPY z0zJR%yj|k!eoDcUYmD4>XvU;2`0^-ev@l`BHw;bO)n|8fcB-*)-a9O?n{m(N%ePyF zP(driPWu?!O%TQNQ>W!ACY2FEjpKfWP=SLp*W}G6WJOGJPj|oT${ZIeHW{>5;Jm|e zn|q$ae)uH!IW`5K{lTD|P4-5TNAJwY@e+M<(=WSix=hdtHqzSZnmbwW@^7Ait0x;% zF*8f?h2?d}@4-c2IC`zm*Ou2JUfd?`@Xhd&mCg_l50@t9-IAM(&)RZr`OZmIZ|96; z1aAI>2wbfl`S$N{qijN0u1)jCOdb575JWF{wbDKeZEmkv$QskbwuHuvIj3qa z*YNR8D>}wIIwm^#7#QAL@!hyMfAsjEYcCb7oL?3x{_)2H_j+h>u6tQdb$J25gKBT^ z&g^o;@ZaVKb90(RzONYS)imYDM`xK|1n~>-BYYljhjQkRz)Nk9C3?EYOe^Z*%~lt` zS2H~ZZtlaDlggWI6;1bzcICG|bgW95CWux?ohO(F8xjt5g#E2a;@**6I&-k3s1Q3= z`vfjM460QdapH5kn;oM2-xtf+CWw18tyeE{3wG*Vvn1U%u4PV(J8o8k_C2Pn+mYL4 zySqDCGOmol+-OP^yV~u41O9)DtW$a=bU+(!>mu z?58U*A!x}0&mi*hBd-DjN%;rcrveP7GMH5Gu>ucnbVHs#mFnx8s&U?6eHl!Q%Y=u4 zM#bEtDK1@7RTV@^nyPHZUbG-K@b@P%drp2O0SZdNJztEb{9pD--%1+NrO>2KomdjM z&2~1!ks~ef?J*Gwm|Kd!9cOV@Kk#w|Z3Y@VN%O_*uJ)kWJsZma?oCNiS*I!7LX!vH zt%Qo|Dzv~S-IblC1D$Yh2=_u2f4Ll)-5=|8+oOU`^`PadLhph4>l9B_t%mxP-+!Hk zU{Rb9u}>-m?ZlhBZNqX82uwWQbF)#4(aUr!<4xKmGkRB#RHcfHXS1byQ zQj+B`XPTLw5xvE4R={n32N7cR9Wz~E7CfQe4dNdhtPgtcAvh07eNTzwt0dwW^(3+nctO=^;h z&r|%ZR0s&5Yy!9-Q2#qN1Xu zrHze^O-f2CDssfMRaa4o2@h``gXfLa)YOKM2;?0Y%2|3ekCmIr=Z?}h0_U67!8^Ga$2M1JH*T0{g0;FgRuAt3n| zDlvc>WiLG1THoq^{Zl@-w5)E0SREwen=HNJWMuNOan|J>FlujqQ&m63=M6p+?9f?0 zJ&beJ!ttFc$HD4;UFFgUi=%Wq@361RR=;3`6K~Frj%7#)7?tvbo>E*P^C>Wb0&fFH zn&%e=HiBg4Ig0l8x24cn(nHsRirl;!>hXwby}^#Z1>Qq%Ke`m!^>VyN(Ho@1Qr1pQ7(uYg)Xia(hSF6!ZRuk?pNj z3bzws16Y9W1AOnB_(cNe1n<1vVZB_*48GA2TM*)21^Dknx?-4 z1I0NxIayhTJCh~yCIpUcpI?5ZfU;3Qi|dgsy#?kv6l{Ab?7HUls^$nx6=z`sk@aAz z2Q->mS`2~1rWNh9g<9z!s=Kw1CB+@ZYW=+X+#|&6X&fi^~}@p7+>)?nNaT z{0glh-a;o^%~09FK{|AUKGw&RIzZ0j;UO5SHWk=GXGAX=m}Y9aUEd(7bC?8+oMGc^>)Rdo zseq&o)~rbj2d3@p?&O)7YN_u!Jp^@ks4g#;1NsT;`qS*~rCo0Oad~X05X8T&3p#im z|9GzH^YW@FTIw$HrGjUqomw5OY~FNgre1rpyBM@~*|ZEekA z*!zpmaj!R)L-Z%%($dlgv?T-yDDtF}_`3$MN8gCU7`X&mo#fXaJ3pXm8y^>W`OMkX z*>G)jOB4i8Ryr+E0aAMp;+$e&ElA)gM-K6xcSYcGZ$1=mD}uWf7>3Vjfp=>Gec+WRLt&ul_>pExa5 zMkYzDx|$0OQ)m0s)I?{GliX?w8su;Aj^>JRLwL$ZW-_jCsZT?R8DZizHy!;(p?Fjv zn9<85_SJ`LsVT9S|K2+lVw#F~v@r8kjzOmCCpCH;ygWzB(n9>+QB&&+@n3#nH zZ#_QPtJ_~Tcj^Lb2nt+WE{|^&erOceo_=e*rYjG_X&Jca6?k1BiDt1eaJx`(!|!5q z)-aOfvh&^Z=1M?|JK_E-M%J$CBrf|S?^BX0{kXXMpLB!`Dn!z;o}ioV52ts^^d)k+ zx0m|dUavA;+oZ}?n;-HQD#tr@wCzwf3{_;TkU1$iolF)zeVC%48a)QLBjYP>HVD<6 zpNwTvp?%inzw{AALJ9F6@gkTRCvmDQB}}~a%I7fhSwMT5oOLV6m{@6b${jQ1N-*3r{j&j0@kVxAguV=RDDd1pY}KF9N-8Q!O2Q{6 zCprJ(`-LX%tTGB-F4sYYZmm|Zb&$2rq9TS47E*<6;~nF`$?EADF$vfp6%CZ|RTQ#E zw5si#PjV&+l!d~b*7=2Tjp#SZe{Q$8XBM&vI2@g_d#knB8bqJ$9hY1L!r}_AVRt6U^?j5=_nj^k6SfEF_)da z>|!(==jcW>*%Ns~f?c3_^rxFvvnzhzy9$E^zsWK=eH}*%%qn|=5t0QBo|jzRb_vB!2lB%)>BYYs;K{i?Ib)`?aDW3iKB!O+ zE>YTt0JjA*X!kptt5u8`Gr=O?T;V%cuSLX~FdLR$^()1oppX_SOUOluy)3n(1c}R> zSo+W+YiC_#O{DE+ejiU>0h|0d!Pxq*>O2nk>`>rQ8u-buWzjxH2VjECf?l?@9kY^wL)spj;qn#qdca zat6-mPpKVmqH=!wr7WdZ1TTBLXzU-NS+D*k5|sDJ&3(?oa#8OoQ%vHrOajvw0!!^Q z!RT1Nszn>90l3z82yXX_^r@3pIPcpR`A=E)kyqf^pFtlnDDKj?-P&tyQE>C$eHbq! z*@vX}zu#&xlgB>V4u;WCbUf%ecr{#DQG zQ!K3Lr(jM1)EkO}KsageKK{nq#*Qf=$0>}<=gKF63M>ek5=G)*OJc&f+($SQK+N$;{>jX{)ABr8eMswfjbr9l3M@8i*<}EIM z@j413U=tA$5r6sYx@Bu?3jl}r9y}&gl$MghLPN8%u^DDlWWeL$;gOS*dklllRxj=B z?7-oQfGR9ChpCFNU|Nvx!ytjF2T6fTX(;0c+dQWOmK3NP^Y@7G@4U0q$c zxVV*-l?b1TiVBc!dp*Wt&q+v1+S}gVUS3YqnVg+X2oHZ_w<+t@JvB82($x8R#{@kC z!gb{3ak@w_dyd=jx|FZ({Ra=Qx(AYlguo}mH$&=*nHU*CrxEA-P+1<(E+^;c{JeJ4 z@5aW)-@mQ?hEY9+73(zZfoQ+Jo~4r`pIfBe05TdgSspev8S3y01cEp!eQJ{+ZHiD) zr0h-3Ps4N_e?wb>wQ%OuiFUoAR~!OO0Q>F<0{?E;XRNv!V zniI0e&NMmEa`>S5jYzyIm& z#uFamw2~l65hctwwdackE0H8PjwH3*C8ASNAOSaaDUY z`}t^Z_rt!&eZDw94808XIzV4G>&)V@z*4@dRxoxO{(CM!Odt4|b{0y7j|{iwVD}d^xi71hcL2O1YOqEYI&l>-V%sx z*G(h4jo+@DKZy(eV8BUYTluK3BZWOKm}h3V^}hkTyKRYC()&H0$W80PMLgb%AY8Gz z;k8)l?pUK^vR%OSve`orMZ&svn}m3kYb09CGD{DMYiPd3!qlR78?`J-ZR%RKCyVw% zEIyRIVfa+`CL6T=feJhUHe`;8Q3q8~5N!5!G`fExA4wm=rFL_zlKiZ}PEJU8RE9WQ z00OOYzdG}ILZHqYXc-kBuc4x1#4r6`$7c0!c6_C(-(eSu^<4C{d_;yQ&(u14y zed+**vj#+`#r@;e+1rSjbaqwVz`Yg=b@0THuB$l2Gg1r0WANu2x!^RVy?0}1(@WR@ zCf45Dy<_^!MON#W@>S3)$5s<&&QU=Wimw#k(xsBWYm0s>YNHQC-mdl+Pt94Wey{UB z%mWhdp>CrEpoKy|+9`&i_$;GUc%aqruyW@F+NqOX(Gz*oJ-&z0A{RJP%J~#iB z*kX~={8qc#Dm5qPZ-2k#(P|e`7LJ95MK7Hoo2&TI7ZbkF)I|GZ7j5qad*sGn;0=mL z;L9s3ml5UV<-NU<8X7aN6teu=m&q~96eQm&LjGn-#DJP+qd$=;T0v_Vj?ZA-z*r+5oH-KbXoDpV2OB}quIg}n89DH+g z1B#aQV%%JsS^SgErZ?mSs3`-ljfcm^#>6vintwdHI^S1ezd3UawUXnuYkxlr7IcAkxLtH>JDvv&08$qUU|yIkO_Zy)R(t@R8I4QXp@gNg_f z8@o#O_wM+xvA&d)6ktQxVb#-EH85$jVS=q(yZ4x4)8t6hJKoR)(_&6qfMsX2>*HFCVH(wc_Zo2-A zx08|z_VYufYHMvxudIxgAsa~KQ&Cmj+}h%GKGNU5l{43Jb8|B=FmQ3H{QzdZ#N!s9 z9$c?peWnhVjAd^}>U1aRBdK_Kd8HG1VK`~Z`4$!ymq!5pprD{gmCd!#$V|fn`4*;83&#Qu- zz~Nn|6Nd%2B-6v#Im-Ekg@t3c^_;}Pij1en$9(PxP90SR1>2p;H_-+wD=Y5q?sWpQ ztY2+3(5S>ShpSa)5hQtC*w%;>_^Vg1SOnHE315H10kJt<$2bv{V#R_JZGQE86xfE` z4m&!}o78TNy5C%=nOj;$_pCk6ev3HW7Ddw~6v-X|)No^cpBJ{gXf@NO%=};2f#~yX zq|)O}La(!eA>+2MZ-nKj!^H}fZ6(G`?d9Z#B4{Q0fiZP-7J}$bP2CZs*ESXEeXo0) zy-?Mn6ZxIlldUtevig$*>Z+@6mr?%wuNI)XzMh|xvmEuSC0pbS7_sC2Jj=6yyFDyC z`$=0#NvWu)$W8b2=YYt_k)K2yPbmb=D^R&tLP7w2Ha$HJu$I|b&1>NYk1;3foy$Po zsi{e-V|h(M{iY%q!-txSONlk6v$NCH)%AGI#Ka_$UZx)~kK5- zWB6eBq~+xW3O&Syl$MqP(o9oR6Wkz?NEe3Xv)7kWoHZ=oI52VhgT)VVS=o}YEy<~6 zH@?%uxUky3RRu3oq{24;#jl^5O|!tjBeS!;uYcZ*@s3}{R+a~^p80_Vz^nf^EF{v^qQNSk+di4q;80dl#eJGK3;kfevohT`KKXv9=WQ_l_e!So;PlGcI9I?N~RH) zDj3EU>V?XDCc_yZQM-Qn+0*m3t?d)ojoX)F++S=++P@xxoi4!7Us_g%#h5JM>M;3R z*Dau~&J_&W&~QEKl|rq+cnJG^N4`q&Q*!>v6wT}ru+UkwYB?Dg7?_xX*s5-@!+%YS zRH&2T;=a*s@dnA@k!+GBQ(Fb z7%DCv2uUS;^YzpD<7qiM?!nbctFW0xYf=$oX)>cUg78)9A%>@<`@YT^VF#u;TYD@6Kb^)>L%aN;3 zJuZT9rHtxpNj314X$-+4z$dq|C32Z58yXryAT2vnWtZ{mg~_oSf6>9GCcC;mGr|xT z7a18D2SLlr%YlJ`ArwO70ItNr8Pp4pA8^u$i;pKECI+0iyPMnA_Vy`(R*g;j#Kgqh zTp}9)_mhERgfXc+C4KkW^=yY6YmT2zW@Zkowv3EV=|iAuij{nUhxZ9hjsY(uBm_Ki zVxlS~C56DR7GBfy~a$wSTpK|NcGj8f>OH zg$Wd|_xvwRWnW09KARz*4Ws&o{HQWbG-%$Hxbm z`f@a=ceNVboR`}IGBYzl{6SO=sPUXtDtE)gGe1#-jl|qzW26C4|I3)2xjM&=pG1IJ zXJ%o6b?FN<+%tSVFA^+b3rYhX+jT`1mAcy6Qs$Y_(U&lBGgDKHCr^y};xctEL0C1d z;ALgC9LbUb%bpTP^(&3K-qA-8a;c~?s;l3Dh5!1sY#~sPfWW+FQzM<7UsSZWOF>Q5 zHaFK$T|L>}E=(PMKtb(Dg5Ua@&tZp9(9MYr;TwmfTi@8Yy1F_(re}hQvpV_e-jxBk zxXn$gC-4zqDH_p`)jg-3rNzFX;UN)EkQHMI%b}yAgPftTprE|0Y?qYWqv>@&LUQtctlKi+*3h5R9iS$I zqN=vGwz|3+%sDD5>M^#U7+LDR9&}*K%Ti?X7?ZfBuC7jzajw?h?8_HQPw62r5=tEN zx!N({GCDi63EbJ#d3_3Q9|^f5?DX|Bva>h*acRzWXXsx9WlJY^H)ZHFdDJ=VE?a&s zoyOvx6cH5_rJzW*n5pF9%xojyZ2S|DvMHJA|2_ZPxSjqyObh)=Nb7j7*ID8T^o8SR9Mqe4v$XrIR}OPBT35b6I*E$W`7-qd#ib4;d>~Xs2Ki!Dqf})bg3b#0@kr07F1RaKzzKtW`Jel>3PqZiTtNPrH5D5q{=f_;s|y$0SCfj+3-Z z)zgbpht1+GUF>W$h7!zrsgHBS(|?$HM8M*wFI@7=E3HZ?c=V0Q2q0R@WWxE_ zRPBFP-JUe+!=&=JU$^INgWTF0wmjkg{YZ&HM)+Io68 zbUTZw!#BZ<0H9G&Md9{`5&%6bblh!NF74Fim$Pr(C#I$Xm~=|5=4XnVo;~MU-LTgo zlbm!}9`HWYTjBf7oziN#7R)T6`j(lK&^`3OIZ)2`YF%}^ojG)UcizLdV z-bMWzE&&=Yfd^AGcZ2xGwf$x5Z|P1M+l{Rq(!c%5Ix%wuH^X?*!r*MdOK$)mK_{;H z^``M4VoQC?3A1jEMo|6P17u6fa)kW#M1LZe7tWFAtxJAxZmjMvpo*DqG-GSx)V-wu z2)cFXfQ}?1Gh<)~>8wk_?KzU8?);|lW1C%KV(4MvQ%@qTqADmOh@77_$~LJrG#RQglPR~~cqt&0Mpp@Do>2RNSXLR72W zW1Kf7eswb|*tdN>Jqr0_If}&GDk|qQ`?C?~DU8II4#n6ZZ7%e~T6kaLZzOy?C_H0;PUM`R``|2m$ba1r&7%C=* z*ZR8+FI=n~zEJ_aG3v|Z*gyk`k5g-H@pOG-RGPnZHU~&RjFpo^hAPU@YH_4S0CMCv zK>p|g@4xj~Aek*M3i%toTc_vO?pC|5)u`W5-nGq*>{tWRuZ|8nk8qLvxkRhQ#+vgy z#Vzk^PvhW-+7Tl*{@*rmm4)j+j{HaIbKd9JW~P?wMQNVfFw zel5_7OarEOx*>7UzSQ=pyPF9wP-I2eU=2U8LnJcjzi#~bQJdnrkqkw4E(|!ncM{q& z0h+oe8w0p##t{FevJ&EZN<_<=VDYrWA zhP$7$X}RejDk}G>|90ETI8x0pMKkB5iko=EEz$c~kX>#=rU>j%$a%38(9++nQ*W9OokM`s05fMbd~J zc4;l+b^n33=V?1zWAka|f6D+RdUQ(HrWS~5dy6NEZkHpm0euVzYFP$Bl;2~3ox*Em&N=47k4;!a&gd{pcq5_ zsYa+5D!~GXy^uc0*|e)Cl3$<{E+?mx zG9!ELp%gr1Ref~V5X!f=l=lC+`~UYlG(Mzw+*?ULB44=X>;J}v@+Fuzg7+!$yTxW$ zPeKAIR`>bdEsgGNbCLhuSpsksh>6N~0{W3?12~tdb7^{SJEb#YGd&L1ae%14J)ph${!hb?`1tLNL%n&YjV9t?^=v&>?OLGG(1WM^Ya9*U zrE8<9m7p@$)YjV_^rE*WDfV=Geb>hMLF;SyL{Zc2(Cv%fKCc6Zj$D;e4X}D--g+&rdDsR2^2~|#HY9gx1nTwJ&1idaa5`Gp*w`_X7@+sMX6Oy|>}SUy+ZL`8K4jViN& z#&WX>jR4Vwux8wz7Yjx-;mE6GHXyH?Dce6cN^*&+`!be7CoIR2Ekh*89G8|eJzd*3 z;{a1pj4M<5=e>9fR%i+w7M$`@shYVA;_4vHN~Qm4XYf1j5`{Y=Q@pUUEK;!Cv__V)+J-9_XL)H!@M<0oM5-CG zoYKj>CVK@$+a9wyO@TnJ&eo)6WL2DA7P&IowbFEfxY~+S4@?6S+JrdsGt3+YVPKX+ zCOSrC{%=2(cU$Ps#CIOO8#;xBIRzL`ur9BjV;5eo_JD*=d3h-_%V1}+!4ddlq1)2T z)5Nl`Q)%(S?a-!k+@4awdF@aEWL0samWqPLM6)~Af9vPVW3z;bq2~FOk;lBTI$y%8!4Iy)) zsj}eA17QpwFRzsvg{V+NeK?FJ@-pBP#F3kufFOHAMJV?ca!=}s&wYs42VLBS*j!nL zo!yM}HU&k+G{wA&Y~55U5ZNfbzp4REO`2jZ8kKeudAFgGffARFlzm-&rc=3kB9Ga` z1RL`wx?@*(P4?xpxGWN4yj}M@W)-+jhmwxbH}u?|W7iVq7UtFc0`tF9zo%1VGqQB*jHdOkAp}MnU;|PJSqHMAV<5L} zM!=%O$A@9IMyV*8+D{LLeenp7&j;=%s4Sp-0>rnBRXkScU1Dsy_rX~>Q;hlO^l;s5 zdS*rrZ>-`_-(cfxpTN{iuQlc`(w+9%=g#?m3*(RE_%GgPkjlNu=VV+?^E*Ti4)TF% z2tS|3qvb82J}w?4!LgrSMgQ=f9pc}+;MiU&?0SCt0Zg~UOo(?=p=wL;`qs|Q$><6; zsQ2TVObeB_mv{8d%=FlsnOI*1g%C62VW8icU2j>`DuA@7bjESd{UjAOKcD0cr0rAS zoDIb@($PyNJKm1=DK+YFw1+>yGGFacp-`<+eEAF)(gOKN?rcSCkXH8mzd1=^Qd@bH zf0rm`VGAML_I8M%4QHjFs9&+ZnmU*nKbf)BvhtWI)oVWz)}?CZO|(>L`QGy?SM$CdLk~X9!n?`Wj#WDRDU=SgBKj! zPMZn#L(4*^(~^9tNdD#33iiy*)Y$l##dIwPJ$Lc(p`yw}R20nf1K6xGCCT3M3{_xRQ6+96G84J?Ua{;}L=nxzeK|&!+R4i-Y_D z0h?B%6P*3_B&fJ)V+DCpR(#Sr9{fH<9kzvwnaZaH{TbP}hc+q=K+AA zWF_4>1+QOzg~_SuinTGOm$roc-OaITX8bqi^3*3TWG2(INMNA;;-@JR02T%ppa`v3 zIxZ22EjC`)GjP0%@!Sc}YL>fcU> zUzq~(YHJZ~0nhK5V5RJ_s^WEu@)1U`pY-A{myvtTj;#!b{(70+vA0}^952)tM@8CPX~3mxVYeO zI6(i&flM-2AsaLLEjPDJ!aM7+Jf(c)LK}Pg-2?S!&!5*c-Q1G|0ALtkW&nqX1u8!= zTifGOgC6BV^$PPT_MkSy#e=2RS+5^I?(^~02?xC}(APKSBsN2P#m6@@G-M4Z3t$`Y zyy)Pt(7?!~q<(?lUlb8kWCAXnf`T3w2TRddpM~-Q12GDf>zodk5eNi8P0c3d04+38 ztfP{vh*ZdwuL17>P~X?r7f>4j?p&}P5CGIFXz6iZBYnE*tCvp~)(iDT!};PHxON!4 z-a>PMb-bA;`!z7SegxOUa;hOg<;Tj9tuB%ITnp%Nk&G4>6mVWhJz5+a9|y!NP{zpO8PqER1oYiI!kDW0)mj-PCH(UgKzRb%AM7@Ap`&;8_peL)jE|0z^4NGAObw-rUR_?=D~R>?_X7^s z8wW65fD@TQyUanO0_+V~d0;ecX;;D6xmj5q;8Qa*@vf${e1RGSJ*7Yp-_g-Q>=0E~ zca`xu5>Om}1PXI=m-=U2U0lF3{;nMX0uKaypc}oZ01W{)3G{w!Oo{mg0RaJEbOFOi z$;Wp!oGI}vKp&i=b8v9bB7}V?+waOz#|W66y0bhHrz@DW#}@PQeBCMNV-ph^d5Kkc z5syfmndESLDvqNeTT6GQ7bPGt^3^4G-{Rr8#f2m!CiFJ_!B2^Q$Hxbd^5+nMDF1Xl zj*pKY04$=(2;EJAyaeDj!EwfDHXUuio&p+DYYC#GsH6mpRS7^~=VL>!j&$XGwdgs( z;e%HI`hG&7R^P?*?j2x3%_^qz@))lvn(7Iau+*wo8&3JN3(m5mGyJKEX+ z>AMDwOw18P0MfLqtPD`Hxw$|O{W}RwK|ui(tCq{RhU?SV;9!b!eid}V19@T1gdTvi zyt4!1EVub2IAUiGRtT*e93V%t_V)m1nkf&SuBfO8Z0qa$_|~Exw@aHZ zUs6QUr>dY7QX`NhorywVxwtGcQc`f56=?Fx%78@y2?mI644}^@HO7l9#_UOv7_9A;ZR;;FMD1)!v9PCt%r>OVb&dm`vidD@FJ$jimNwRF*T`*W8*yMqCm=%@E;|9r$2xKmL)ryxy12&^9t2Sz7XmX}W(Gu625Ny4!~oS4AG@hK=43R8iWgu|%+Cxy^_ z9yO_u$DNi3Fv9zbi#R~Hh$RP@!aJwLtf8gVmpo8<5n^Lywa7aRa*#rLMt6|A%-XL2 z+7|h32J8`_oUv$pOGVW@Gvf-Z_gE##F{#TCI+Y_?=^V7r5ZO0hDi>>h43eo2&r5wB zEO8=WoHkys3sMtFyhmGu>z~kVY}%ZiISk2tygBV~Mfi-3anVaB#lE&Y3DI&zr`m5g zEgon@TEf#V0l6Xea=wv+istyS4iBB_-(J@&jEDCVrR$6qn#)fxA!6WM4nUZ%JcKx* zXPCh0Cx)oid3-c5fZeEzv^@o}e>5hOgKXl*rKxS4J0S_P< z`_5x>kRdTdm(Z|t&z+~nc~-(WE=j-^F*!tI631Gvb}}=b2r5B zAZM$#J;0)Y|3Mu^Wq@^q>=6)&wtB0;he5=2byFqjo@4lc3=f<~kR^O;L7Hv z)9y4l#nV1V0t8e*SD5m_>xY*YaCyvp(=ShWfs_^O1F(I-1*Vr%3LMh0tagC>jpZ-` zWGL`vkM7@_5afwAwULNnU84XpkjnacH^5?AH0A+X7&xv`(+V1qpPP+gz<;jUT!P?^ zP6cRPK<>WyDeEap^jlHUO-w!)XhMubjae>36bfO1nF&Cp#md4X4Rm-Z+Bb zELef_ejoSzZ!1=<48z&l(0NN@eg{A#k(19j>@6h~ zX*OOM${hx@aWMBFoLmKt7Q6o;MH?I2$H*=EiR%-Ij#CnV^+>$vJ3l(P0Hvha_ErKZ z8MPlKFIa3nrAbNTw-;A>`yLl23JTAuR-2W2(5N&jcP*6}=|dvG1JztWM$V?;w$OQdr7pxMgMHp4ba+6r@8)Fmdo^<-X&z?vZKi6$t#Q3;jIH8m zN^N{KKu;n0B^<`*ClP^XK`Rm>~YsAAQu9vmO9%*kPR^F}Uz45Z-L zMC{(4AYByzg%GG`Kx~!IP2ez+HZWKVcur4DO#I`=4?4+TgB%1nkmT^#Sm&jdM(0cQqP3k57G~J!9Nc4;>GVr0o&Hver@sV1Y z2=;#$gUW=@{_g^C)j@H5a(nX&6k3`s%?e!<&5xNBbJ&|2pp^jh9H{p-Uqi?JC_JS{ zP6~)d7LWs;H6(t-B=O_Wi(ME&a>IW(BKU7LhKzJ`a3-^egQCMn}XzlX=Z~QZD$-P_yX+T5e7O!lX6pe8D+5UzrUm#_t~DswpQI z8?S=%jPzG@($fD!+h0dT`GtR@FzVN$WC%r4hHj)Al_8|NLt0u|T19YZk?!v91_fb| z?uMa}9J=Fd@Oj>K-nE|h{jGJ@I`hXY9Axf&?|tvRuj>=nUfsYW!o5IMi_HDlPe(pj$$GOLone12V9?b1`1ruUA;8KHd#8TN@_loMA|s^)-bGwn zIX?B)KMbJ9Pg!H!=atwgGJw>z>S%O4#;*07*TuwG`ytj60saS2m?0ypYIL?Km`~}< z*SEvi>uj-XkaMO#1;E)4I;*y1=DLXS119U5O!vB|afV31yG2-*3 z9m;>C(TRxY$7P9r@sX15B5+$Isrp;|S`{vbh|y^y9r@qTBD)?8(z4#1m;_)DSGSt$ z8oO}0>~!<9RMoD>sWmR?=0jsLH2QC2IX1{jHKtiPc?D?uPFUz8wPY0|!qY`Bw}zu} z3@wcoH9vvJQ{7`>}?dp4+#st*ku5evbbuIS@fBo;LWd`!y}euUswm)B6g7gTr~B#D#<{Irv;j@Vy?e&7JTfjHEh@D1 z^=%)zyKl#7IQ(@Ciq00`>3Iv#@4e-G;3#9j^?yVG@aa&&njiJcACM^TZZIqFT(&-< zaCROf=z6+GuVZJfxw)gwaUbhB$w0GyOkp7wMMg#i)1}r*t9O0!lx=CN(beU8pog9t zboT)8uZ@jD`+FEN52}DVfL5MF!1;hKRpHgp!H&T|IjYf2z2y!^^*@a6jKQ+uT_n!n z`1rxRL~>uE&|=}3UX&zN8#Oht*HoO>R-IQOvT9SK)I(82vP3R>D)Pgey%dAG7l1(3 z@^vqd5sv)gnM&K^jjXKK*Aw*{HFSd_*mKAU6aUP5SjO-Feq*b2mkZU`_ZF3JZ1Nte z2m+PaqLmor&i#83h(evai2$ zmtUyzGAgCqAn($Q=;QKD)N$AL(ab|UL@+ z@p?3P#;bYvBql{gMSYK1Dh19(aTjJMlE~&*A9#^Y zz3cL%td{^kO%+=Wp=Y6Xi+p56J!0a#A$>QkY_(|CM(jV!egu zt&B|P)%v3jL|fOGK!r7z?WoEX1d%=46y1zz`&6`^yD+Y1M1Qrka_R0ZDEz5xps4wnBH#GE1+zzt+WR&NZ`l8UygyvLsAj&zhN2M`keTLS0; zp`rZSvo5?8FLx!r{=?(ZI&(Yv_|G0ToH?xA{fx$;`;Q^)3@|kPWCe+|>PJHYzZO7Q zZxovo81jkyT*e(Z{xBsi#oPZ$myOagAeg%z10u&h061J-xI)*bYdIi^{7x1CCt!~) zPzFj#ekX=4wA(+3c%&pjm(K6Bev@RIbVUUdzWf5`4O!f8*DN=su)Xb~jyt)O5xU^- zsG+V$9jn30S?{>s-Q2^c1YpF8rRgK{f8=^A>UpIHKF~y%h2H)A4kXT*q_;Et(+?m< z*x_^k*WV3uhe7{3Kmjcyusp>UwZzo*w&>v{ZI<3z$W zF=>WhA&;Hq4sy#~A|%;VGYTHZCbrXcQw47+tNjkU zWn@Qf#&u3M?Rw5+QC~#ik}q&7Y}SOGhx?bki&@1hZods}Coy1O51}{X-N$Gfk*}7i z)Mu0E|M&0iQ2wY}MrJk;86Iu#y1$e|lx=1*@~EheFla=xiaY%K;}bbCGN%d#vx(n@ zuMI5fc+4G-uhL6)LSLh1ZD&ed7RJMDur`oQ=WI)&?*|q$z;9^U#ZjWdIAOlEn#E+z zmgW|Z|LgXV2rZte>9HfxFLdr9O60E?zz`blyN1pY=z5ectH0{r5hp3ttFTD@8@jSbcj8L!e3n}2tYjO|RV z1Pt_~r@PBk>G>-iorYI0{`OZng%%}-kch~_u+~SMZ3o|9wihZ6ygYKQG7`tqtZZLg z%!X@m=}uOgSDJ4W$wR_Iu$|K-FptI?67_4p8N}!bd5O5p+xOQWUyN|s48L1m$9h?6 zN3gYZ@>$u}V$AWe+p*V{Uk_7P2q{;EUZR!@N`xxStFiu@pD(M<84tp4#Wai34|}@C z)m_Kq&6_uAviCRUjw$3DJ+BD)zAp0i(aN6|t&bH}I=8NDCW?5jFg~?h`Z!uDT8|VY z7ZGwipn{kOwB?$cORHbC+9mk=@BV&C`LtLgJ}N3J4SM0QH?Hlnjhb{ znFRjbLtA1v{V(dEvm|tg&l9sKIVhfJZx{D1AR!$9SK@;ZkqY~@3$6_w z5Eks#tLCe$PnBD4f6}i0;9^%)WqA0&tJ)?pE(H6?{Rv5F1siHGcg9b4YMCoBF|U?a zb*B7U5-WOrBu{15Wrq%e^>?cLOXWyF^O%{b$;6~awfT(U;tDCBT$oX8f?fKzW(@4w z4{LcXp_bz*UZF{Xp7Ymbn#w#Id&|ySLcgOi{=1v1Ko=&t_qZTMd-pn{wm!baUY=DX zWRcMCRFJ<12VsZ#@;3y6cnSNBV+TvV{gyNNMIJ6sQBb7vN$v5tUXWj) z=jY`?o1fhwixnu zoAEnxS13gv@!^4ECT^~vEmc}c$xcIy`zeD$Q{s<=w9MSMFl^wuP>b@GBVrVx!g=%~ zTp8Xm*4J#giVcuhO-;>tauL-MmgLw-F<3CsaHBiQz(5$sHKF0bp@n+x5}lC=`*TYx ztBmwQF&MUU)vU1B9zRpp-p2F_o`&YH>_ALW5`^7v98nla>&xG42h>K!aKf~NQ=`=O z@!L()%Nlv8hai_~YFS4mPWp3k;^Kv$*hhh|K`=^)U@0~>?$Lh%UY%xi?n$S$Ord<$ zP*ug3Z%p_?AZ)PTcGLB9-+=;%F{ibx&*K6t6K;RkR0}PZ`%6AxIF!eX^9pFkUw#XD zb{Nz%LmW>?yfx_}NfZ9~zb_Q`&UT(-Bka&czIxnc#N#z2^fTfWcE4ahk;HuIA@wKw zTX!^*;x5m_2UIuBOu=N_L(kt8bLD3dp0_mF*i(bylauQYbLcgA%;dVMN@F;99m~#X zKU=lfOSj0&Q(I>8r(@j>wCCh`vmTqi=&zIP@>^tO9Pvyq@)fTy^Z2n>!Stp zOPAfDUX*~b+0Lba7FqoW|fZ8ht*>qL;s}ZS<{X$t4HKaF*G~mPVp>$>R#8_-WE+TG0s3f zk8Pk^J6JP;PWNd2>a>k4yI0R@w!+Q?5dd5&{%6N)^BMz5AkGo++MC{?xa{ecfp^q3 zj3lguTU#^iV0;fD;qM>*9Rp{WoN_`j2mfCUvcTq`z!>x z92Jmv?=jvZG(0g74KWZ7~!`oL|Fo(jVpxC7}3y=_^dx;kFh^Aj-%M1f{=u0G19(cL*rlIjVWQ0*>~ zv}w|a)z)8y-E>KTS+?io>sJt)>=hS)Dl*bE;j)ArZ|g zj3K8s*8etm9GZ?L-D~}Z$;QF;M@WR5^&vL7Ei!9F-yu6YGn1N%#?@*TV6OBcZm6qP zq!!nzKGwqVbhFk-XKAS&`uXFJr)Sk_J!1tL9{Wc#U<6lq|NrDg?6FqMM4_`nUiy`e zpMy*;lg@1?O0(HMUoH@a@cI#k^x-^DW0mLi5;*Gi;QJS~BN@Q7fDISB9Je$~?lw;y zW0Uc{hE;Ko;VieWaM4-K8Nk3cQ?4B{z}&=DpW-mRAP{wKue`|S?grcJZD zQyQK{(;i7ex|fT$v&VH^)JCQ&z-75kgO7d>*|dm!`)DWpB}wbRYUKwwC3GdeVRxVA zchf0k@y`MGCxXkGnOPbhAd?h0CVOf`s`v?7T3M>5L3TyIC;g*?ZQ>hV z80~Gaj4x-G+H_RouFAU1#S0Tv|qvir&~)^_k;iH{BpC5e+muz?&qdAvNvSM6506$N*Y zgB;`@p&u{HIRq7Ky7Y28IWx9mkrAZRHEKr<~f-Cj8(2 zfl-D3sXHK(f>m19f%?UM@S>T9MyFLT*JZ7uUZvb_1WN3!?yYY6g8e3q*y-U^b$yWg zuBP;(IaRo|xK$WaoPhP%6(xv}m#E)-ez$uO>+q}))8kx@X>`28M(o|Y50dW*?Lcfd z`0P%xe~!T=|Gt^ra~_l4)%{NSp5-8zyo6b6RwAvO{>fys0^654MIYif6{a^@pCIHf{X%A{HeOu|&%kqB zhs41g2A`1f8hXS>Z68$;e7*bY`{%}oA%sYm4nkR3yH>YK^@53y$4#r7_q%Lon`px% z&#=iT!~bAn9e_dy%R-3X?Z`${?0JxBR(t8L-Teny+1W$YX3^o_oG#cUMlL=(MF#SF8=UrEPmh%-87$!{G8JoMx#>18IF7Utp)uD-n zSdh!nyonH@hyIcbkz0Hp8%*|TezV;b|H<0BSZZR{AH7N(%bM_oK zJY%$o%g#YPf#G1a?~(kFM9?iy8kH&`pQvB=?kNO_^j*247QfzoUA3ZN_4KCG@LRvC zezM(b4^+3=@nwwej^}meg%FsoSOAo*888%?MOjiX&`#@-4IN zl+A!7W!Z)hk2u>lg%-)h&JK#$EF`*z!r!l4n6Tc}Gb!#ao90OmficCeLU|0xMV=EA zWtkcOeQ&-;4YWkLx#nVxoHrMw^IN4vcDw%H{# zkhb6LadCuQF0!Cdc$!g}x<<1_n8#E{{|j!GD^JOo#ztm+Lrdi=(f1#ZHhvQE-83Zy z2dsM=SG(h*wX1VZS!AHp(Z4eSNL(pVEz28;?$~Tz#y5Wv^4lP63RC67Pz?iLG}3o%(nHki_uvdR zoGlSeT)q8tas9Tz1;0S?EjK(ul_1g6`YWU^BH-wu%cV4owpZs7COS=8eD(Gga-PCy z;t6>R(348Qp0VhIr*0)G@w|Ap#>o*GwX)^bq2YX_-}S67o(0!GLuswI@!Oj>t$X~^ zGBVTch4tLU+P~OgKCNMa#Pj4PsSbrTSes4Uf8R^g3_Of9_Z7 zwpbOK?7ho!d(=TEe*1Kmg*gIEfjzFio}S73;^0(1R`Xmj7XI%Qb5Zrh7?)eN3~ef^!T>`cOJue{?*x+gJcC1?~T1w*9~T^l=n|mLgNLGwiT(l{g`7F`;^Z?iSu?+%u;* zN~A??UpJKWWQBB=5?RU4jvegJ5|*@FG0dgJ-o*07B&QHBK7k6^9$@4Wc|n-$>fuMdi-2v@-z7V7b-C&=sUqX@`~QJ(W$bad6MfbTCScQO1yVz(5Ka4vzGAqq6!r__9it&Yq_tBU&Q@t(CC~3YB5=&c1=cl z+G1o@tW#$f3Ku^>=@m!eK^ie0pPTIqM;Z0V1Z9OhFSuC@&qEWvca~yh+K<*Ii{AQZ z!SG3moByJE)}B9)GNmb}4aN5tz9#+gBhLA0Vgplr5umJYu%Nn!gfU0cPSzfml zd!)@4wbELZCqlpRaY&&2_w10>qS-2XeVfq?$ZM47nDs=n$1Ig^SO;tB_psIND0l#= ztFhze%8UdaZn$G*yWs=q$b zY^~!0N$SM?A@S?kBHxSt{Gac#^9Yt44NJF;9c~c?#+-mJ0hOa{{1>%>v#jhV4*G&prsT ze@JC=CFT|Ab1O@%ZtO8UAv<@pT9ku16BK|Fkb@lT_~KCYjt&QxbD^*s%JT1o-RST6 z2}*j4B?YVcb~)-a%l&BLjlbI@0+|Mxc`(i*>uft~fk@}~r?JDS(oUA~s`tbzJ~$Uz z>+k;j{TxPx|L9`W279bFhlB)2AMZ1; z)%5TdXc*>S+-c$5DL$@oVIA^c#%wlF%^lBs(<8^hcJm zZ+CqN@X+x!;)4c+1oLnYuSyTAsFqXVLI)Mpi?xU75ujK{rey%vi8ThtqC8{(oidEk zc&WDjGO2?xqPl|K_B1g}v=nRiBp$BC6hoF6p)pyC|7+5LHre~5h*RI_M$_yqk?~U= z)Ku!MD{Va+&R^yg+5=cg^B}5 zD6YqvLEn6NVLTT!t^Lq4sqrEi;My`$UVEEj!RwJjLmU+qzxR6Y-)*C%hQ6+vf5yyg zr{(6?BDt4Z;gG{ERp1lYvGQB{XW${u%Co|NdA=LY{kp@JQ!hd?g zSK#SbEtL}EA%>T7ZP?-QC6NQ@rY_UyGyfr;;kYx9W0R4#HzPn ze*us6fM(`NM#R$3S0|r6=#F8F*n9ErzdbHV-i5Ds{hE5bc|-nd=`%x3HkphaF|+D6 z*P9=Q*|nYt?(KDTbO=_O>AH!pG%S;;l5ROr$zd+@IY*Ns?7(S922`hXCBn#?X12Wu zFTDiA z%-s0XraaWrlf_`dhE&UWtDpVaPg4^&WDz{<`*|rvMNvQE+HGm6vn}9UOTK4r{IH0K zAJ9>SzS#^}jB1f99T@Cc(M%Gj1vt5*AK%guHGVc(_^_GFmI@UN&tTWoTkY|pqo-Ca zNG)Rf;XzlBT(3Iwt=5MubGsVl!eCIZILA@@8QM_$@K;bU zCKyWs!XMG0-ps2Erz$07oETR)y|&(u&fl9D#O3dVNBYKsy?yG4G`f00KbS7^&#;PE zvh=WOCVQ-Z*stu4_f1rkl*+19of{2thQYrxjJ*Vy1Y25$H4Lc4f(2cwr3m@(TdxFo zCWmu8-w$^Gu25+*HmpbLT9dkQSxpw1CLUF;AHMI;aHLeBW2d;<43{u7yBaA`QuQ*S zSw*i>7I5Mi8POkiPbm%APMf_a>vSk3AOj}UkI%!9PrnU=mzE;#=5O)Yo4)D`ff*Z^ z8mjhQTrHZR=ewSsjDcmZNgGjlmhPcH@ER8NH0xq|_-{x zRZ`L|M!|zUSxFh1wADMGL9Plyx!lg!u4@RS%WjngnYXN@`T{40i1@7GqZn+pc(%8( zBu^*3j!RCr<~8i|YYL)u3!rI7r=)jV;;UC}=}7%<%(TI2PL*ueczLi}EmjT|PhrC$ z5n`4kinPzfYBO&0^(QC43e{O{>O5>F{s+OOpV22h)i$@Kf`5Q$*o;XJKBNpP!9ZSI^ccE<~#1oAsZb%qYhl1zB_4jy8* z68_zgBNO@#=dZTjF1?%^e=e;NA8F!A_1eH8WD-IZ(6-ABGAw>3w3+ywk$@OOSIm->y@|@nC&q0AaP@* zc3UNkZeN)^lN11&Kl_xIh80CcFZ+`UA3yfL_bv4CDUNAMvB<|)C$G?-+6=f2> zg50*pfJ{Zs)-NIf^P9-$lItjX*VoFrfG^|=astQCk}SmUe)S`}&!ezYb9<)L?q~nY{3w=pgzFRDCnEV#I?b+A z-Q7!}^FFjPiJqum>2X{MX0q`a+4+<>=zvEku?Uv1&?15WX-=)hvJ~J~Vt8#La{WvF z>dwFgY>}S*dA{c@wH%n32Sxh4c7MnJkk&uJUtu6aHcr+eKKUC-RM`%7W+s6uXp`fL zqQpEFFaG>sySsv97GTw@?HvOJ(&Aq_y;;S!zJK?%q~zbdk&SH;k8bi#Mish-K37V_ z4b6geS+ZH0K{I!UuD1UPg`eTJfPm}umFL^vNS$-T-5<3L|joXxrq2z zk4KEN^dlp~(X4Ux>*P;RW?mj|0Z!<7p~q=GLeEFtR%mdk*!mzOX~)c1g|n4yrruGo z!9_b-@7}2yzHUN3I6Xz?%t21a!=r0O_FC^qowQm_z4#hYTF_!fx?gSls{jb4dgH1! z7{XO^RR&P5Kg(1%ctbe2UJ5%I%L9c8;7Wl@r=w}BPyaton*m{ZzP84<={>}1E*nB8 zPIFTiqP{KPSA+X5^>Gys^CG=F`uS`2{}C(rhbKUQ6AOR+ z(9ZtM%?YUKGC86Qtp`naFbjm?f;jYJT&vvYD8;7#;*+Cn2BU zO14v`9?FtDrKJ@VFUY|noCJ{cnoRnq@o_}Y1b%E>&+xgfG^o%}Ldlz-t+MJaiv|P* z2s`gtfqwDNagPoGrn6H^O(lDD$fe7dhNCJ0kD!v3DV|jGPs&`a*MM)V$b(@jwQF>h5!q>0A z`?$!3db_(L$OHU?hsK5i;cx~$s=a;Ou)MtWPfbEP33+d+l%h;zWrA8-Dd9PQ)E~2% z?wk!s{-O0Q=X*22-}F0dFZxUWDT?T-(lSHjlTS6ZV$_`-fq-MT)rkE$qYC6HC3Xlv zQh$9)O~*L>oe~uJ_&+gX_MWaz>V0GbRvepCluSE2CI_Ixf&2n6zXh*S=ClHc7?xh( zJhER37IZzLV@ehHr$?a9e4lFsidC*`)j#V=9x1<8h~3v%O8acUjV9@S2U-utXKSjtTMLrwNSMJ*XqkOtKO1=d6v+SO$z-E$=MNrW0 zbWhub9Fu(7dohZ14=o52%W!c)`sJ{G>r~1dydx(fVtD!+6q>H2q)b3|_freu%!$)m zM`dVY1QRu;e*`)tFsZ&UNURhIyB|T?1FUW0bO^7$J{+zx-LeCVZLU{rQiEshXNE`f{5g zmNdqGnjQx0+;Tpk*LJ6zENY#tkm3^B@$lZHW>7l4)c%hLDXBHoVmM{?Fp$=A^aG1? z&WmVydw9dGQux(lg44zjrC6)+zi)lcj%O>bY^A05fB(*~@&UnTJv2#5ETN~ zWnc32q4#N?b}|JJ9*8xj`Fr>3RXYBfyJ`&o5l-&rCY!+TeqAIBhF=HyD?Lk=$o+g> z6PRXz*kv)h`(W>g-Z|&y>FzY&L@sY9z1?Yy|B*gDuH-c6manPnBSp=Croa$XD?2h6 zawo-@)5S$uqsbPLl}z&ZRqn^7b7vHQ*gGzdv?$D_q)LMXGGq0?_NwmQIZQIFJ4)*Way^nG zihXY7#vqNhv+=L?kOB==+gobQf+qif#&W-?r2cNLk-RjwoxncJuKXOfefMT*>9AVv zk=~in%Gi+F;K^>5*Q{h&6~tCCi|@}<#iNhguXZrdJ}H5;8?-y6;1PC5Nm0i39Fx~Z z{PrA_1(ica^8FXNn+G#JWiZxJUq6p(Nl=%qU2!kDGs0 z1P#Gd)Y{`=w67#L{OCpNM{>u@^B=(48E|~{+%r2qld3~cM0$g7LWRz_W!Cg*mVq0C z`!wa*?8H}+sOljx6rnZ zDqI@=qg`Cmc<>E#Akk*>_N0oos_wh@EO|3;zQH#WIDb#J)JXmr&niancylzJ#t&0X zH0Yr~3C4@On}d4M&>{$w9zS~;b2`cs48Q9+_~qUp#zg~dTewgu4%E%Ba8W|esLz=K4;^>{6UBW;X1M6QP1^!Qs=iPYfQ_M|n{UKZ!=sg?qj zv@fV{-rqoDz4BTup?GPTz6F9FVPY!pN2ke9>_fXLq;y$kRE`CycA$30B5|&h79HWj zgOfiDQFuIdqkW3JMGm!iF6j@Lj!~oIzXv4?RqpzrfYcP+{eMin?~F_frC?oh6S3+F z)M?a+t&;&Ub(bvyv(0SV%F$s6?f|?k%5OrP^#0v-p*F`uv2SbIg;>p`!JO5KLxXrp zlO&08ROh+R?q&WeXvk^Bx!g9wOeBJz{)pR-6G9MI5vODqCL<42qNt0nmDqtJ5E>tI!E(y zeFc83rSg3d=34Hdm(_~#6V!j(S|gl&u*%69^c9&of)ne=>M&Zs;)t-wyN!ayU(IuxkH4Tv(vK{t1ZZy&` z|6HYeqz%jS*SI$i?I&CulJ8))&&+Brf|=$MSksX1R^t7@`|oaLMi3|WxQHlH<(IrP zb}vz%4Yip`iLi?jxN$R)j9f~C75~W+S!7R%fLGqf6opXyD8StQ)1#u+ zDds1&og^Fewzftxw=Rah*L>^|UYc)NfxT-_U{dKH^D^4v@RJ{tA^fx` zF*B+0MVGX7l|jXEsf?Bn$sDqVnsQ=rlBH{0cCXt8gXJkZGQ=-xZvEG|UbsxF54+Fh zP`Ub?25t_WBwB@|Z=yJ1CAr0KoJ?wOj+d%0j2mpJ5n@t;th7f-hIvrK3|tnMCp#Dl zs(6xR!pP~+Uz#u~9ED(-IMZb@sOoF0jEtXT*u{Zd)la$J=X+X6lLS6An*TO1h?8aP zvCk8k6eVSt7Ximr%6Kpt5RQ=>gy(U39%?`*{RK5}Eqy!vq+Weg$a>4CYVA2c&!uRm zIH=WA`J~vNNv8Ec<)}vDpt1aM?Gx%YDMl4FTBva5+;{G)x-xdnu=UmC0w*lr*tLYp z^t`O9ox!XBHUcb`NmTaD^Nn8MTRw&gOA7l+68b4V!x&WBap1e4qhDjk8nJE1#8b|! zGmNaE@{jUk6BgTzSR2NC-W8Tr$Hpa^l}+t-Os{LerC?9U^Z+oucbKFh6q>pIR%#E3 z|Aw2I78338r?X*!Uet}Z$j`&T>=CQf{)-dlADL(FstR>GTt zQGwSSs4NBV+-tn}-pTrX@!jbuL&TdzB7_~bWSpPL z{1i8=Z)$0@66>%+#X@!1>xet^pa?DCNiGo8zxwm>7%J5NZ$SsUixfLX*|{;zF%MF2NH}c>t4CiWo7_%J}C{%luNfWzO@J zsYk@YOrVUBv?7AyOzAPL!ohxA9>4N64>K3mYn2$P16egh>Vx1(OOcwGF9YT$sZ~i& zY?a4$es1RZ@k3qxYg5;2se2;}erxyoLc(0$*}LK$&TldKzlXU?(`s8oCqL2@h!_O|Kr6Ri)d?KvFk+X`A?u=<1Wx-u{AWX;kF&vlUBFEUsc+xa=k<*>CM(3 zkuiCMNA<+_#<1%#L;_LaPRH&L^|-^;@W_bZXi-T8TWDY)xqz#>4s@?+t1ch z)#hAQA4ERC`f$0jb$D&Fh+!s^*k7VY8f7$QJWrSqmY#H6Z2@&)Z$}4J8YswfJepWO zwmIC`?BRZ%<-I*~%%msjnyWNXsx=}7M#k3``qWZ}M4(Lh_$pRYllIA0lhg5QV`CNn z1D%vG(T7(q=d+(%5mOa5!q$5=Kt)AgkhQbe(_E;^*9BzaE+_$TXqAmtb)Fpa7>L7x z&Rel;=KQjao zeIV$$!eOw^O$x*m@+4cXxauPl#bw67O#_BTlhcQTBPaFxpC~+hB z7A)|j+IpfU#PSdT`Ig*UnvFa1{wj6W$X#{YFM#-4;+xN!kj^1Nj zl~>caErr%uvmm2E5Xd!6G+YmQP1s3`%LVB^M~AQjhAkf3nL_<)Zv9?1*CLj};$qrJ zsc>bfkL&vE1tfzN?Y7yqR))}nD zm9U?8+u_zACkMky5hi&fhh4Wy)GC4vH<&MaJ_LNRn_Ih&gggo9mVd`|_b|#8Eg8sr z1IApf5>HkWHg!#kUj=NN`?xs)BZ26R=x1nfu+6X`kSY7%An1;eKyMtcpnEES_0BRm z^3`)=()R$hGg)cXZR;HbFJt52=4OA97A3oWe!qbN%1VCyRCYZO#sC|hZ2TO0%?NcP zC(=Vy@isc^1}}{bN&=CXKbVnjPQz-wv&0WM)oHXeBp0Mv9!V@cz#Fa_C)+f03z+`tPL`Oxj;G>($ z#_Kd{nK*G(%1$}!*4ej$axZ30eWzyt)j8Ul;Bu*`b!Q2S0Tx@CBR=YL9HOG^?D+5B zV+2fn$%|X6_L6L8>*BwkxJDZg#>z;+@U9b>`_ROI4q03wvuv@&l>-RV7}fK}Z9B*> zbd(*+i&^oy6kpE^nGoW7x$1_#dhrfU-`&F?HuSWhs)Fs%`%q0xjMsATktc8#VT`#I z#PpDpa@!?IS4sgQ3XuJ%sY1_mw<4J1(!sL8lLq+vUk5MS{mx(&=R2{qvweIEU_4vQ z+>}=e?emm&OON+AM?QiT6IanuM(2nPun|3^+7?=MfR^E)#jf92lZD+-w^>08PyT2; zN0h;atJ=n5>wvQo5V!ytM~&$b8WM_&>NeWQW|LfA*Y9nh?o%nzOJtM~-HdRA9WW7r z#XWaz-Tr)v0>NLY3lPdfZ3LNok}z?9HZ8=zZ6PDW`0BlqQdv}147{SULPl0LWE<(V zyg2|?mes$ts)1Q!wzD+QR0TG(v!(fTTBi+;lfBCL)^7*2X$C&$GfnQz?nsK6b8OOc z1RE4LH%Er-SOWE#vi_LV9`)I5tar;nLI7B!zzBA^0B||sdHBOn5@h9Z3J^;Hq$L^d z=D0=j^yzFms(;(_8#ej0zO=G3s9;8EZnyjR!Gp8=M>^1#9GI*3T@GsUpxhpKKcYJOh#9loKBC-C1Yd_ph*9~iZ{EA0Cx|os}m=5Uw0O!vdY)PdsuR4?*Iq%ywrjwA5 zH&BXa24Eo>7=U7c4W%=5&0$7z3~YBFxmS?l&#Ulvpe;1hP$yw=QjF6^{!Jk=47&asXIwz zLSA(y`&mzHb%o2k&pWxuJSs12)z-=?tIDd%UZmwkZUR9IJV%dtm9{SlFKn#**`dX1 z!lk8!)o{jZ=3D06^F8lPC}5Xdv;~(G6B{qzx2-1s2nmbzR}A;7ELUgD`<=1G^BQHz zzpB%<{`=HY$WLx}-+QLJu&Ch!5Dfu+Pl3X0S%R6my@-Qr_dK1qWj?syb>^S?Gq?pGLGr46DeN#=teAB7x4sfKd1x#2c3g zBMki-=gTbMeFlDl-TK7IOB#LOw(0H)<#XivXwe@O4K+1H(Mo4}=hr#lxJ>rUVZoA?=RO)qMojR+Au!iLBLVh4}Te6hA=lY1m>((TQd`r zLY?x@aNt$M-kRtHB}C0G)}8yN6>~E7&-i zoUZ*_EW|3W$6bXfdr~dWqjaaL8yqjUL3q%PwbA+v$SWMzV_th-*RLjJS9@%4DC>Ls zr80y#pC+{BO0^|!JiFicM7PXz0|-b0A+&U%euJ+EQVV0A5YIruluS zGS^}FmGT$Tr+y)y+32^;nAG$03C!X-R|EtGnAC;1HeD69-^xx3g{~bZW?w;qn8gO> zsZW_zpuO27ZiFl9Wu9a)oaI1DcHs=llll0F{yDl%+PBKBhG-O^RFaE?;OS4DaQ z$&84b_XFxYfSWg0TG-f_x-InEK+6ghW=Go0hpKe>eqad)%ScO)4Gj4E2U9|YbY~(! zQ9oT@KTpony@(f(%J;Jw*WU*&subv^OIPQ5g&vlTk-s!X>#|R8m!(egsjtQf%hG7@ z*qshD%7%#{h70B|z~qH-dUdXnd*rJ)bMkP^RF3$-!DgtcDz;)uGb@aKWg;sre`5&@ zX`yBu+n(5l;NiI+wU~gbfBgz`CG`~&@!s7#H=;=c>pH7G=j!I}Wpt5__r-4kZWg`y zmN)1kv(whqo8#psh@?%dZ&=$dtFx`3GJu04;WKjY&81jV*=b-V2|IW6rE1Quv>eeW zvuB3f2mZ6g^9E@!;E#Cbc~HFJZ2(7A&^ST(GI(HU@Luyd4A!p=~ZVM z*%<;h+`xbk3b87 zx)^vp3(PJjt9;qAWVHI-fFByI~Qrv3%x}I#6)1U+$7d7#ze*4*w=6_d_tn zdg5vhNd=|!>_4KaK;E#I+yI02%w)VmN9C%V9jYG!85Ahha$m1zPg1&X4jJ+Hy{*H_ zf^4?VMk0f;p%o4Rfu*Sh33U&zieHm`Kv z$;n3DT_u^;T}Zr#Mi;-(kU+@;QsNWWyheA&+UuX;@FKly+jmGkARq#sI9FvJ;EDC` zK%m-Cq*EXe#Z^S=%`CB|pr%u|CNQFx8&8FvACz;i7?Yzego zqcN|fn~{c_{QaG!@@F_m8SkARDnSSm9yCAtsMvf_f$qdq zaf#43zx^ouk&=R$mtcjduM*2pqQwgU4~7B z*?iS-S1jglCT8qb<(aJDBV5EKI=t$DTUfk?CXr87%ZVFsSnS3U+EP{vi_Zvd+(am_Eq(73=6O*42J6gFQv8 zJNt$f}gAlwWNcvh6Y-Gk_^Hr41a#`^LMANz7Jyx8= zdsw6D@F@Qo)K^;;n=!k08ekb%iIF$hY7y+jLEQHN=Ph;{;!7mNR}hz5P=ENe!>@0B z7Qn%m%v)zLz`XK4YV-PNkf2rI?)*CeyB zkRq$WUbYQdZ@D6nT!bcenOW<=`;`F%M`Fd0Npj5N_xGmk@OiDO!7}=}u?F2MFz&Eg zfk)5&wD=|8<7)+;2Ah={w{y@$FY?WTfwP??SpRE!AMB;}5gm|>3Jo@67vQIpEGdv@ zf|Ss`en!M7hkab;7tmaIdfCjEf88_KDF>Rh- z^G_`<$$Y%&z)L-~;jr#ixXF`g_U~Dzb&mkg{M z$sXALhgbbflqQNI<;IFKDx#5oaZs@8*=;c1~0a&e9x32rVpF(=)V({7(=sASYON*L1IPIMNjp7|{6 zl!P2T50Q6-m|wrW%dzS9PUu%>vz(06dANDjl>iymc#B0@GaF>1ZCl@v%D zG{vUgOY;MFb~+dU<+%e+8R~J<^{q|wCR^w(R~g%MsK#xX6#rI-?CS>SUo0&f8Z3RZ z<-+eLgi8mL{A*vu(%Ud#H6dgX*+anv{*0P>iyYbe$R$!Pq)UnyRMWjN1af0#b< zbY=c==JNm`_jD&6Lr7D(R{B}g;(Wwcmn8c({5cf(Rf|7FkvQ>NTuEs-Z8vt%A_bRO zDqi@b+_sJGMKk-G>aSJg0t~j&tn|GC+srvuoi9E66N8CkWg;1*YQcI$9|ij2=+h#T(g~BjfY>zKe5oks|LJBIp&jq z1E9d(B=4A*MUvvl-h_Q$l#aI54CrOmY~5_ikN<=)pP1(l7gpmhqOQ(o0+;ZNvcw%E zSE!7U!HG(Y;{YyC*W@8Zho3jN%=T)T6#eht!9&DRcfXp{1YLO`U88rd{b+A4cEZAZes8st`q4(+Fd>5g;J>eY0ca0%1BXGoXZQ zVmMy&$*c~J$p2F}l^~pF^}rwr&5LIM#{hz|OhF6V#B{*fy4}xMsTbkaidrf^lvV+t zOJN<$34APDv)8eT)w5(m(d3)#kC<0>pZ&|_#)RZ1^r>v$szgZgpl>eO-w@GLL8R4m zQq~ew-qBGTQz*4523c5&G2k4NR_<4a&Kt|@Bum97O3dzu-jx~j7&BzQIJD>WW4$%$ zGJJiQLG@WS^hV@V{ii6+Yi6vbA6SChuY$D2Knu~|FbtM1M~8pLb-DUBh5C~VLUa^~ z#Q3PzXSaYt-*?#-Kgh83Oe+8&aPy@jU5#eSiORS6aJ`yI%Ug42JXMoG$%_DyxnJXg zQ!Z0@&9Xk=%WCIlz^9fAnBvsD;Y7T1gbZs^<(G6RO&LzPG&}>Jr6Rk3 zV1Q}aF8n~9M@B>jZS7~Oc!==(uWIin{QH&Hu;v-wG-;s)r9_}(7{%uKTUd_Btzsds zeE($zg))FaCxF6(CKmWC(O~xdyklkI{?$8e1Gb<(xhca-+zLU-tjDWn^{FQlqI`oM z6}fjnXEElHPzeR8C=!|*r5PtDQo&}4)?rozI&y#N?soFdt{FusN0J5wH6>?b`HZIT zYr){*s=Z(oLEW;fEz-cv{puC7YBdxzg@k0Pbxeu2P16!HrollH%NK$RQ3sP@eagm7 zND7kV;3UqDiio>Fw}}c|INVfPc#V(e9n42bF*ie3Iw&uaa+Ynrq#U*D$N1l_Y{8@# zW$!-KM(s}em0I)|Q=?4d#nT+1_t8#cH>#EPF~k=HxuRkq0M6|Da;ho?lA=uxI2*gm zQzZ}1_+Jm^lPcdTUtQ6_5eeI0+aaBAn4S-EqTDhmd2)(PD1$%JsoK+Wcg$Tm#m|Dp&wc2*Goa|M^pr8o2X@9lDU*vC0PQ)sj~jvVE-?Fm*&T7S$Z%`P}Lxo&mT z8J_rZLf>7@)gM(wR(em!hNB3IPv@b}%UEU)bXz}J==;fBkZy4Rm@5+tvbZe$h z;n$=|SYO|yQ*YKGL;(cI#ac;MhLjbRo3D=hKNEPv_-rR}01TruvG}uH1xwR17WFJ3 zfnHNKgHzWl(dX}w7P+!oPDT&u)9SK#ch|WZkPmsBoKBh2%a$zGlz(H7H9^E>YY@6~ zLUO_@;bmjmUD~vAuUKgddl3Emz_)EIWqaZ=>-#UHilcjr8pjH(z7&HgLK|@s)EE+a zt(M*CA(2PM*MH}&J|j>@4L#)BuDSW13Oy*yGb*S03Nb8iK%yq6I|x~QsfBBh{oTKl zJUvxaK^!@_)b6>~7C_BsXykmj&fy}kQsPL0T4PT1?`+LCdn9zHEaYCL-mdrVhYeL{ief7Oo)+KK;Mn zdi(O@f3fR7Til=fijaPv#{ayF66`+LzxS6wJK_EN z(95yluqAtys)HTj=^#!sc<*shj$s_qRx$sW2=IJ50DOpjX^^u87>;`=oD z|8}lFGaO787a!-PTX%XGh*yrces z*}Hh>FZb#zd@0<6m_~2V1AqGXq})Q&FU`5r;Ku5wyS3fV<)uYKMcdbk-danoM&Gh^ zhY|LdmKr=a*x!-l=T$D8tlj8dic1yHYmMkL=BI+yvSU+Y_jkR1tYOA%yq7Hp{D+HG z{vnuz%PcW|XFy#1!`;a> zXS7;gVJ?{VlO`2;0dUxED#)3VbP*PKF?UbR{oEPs44XNW)RYpJY;`&HDS3$ugi2jU zX56^Cp65Ho#~oj}W)2Jwn$)UMLsCB)X1xNQZlB+KK6Ln#v^v|SoemwBsLE%q2Z)d^ zlaG*-6;`Sd_WnK9_n1f%zgQaTgyUm&yA|ops;4^_)DNAs)VLDTx zfVc2*$pq{z`41Q1GC>-Kn1-ph!w(%u<8e2;jGM;~I7LMG$b_|X#E-SB>hV-wRP^b- z(;Gj7NW!k`i>=HEL1vQvM`Hwl==ITu2U{6J6olQa500J2viOJ$DJ2-_Xitk*h!;0A zwTW=Pw!c;}VEmu})R@I1PxHZ)BZoScie<0+nR<7{K1A>PA7IO5`~^s{v|NY&nhvby zp3YLbyQ6b~21=;#o-?kz@=th?9NiHeH=OjS)I|CNuE%r8DZz8*UBZYr)+Sa3O_je;Bm$3UfOuX_1tIj$Zt-h49pSjk~>*k^I z-dB(n-NCFv|HJ)GBsERzIlw=g23YFL`Hg>-{!KqZ} z#5>mOqs{Kr^ToGQZWMe19PKVUna-WvgMAufG})#fFl@ZrH3d|iX=40#D$&)*kO zoTbDh{8}Rb`8a5RI7tj`Ddrd4dC0su2+m&Y&7lJ?Uxq#N?cVx;Cv<@WMaW1w1(uJA zNkIcVx6MJqZP36+2B6CHd$5R*C?LRp_aU-z|HfpGPj;&U(MnxNeWSC^ z)ye9|Fs(N9)Y510rnW`L>-l-wgK+6}clr9F2e%=|izkidpBohfGZEM;`q3zYMU>c_ zyA%)MweOEL*@cCc$)Ap2A;?I7NM-3|=D4?V(E3$Edl!U!I8j+>k)Lu<{)00#)J8DZ z>*;LXH@W^nN>@XrSD&%f$!XSW_1bgTeOI{xgrXm|ytk0Nk3-g}aLHe^Z$s;uXQ2u?Zv28|xN91BbrkV6@Qc^)|x$+#XAAwh?H7A^|cQ{a-MJjf^4bU^;MU- z7{eKA-SqinWi72--^lXzm)f-6XWMbdsmF?zFFAc5=&oyzccrz0c`m}iIeXlcc6w^} z-nBW$SMcC%MCPN#ybC=!Z0h8fAI*aefRFGy&da-RV5{t3Cr#kmc=UXDJcrkjA3OO9 zdy&EBW!oR5RNIf4ZXG~c|y-Yx0r%TSOJBwps6RgtchmX=W6w4Jf!{l1kLj?b3W zsEMhJj(@RA09?1d%z@d+Yp=XYo|7N51*rlF4Ju?5^i*_X)00Iz4s0suLN)4h%_+O) zfSzR*`O+N|VNn58?|dwIegQd2zFQ{Gh&~hMaI)cYZ}4#cYe7VX@ATEojNDK65}7ik z>v!7Bx^lhpa#f=fkn3MyF*E)8texVUV=0;oL_#fPbi2I)jGAJ5IzzRMbIRLT~R>o7g|unXZ8^NKA8wE#BO z^`L=X7`I8DS?B5yy!rZ#lO|wvuw2T}fd|;$GrzLidj{YgERYxE$@g`fBOgxZ8>IIW z@Ln9;F*<#ew-vu`9V*4xzx%kck%~OA;vJ=e7Aib*$oG~hi@aW4L#09QqM;wGttMdg z#~#hSZgZPh%0G;K2A;2~y^-fpv=S2TnW?Jc;qRt{EKh&wdr98j32{$XTwC8}5JMyk zmtTs1U5CqtQFq!+%)r~PtX%qKsRc-$0r(G++eR3*pC`s|av8f}l(Wa%v zT-1PgN?&Dg(7qx%SI^pE;;c21mXMIS``E|#Ss*JvpVMQTurLDYvyHDN>5q2UNdDFY z$cMLYlfi$EGZwy`t8hY|OQ}~+c#|{b3Fc;RlP7mM=ssLt;X^(-I)UVLk$~LR8D-7P z_ezhbTS88UYbKR~-7E5`0|Q#Xsx5WLn4Dhi3*XQWr+ZP~>!pmR@HJ^L3iH|vH%*@T z$dP0)j)e`%Kl8CAhUNEs%kgm%#e63D)eJA}WsVaRASSW1)sFM(Wfk^teti>Pt)Wj$V zOO6LGX<{Is%=3M`ML2qp30}8lTNKtEEU;WhpW$-T(l&AC8dd` zNDWO45W?jIh2!}Vwy0^Gy@|&iqM3BHQ_Ct18MmwDR#)3CDsEkvh4Mkw{5g;^L^jW5 zGoc`knuJjBGHB26<2OTwqL+tkP8UbWsx8oXL$tC#bW1w*14v1aJt6UR<-o0T03q~dQWxD_#d?S-mDjHZGMW6+rBXXgFW?dT*tJ=PXQkG-xZYP z^cd9>3jg3t+u`{=O?a=`=It*Kv?LoFDA>+M?^vRVuIc;v= za%P+S?Y$onf#skp8m$%>0OsO|_)SQUzU>TMIv7*m>%wYxxYf$iJ7aEr0GoI|@pzsb z_bZmX_9YBN*gaZoCVr3N>Ux9u*pYHWRJt3lV%}U;ROF1zuB;sY<;xYhH$Q#4`&|E+ z*Y{N@X);9`3~h)bJjSZe#Eq znB%-j!8Qj7--NcwK2|#(2%6Pz;9MOpH+^y2kEJ{l9Vn!Sb{{CS)rif7WMnehlCW+i z#H6L1P%#*;^f?<$i{-CV4Yc`ozhhNKr)q8wXSIqYo(zpxYOQzP-H+QZ`*E)Y$ZdRT z{E)iyWcu`rCOt2 zmg`)B8GpKDwU2>--*9?`rb#Z1)98KI06#&7KOY~RsA)1Nw}Eus7XGQR+P%(I_9LbD zS-=Fq(4CJH*8fFX0)KAmU^4cOTJ+1?RvS$z9eQBD>AVm8^O?xxYgx7Lwci=s9+N-_ zC?So!Od-9UY&f=mXi(Ps$!n+E)%lP=G&~G5go>Y=&-GqyMHQ-WM0@*i-l#VYey?$# zL?Wh3uS~09l>c~Wj-ReZt*km%^hXNcPLGX=4s1Zg@wr~Dx?uMAt$c`us)-ftkOli8 z;M0q779S*TDGhMc~=|T0w zpN+MkfOO{F^)rDPx(|4k^9TIvv=sDPCr!+S9}F3jyRsdT4YP08>^Mb493e0F&%f>A zB#b}y+?p_2=E<3U?O}>Kn-ZGt`qvpQSwtNTF z)v|Cq>`NP~L}Wy$e6aQsv`euUTPT6Og?T=b#8GoOyRp%Ytlr!km>D>D+v2>`bXR17 zDaMxSc`=+DP)qi#v(kh<{B&Q|k(lxW65eBnt@k*VY_;0`$Sdz1ibV+DBaVuP=ADEm zv@iOb*~uK%HzC4y+lkDj7{hv#^*OS%{XyqPCwBpRQkx&>C}>`Wg=TO&BJjrMiss%t z%XT1h-?N5zIo@4R&$WB9l|S%eR zF-o%Q3I{-fU&8uyq^flFNfia?I>hNZd{Zq|KI%NA#&ptcCS2mNyTiWtsUrsfEQ*lo z%e`=M3GDhS*d1dih(8%WnLkQNNSdlzz9_N9yyg?S3JBkgH9ALD=LYWW?6!qRcwXKc znY!dT*npE7T;vR_uI(MMdIYDGn0vi{kIX)Em7F{|;U}2Ay-(n6r2`r0US#1TqGaKz ziOu!%UQOMeZTgwvH#j(0TVoGorIyx$NTyH)&U4>WG1-h~0HltE=AEQS^3|^mYJh@< zCe#DR>ZA1~8AZ?cQ2}k43-CkbgACh7+HCJYy=p&DOF_+jEwN%bkMA0SWNu<~v)Gr| zrRU;?FkfR(sYV0i6NCErG<;v}w1K+MHK6*GQPJwn!)aEw)w#T6QL=`EVrf|<%i9G9 z{N9vWjh^2bFKt_1Ko|E_V+?w`^u;l3Bg-`o?0nwkj6~44K*k z&+{vI*&#k%dPT()s`g}WAsOvIK(DlXNx~`upUvl+VJ{iU5tl~{)z43Hm)1JVqwAns z^V7y)i)Nv$D68tzv@lt$#K`&|)J+#Zg)UZ6N5|`^Yt0=QAMC2l;pmXWWwyva;$gi~ z?!p9?unKB0)6?s!CnxI4jSdem2^R>7#2A{Y8QwXmoWM(rc;0us7L8>>Y}rH0|L zr9DGTCRVmlZre|<0Gc}|^ZaS8r@I&-N7i`g1r_Mdqh;=r47Z_Q>OfX`vF)b?^Af}U z+oj3cumhT*i2d6R1(;pv*nXZi0~uR*Z-23s5-X(rvrMEC708-I8Q-+OA6{f1WNNpBbB8tl8w= zF8mU-UGMI71C(9qmoCCe(<4LGk1Cph65WxBr!BSp8VBNjMa!SqIZ zj`AED7$0YTgN_cKzM$w4oG$|tlOY2Z#-=govx1s6;lpG&&;W=(OA5vqdI*lwLmrp6 z6G%xU7^qTEUy9rzxw5xVPIBy;Q?Zr@&f|h-B^NYG#yHhyAUCs^75)49~cJ8R6ts7d%8^L9-(l5nfQzl7LMErId}BNb$N$8I@z(uh zyi%6_%FEM@&+|}-Huj8&nwyI)Vt$VR>-?dF^yWpta-Y|RUGoHaq^hbazkSDT5Hc8% zXJ>mE8>^V9n-OmY6qvMmqrKts9B?s@R~l@WZ`DnM3V*@HdM?BtB*JphYN{4*vpD+NM;LRN0+=DpQk**gtH5wo= z*=jmM1dY5u=XSk)lD8gr%d$amElPq)`)FOEM)MkOfKInHJ}PN3SR71wQ4_&>7n=+v zC1Fuhml`7qQI9mR+nEiKEf*1`Yh!y_%FtD)$$ll!Jrg-~INaS?thenOKNcnOmm~H6 z?8-|0NPJEz5!v^`Y)rL_o@9Dz48+q%kFQj*MW1OD^S}YZ@%K()y!~4{_-0t;=`A}X{YTo-@)~NtQkByq51x#a>IVrj32Jh$J5#} z)N?dC$h_*?etd}eRZ}Aw(5t~!%&9&#y~1IMfS7svor(^(-BQQCuB>+h1abj^=phWa z0Hy5gKovKgZ|;HhN=o*jFN;TnxSf|+T?_VqE<4+#xqM2!ZL{jGdrh~LN^H0{Z+Ehf z4#7M%4+paWTcSI~#U>c*gNMo+cCT(cT+_ptYDyQ7*9r$3Wxx~z6vr-@Z2t2;|7K#= zMb#yCu0*JhtY^pO-*?c_dMqs9Brh&i8Qk^k(AsnPqvXJ+RfUdv=NWm-K21={Al8Rd zcf`|1y5QVF_$%;dHL3$YDLLF1^H&@$)%+TzH-Wi4v|i{q#d#g0Fg|l|eR5Clo<}-? zSz%J0G(I#J+qb=I`slgVl_J8N-9K&hWV;ne3dpG`{qj8Z(6_ryA+4QHNtSaD`xjA< zpXUGX`1^Yex;G(Y!`kg8XLhd?4FFIz+2pb1ru*n(`y({(ZL^|dkNyc5y{B={o0}K? z2lLmYphZvPYSEU{=~%hD`hu*E;9KqSs8q`)%1RntB6|ut3pz)NbDXZAQ2HRIG&9?% zh2-fJKQ0X&WwB|p?&i8)t>NLiD2bSOLQt%fnQQaRAuX8Y*cKRRho z;KUPz8+#6BvwT4;28Z7~xVRb$Nb7L%1mz;dTAku|XB!#~nXo=aGhX7A0jukCQniI& zit}YwI#I~{q8}gqvODOMbN*oO#&cXG5_Cz76+1U;Xo@sHz7)f-@AI4v1;5`*;FNFm ze>VpDpzYxwz7Gv1I=SQXpMheieU~;=XmORZO*387DTDGkPTG(&|8KYFkN^-(e+Sna z;-`uACG_pfMtq+3hhueld0TF3`x0n2_fu1!vB~A4r0cB?8(_84;>yyBW`;g9H7=$4 z>bnj9!IGR6>YOH+w&?SMa1=#qIwwX@njJ-^aX_5U?95(;i_^JZXC@x0Y1Eks+xb(C zDNY1S%3uWh{~aQ2S(&w6Y68Xz{797BfmMHH|3_kK?wQ{CoOx|#@^CKKM<&2uxXqwO zja50-(A>ZyC5Up)i>=Sp_1+pp%>SZzXqhgoCgRJNyMB=;$z_+ zuIo(%ufz548f@;pU` zbdL6{*GU-g_)m;ethuHQbD#s#gI1SJ{W&Xyu(kA6r& z%WjDXv#Zu{sLUNMm)ac!9@>Z2qGMugJZs(+Czio=p8;^$A=qcl%iO2@7sx(pF|vRA z{JkeeNKal~4)o5FE6OSQ* zH>{V)+fBX)F|oYNfOoIq1-=uzO3u53Askuk-0zXSCFfaRoah5Soey8oB}{qCeqR4@ z+0fXzgS6B(KDKx|+n(w*Ca(e`O8W^sQgYz$QQvqTfSC05?tYci4z9CmVL&aphI-P$ z0=T0?qM0nli@?{n=adA~1r}z^gcRNVU4eZYpnCnQfx*2WpYG3fCwkq}Ihu^d)kdO% zodLpV@rVa6+qHOIAIt_iv7U6g5wHK>7 z_1sSv@I_}-|6tko6^oT(Gp}Y2p#+qq+d`QlbMut$sxM?7Z5KDE_D0!6VI~7ucyDqG zJ3QT;thDTYdmh=9&m*|rO#&)bGN4NJZBy%{&JaC=;i;M|@Tty%;LUAPftHU?%Ql~>k`#K^~X8TZgLD_8_G3>!y6u4 zZ-%d<@oOBxsCErifvr-bQ;$K#3Y6xWR=Qm@uE*!Sz+<)~yqL@Nj=Z66T=G0`%c|O* z5#pcpYQ>J@VPU#GrZ=gzKg%0p<8_srT`)sy!%oEgO&Zvy{tVJ+un8GBy5)4QHXpoU zFUolc6jU@s$);3oZEGM`*Dt0VL6s8_Y}Bs5cq_bd@`OCs9GThv65d5lgMeH$cF#XhuEd~;^szpQe|ATOmHXiKY)^`)7?>3T9e*`BwL06x#(Y;Cve?&| zaa_*xYI9tI(JsBh^yV+p|AX~LrO>JW0fQ4O#BTTI26KZDu_k9|Iav)duZq8NPcxW% zj+Q?5<8i4y9erWRaHmBpRA@U-@Nj~3h4Lkf2Im2xjZl!=g&5k`f7{Aq?BgVA=T zAClB1XPRsedS9i#6T66?Zo4lW2RG9?J}uERC|#yw)citKM2(%;D!+yTK<>(!)Sjh^ zpo&fbDD3y;Et}qX6?SH9UR>fUi5MlNqU&!U#7+JXAfc;D&0d*x`4#LR4JH~PFA-i# zeMjbOp3E{ecQamZZ92&fq_F3-WV>7DtiS&Y(tdrH3rPp@!#YN`s_F)~urI|e zrsZXUWHuJYIhCdHDbY7v95o^R1bk-)Giwv~>w#oqMPxh8oCRDhT;{un2h@+|MW33$ zHA@s?yEO0U@*4fn+TiL`JMX#bPF&+3sCMu^Mt}FcurJ}_!oqD^`1ay76%*;)cqaoT zHS^P2m}?3JExC#175*PmU3xJpnAGz1dB(RQEJe=8+}l?Yhy}V|LOiXz$C9j}_5+YKsEAAO1C9c4=h6yCm zV1$iLu9HXvihY}%^Khdz5sD>Niv4llh6Clr-tp8`-cEag0V~EF7Ej!}U2JBV&LAVE zY_;HT=4QTIj(7ITVSl;2UD3n_mz$EA9}`gGTr5W`02zj5c&r_M5~(6W?JXMpR&!J2 zAG?50&R>xnH$u^q#Qw113Lh=~|K$SwS7sb(5IY07&}3GNhy^=0?7*^=y)viUUl)jj zTTnjW`Ut819O)gEDpgoA1%{iVu9u0{Eq@?3&?t)XjfjQXqmG>;oDOPg>{q^#Jrm%T zsuk)RHZ{|CpHdI|vOJzSVRpZGnPzbSs( zD-(`ak>upz7r3*n?lO)Z(7xe_7x|^-(qImLufsrT#y0bcl1_EU;07)xPEK}C9!&Eu zG(63+>-fF!J$+Hi|A543J1G|%`Opt~G5b8{7CUC2L!vtZiWz|_^|GljV=%ETC@2X> zh%u6`#fmBs1ExxAgv|dZ7BmONqP`~PhRf^f^*B&2O*Ua6zLJs<1u`ze@z{=ArxrlC z692&sM72~k5r2DI&IgwCnl*;Y>wf&1lvH#e8)SHWY=FmFrjL!{X7?NOmHU&9l2%Su zrw)&^os87ZB>zpWNr&I#9d;zR1N@FPZY5D*Hm4Ab2!98U$Tr(VH!nnRoblpmi_HRX znl)>@uClF4_iB5EY~lG&wbR04J=0moRJ;EPFcV&WGs<6r=u&C^(lfWU-oc)W`5V3V zU&&t`C4#WKG8N18xWrI@NyB6BM}ywW^0nrbge#`)i$;?VEMkM^S~^gW=fIme%gk52jpgIOSJ3Zu(I5kT( z^00-A%Uicu$9d{@=htGfkoz8(RT?OLf1b}YIx*Mk>S|H=n`sB8{X|&~xSn-(5%>K< zivfJT%J1$>AKWQRUE!Y&4-8lzXu%PkH!G<80$tnXdCFCgu7RV(PexXd9K#Y2QA34i zZLIu?H<11u3;b=$OoFXq!3iZMn1w{9q?o^dPXu6LZ_8#dOn;Yy?l4JE_6noh$tW z;e6HFJ;pkOmUG*9z7ppwcZ7YcR?}oJUuv_81j{_zJtx4lO-$5juCdj#BGazVihXg;tT52MgP6lCyr4YtGbDV?0&ad%L=FMh?>cJOkBP zq+{|bDu&08Hmz6egGaWYJAas=k)qli1X>AZR|Tb7K$dx#mmxMc?g3QUTbAtp>vVr` zl^bs(M6f9ZMI_Cs@K(M;nv&4az!o6Y%o-yx)v)ez9-4U^CyMN%01% z6C6yig#7OE&=!QQ!Dw!a&r7KunV<$VSDGI(pcR~7I1CNVTi$<66elS_8XKQflK;v2 z&@GSllbLp#I{GVlS(&+er2+5QaV5h4P5b%wxmBf`^#DJ-3 zk)ogb^mGDIc4k4+=H|xM`er>NBMd;WqPnEr3JBnhQiLo&$WV|H1 zR(0q0^77S8m3FWr^Cec33#KJ2;_yg_jb^GRiu+(@?()2!x!?l`#HWFkttFvMKvGId znjMm^go$IVs{o)1%CQ*_YQ!AfdU?G&snSt>~{Av!SufC z;RpmIxaRw6CtUdiomS z2}C8FbcER#*5SMb^lVHFtc;RV5}<%&f*N0;uL*Q%S2G)X&91KC5bv&=W`g)P9Xk}r z`8Rk!;(TfPb#fPk26~A0<{11EkFm6|dU3kV4if55ux4$JJH7D1KBK#1 z?R91Qjfz`#XQxH&ATOZtNWVAY5}VmBDXexP7wqrAcNLAF8k@?#Xn*{b{HeqH3BJQC$zY%c7WX-UJ4S)ibiC z@EQ5`WqDa*?9GO(gh@#PgnUHRVpkR5x^Lm&j!#HvKR-L#*1Niufdl*l#CA+A!tq$! zoJS7lIGeq-JC;H7@Xquc2-Nr%O8QEJ`AhAET{k*9eVm`C>1z?dFSPBbeX>dc=LD4GSjz;#ulPI zyY=#FKbMRzj@7J$E@Qru;Xp!QfkHkiG}YZLNrH)X#Ako5_UMR z6d$5AyzCU+hTXF*2NRHR-zVqQ2`k*h!DZ9KfwB7UQ^XVfrM*bET}U9^;COUy+3+O0 zGDEeBBpiMIWsO?TCj800ezl@ad`TbIg)%FH>b;keR+G)i=v$5WOSj?i4rj8$IeLI- zvLuCNm&5yn%5~$PQ+$Y)sOCpqdrUkrJ6qml39+hTW;%-c$us7spa3He2|?lHKpj>H zfd;3Y?;|Z0ee837>Wt?8RsL2kyKnkTj3tMd*+l+)7BahBk|Z3opgDsfcWpF^{Cq)r zj5=(-lo($Vg2GxcqjefZOu2xhPuIH={Gzg6Tt?Le`vf+qPWsys{oxGedg}+|Al%ot zr$4FG{>+hXSWj?`gvEK-*|#I#>$QYE#$;jhvMfH>gamOqSCjUpXx(Bh#mJ@U&#l`4 zETCqozxN`H^{c^2wwQm1_;nfaZ_Ijh<{f8?bYCzYjsn%2s2c)d&Z7W*`St`6nP3XX z-SV8Qo>3+}=bg%zfE6Bx7P_%@!KaT$&S7^V^oN+*3KYvMeE6WrcozSyMmVoWf$yKh zdT$9w0O34OSX} zA92g{6AZ!r4Br1M656(CG)f65EOq+rwT)qa_-9!OvhMC=J@Pg3aK+PW&aOzK7};@0e#V^hZ14j`z$FM~r=V7+(_v4oF#e2GKc?UNGOPvT72STu z;(Ow-GAJKHy*0x#`^aU;7YdI1bjOtsDg4?}Q%WCUzrB$F51y=HgAL4A#UnSQ?_`wO zKy3XM`+MykhsXBnM3y=w@8m0NO{^g%4ire z0~Rj_oy;n4w`HuSpyy~{Bvd>S#C?W(-j;%^as9F^cjlN#38c3KBI2#H{t(ikZRElz zeOq|JX0i5X8d&8wnZgEpYDjkn%6w5@UvNUy^0K=tE(Nla3_UzLqu=`oP?$}p!4aiI z$wKmT{gy_%paDX9{!BnnTidFruhTy-E^72xw6R}a0eh3PNop$s46k=~-m=@QLHxQP@uXk*ct7694#fq>(Ub{FHWURhBLll$#RlHxuRkPc^U2GcvTwn ze;#tA$Ut1J2Xw2zVxlX8TeB6SBQUM#oq6LQD8kb6o-U}?ctfAe@8s*HC#X~2>UFk! zPKmbI()^v&%J2MWVWMv)^OncGH}3TGl)!0UvqpdE#sau zYPIw?PXrXGUX42ba+Q36us=OSx@+a2AFRRwLSO7Iu1v`BpQk>>yc+jO+&o68C7k`Ff3<;db zdQLPM{7ycX`Ahqtw@ar(3F3srg&q$iwfL9V?(}3ou{q&9NmE!pPK|ZZvC#PLzKbED zJh*@J{oEJM_fu7))#wjpBO@I#*t?5V=kFMs>zllumo?6^jf1K-OjuvO-Z|0eoU}U} zosynaYPH5E#XSSGkW3b5qro~hC_*~Elkq8>{Cp#T0rZFf3N$z#UKspKzU9J1cYTG^ zu*Ax|@G{-n{lwTpdpkZ}Bx|ENHcry|wl-Yg4f-23X$-%vsA0MMiWa`lU__C%Iy#(= ztDrEk>m4Syr%~s$1(GvTW`jW*_u0%4rdOpHGS2qc2p*uo%+yH0L5C4$wV+Oy%$`gL z7enIB>(0q?nyyBY!L~d&HJ3ea4jeBu4}!Gs>Ny&qs=ivI*0kVUSo8AU(8hvy-X83) z4T0yr*kT1f*;OSo8-1z!Ab!nF7W>h}K*VZ#92-Qy=|g0NKg$XyS@yTSc|7Nht|5K2 zdBr;oqnP=SL)G#8iJjzVC8{j}J_IEvq}Lg*JrMaVmrEyP#N)Ba1$2r*B+p}8&pfms zvhpc>;i^ZU@jVI{cpWZH9DrdY*o~vyWYCKCN3OxzwX!HC^vZMDOs4Eh19h6s?wi_5 zEr{c;G+4OJHA}0*V6u{(S@f9U*KP&UK0pb|fq~~Bjgk>;o?$jKHYxxqlO|jM)kjJj zFhC;3&fvugS9dR(|_QGQPtAu5iX=FTjGBV0CGLGL@ zAHN16!2rtW8xcrO0K=pKp|S!2)xf}u7XiwHuU>_L%H!tz4TbJk;3f#h1Ln*mEIdS% z-@eU-%)gQ90sTiE6*9o5?i?Xn+*03C{9t!;UgTCfH?E~c~!<~vEg%Kt~(TZdKEwf&+KK|%#VN~Alru-F5ApD)h0_qpD4&UN?;)U{a7Ip(;>{i_=QT=(t=k19pyr>xEB zax@djmmb+!dIm-Mp@;P#yjvjg@@q|p1fPXlsyFH_{eqXh865!&?zTLevl)*JI&^-2 zD~yaF=s#IknZEn+R-sd@Q6&eq|A}9(9x2#w_WN;9Gcqs~ zRdr#5)jWHNiUsBOVP@rZ@gB9hZ`@??*lWHZONwXqRO(1 z{JoDtc!$H?2FuIKK=9jiI$xTX7o_+mAUE>o^{nMGq6k*^$AbMqNEqefuc@wC)tiK(_l+jV6qU2zr10 zTG0II{c*&(58;9s#J?=o-lae#`osJI7-MjoR>ORG;9NpEv5V~ck`iw;_Vd$4L2}!g(gAl^V%L zt8S|oh-xqnA#kGj`dgZxV#I=y=+ToZ9WVhUz0ycCG$NwnNB@|pwsv1`WLy238uS#1 zSaaaZaVEEdRbWnm=4)Y_TS+siC)S*04znOy=uyNl z^p`M{t4dJ%zfgVY*J+Z zH-4Y>lQVhY%xJ3u`e(48Myo3zma>O~^k{coV;DWRitP_7b;M>NHNL-+e95spbBjG3 zEB7>IAkTPu>UNE#QTc!{n*yzqWdAyDXr{rdnO`{cmXIWRLc-;$CtxQ2_U+(IyyE4_ z#{K{+DY&)@6ptJ@akbfuj8bZIX^zjerCzX!sC1VVa=lW54FJ)2G3-MPr_07zW$>0e zmjYI}&9;?QriuK@zTv6y>XJQ|#4(x{56UG*_?b?JiqTtheRF+OsA`-3@cuo7@1v8< zPoF=4?)bH8*K?}m6=!G6=GU{{(v7Kc5y;R@!(J+<`*R5B0qu1BQkxziLBJWHW36qN zFOG|c8}Oldy1~4qiBv_W>742M8U@j7`z%w*+(teAslbhZ;@4fi{q?c-@GiqKrNVm2 zj=QWKH_nEHZ{+uXSJp%GH&nfOg}Hg%*#Z?W@Eoqh!q6O4LXvBf+LqO-+49%@m8{VJ zoKn4(pVUhAhiINYe()2VvKCfPJprG*ESgDDq0NL1yb`XL;Jn$ zgg`dXgb{ehyddSqmTuIYv=<&c!xl5{@w4nvjJD9l8 zed2XxtS@soBJyB`YcwOa8a%%1=GKerIoxn1l*$uUoIFEM-Ztm4 zG!uyrZ`_P?#UUv~6L@tb+&D2>`jPxcdpp6CCsh)0V?zHYMDxEuo_mzahpK9gc8Asq z3KE^MeOxtKJ5Dg3aj#v}6Eg9GnfCkzEcq7c$s|OmyQc?)_ARnZtlJDM|Ni|uwXBRm z=VX1THUk(!~m;gej9*90yrN|`0S~PslArBvjf1iR=~rzfgl~G2l0-d z&1@sA^E2|1_sJ^Y~*#5EdbW&Y@kc?lz8>P6}WSHyDsbahx-w;S7ltV z4ZPsP8mb&YH8qc+AJpFrS64h-x4}H0-;ZR_sX2-TvqFZxHieGxE)@h8k?7QK&=OmO z{N2Lkf=`@qUZA4+0t`4UrZ+q?lAeZUdG~Z;q%K@RUfyk?Y~W)L|5eP_FU6M_UKdgH zoQlA-*doBd$SB}0^t$$Je!saj1o&YT6|c{79h}-f1%*b(7%O&&cjX3zCY$TbTg_d* z)`^aera#b8Kgx(wRg#eSgeZvO=iKCys*&)7ZG~1DH*0H)7mT}u&Z468^M<~`;Tj3% zG`R%Zj+M|;j$%1+c@k)3G|I)D9`W5N8J3E1D(nts?q>C@-DpP< z;oX}EBtIt8Y>$)g#(6ia&F_F+1gqbR@sj@wCVuvl_8)2#=S~3%uUa$MR;d4?wBFWz zGf5eE<~O3UVIWJnJCC+Ig(P@JG%RNmO;}@H-y|_9LPbeSK{oaKX$y=&(ACgUS$VXY zkd#f-UPIK`njd=IK}p-)BOij{JVwnpvo^I3((5d%aGY$a#Q2E0Q%`GwL6~G<^~7L9 zywm+?W3GL5Co*rtoJ3rw`Lf0XUlT4#kXkmN-MBc?fd$zg+}q*xWH#DjTEIf8?-DB) z00m@e1@U|2Dm>;J@$07CkdIx-9gHNCy`GIVGn zJyCIKDvh2U5^;y^?ekta-SL)w_o5C_yvW?btR~yB4|TuUj9>mOl#*mGr{dXW^0Bo1 zInkf|iuG{^hi^iT-Ky?R)Ji!~A;jiZ+tY~}m&0z25K#OBWVChoZKgPSKFZM@J`Aj` zW-(oO`qGm-_1_49n3v2Os|ERS)-w%~+Y<;-^$!2{I;`vF`s+QnhnF!7DuI6w)&pry z)@oUxFsCksQ+x@TX~rU((r7eegla;FjxzlI3QS+$FH{H9ZhU@YrQMLXy5zeT+TM_f z|9Jz<^lX*-x43`m7Qo2{?n(Yf)(rahq5nu}KrC_mCwpTAdhs858%%XcqW@?C*r5MM zFa7`dpT8SDAbb44zcQ;fI;%FNs46Mxg`eKiGX4)ADb#yt!GR&v;$;K|4BDI=R1ENy z?aRuk>CNgxH5Qwbt1LFQBzK101wBx2?e@Em>$tZ-di##=av$p7oeEQ^8JNvNWAKbK zL?3{-87#}F7~{49>i}5| zBcea633LLuFPj}HP+KQ+VS3qcq*s|)CJjf2U_YnnWHe+VkO&F_k+EQC8{q0Jb!Jf^ zFlQ6-;-t=bk-fS7$AsAD_JX`3YiHvoaC)us#Qf(?MZlX9@#frswz*2*piVAJ*B3$cx(LobVXaS!{_J>7P!~}XtaXN%qVj^f~}=Rk7=)y2i~Mr zQ6r|~Z{6#rpgm@?^^N01FfWYQsvs%(A~-mZfZ$0Irx!mPeWOn*4B=~8UbmaxZQgyB ziQ&Duk~}c0-MUwdjcv5MyE}V8htK`sv$@L#tYfJ4bGyEZvMQ{>OMr^K$xYz-KOfs? zymx4@dnhT7&}CNu2aHHpt!8kp5>7&~o~^|PJ?IiRe?Pgw1GVag-)DKGc_1sF1Ei$1 z7Ub1Qlz1DI#yQ+1?JRl#RG_=gPPdl^RYZa1icANYS{E? zy1u@6#Ea)Iz+-(HtZD-Z3Ttlq*Ri-!AA;G9$g?ZpH^tq`_5LbhBO?@tSoI%ory0e>G_F{d{NlYpmo#K2)%pyNr%q^pq{}AsLQsTAZGjp9&k|=!CQ)9 z4V%0rskQNFuP{NzLAi;{_HYjtgv@iiyJuuZh30MjtO|d%f^0lS1v6rx$p9EdKYXSbuH4-(WN$eN^jHrCf%De+WS689$;5Hv$3(! z)*(}^|3@f#i(1?aB@LBkX1-3BPGpw|;;MD?-KOr>ikoK-f;b%(?%k*;-(!QRUBQ03 zTOQ7-j!Rx$KSuc4&~UYehJ_s=(oSj7P_-vZ$_uYfdBwsaAU_>|+TGQK%QgD9j@@pl zD^a0yL3BSz8#4 z4i7G5!4myF5TWljd_+0-!G!?TSSx95_6^oWSLQd0>bK)MXLY#|5fK{Xk{17#86+Z) zE6ZR$V19wY&(WzO^lEYTEdSoU`-lQa9E;nS=48UcZKT8qX}e^_NlY(anx2ETKrZ}m zGz^fQsp$mRN4SXk0~PUuo?OpA12AbU$c;~FTX+fH`tN@a^;)ej-U;blPTT|~i4U81 zzVOWCoqyG6xDQ*oW2WA#f7}?&zIf5MAy#mhRjv2>OmMa@y#!0yKtt6{4sWXjEge06 zf8M4t@~b_u!C=JgI9`YSuC~f2qc}L__wK*`+@^;L=U38|CMTmSS9c>c9#s*bpjpuT zT#!)^k&xIXP&vqfD)A{h^x-vgvjxhq@#k|YD*LgP*(=4nX7Tu&E)`7F07kue)8{t! z&tc&g;^SZ5lXiI%DjSC@6!u<1)6v9)-3YNm00$%5Slk9O8v#Jr%-8P#$!gbDN>D)@HIJzondFpq==~JSWK^JUU#j^SJDdVQs-cgd7!SVFQjMvrg5lYyk z;!oS!8R6_A*J51;YPv?_9(ZS5*f-)SMd5bpZ$GFgG~)>5vu$7jbKYm39WcqvtV!SV z!~`wdi5Lo532`4%A~(zNx}fg7yZP+XYEL9T1#{4FT{tm4eqf|tTe9@Srj$RaE?r+j z#`&$fS$^29y{htA!&}_6o6fF24(1{J^Pv&Dwy>0XWRO0^EQOa}WF7VE(?pkn_8gM` z$Z)_@RM6`LuXz^v)(UriZk|1 z!H0FOVn%uQFil>@%N-MmjFM(DL$f2N28l#mMMY(^dKBRuLZip)pPoqX)@oi$vXXPD zn?bgA8^^!Z>OyKIKw& z4P65)pny{|>eAT_0rDoeP*G9{@ z05>SM%4WFeSFiH!FFWRP(~bS~IaKl`yD2s2LAfeIsP4+|8eJ-JvAJ>O=RMtYLaheo zv+3gJr_1#zv)dbWF+GdkJ8vQc??9QxoY0Vk5iIA<-yt;PJ@2p8fS z2aBzD962s!Vo2^AJ62aG^UU_iHE&l{O1kq*1#j_!QCH|Z4@}v7!k8)8wLxx;==iW!gjuqR&%FRSvJf`WI9s(GcJ*_Zw z1zwo4sGVFq=P9P0sH>Kl^YjhohxvEjHUgXz>WJ?G!@UiUI%cl!FvNOnkG1jZ@{hM~ zo@xc0V9O||D{Cugh(?QtYV*uB+}NN8C;~SLCXThi+t#P3(oUoEd!|s0^W~roMl$p@ zJzZj@XD0V^g`=AYrIY8*Mly3-@)baXy z)>drbYXSmiHxUuZhzwnIJGb~+ndva~_~x6+3a4FD`r^E(NBHBaip@tGlUIu<8g_=@ z(3q3Er~c+c!uOKKln)=yc4v9UVSNHjh7I|wkXk$;%12SfNDlyR?2r)VVoW8N_pC}U zo(}YOmsY++fUMBjHuxvv&M1a4wsUzXd>l$NE8jkZa`I_!R`gJyF}$A~J6?02c8}}l zi=4-NcT*B|zZ*-6OGrRaa61vJ<@^MJq>)i(y<-`RISda93X;?ppaLU#8ggnfRqUIq zN$Z^8yc(L?^x*P@E8>Ainm&b9T|tNlGM0MG)jq2zqoN_Cb+uOH1bruOh6~5P!sI1E zgLe5p5LAt4?C59V#75mk{%E6F{aRA{ICT+!SKycsNVf}JY?x~IO6Vowm8h0)?T>;r zU4PH#VOeJo5pifW&XW?3?%fTEQPirqIvT9Zp!TGFuI6zr<*s8*hjCj8*wFfcTL%dg zEwI#q2`|4{)7==al3T_^^ZpHE7>|V5r`_3xh>KJ`&?`PjKS}+uHFHJHI9KOk=?GAX zP6xWkE(qFa5r8o9v4MR*Eff~;+PRD!yWwO#xccfhJ7e>&)&4~bY8PF;T1f?=q&lqA zt>|fMa^yfM_|ft-tj?=xby$F@qO5G=B6pTQ+gZRBWH7~}Lz<@~uxhvEcJk@$I`nCW zvlqB20)0Yvx(qP^F?7*5c;iJ>>fdHZFruj`9P;#2mw`Y3>3z)o9dt^3k}9Jvf!JV3 zFygx&OF}ZywL*;+iQ;^b5?-Xbc3ZsNcaQqr(b-|Rp`=)ap)E-mwQEoQ=S;)b<_Ev} zEXWli$HS6mBEmtBmWJ1QyP)PrL}1bPO_J)?fSsH6;MFVWEG{Y`DuUT!9|nGjp_`kC zU)w#I887RFeNl`Z9(`Nb1!F-`5%A|VGdyo+eCj%#&_1$%IR4)6f?L7Cw4AEW-F16o z+jRGa|0OpA7R0G#ZGMqWX;Ec!&nDS0?xZ5E)x#f!By=d5+R zi$^7zm6cjAE?F)z*P-cS&qpl1@YY27$!P1+h;n;YmL*M>G4-3~sG}<_LNC9Zqmdn| zmE!bP%Jv^#F~xSXJGjXy5)t1GnT)a~{GVu$iIdhlGkM|S&dvU~a*{G6w=tCN8K@lP z0LU@h$gexlrZe*Wq<|1uBS>>EO)RB>)^c;OkZ_`7H!I}DJG((-C;HXnODh2;P%n@m zHLw6(LHRQ`%Q4T%l_KK%VR6|~C(!}qi(r7C)7q6=*D%=evNMe~%q>P(SrA?q;^7)) zm2}o1lix*t10FbB%dWGi!h+1F3=E>l_BC4GZ)vE0J`)E}-nj|(sDhGKnbl3#G2Kk= z@MwfE`|fj*eZY-qwES5i_2}t~M+p=m1>Xa+C);_6K`)rIDgGy1Q)75s9bY zdVQ~cKJcE0Zx>=`XRoXn;sUXduH$PL?86R=Dje0Q;#${xkiYXzw>}HGqN2Z(9q0a0 z%kMOD?P@o#;elZAEX&{GX%m*9C-HYt;&JL4cNlyD{ZdjL9UR;9!2ePF@GiJq4_tQI z1hRJ23!5EBhLrB3g_W}Geu+#Z#ZEmUA@A4hlqykIM^AaXz=kACAqCptb{vCJsRz?;q@3DvY6Uq@U9S5hOVh_n5FkFQ zkRw_35z$yx8@`RXtdp>vOX}UZcIVx2huLi_I$By7(udD3#4`;`YpUOu_g~=mr-v@G zvLd?{;&>h#e@{$AusO>HD_2+KBcfn&bIhIZyFT=VKDIX#&*9h+E_2O|hw#Gr{6sGX z>yz3}fmw%DWG7nz;EpM=22kYDtls)3%pzHuKTkwai@ z8qQWBDy`RmNgeE(2a=a^5lf&FpW{zW#(9AC+-)SNtbDv>q-q4`J`1mj~1lB?P_^5(*Jfj9x6!z}c3w+D2{Pt49-0 z!YODdDQgY;4S|q99<(fY#goVsoX(qu#+Gv9nl-Yd)q|I)VM_!Xn<2#fC1d$80XH7) zLTl%-;gv!vRQ;bHutvWPt>GDXd980Y2s#HkeVEvc#kp2HxWs-<-5mQ#qK!%Q1FVQfb9{8q}II_G3H# zFmCLNUd_b+#{dY%T#dJ5fR>$_QUlK1&2{shuC7OdIJo%K*_j_d`1_z@fV>X$hwm}_ zo_F?mS8HGahM2s9Z3Iv?4hQ#8pFXM0s`>nqaPx15#F1A;g=0n4OHwxdoS>jGy^N@+ zOrS5o=a~j9JP<{F_#jfTr;T}0Yi5?S!|PgCP>|GR*q_L?^QPl(phHg8N^B^wggB8f znd&vWU*zOHA2>Id0wbkB!DCC^axN5t@f@A`9fesEM~ zW?Y<_zQR56h|$r}LQa;yFGVGL1)z+I$|?nU>*0}nCFLlqLVCnG6t?5mzReqrX15O1 z*cQOPSyqiiTQrfq#R9C4BwlZLc=)-+@({=zpS^sD_%0;6-4@@3i)#|x3kUpSs_e{r zVc+sImU&B>)6?%j1UJn4Qz4o}82HeP$v}7 z^a(HTo5GAj+}NJQeb;g88F<_mR491mhK7!=+_Kc;s^dpFei8I8`s3s~@5aXusDj(w z_cx9YV~Z0n9E3gX?Cb=%?+C$!%_Zy!oh4IgWhErcLtYdH{(C$Sz{SR5R-76gO?ACI z_|(-CI5Hd!SqK!V>$L0bc=*W63sZJdS+jxhCnhRtXXbj~p#AVH49j`Lbep#X_P&jp zMZn03$x^^$CCUpW?Ate^ktfoM!i(LO5g_TTFi#Ul4#zJ(s3 zqbEAF0i#9kqG~Y=4-XgZ6j&bJ)>mce*%OnKBfrEIz+_}= z63faI%*@o4m2n{@5H93>LG-Up>BFywBT4FSxYQ@>bka#2c}w0L`KBM(S4uXCf|a>U z8XFbWEhdSN2hV0wR8(HDZ4-7YY^Y1q{ui*5jiQ+QL^#Pj!cMgF8Kw>s?zH|#v{4K^07}#i~7XsCa2?{xXd2_ zI#*UiM4buJl`wagw=3<4a05?e+S_oY$$zqI1SHB;)F?MRv*2CKk2Ky|0LK}c&~pR? zUY+fhkM-i8f(PQ+jwiYtl$gPUa&zU5zG~myXH-;kaeAkuKzlkgkm)C{>QT>};lF#m zDh33zh5U^^E=tPs{B|pMVtb639)ralcx7f^I|D#yy3U@&M1uOz$KAQPT&_o%dgnp^ z+LmC74iX)|e?OuT?^@BG_?-WQoQFqMK|x4a`J+2G76gWYEn-KQOJAE=SS&9s9Z>J* z(Gu#!veD2O^>zY+q`sjc$y{Dlu`u7k$VgdEOifN~0zAL&*Dk3xj(=Bc!t8ot{>FCb0yUXlrDcgOCaWakW z^+=p&mqkQ)Cp!Byd!`pOI{xgqQQi!tp=&>xUYq@VAMv-rw{2LLz$}MBQAV!F=JExz zGpxybt84W-)oO|WiSlRl&erbMvj3KC41r--_v+%;n{Zi;~0+S%-~@ z+R*?J)a&kq!vX^d35~Ve*Cf+w;A1tNsi3O&d&e( z^dV$PlS|frjpm!<)AOZZD{1~$$z2B%f{Jl)`Lt)zSDDhUPME#LRKpaoof~k34Pj@HKV1=@) z@DbH1OdFIiiFQ9YsOWM|URi!{NJ&;)y4Ylib+z~b;qRBHVP;4O zHgm`%oSynSslyh>Ak%W7yI=j~uB`9V#}ACvUT5CapF(nSYB>0*C0@fYQtZfvQzBr| zgD>qHjJY$=F&3kuhc(zvcBEOX0xJ~sZk17&(e{R1pjmHM;7u!e1`5yd;gQC26I)V1G)%LM?(KwHc@M z@|k$V4H1980Ept}wOz{83)uVgd}AK4zhKJxaUHVj)RoJC3Wgxf^K|wZjCFI8v`xuEepX4Rcfr0_X@sk`zb;g zMg63@^kcRU<_-3TEsfO0klqTCDuB|UFOjPAmDhSAMp-ep(K6*fel)?CZ5QW;zt4XH zogu=!u-H-^G0L)GCJ4+iOqr-pxnaOBhOsgar3yIkLQ2Z2HZT_!R-S-YOnBE^rG-T* z+TzbGs<*0{Sf4D+RFAFF($o1|wZe?_7&j^k3OuKquxsyr)PFG+!KGO7QfX6y;R=BU zcygwDjWowz41q@Aof{oHE}mDDvi;H*Z(-ys45*#b=rS}#Qld+Z-$&!JiW}P75uOOV z4;bmOA;X^^!ksA7D6%pKG;7yaCX0On(^5wTr~7e7M;Q{w;cHKuKjb!ou$yBZ`0_WE zi!)JOL_XX~ew8Z31{J*M*vg$wRI(AvJ{n>!qMc|9j+-Pdk+ZD2F_pUzoYfn3un!=t zKOeXZ4Ua+Z6k|Q9!|Xs`D3>1=Uy2af0nMXxM!1*~3 zCW@SJqm}QgSXGt2jKRc*`E0eODvBmPUWe6OE|u+G+mR>dw&dqqq%^tGQJ=ce%%?{T ztuKPE{8F0f`}ApAH7P%A|MZcW8T+XH`A;uaY(M2-W2$T;>sbfO8x`4b@tpqsK$=pt zEk?^k5ajx#=2>594?{Z)9RkqRy(oFd8xtz9DCg62rDdRg^? zVxQf>z*3o;^4u{WoPiJzQS|L*`!xDd1$lM1t)u~&Vxu9;+>p5da8(?)4JldBmV2W$ zCGH*cUD*V}i*vf@0QjObdO5;vP7j{xaoC03dbRQ>$HkKzI@)hbhWGi8K=&@7<&Xl% zxrZ%jr=!2{$jy=Al-`B+YnYlY50Tf+-1CYqb^-<|C{&!_tk7 z+c6KxykpDKdSZNDs6go!ZY{161gn1}I2 zV@5Anj=U?fi{l{>CJx^ANIeR)W@Z6qWh$wt1WE~Ud7O{sq+MHtbS>C&Yb5MURtU+= zZ$~H$gT4?F1WOvM1q$&XDey4l_JG8{Ie-;b;i{>sn_?%ABeZNERn$#SA87u@Rn|OTNGozi7G1@2g&?p_kNJP# z9N+lmP~u^bSf`C!PydMbDzLmEVsd?dXbY8auyC>2OopMKgft-sv6S&p^|6dwc{sP& zL*SJZEsqf2DIUg562@1kxPsj@Z{?C& zOVKw0;D-)xDUCYkOCbDg&iDvW!nl+et%5bB|p?g!m>7Nx|?D zgc=q!tfZ>^rMPiDKPuBOHZ-R4$*jreOLrkK&*@p@eILP%v+h2Wwxr7|lhc-h1@6I@2U*#i|wP0y{%|XgEyQA7k94+N$gL~Bg+R;El(Q{GRm(&Leu$&EDCxq zr!%|G0Mg`Tfu_OnuU{(+yK>v!(ugm*jCu!o_4fYqoSo_%mUZLL|KS)I|?*+2Xf9aeIPsVOlu zQKHRf0H!|39V&qaQh5}87s28G6GuX=U#W8PXMEv@H{`KAnKY$_&IqS zLvarHiUQF?CY^eoB-_7_J&J@c(J<7M6u=p8G51iVcyB6NR}Kjh&t3192qJ8JIG|ny zKRe$XAw8MntJ7+*BZbm`KQc7R%%Y$ap+b1)pt}2+U~WRA=f~cml#PrvzmsB4=Ta*v zCL|%z)0(l!Gwqpd|AMZ#vyV}$#Js2C+-J7ohH*45DJDEFi5)Dm_WWw9Z<+s-&j~$w z76}2qSqX3wZj)2xWq+D-pi1H0e7+`ZYijEHp|CQ#GOM=ekI?OloR$I*JKzyLfs=6} zag@Cgz-~KnfAr{gvx|*h_KTbEU-paoAw45&BAh4EeN!N8yWYbxliSoHk3N+n1SY^r z*D*GP1Ofac$Ai(}ccc_gMYc7&@j;4e{c_0WgQ6Wy+8-!oX-YFiOcDGFZZk3ADeTFu|PfYrs1ZDuB-mxTmS9j zGfJaHV!lmQj1xSk@Osyw4o9b$4q$KQj zdH8i?7bH1NKZKWCvHedHNCiAioIczA30dWd7wUhy3pgVHiI5In*aE1`yFA%l z{t^*WYXu9`CX7*(eKjs&zkk8U7)E7Ndd&~!M0~Fhz62L6RqG6K1s{)+BD*hXiIx*X zQ^I~IE^TB#s+8fT$=zfst+6I<0{rm67vRxstn8mcWEIRZ)*M#%D1GJ za4g-^8T9#_)3`=)m(hsnmV#6~g>`pJ9Nq+eE1IHe{`#C{W${+#@SZbNsuBUH z4IoH^p}c_vwe*APJAP(4WUm3jDlR`m~u)wMZ=<$WOQw6k{o*mme+os z_gi%l)oH3ga*^0jM-j0UK-*n7n0<(`yDToAm71N`R$U-}G|B>0(K{H!hhJfSS>!?? z$0uGnG5&e}3Ee*ig&V3!3-TR3u`$am=ad5a*+lLHioST-5Sa%x##(RNF`4YxxV zz4st=&Cp20CpD^~xB5NVG?H`JuR#S_De>%$>Zl4SNkwvHqpaQnq75JkrL|*bhByz6 z#)Hy-M_66TDqM0G%~gzBeB>F`QBx~;&e*YhFz1E3s4F>IDz!3B{DPA52bWf;?IS>q$gpMlLtk z*$MHC>f+NUJY9VripH zR*esnKys9#qFH3DZd_c%T-TJ;S?eunw4uEj-LdFK%G>C;gX905n|ro?Vu#PZsJ_uk zL}WSf9Vi)o1P}ZZBocvOz`|j1`eEvQMyu}Zw4#FxZQJVpF<>0Xx8NMIq%o^fy2yTE zj?$A~P2#kxj|d&uvn&kmulz(dGFsmCZPgAq!H>_(okKzj4h}|Ra3W`^-9y3QN+?Z( zUl5~Qa!v&YmRisHi1M{=jAVCo1ved^jOMcFts{8`)zC4B3H}(z0qP_9Ts> z%Ro~6fU%;S`E<%#FRJHVUf#xJPZQklr`6fhWX9vA-av8=chX!=<*baXqT+0H2=t*W zr@4gABrD;(cRsnXcHDpSOq`{;L`=N2X?9h&`F^OZ)MUlxb0=Cr9Xa)-JJ)H4wQLHPsWyO;ko_#8cSv@b`LR2bnIMF^ltoGiUrx|>@6fXZMnH8Mx^bbXQC zopd3bSJCX_bc^97q~-RX2oZUE`r53onqy>=RTM+3bOX$p-Htr^;ypI(L)~3 zRA>7o+uDbd%EhJo&M>X=gFcW7we@G~ME_4BhwH67bxz0xfIt zQau!)OKdGG=D5=-A#q_fbuCTKX1bll$`3EraFGH#Axw1FSnDw+DXZ1Zc;GiL))npq zjqfh!HscRMq$)2@jtyk_Z4j)6`=35%ZgMgpN^UGEPqT}BHmabkXi#0y)#J|Q?@Sn7 z(U7D<>U?-+CPPf9_OQYGW*nBY``_{Wc}dzNr`KXgcikp;&kHm_EM%2`LS2Hrj1B_A zYjV}0$Z%tW*}o#rriVb|cd-w^2Nx1vZ55S%LzdM(qSK6j((VakLQ$_>pP1A3x$Zsu zBLhv_MgF6)gpF=e@z*@YAKw#YgH25hVvmKUJe@c|Ocg0*T?6{BwSb1>YF3!rgy-tT zSTKBn0)Q#&VaX}79AqE9d==$W_($Trrs@xN{y*nRFkEXMJ%4TWO+fuD<^_g=V#IVw z7am4LRMf~5bq(x)BbulsR!NOJJ(ZN7&(|BvZTUmmTgg)=Bn^1@zm=p81hqd1RsJQr zNBuwgL~iv%m_m*V4R4(!teyFY9ix>+oJ&SI&c0ykjw?$c`}HiMRp)nht>WOLaqype zSS%iRV~3^$-|Oi%XWPg(qcAiYGp9g(X1Ln28@(BeopfgRJEa(gv`gc2R8?X2lM^6% z5(7O}jam>CV|6SX`AEa1*Dka%<{{y1ox!sY-YlHAneBfrSq=hFM%+T1UaA29JLTml za7mmAGUyhQNO9D)A8-(+3k5o7-#!1^>}oz%k4reVM9@J#{tX!rITQO_T^$o|#wcXV zm!eVk>%!`sOF{Vpy9+C8Q6ssKz4^~>^m-suXtjywbpg3oOQ|xX0t(6^>)m|;J+s+W zyeHkq^&IZ~*`dO%260mUwOy-5$zjQjCugFLALWYyv7O z*v`Sx1K8jqDcryz@>l0$h5#P3&%s{QlHs$VDUBy&FCzquMMOpe8#jSyt$LRyK0dka z>EmE{(u9iYeJBOUT=%`clXqD=t6+mvQ4w8J?KTv%<+8 z2J&7e%i=f0y3<;UANENFLj+|;DBN$u6G8~jV+*!g!C-T zSPWXlpyzaSu&UkH*00hY2Ui;Qro|Vc%PAVZ( zv{tZHPn4}r#4X4GcOEc7MC>jxGpMW(n;$c?vg_T(sN3Ov^9M1}y`$^cqGPNpiGO0$ z_h~d0uN~yc$jH1+JD#-gQ;7Gc4BdMeLqU{T0(NN~J6o2(m%8y#h> zTOFl4y{G)2Qdw7uS}#~&WzQ<;=^MOPyFm6UbtuWfS*?Kh!HJcQvWiZr?I<45g^G)# zEm#kCgh7vAg%IGz?j7`@KsBC=P4R&(AX7UMXe)QPs(kWSvkPXx__^82LBDoGc;j*E zuTC{^pbCEvV9Ne*R@DpxY~YSQk5&V!B4LwF4Q0Oe(;Y>;%|l(&5GjTk>3?Z`4cx6~ zh6lSV(#sAexKfjKdH`$#y4q&62kTQ^<~RGnGG4^DssJg8S-1HSpurYF21#n+BTKl& z&Bxg1sMeA{KTAmF{vN6L4MsOppxUU3tO?lLA4-2d5@~t~VsbN9ix33GUO$Lz2LeaR zm(QFJ)M9}c`S^$oRY*m&j?#?Ad)Jq!ZUTbBIyCDoPfA{SA?eaHFhs{jVl{0{ZNItI zTmiqP*@gQQtrZS}p5E>b5bZ*HS5EIXf5D-reKBQKOfph3*pt$~ZY3_nAT|%=EGzDk z02y{684ZoRy87}dgQ;9I?1vhdV0v+Cj~eo+kdEnN+X5IPJ6mq{F-h<&Jwm}vU45Y+ zn1ObMpYcp5C}#h;Ot!t?Z>S<^`eK4)#VRXbh69!N_rL02=qU|bV|n3SsKO>+QCV3! zBD3>5xCE99^9y+H+f~v@lO5eB0|YNpQUuRf)tdkD%1p=ZHp)iD?M8qWdcLLn&Y)UmgxSaV-BS3-`^(REy7i9) zF+cpd*u9rAVNN`Lh^IE^9ijy0rj^}sH~s-hUT`GnWbU|2o~?2Yw4D`;XSY5B9Si_cfBJ845P(2;--K+y7#9IE9aCGH zVk~ut9an?HHm9nIxzOj1MPg1jv+H}Oe2FSR;oJE85`xn8v8OgncVHV_bED@QeE}nt z=O0BtGm7+Tgv}M4mSNKvQg){^US}@?+OnQ7>NKx%SCBRX$$UkX{}ZRJQ}&$l5H4sh zTUk8fR{cCOjyoB``10A$p{>JaRrk|1`~9C@(5E0t01wARM2-B#ui7te@vAb6y!42O zlFkW$N5X4I=y+*E&0o;a-wzALe=rQNrdcFd54fNxJQjJH|4kAcdIIU`pPf$uWZL`s zkLTtHyA3quRA5u4CL@D;oc15P96o%ICP7Z;u=w?tX&wj&nVK~qKW+xz1GJO>qP@*a z2@I5F+5V-Yk$?_0b4`f+1mP=nc?UKiyG76HZBkT%jP@mH3RHPE-CG?uE%`h);tV_* zGASq+W@}I&faa8vMsjP!qq!6<*jmqcY#c3%s&rpxduwkOAW<*BcJ{csk}hTxhzAHz zgE!$z_lt;+`BhS+0zxI4Kze!Qt8Z>!mOG*x?Qy(jZ+oem5^QWW?Ne4(b`N6Es^>AD z5DdR2jMu8swDv|wq^G2zL4ZJ9LvP7@1Ctj{$#r5u^hP61h4Ynf1};X9cm6_Y*td=W zDv+)VFptLLdG#9|jAKX1f!=hLj&(~5yPGaL^N+HCJZVf+4cZ!bYJT&Gnup`2E4Z3$ zA(fOWD*P=Xbkn40#|$pozVKi22@f?OeXOJCf=HiA~TS@L-q6G!sTP9HE0p< zW;3@vGq{Q4y$3l~vVr*-ZO;~SL@a=J#?%Cm!?|tcbl+@PPpe~V^EEijXBnuwwGWo_PmeQLpPRfw zy)GL%JkY8?{$fymsp*obVfeoj&r%fASd~SzckzhV)&flXF*b ze3p`C{`E_$zl-(-oyGNlALd2w0%I1Yc|rBAaOF!Swh<+&P!ju%-ywB%jcBOq>^2)| z#1@Z>xA@GZA5QRl+ADHerj4tox(wTvY4t8(fmiqe6{CeL^3fmU(BI>XvR(%oo zYBc1wFrq^&{6@e4ut#Tw5!=Jq53&oEV!3_(A}{hBxa1$?4tde#W5y~lKi7+kgI%=_Zdua>Wcr|*Z=x!lZYtqu(QT z(Yp5iAgD;HfOIG&Ez&KZbW3+gcXvoC-Q7r+G%QL~I;DG&f^;MOPIT{m_Iby7zkR+j z9Q@&6=vwQUYtDJ!_wTx{I=$midh-73*fijQTAp2Uw9?R;Yr1_!dj=|A?%9Tj=%oo9 zoxeT^i_KoHS94G%3`WI6t)p?cshQoBD&^wP)KDP^WUh^wHWOJ_;JyoP?viUVdZW$R zvVI_U$77d2jm6SJ$?+KV=2T;X{_#}l?KczAr*rTM>|b96YARlEdCdp8;T-@xceLoU z^&Q{#_I5J{Y*0>wv6>DlZ)9e}%ns(aeVLkrQM_@0w|w)pItp~Fu81<&Y2NG=mKidU_1_s;?MtV+ML&m@(HIu$@Y!|GPfLn%;qkDR zbav=Ng=+6?zSX2_q9{m?``J&#MD&rOdxs?%^Peoh<=1R=rPR;BgTZ3jvpO$uL_}OK z=|VBeGgz_*NUGkMjb5LpQ7iTyoQ;&hy;A=;G@y>@n;NlB8)n*YSfbZ}aibRZwQ>9C zSyjjG<(h-IDZY3#OGiXxlu_%!&BKhuO4AAXBEQ(!cUl2Dd_cDr94wvK=z*BfNysx> zSf<6ybUte-Ww(gQd0S2Fd6T|$^2hRK1(7lLc{Tx;t0t9K8-M;)4GUW6N;0RXih;>L zfke=DW=7h|3Q6zZ7ToJM$XP#RzAN4n5{L=)-^Ss;7pvdzhHDUpo^N}}fpXQKRA@wHM69dGbCXB#;Zq(=uOKl7!EcIT zq1gYeV#T)27x%kYrW2Q*FcXTpsW+u8z)F+l*h#cDX@2(khc5%`rS<*)+oyYv5(j8X zD13dJww#M`5I{JJ5D*4xNpn$``#{-Ibj!f?qv95~1|I?Z{+}*{IzbT+W;!Dso$<@0 zL!6%Arb{+r^yV&xXL2D1u`V|kaiz*gt|8Y}D=EqLTvJR6 zJwy^8*B%vpTOlnXIDa$QxcT{cEjzTZ`=mlrlAb~9PH?Qgb7uCJn#QvCbKN+Ijg2^s zJp9MO!PTtUJ`T>iUn>u^6q?SUkg8k7kPThne0Quf}T zcEv?zIA%1o)D!qEpAzeD#y#Ob+Mx)gUuQaB*(b(7ib;?~98VVQC*iMD_{KVTnLdD2 zYsb(fFOP_c*~BAC-OL*4 zgC8e>KId8=5Y`lmmg0OMSNvT#Iy%y$(NLC-9kfgsf~sx>%YQ!4WS_#@C2|x}YKyf2MMO_&jusjkI*C+P3c#>2wGXAmZ0iMvPmWXEl2iXRtT{hS}7njaEoUytixK zcCQ*N-|2R5)CAG??`bd>^R>X-m0uST88SLeHT|CZJLGF1TE)Uh^CAQp)L6yr+s!ub ziZkC0&w`*OX&Y|K)R4;PuQiRbz(LE@b+VWp9IZzDu0&7H-izeavM@tFSlS%(0iviy zN{TkJyKrQvb3hC8K}4P$4c0Y*k+tRG75jS6wy3Y!194LonXT9;BUi1)8}=6fDi`Q* zwK*La|HCv@EQ{R@${A4BZZ-klsH^Zukk92>TswQr9T^q3Tygjzlb46udp^{5j@$9_ zRQgNYOoXXok(Ox41M*gSKWvQpc+gofF278@cXG!kF!?Gr7Pi*q%HL*8N5`1Nq9&wi zF(uFl_Ma{@!&M?W)R;4tj$C7-U0#?dy@LuGTG2kU2qP$KjE*!;9m zz4>YB{r-NmG~$c#3$)&zo;qUAv=kMf.=>F7#vFa+{Zsc8vXPx{h(E+w?IOc!Gn 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 literal 0 HcmV?d00001 diff --git a/docs/profiling.md b/docs/profiling.md index a8c2ea0f6..f04156cfe 100644 --- a/docs/profiling.md +++ b/docs/profiling.md @@ -1,5 +1,46 @@ # Profiling JAX programs +## Viewing program traces with Perfetto + +We can use the JAX profiler to generate traces of a JAX program that can be +visualized using the [Perfetto visualizer](https://ui.perfetto.dev). Currently, +this method blocks the program until a link is clicked and the Perfetto UI loads +the trace. If you wish to get profiling information without any interaction, +check out the the Tensorboard profiler below. + +```python +with jax.profiler.trace("/tmp/jax-trace", create_perfetto_link=True): + # Run the operations to be profiled + key = jax.random.PRNGKey(0) + x = jax.random.normal(key, (5000, 5000)) + y = x @ x + y.block_until_ready() +``` + +After this computation is done, the program will prompt you to open a link to +`ui.perfetto.dev`. When you open the link, the Perfetto UI will load the trace +file and open a visualizer. + +![Perfetto trace viewer](_static/perfetto.png) + +Program execution will continue after loading the link. The link is no longer +valid after opening once, but it will redirect to a new URL that remains valid. +You can then click the "Share" button in the Perfetto UI to create a permalink +to the trace that can be shared with others. + +### Remote profiling + +When profiling code that is running remotely (for example on a hosted VM), +you need to establish an SSH tunnel on port 9001 for the link to work. You can +do that with this command: +```bash +$ ssh -L 9001:127.0.0.1:9001 @ +``` +or if you're using Google Cloud: +```bash +$ gcloud compute ssh -- -L 9001:127.0.0.1:9001 +``` + ## TensorBoard profiling [TensorBoard's diff --git a/jax/_src/profiler.py b/jax/_src/profiler.py index 5ca290b27..225f52ad6 100644 --- a/jax/_src/profiler.py +++ b/jax/_src/profiler.py @@ -14,10 +14,18 @@ from contextlib import contextmanager from functools import wraps +import glob +import gzip +import http.server +import json +import os +import socketserver import threading -from typing import Callable, Optional import warnings +from typing import Callable, Optional + +from absl import logging from jax._src import traceback_util traceback_util.register_exclusion(__file__) @@ -43,12 +51,13 @@ class _ProfileState: def __init__(self): self.profile_session = None self.log_dir = None + self.create_perfetto_link = False self.lock = threading.Lock() _profile_state = _ProfileState() -def start_trace(log_dir): +def start_trace(log_dir, create_perfetto_link: bool = False): """Starts a profiler trace. The trace will capture CPU, GPU, and/or TPU activity, including Python @@ -64,14 +73,79 @@ def start_trace(log_dir): Args: log_dir: The directory to save the profiler trace to (usually the TensorBoard log directory). + create_perfetto_link: A boolean which, if true, creates and prints link to + the Perfetto trace viewer UI (https://ui.perfetto.dev). The program will + block until the link is opened and Perfetto loads the trace. """ with _profile_state.lock: if _profile_state.profile_session is not None: raise RuntimeError("Profile has already been started. " "Only one profile may be run at a time.") _profile_state.profile_session = xla_client.profiler.ProfilerSession() + _profile_state.create_perfetto_link = create_perfetto_link _profile_state.log_dir = log_dir +def _write_perfetto_trace_file(log_dir): + # Navigate to folder with the latest trace dump to find `trace.json.jz` + curr_path = os.path.abspath(log_dir) + root_trace_folder = os.path.join(curr_path, "plugins", "profile") + trace_folders = [os.path.join(root_trace_folder, trace_folder) for + trace_folder in os.listdir(root_trace_folder)] + latest_folder = max(trace_folders, key=os.path.getmtime) + trace_jsons = glob.glob(os.path.join(latest_folder, "*.trace.json.gz")) + if len(trace_jsons) != 1: + raise ValueError(f"Invalid trace folder: {latest_folder}") + trace_json, = trace_jsons + + logging.info("Loading trace.json.gz and removing its metadata...") + # Perfetto doesn't like the `metadata` field in `trace.json` so we remove + # it. + # TODO(sharadmv): speed this up by updating the generated `trace.json` + # to not include metadata if possible. + with gzip.open(trace_json, "rb") as fp: + trace = json.load(fp) + del trace["metadata"] + filename = "perfetto_trace.json.gz" + perfetto_trace = os.path.join(latest_folder, filename) + logging.info("Writing perfetto_trace.json.gz...") + with gzip.open(perfetto_trace, "w") as fp: + fp.write(json.dumps(trace).encode("utf-8")) + return perfetto_trace + +class _PerfettoServer(http.server.SimpleHTTPRequestHandler): + """Handles requests from `ui.perfetto.dev` for the `trace.json`""" + + def end_headers(self): + self.send_header('Access-Control-Allow-Origin', '*') + return super().end_headers() + + def do_GET(self): + self.server.last_request = self.path + return super().do_GET() + + def do_POST(self): + self.send_error(404, "File not found") + +def _host_perfetto_trace_file(log_dir): + # ui.perfetto.dev looks for files hosted on `127.0.0.1:9001`. We set up a + # TCP server that is hosting the `perfetto_trace.json.gz` file. + port = 9001 + abs_filename = _write_perfetto_trace_file(log_dir) + orig_directory = os.path.abspath(os.getcwd()) + directory, filename = os.path.split(abs_filename) + try: + os.chdir(directory) + socketserver.TCPServer.allow_reuse_address = True + with socketserver.TCPServer(('127.0.0.1', port), _PerfettoServer) as httpd: + url = f"https://ui.perfetto.dev/#!/?url=http://127.0.0.1:{port}/{filename}'" + print(f"Open URL in browser: {url}") + + # Once ui.perfetto.dev acquires trace.json from this server we can close + # it down. + while httpd.__dict__.get('last_request') != '/' + filename: + httpd.handle_request() + finally: + os.chdir(orig_directory) def stop_trace(): """Stops the currently-running profiler trace. @@ -83,12 +157,15 @@ def stop_trace(): if _profile_state.profile_session is None: raise RuntimeError("No profile started") _profile_state.profile_session.stop_and_export(_profile_state.log_dir) + if _profile_state.create_perfetto_link: + _host_perfetto_trace_file(_profile_state.log_dir) _profile_state.profile_session = None + _profile_state.create_perfetto_link = False _profile_state.log_dir = None @contextmanager -def trace(log_dir): +def trace(log_dir, create_perfetto_link=False): """Context manager to take a profiler trace. The trace will capture CPU, GPU, and/or TPU activity, including Python @@ -103,8 +180,11 @@ def trace(log_dir): Args: log_dir: The directory to save the profiler trace to (usually the TensorBoard log directory). + create_perfetto_link: A boolean which, if true, creates and prints link to + the Perfetto trace viewer UI (https://ui.perfetto.dev). The program will + block until the link is opened and Perfetto loads the trace. """ - start_trace(log_dir) + start_trace(log_dir, create_perfetto_link) try: yield finally: