From be26d3cc5b682479762f37301668cc9c95ec68e2 Mon Sep 17 00:00:00 2001 From: soulteary Date: Thu, 22 Dec 2022 19:42:42 +0800 Subject: [PATCH 1/3] feat: add web ui for core ml stable diffusion (#56) --- README.md | 45 +++++++++++ assets/webui.jpg | Bin 0 -> 150916 bytes python_coreml_stable_diffusion/web.py | 108 ++++++++++++++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 assets/webui.jpg create mode 100644 python_coreml_stable_diffusion/web.py diff --git a/README.md b/README.md index 1f04efc..616a0d7 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,51 @@ Differences may be less or more pronounced for different inputs. Please see the + +## Play with simple Web UI + +
+ Click to expand + + + +After you have completed the model conversion according to the above process, you can use the following command to start a simple Web UI: + +```bash +python -m python_coreml_stable_diffusion.web -i --compute-unit ALL +``` + +After the command is executed, we will get a log similar to the following: + +```bash +WARNING:coremltools:Torch version 1.13.0 has not been tested with coremltools. You may run into unexpected errors. Torch 1.12.1 is the most recent version that has been tested. +INFO:python_coreml_stable_diffusion.pipeline:Initializing PyTorch pipe for reference configuration +... +... +INFO:python_coreml_stable_diffusion.pipeline:Done. +INFO:python_coreml_stable_diffusion.pipeline:Initializing Core ML pipe for image generation +INFO:python_coreml_stable_diffusion.pipeline:Stable Diffusion configured to generate 512x512 images +INFO:python_coreml_stable_diffusion.pipeline:Done. +Running on local URL: http://0.0.0.0:7860 + +To create a public link, set `share=True` in `launch()`. +``` + +Open `http://0.0.0.0:7860` in your browser to start your Core ML Stable Diffusion adventure. + + +Web UI relies on gradio, a great interface framework. If you have not installed it, then execute the above command, the program will try to install it automatically. + +If the installation fails, you can try to manually execute the following command to complete the dependency installation. + +```bash +pip install gradio +``` + +When the installation is complete, re-execute the above command to start the Web UI. + +
+ ## FAQ
diff --git a/assets/webui.jpg b/assets/webui.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea68ea09f66604682bc80f58c7033bca83460358 GIT binary patch literal 150916 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 Q&X- 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

dA=aOqKsyA1^3n zztFpBGTgD*1;1Z$4Xo!#|2!Q*>Fiz<&y!)Y^u|F~ly@NK&<~URccY02b*;TqANuO| zJsX-mP;r4$uU;O@_G!wK{JC*v!~t{;#8{AAt7N>!&eOt)iOS*q)ISVugC?2&u%L~+ zVR((RwFo^m5~YrAlOYpR1kE*r;AOd2j}Vi)g2xP3;Bp`nd~!M;IG&hSEtPu=LoE0h zZVU0@qPGp#R03M`QD)m`^-iTdP#Dwlg^9|O1W=NCELMn(th9Ol)dfQN-BrtD^Kr}4 zfxh}djl4-+-762$VJtSmM$Sv2mSkCl2`8cocIrm*w@(1pH9X@C&~?4M^BW_9A9+=j z7W7Xb>;sx9hS;VEC`uY0ofi{5C41`g%vn;>@bS35fI{PeCB&#y+5GptKh0MK1H|mk z4318qdzd6}IHxDWp13^xIL1i#v-A_=367;U2W~F+6j5W9dD@_7U)Z@3i$Ai z1YPdI&M+d|b2Hp2aFw81 zA#aEU32Mhc+mT5me;!HQAhsd&>8Cc(GZLSnr2J>(u3!&|dnTCWr}2D(*}W?E8IIyO z3-hXja@egvl0)(oV)}(yPy3<(c*(MA?c8Lwe(fc(C#?mLgw*T*XC|0gy}@CFL)faC zH86@d>l$;#VV;IK`Qh?RH+sjvCw|8I-O*JUfWggkWoz^N8T9kYrgzP4jC@Xz5!X@1 zGq_j9H%xaxah|Y%eP8mnSIM2z%WeJ(XvGAMuQGbGRe?M6z}oI2N@Jg!mP6OPWT|(Y zL*Pe_lFkmzAjG%gDo|!Wsne@rGQ$pE$zC!k`pG99J2Z~9^V50UraoA75pQl-7$E@g zC}=JU2u(Bp>YKy{1`i}LDzTxb6Ci-~qeS{W)WtNZB=m(%HE8{&>`OFsQ#hh8Hv^em zLLwy-onxn4%28Ge0M2<8u3dOk-ilJRZ>)4~L!c4v<yL!h@Zq9%I^=<3IL)=!!&# z-PXf>Ui6AUDxE7HD74((3-5;{sYB%Y0Nz~K_pg|6He4poRL?HVcxpQh z$)3=aTxHbL*taRs>4wp3$dszt3G0+(S>;x4!|BwPGv7SPQPA$*K|p{rB0D<8VwqMH zo3DO6qro+8G}3?(CWQ9r&ZOk`33t2|wQio%$QWhePy~f~vZ%X|;rP*+q`JL^o%(;m zW+v@a7W}zsMU*X-kvWpWie!N%Hg}5U#%SmJf0EXuD(=Wjeu4*d28@^K2#5c8rsUKSu3PuPD-TlY47Ii+E?T= z>LlcKE%}Z;8w)PR`1yyIY=6;7t2+iM_{b=ldtMVdo1!u)>BMBUIz<_>>Ps1sg1Y4| zxPzI_dW$-cQMuTX6jrV)N75oQMrbe0I5*TzThMHo4P{+~h~bGSidQ3)7`?(ms0=x@ z$oa(vV6L{LTF5F$#k^&nD|>G4Q23V|tjuF25U=e0bMDvU;LG~|RTsDsmi%di72S97 zv1Lw$Ox~|uf#MA5{hyBn+7fIEzNH+Fhwv*ID~sCb`(`1vc*$|b+5!gx8NcuS=bXtA zTi+T;pT0jjmTn>LeIdQYbZsqut!nZPA4S_`L{)Qnp0OhQu^3}$Rj}jin0(A)vAGqs zGV-^R37y2k>m#Bx)x1S>ss86Z-3DNFUF^=6@Po{kBos9_&@g@<1o!vS${Ks-XAuQb zFa6WOE{)eFbCP4nJy$Qg8ZWb10J0ae2*cvb@6XH12UP&&nN67}`g! zaN??C9GmhaJ6Ax%u=vkM*WI|8O0Tq*h1xmE303cj2FmHcr{0rO2Kfj$u)K?Q zKn2W&jlA4cq>#f(9n*ia{W3mWj5LibwVRhg+fn|$=TAz1Mbt@cuT)>4uV}K%jI+a^ zP)PMT=kHclK)o+3q*A95YaA@gT44g`Mq;H&!|UR|Vy-~@u@-_bhkzGD zMK>HR>!{sj01k{s`NExl-(w<;jW#Q2AOQCk%iDMj;zecjlz%3zys05^N9f2KE!XsV zv>E_%ulDjji5*0Ymph7wn7Qe^CZ?o@9kqgcis)?YT;h`?OrI>SG(Q{6iqI){hndXT zmsTh_eoLj3)BwpO*FUyEiqUC0WenP1#brgCJ4w`!K3BS9+yPEFQ#ti4Nb*O>SD%EJ zc&|DaCE1Io;{Y5If4@25y=YhIxDh{V83KSxnd=wQi+P3X z0K;sQl!_wlbd`k}<;2akJuGss@>;(PDncRwFKw%hAJMV*Ja%>vK}?#aXyUZo*XJ=g zXw`pRB%zlTt?U=tJEbSf83E!Te-e;5l~UQVO55`VnYu0_9!I7h_=)b!SRGNIqV8fjdk~lmUI_T!E%q;J$3Onog;vhs5opS4 za&FRrd;s#M2OO}A#0aIozv;9ynYWhelzjmZYVl|*V{($m_OcDX|9y|VhwI%hIX!p3 zGi%O-42`_`BFA^X@2L}q7~cLA<@TA($#mUVAw7@a+z*1=7LA!DuUjP>H9#7o7L3Ma z`AB*8Zh>=>o{deHFKvUK7T2iqA{CEn#Mf7${LJ~br7F~FqjG6aI*ncD=bIeWc3?6T zVypiKWLk1e$STBcYc(6-*t~;x=q8=*OEEal88-V{Jyspp;ge=v6-tr2jCKpOC7j>r zSsbry`cGKFfZXBBH-yLT8jKp{OBuLy=Pz-EwI7RV)E$nr z^;oLcl)9d5H0sxx0Dq=j1^gJF4r62qb(wb2_-d_2|C}o}_5jYEcTwTI#<@W+0p9!6 z+QS`vVVODaZQ$hKftdRw@s|Fn(DNo;NEw%fJ?o@xf%N{%gpw)w41C6P&`%pT4J4u| zlezob&iiE4gn);ul97feo3!Dx30NzMO69L-Y<)jZILxSu0V?_+oF*c}!B)<1Am8ha z`&QHXrZJPHoasU68ve)Kn)y*AIe#|2F`^C_Icf$0py43D3hC3N5_rQ>p+te$?ZmB~ zmr;%BrynU;8xsxb4JsXSt`;0PzPbF;T~Ug?&4hLcc85X@Gw-LG_9w{0DhBtVtS<3;SLk$givbON z_7|J--l4Q2JS85DHP*xhEn|x#!{a+-q0tZil(6J=r9UXqxH#oWF7Ks{%)e7GM}zeZ zA)HpHM|+9z3@C>SN#R{;0~<kp6*r{B<}j@N<8HDu}keM6W@mWhB?3lZ@!H-f1E& z5@lPJS8s#z>|zue<3VDMVj;r%51|vpoxXSO^V^&(`xE}s;i_&G?v_QwZI+YZ9HZy9 zl?iq4XEev8#Q7^!1IC>;g9@aE3bRL!pGWUH)^?T5w$Idz<2@pEb@o!b%*D}1!B4|D z#>tXxiO#XH{ox}=$h(RJzacU49y!tAa(?{@Jx zAIj%uMMrreks`kWYeoEs@p~h)!L-vDgA!B<1tZ7jLE9t-uDIe2L7p-v{MCApu;%C) zXy4+d_T@@f{7EVp+pKtUx1&e|uD;eHW{x_~b|{3ZpJ-V-<&|Pn$+(QRxuRrg>UQa` zDDk{q_Poc_6lge;w z6}m184=TcND6F#VOkUxo^Et6HoeeU!5rYovV+EGKH+0qY3k^@bY50eyH|w8D?IATHilsed}ms6oJuYf z8>j!YF0&E*(>mR>q|+$1dmv_NQd>+gqV}JwsLNJ;y&Q-IAdzlq$Li8+!J?q&{K0=) z=8n)M|Et1$K6_VA!domoWqz(NmD_sz!^?LNaw;%8J-DW@gY(A9gb}7)BD~hDEoCeqOs%8t>)U7rp zyx!Uk(C14rIqH6bbg_aOkldQ8nEerNU#~4t# z`UIH|w<%z*+{H9M7TOS8mVA6f$~}u=41Hg<sAr&R*QV{sK=;w)|Zv03JlA0j0SSV`R+cb0<_>(R=i$i+i3|%U#l5 zVOP_J1!E!hb*b2kLB2tj!hy)aNgEy+x6Cvkchr1x*t5?yY3b5!BRLQa4E3qWeo(F8Scq%`H0W{Qh-f&CKRu^)LZ=JfD{*Dl-;)O@EZr5Ur6);tUxcaswXRbcK5cXT>6_6A;a|b z=+|;sbljv(hiP#r1{svPUFA0;{}oM%-Mvd$QQ=t;%iU9lc8Lj13A=y1KX)?!me859 zTX&|CR^EweY(ASW*_P^<^UN`Gq0#MsTeolM&cU(PDMQ*`PJk75n_LhDunOOqtlPfx zH1FYl3og&X9I@*8K3AA<7D#b(>ovh&6c@7j zZ0aaSw|i53gB8)Qmr?&DgR3=LTP!KdLy(p+vk>o^YaeY8#nTX`^B7|@=ay$xy{e#Z ztmrzKpS#-ZwR|Rn;c;e+qa6}okB)d&32ay0#K0a=6UY zwQvUoFMuDIAe=UkTAe6zK@}TZ3`_pL<1(|7$_9I$ROFP+i0ls7MbfCjDv<;BKJuyF z!;h?30~M>10Z^_?tbk*~d4U*pCrYbcozTU?Igt(%B38t(_%LhErP7*L2x&0X;KyjI z^#w9|PmM!K)8WNw=t`5KrNqSY*?!V&h?!cRak=em^Nx|zy9v8&Uv|_f<+E*xWL^By zzo*v;s>4ic3t5je&fMq>XrqrQ(RwW=PDKY3-z|1b=2etxO&ls+w2QY|YB&bZH7A=g zX^7sLag^nDlV+V@jFg`$sH0begmMH{7U=3nO^nR`l!U`~G~2CXK5^hMy++QE%sUgl zbO$6TxJztf{p&I#rZl_xDD&?n6pF}y2x=V`oHs1&*-5qgqA-L>EjJ%m@pw8v?p^Sg z)qS*4UW^Fks%-A_C*Le{FkgH_KX22X%;or{sU0i&%uVL#G=~hODViSqV?$827$*{4 zB>f%#{I=2`J8FjFY8E=3WE7Gr=&E)bBs5v;9+rd!2vguFi-*X^yslYdF2mCZ8xdk>w^8P}a6K4HH&Ybwk~2 zF(l#uuk+b~g_73qdoJ74W@FC$H$E}U%HjU0dCwS5UNu9;Yy^Gi{Zmhtx2o>Wh1qqz zR|7Yv8<+QZdS%8*$d2OS_aqDIi&o?*U>#2X_qved=&5=XnP0&#Mx5LE-1nH?7BvTn z+%aoV(-Q5ouWFjEtwdf=pF>9VtP%$Rt~1BZ#m6iX4<&ams&b;RP0-L<{kxrrLZ;u1 zMfC6+#Gd9aZTx*|hZqq&lN5ik0x+dOhMNcptHmQo-RKG20;RPF6^)w&Ir_wE%TVS|=sMe!4gj~udaJ|mdShtLK%-}j-@o?!It>w~{pOb!I-N}T{P8+fu6I5w z(U#>R=)<6lJU4GW2khEd>)WVqDJNql5elfG%vX)Nd3;p_ayqx-75Np_@U&+8@+Rkv z!WmBbW8EW^o0x(R{bV`myS0Fi&|0g<{V4>Pvv!|`Ka#z8nJ6Ry)pAXz%`KmZpR8w_DDw30X)-Ax4wBG; zCbT!As~Z|MTbth(KZqc!N~vvib3K$WJ7P3JwXWh@!Yap44?pu&5N%|4X4gvd9hvp3 z7EPUAid8}0$WmoxRrnpGaC5J|&hOM!nF;=>{1NS~-}%V9RER&mNZ0187t4Cm z$X_ah%9rVGmo+9S6g74dZN?gr8>M;bsP!rov0UACn@DR65a4B{ftz+Eq*6=*%M;AGiNd>UX|N*-@ZiB6M># zxXbKqf>0#o_eJc2b@aq?^{GAcZGVWs>3V$|lX=Q?=9}U*=ZYl2+Qq7SCIg(P@%vtM zVdiBfgtsNzdNtfM;B^#yh^<=SaldCP@mLZhFslWW6h(ZvlChJWx#OM~xz!g|zMJ`w zGBfcEj!ZH5&Xf3hbuGrTc%$)h_6*vwhE@#^_Pt^6P5H&nd#kIEWgGsFW_LDwkpQI{X_j_#cGmv0a<|^AHI0J79GRyMv63<;BpE~K>f~*V$oKrNdYjK05v&|s zsI)A>rde_`?a;3T!nH=s@svvgtC!nqhvMDCeB>M8-j)a7e<%JnV%{94iB6KF9lZYk zb7iAH>;&w8Yb*Htxc{zTg(cqa|D~DuXKiJwaPt?g?#M9MFt{i^x~gW=Gvr6|Qn~hz zf$KQP>%}2hkq)iis4$tiIFBNz?}^T~wQL&FRriYK!~5ozP@i0QYS(4HigEgs><3~% zoc6W7rHV1(jmbBTwNISW)&+dq?z8BO!6Evn_c;=%cX%#Y#lvt|#>4C0IROVt!$;S&> zSwC&qa&YFb^S0fLi5d#oXATNPldemvQZs|>-XZ^S*j8rv_w&E%P-0ordQ*9w<>=KP zip{gWHT%hf(i_=Zqjvbu?^emFw79sq^4%)>NPO$w%A5}wivb@7+KvR_D%woy%eIB zI@s3ljAood3ioF;^w#6f)z0mUu`g`iYQ14Pp($Lhlx{RX^tXHa!yYikdw_etIJf13X%12~42o?7`S{ zF4BdN(2Mr%@7|e%qk8<%(%)Y1iB0?+o?2bHBsX6iMCjE)gg5GL z=pc2Cs*j-W>Oj*SYJt6$T)nb|w@|qTN>sBOLB`_8*V7%1sxiZdyR~09!5RL@zJL0L zzA;+nsAz3mAG*!AKj7XvJDNXeJQS$Ep3w`kxl}*uPRn+*C8fU{P-9%SfFXuAkrim> z_=XBg&WMY-m8lTMq_fkJo?;_|paNq{!*{gLtfMKgR-W#->;t>q=Pr?sZCB9|w>4!N z8tIs>G+l7;i1Cgaw%W#!$t`O{$`hxiCl}}7qXu&$q@4t4WJlE2N)6fH1kuqDEAnS( zO3TFRDy-b}AWp7ArCffkH?uyQm zIjyeu-_?$fK6bLrB$iaGmu~A*){T=%IVG?lYNyjMX@tI=5_RFh7GJBq)9VU{pY`ye zrLgyCroYDWOTi$aw@tw6UfOigVYN)5_^U^X(Bi&y$=k*&j{Fz!pqY}huy}!4t3I9u z!L%AT9yQ?c>+H=9;p(@=#d!~%^!I&kaAs#&dqmFfKk^O0IxHKg~v ziMTN@_zOVHiyxn_u-p#CQMePNf5rC+;r{9RcKHM<7+ltbbmz&}I5N~6S$>WL%v*$M z-U4%ubL52wSBA$1LoNI*XKL~HofCMaDhsru^D?LBK*DFuI=-K-CE9Qm7nW95VMqv~E}!JN(-ar&5kzUo?Rf|h;v zw2Y^}HpzWme3Yt?uJn1A@}*1SYK_#F%GRG+8|;(&_U7-dd@8N&iEFp|X?9RiCp$~= z=MAfF?LEF`nY&bhBB#dRRand=r8k|e^$}7FiQ!&4qes=41_7YTS9@fOm%P!EHc5{| zl{Zcl%9d+xI*7_nxO{pr>k4WhPJAz(!SU$&-gXms`s4n5XO zmLREcCDXMK@AH|3H$(-X>iHELT;00Mq15S(L$#YYdn<%LA;FWQEb4vg=4@84IhHq= z6!xGA+XRtSLCPlHXs}v@WO`BM(Ow63ezYvNl^X^G2q|*o+^q(j=(*@sj8yb;KzapI z!wNU)ElPX);_4NN~xoug98EbQZG0a{^YxevC%*Kb^CET3AfB}%ziT#acwT|n3tw+z2G zTUBV2o6Y$=?qupz=84h7|4RLR4+ndE9TB`;yku25WBU7^ugK%HI=y;iTgbZl*LB7( zA~2&;VzokR-ke=!+*$tNt337VNr`&(`h)9ap>+Kfn~uHn7TvMed;Clfppzg&huuxl z@j*);x`RvJPY)Ki_EUfK2i~_f^xdTM@}>glQM5NsV~JJ0^f{NW(ae!-E#t=2=M zz_Bc^-MtUy=4|#Y-$4~*J9+?~+?-7=c69h#Q&8l)cnIeHANJlVs_iXY_g+$gw$MUx z3KVxJu7Oo74cdeRmsQ*)NQ-u@7I%UKrw{^!ASHOPRXn%^x8e}2xE0pPH}>9l`{I22 z?u>J8=lIW?Ip!Gu`M&S-{GN|E4)#LTd$G{K_-7Xq+V2`M;;*7KBR^mIoEZ@BMB6vt zpKQ$(O?y}PJZnKi`H4cLt!z;b#-u_0ghY_8VR7jlklzP6=N9IEb)SUB0izpxGY9v{dPED{Y#>HDOr5=+*3usw{OQ?m>EvM&K8SY{@)j$6I z1=uOw^NN~VPssKJ<^N9`{kaScu-u;W`Vasx_)k_KSQ&5} zp*TW(Wq0`BKLVM4glZ>pl-vJ(C;#s+6F=3f6Sn#z`xcG@zdd-5YU2FN|MI`z_di&* zX+AzzOd~PBdjIA!QiX6G@gzcpvmIyk{KZP85opAmCd_QGXD!cx34G{lm|%stZXh*di`pxa$?&IKGzzq2~` z$prYGCy#lj{CA*j^|Y3x>lu`%njXe%Vs}&64!08BS?@8X!*gmf}8V2zu^x|=(TD-|LwU^jbT+nfxFz=CSif?@cYLx zdcdZ-A8d;G1q)KQ%H1No*EtBOqKU;hSK~0S4?JF3$LNgd$1VRORp+Yp*O8Wkqchm& zFyF}NqRFzVGAP+v%bdA@u!t7>L_;TBRysLG%cihr__`j zoG5l0$S8jpGN3~D59IW3NJ)pEVuqk;JMS6af|a4v=GU!ab9-U*M74O2+uO26AjYGI zo?>PWH^tB)^21F@zs5DlTd^uEuzayirz(cTYYD^r3%x}$|eqCdpO zkr_H_m3^DeevZZCPADVMuY}P`+Afp3GSZ@X`Pc+JVA7&*)N+hJyWF2RYlYNbxSRSQ zfhB&^({3wTLU`M`q#kZZypS&ZO=RLg?gV!znlIfH&`Tv2KeHAx5II_8m}*FtPQLjr z!uTlMz=sAJw>Das|Bcgfq3)Q*XF+#zZoen*>EzGk=l$trK|x&D*y_ECm&S`2=-qE= z6u1VqiYWUR(c*Iwt<7`nj*@yBv09}&Bd+0wW#E3#~7F` z;GFmQokat+D(O|y?H^NhaI4=#;aGseF$#iar%L={<8`)sqHg zxW5z!)gi_vX=j*L9S2Nb$8Ax0XIR7U0pAy(zz1jI_({{Gcn&l zUXg~e7uX5V^}L9oOH(#j>bm@%+f>scS$UY#A=#77Y?{pn>bE!-IunFoqXfR1$=dLo zFB-|*jZa=aek8E4IIW`Vu}`}n`2!~Y0Fq+d70V5o$WpeQDN%&PZ-ri-KUMu0WsS{G zE;i})(a-5CpBA1t3jS;s-AGrjPte2R2)>L$c+FgxVF5^IQtreyD7(kYXc#MGND7ab zm#j7=Wutou*h^20|{N%CYLT*8vy^6*NMngdaYVdHCHPb z^G^5P+>P#-c6v5~RI`U>zWc_$Qd?)X?+bMc;@*o!5DnEj5=<+0GiHBk?9_MA?J&=z zZcL#_Vy|W6*?ZeG_2zCWgIhwn98Y~m5rK6O0h)_cUuIV95uEZ6W_G&suIc8S8#8l_ z5VLXeW$J>~n}=x`@#n6!wL3<^yNyr>eMYdor8(gp!A(*9y0if3?JYmh{Jk-R(W}&W0YY#M@=Q;YF3~y+Sni z3uxWL%8*y4SLLtrBrd~KU3HKzaP@~Ybz1`;H11)1NM%!*riFLMkQ#yO*d+aU7eJE` zuW#`!#4Ww!!`B}z`<}l!1hAj>!BVC)Z8YR@xk{5-D~+v%wJaNG`>gPGcQ}z5(BSzAYQ%1)^wO zCsFv^!`7*%DDQ2;x?P!43_Rj6lqAi?KM( z?~{-`$jEnh7Tz2N{vX29C3QZ+UYUAPLr#M=B(9}r)B4uill(uU#kGFqtS29S96O|b zA5FaTu14a>iTc!D6EP?4hVFlh!0;RN;;*J*+zX12K*he45_Dya-c>uDYfcz)MsK>L~gV_ZYDL^kD5&G z5q@jYF!@t|vU_MFLwf4@uZ8Xm(1u4_A2Y1R3}mk$!3@_SA{AK+jfD3dmoUF*i9*pw zd`NN}t9i=E8vSM3ETFBhZ+qwa?3{o3cxgD}gFo#A@u?Bn8e7jQCAAm3$-PU>{J+O+ zKQ}`gEuTKc)(@1VU+%q~&wdDObm*%d(3;@ByV~!bLaa@}?91LBM2-kxzZ zW)bNUF@i^f^Tplsd>}@8$_=h9a8yc;bZv7v>6*)<-ME2n%7aaKt+A0k$%K)D)-(jf z$D=Y7MF4CJ1dtQ1@Bq=QoAkoT)Bs1(*hYEdcZh! z2#eZN9;|VF2C}D8)5|DU1Dm9|H>iB7x0QGZ6Xy+}2?((x^QR1K`bRuBUE*bS04C{` zn@>9rv%c_7SX_aW=#T-rBdz+YoYQ(nK5oLsH}ou%w4v%Z^T9BYIxcq8H?lJZ08hwb%@@sU=$e^$dW~O}A0jq?0wBf+%YiEpi)4msr6=9Mlo{;Klm> z^;AYqo+gSAxsFpACsch^cdD`3UXbbM2(N2~)ekn5BHS)X2)s_#&#h6Vnf1ao26&oz zh)$DCluNY}K{yM z448*~8n^;AX7JKjALL`KqnsefmNy#qNI#x2%_-5mD|!x`Y~LMKHMedyknPQcPQzER zc+fe>RNl^3(U%j_nhtc!_25m>)_zw{-8Foa8ry8Rt}qPH9+tqn*aC|Sq@B-AC`RQz zBuw|4ODIoJU6OH6qK?}hY2rM9oI|W-hGq?pmt0mk#5oL8Res>k;@_<(6ctV1k;X06 zKJqc`BF_aln?|ymoNqGypsH z@I;hO0DXLX8HzfdqqTYopJWs z`d&V6Y4v3|!|_s35ByHk!B%qjF~5tXv9LINde8v!o`#Zs;=zf)MjFzk z#L@UOKL3w=SkUKxB7T-Uea9u`U}x!IPN7?44+6E8{;jYA2N9)xp>MGMWUJGVR=1Or z*CHg~gvCR1(z~B!@sM7#?m!E^V7MWhGX+gkL;%7N)s)Yw>-qyIZErSn1l2+=!#0Wz!HGSE~rFiTf+-6ACYfU(ZJKB{CiPO5_Pp}E<{HmYJ zm-$I}i12CQ{)<&f=Q;;rJF(>B{3FZc8bkB2i@?A;-kt=pSI&9=MNVdana6&m&gMvB zl6?Qyf7{!7@z|*M#uk#kr6m2g+x{nu5|&p% zY}#i}GL(vf)${Fc)gP#HJX@X>fBSn_&NO#~hJ z`G}cceVzZ}U8DReC_?ikAKc10$C~z(s8o4gFjzkM!mw_(*s;QN zVI0`r15ooA2rg=?@KYWxJH#PHP|)J07{~16w6cgXi^SH~@Ux8JDo7b}j1&+(ty40e zDKj9FTn7G8&!%`n;LafF16Vi@)k1xGtP0j;-fu4RwRfFeyKw7l^R?g zX_PxGQqP>PuWJ{ty3z$Q3; zAE(EBm45!$+B?Nx3kKB{ILhA`_-0>dOKokEvp&ssTL`yd0j!>L%K<8ADa|=~JrBDD zbr_s@8Q}sgkz+p2H;{O|=uofdLY@p(*`|TvXE?18jni-ojR()Xf7HpxU$8U`itbt~ zruC`a6TAk51~=t2YLwX7Tm`dDK14a)W!#BmjqA4>a=Reu%?s=Lnth+mSzpPIO`qFN z-r#r<{afv7i6~6MT8nm!U4x`y%KHuZ;EME#rqc{O-dYo5N>AF33Noh5oC_S^mChg) zjlGy`sXr6oaTC}(oP@b|xzm8-&$MH5LOq)ugZB-Zg(|FXF;f3{9bIqhsoJnX8Q+~M3%#{^iApC|xeQ7+$@^z#VTFDpH!Fg?)?_o8{>`^!}& zUjl}xKaJ4VgyaCPl02K)F)9YnRu^6?(Hrq-=W-Gx^TFi{RufVjz;T%6Gjm3?7sS*j zd(LmvDN#EqouaZTXXoHG{IV-^zfi?PVlV1>`p!EQ&=Z|#vv4-LIZg*2Z|D_0u@1f= z-UTntoaa|ULTqAJ2tVF^Z{ZYb0O+Oq4(8Vx2U!2knmV;|oasZUn9U6fwY!zDmUXsW z-ifwHS_;`3jDKCbTJ(ukdZyGZ=iW;7zEmuJHC-{lwWyMKbbnm+Q|`SbGHPtAQ_Q@8g;2w@N6Np06kLajYJHxC3^E&4S(OF8(KOG6q|aXv7vb;7c~ z9#y*_m3f_+1}Q7Vb0R7uMshnhNE89cc456PV;?a+A8y6J5M5FUdZB^NNy$C@blG20 z2E!Nymgc!p3H=3`&re@PR5aLqO;(ZuMVCn9Ln({BWb4uWUCpe+A$h0a@5c_OROO7t z4H|5Q1IwJu1xV1`PmvZ1Fz47@PM{Ay?jXcL)Ww;fAFf%q+=yn=tf{NgfFRd(P5+TH5#j@mS} z>CLCg9WxXlT)m`#u8(o1OL|?{H}8aX8dcGHa;CHDf^f_B{HN)RJrIv+e9k+( zScf7$GwOQG$%%DX5EZ&4zQW2 zT@TNL?^}5BLWzZOSx&zfpkQX@=yyDmk#bu3@;#wH6J<*FfPko@Cl~&2GOqGYvd!ZL2{kEUMo*2mRjGkvl@!>u>q6RabeasM@DiH+>{-Q>!Elc6#Sjm ziqkAoOo@ihiirUf&=*=Y2kDmgv@}G-n_vPv&elQVJ25dQcJZ$F8+eEo0eb_3C`b;N zgBdtZ6W8Ej&rmikJ#DkBg#wtCYrU(F-@s@@%yS*YnSN7)H4)y?%aL6Stj#RbOrxQR zNT9Q`GT78D!5p*H>3F;RI%amu8t%FWEa}2j$nmva=lPX%!!%t(^@i?Y^Fb#R*Rkgy zEr3q{wqLIx!ybP)dNq*vp*lm3BMIkTpJX1%fMQuhh+(Tjxo2)^I(%a|Z0loE*U_>) z1*lNNUK=?^*ZCjpD$@YH49lUtl(r9+G*|mE5_|EYJ7OgHt9C)t(aG;dD*g)!WkAHecvsVnT9rC%B?BI>g> z3afef2{tnd9nYs{D)VO&4gNXtGMCJUe>TDNjBPS&NA+#6xQ)Nhu7sCg?b*23R}9Ie z4i@j_O*xwy!YHXH9eLK3(U!#{E;+szPli2NZ31%v+O^r=PuU~4MYdxp6=JYaD@IyyxuVM$~H*v!=Ne_sJ<-ey%*3c+{#6 znkndg`u?cTAu+>N9wWhI=AI*396VUbKPpTu<5}+>-YQQb6H%4n1gUC zYGUB=Z+ctQB7P!MR z(Bo^Esc5r_K@IaoW7S#l7FVUb!dbFh;_P;K!8Ya3CYUEMiOyY6%m`iYqBmgY%Q2#o z_ijrDlHO)zq0;e_;KzHvDe0PFw0uZ-HPSlCMU%H~mxo|<@@|u!FK*umEZuLQ*f^|Mm0{7K z@><2KtZoamHcNj}69>d(zRl3rglE6;%8VN0c$DGjiWHC6w83h%%mOT~8DCUcvC{k`_4VM0%7VBk&C%=>#fJx^4PFe)+B43RzlkbXh~ z*IR1^%X?yViv2$oA4!~<-FzIWrcy9#<=5gY7eZ+(+Ea$FEWAp=E%;ei3{_v~)Q@u? zY6f%i+WE2k`-|aTGnXY)P!;qmEz1^*ATdH7a4tA5rhv45iB!;@>AzL)3ew1B)_Updk>qhC!oh)tgwvR zZK^o>K!%67(b|Aj`{|C-E58=r6Nh<+D+k{h-GcEHXm$rNcWkY=Pn_wm3eT7+^9%X< z>{T^`3vg4f-7M;bmx`LvO0F#!t$v#i(`0Kt@`iHNT!E`}7a zzyLP|L}U3&vMBOJn*>{{{n7F{_f^j3@sEB#hia2@l|n<3p&hFKeSaA8HN&^L449ew z*=0t|CyQtLhTp#i6bO9`Kk)L~V82K%&{9Kadp0C1;-Fj*Wj=ahKFR(~0RhNronDE7SCPUg82Dz%YD z$0>!+#~^0XfHAI;WWZjzJP=eo?o&o|T*+Y-a?C0H9-sM_gnD;Xm;7It@~rw^|1Wl^ z?a9J5i6f4uapz8_H_L6RSj8&_y<_9u4=R%N9RZKD){M{^sGUKy^#Ma*kO%TQskbj5 z7$Iz3W|1-Kr4xotaW9J9a)H*U{sU}MSAhQo)07_U8&7gCrq7YP5) zXV>S(|D&E=ANNS={9k&fuA`~yWRPOP8{VpFb4`CDi+eLiYE*?C`=PUn7f(_f^a)~T z-1D8Uv^{?aSHV-~mAG*}Jeh1ZnGLn-TP} zt*_msUWnw6m8Mly*-Dv1EQbef$W+db3aaX;KBRw__`7WP{y7^^@IC|GG_tsY{c&oTmzX&fE zR_D3vMWL{ZzF0{*`)c;roo_bECUw9!0Gds^3Eo=M*YPNk=lpC_kk8pK>!6JX^!vlj zOqr$Ci!$g)%>iNeY8_F3<(nAS6z@&3WFhskAjwLHn)W#UzydV;BK5VI)zmUvUqlUD zklx>?b&#_4%;sm$=0KnNv-ySd5*v?5)`E#dMp)(mXV;vNk!42!Y>h5!(HwD%8bx|e zYQh+i3*&5=S)M*`m|HRGVS8Xc72L+j0YN>rw$mL` zGcwsy#aY%Opw}TZIn0`7B`%gAqMfX{9Y{3`*pGPTTQ`fz&-(Y5YoG!Bl)Q?(*2-8V zb96!Z(_5~xS7}CeG{r9rMT@X*$M9&g%+?T6jMYngO~2=WPl$Ff{SsQN)yQ{INk~0G zJQ+ANHYl=X1HJ}WI~Gg`0>v{~TxnJrB_g;2ZDXW66D*+Y>pTq~247eAMu~Nk$y52| znSrBs_hTXDd177XnvbH!`iaaIHTm5oXyDf#8N*{2s8NmGbugtOmN+%tWxQ!ds&j74 z1vF(5Qt_W>3$?iB5Gq2n2-1>>OPF&)UrTAF^@%cHp_Tgx8z4SxgVRj5!|h$8%an~- z_4B%i6Rlw!7a^>2F@bYa3un()X?Biy2v^>36X!$}1v`?RlGkl0DYb`E1!?rm`UCV*s<`sY;ck&LmeeOYJDL04EH^1cJK-cru$eFt_nq+20p08&NG_x!uWV5sA|N%HyMSfb%00`275pZb4%MJ29admMSYI2n!t*;M$Xjy z&b7072Q@4ov2wf}KqqyZMXvYMD+o&nk0eNWkX_hWY~$fcYA{JcrL?2*3b*^Sucmso zpy;9$DI-Q(hThjZX8Fip)jw zG<>OEWydjUj&7%WC6qsp9J9!|^(aaavhXvB^=@m^K>p$4M;oRb6WF)g6T0RqNl>#Z zgR}Ayd@I-m>7$zJ;XL7Xd*H+|3^}#gFT91E%5LK*Vlg(|AYK#DaGM&c#}(iIDuV z5Zy0 zPd3(1blElcO!T8R-WHGVxF0Fy;!L8cXG?*Y>Ay}r*~^gVQVzb}vn!qUJ7%=B=EyFs-+M?G%C>+wgj;I%2X~1a~DbX+shnM-r z!(fVkf4O28?*h>M#D$e?oNZ)zGS~>Ezr>1#m_fFPY-^^D@YlX4jDMWcbySF`#Fr#+ zA9xu&^~I;n!eoe4ujU{*W{Hh%l`axlyD`@T3OWmugfj;_m*>zL?XpMO>v`i27d(E+ zo)RVF7qVEZlXfI zPy`G=o7?}~@rQ_ygXA)i6SG{2Bvw>k$YptAzYVtFz?KMrI6 zPLVXA=%(*ID_iq2S*E@^+s6S-NbasIkGxu!DGthFKAI4i;>MkQWSD{;@?oUgyNE@u zlBZcZG3xQPrphDc*tu2&Pcb6YOcE;-r&}DImFrJ0B-!5iss&>JF`o;Sda;ujIduUp zNkd$GT-YL|e%<)=q-Z6BQbtJ#W0@YLS2{%JTY5Jhuf^YV8J=(Rs!WyrqZlQ#Ws@T` z3vKl8FQ?aZLah9CV*TKDPAls_{|00Z%|*)XHCiVZmFE~UYw;CVUK0%Mm7DjalCHEo z`z+qop3zwU{BUQ=)if(oF~Sj$F^IRILLA+r2;T2jD=H;7Y@`~$r&k8=c^-Zrh|v+v znS^!VC@XTc!)K*o?*>83&UB zH<@RC(N}2oh_P>FdWf(JO05EfarRXwjxxU$MXyoTMBVb-%ri$B*M z#-4FAoHazC)gAI+zsqgq;;X-KyIhsnP6VPWG~f9FXl6>nxF$-5yC>m1YN%J9$>sH| z5f+eR_oJA7-Mv)$SJqB{SJv^Z-Y}*1N%~HrAMVn#7P7`#G!QF>zQ!+^n^?OgeAcT| zg=`08nrw80Xm4hnX5UJb=g6zxe^XNOxyxDUc~VobZ7%ru%ldU&3B_x|_d@Vae*|Io z(MW3#_&C{zg4P?Z4S1@j#}uJAJ#$uA;u{@@`dUBoSB;~!F`pV>N#eOFyqL)ngnedZ z*UX-?_hq~#g#J&5ZD<-VKDEA1l=GpjbF;~0jaR`0@gUEXy>`jXajR9Z)u(DGc*q}I zI#oe37EC1PNG+I=GuSmR9N~ZB*R(_I-{%{96&{E;_Ldg1`mdY|a|+DzKe206udM#- zNAo148fy1)bzqML_3#I zO=*V%E&5Y3g%f1>yRf`+CC=qabdkok_cC+OJ34w*d~(#RG!9NHzQ|#+lw}kVu6<*W zsk*HZiD~AYsK!Va#85pcj;9~of*THKZB!)#G!z!nU<&X5KbsnxaJ~6D?8nBhK8_Oi zK{EB>DLD65SCx(5BhnibJQ4r?(zbD4cBUC>p|`otfYtxw+pBcFiFd*gMrfKNqm3%W zPl9L|k4|6?8S7Ni#n^e1=P(=SFF7ABPXkJh->i1=6aOv95c)rm2`dtlm<9O$@51iljD}%8`(se=nz2)8eAw5}_{>_5K{< zS*=UJwg3&HTv5 zd*-~Ezn_0KyR;FpY2rz?Iu)|Jq*cs4d(gKSzl|9Vp~>hs3^F!!Qh=bg<$eJPc+g@c z$K3()&AaaEmKJ5~{#zg8TnuaWfQ5JExfDV#iJ{ZvsM803eJV1Z=4*fs#z<=-hH%TA zLpwnI#bVp>r4mR&ULENp;z9w#J5li0JQ*iuZ|ry!e*u@C79s{AGzT>lOVz?p1KZB; zeg)h$F}P&+{X-Y}L^4HK;~ z#3gqoWcV-`zF=8J`MA5Ey88m zj!uc48vO0xbxjp8gEBgK!-l29!uDw|EGMZd9?_s{zJZfNFkikkEzcJA+U8y`2rw>G_O}pjH8VUTYw0wc zeOa878j&MxRrT#Y4?eSYdw-%vO3zbqz!o>za-EnINmbJ(M7|8wC6WVnxBQQLk}PBk zSI_Kk$Dbyw+}$6SU&Q2k_D!HKvOJtqj*7IgjILg%c3Q8~a?O=!!%i@r=LsJ*k2fo) z22=)?e<+k{OYRN`rzz`ceKYGzt?@uZ=k$lb4r)&`U)qW%kP+~}Twj4MbC^*gZz11noWB3+Ak{K)<31Tsn#!8as7`hLw`OdfDD#sZ zW2Q|bJA1>DVZG#ZPtIt`)bjM%`Apv~#>Yo{y5PB-qtQ?KQAGou#q@eLdZ1{!^X93FaN)~MTeF-xW>ssbZ~Bmh)-f_Q z%6`W=Qak%**kj>B!!>b&!{-biw(|hh+J9qEys7A(r&3vp`kWqEv#g35fRSTL8>2Eu zutI;E1F9CDk&$T?AQ$Z7v~xf~`nJ@h#D6I6yV5!TH^CRbuMUCohu!+{egAw*dS$l* z)k;T!QO<|enNQX^48_o8HrqgL|Oe=WsP-x~=G^}bQ({{3&MrTm=G z(Z2up(f@r%z*bS8o{~n%gOqr}EUyjbk}3|_`Ab1MMduCZkc;aVzy1U8`NS^ss{rh2 z1R}Be%vp0t8`C4qXqu@0{juU@C{K);;rdTfCS67%b*knOTcKgDKoP0Q>(_!z z>V7o{_1kYE0L`04m4L%-_ep7O=*?F0B!D%;~$LRS(-E=Us(} z3M<6|B(s`uZ^M!+Tmg&RxgRR2;o{yo8W&4ZUad;6@w}mRhFmT>@m@$`5cSk5dH$ZW z*5e|YUN{A;yF$Qv3zezRt=vT4v^WQY5EqNgM3-5o;p^hVZmy%JhG^{e8UMli6m9W@ zNOh?H`kO>;Q1Ejt?EvTPe}7p?1bvw(bM-gF&3(8Tktway)~l5I8Ljb$`tjh9sR@_V z6vvQTGde()a=c+XOU|xs*|st|px&!dn6BP(JVM#IezXuxP8mZiM5J71gcm`|+7*tM zPegtK-=gSJ0D>{Op1=PYRco?^MXIh8ZOjBHQ0$L=)tu-z%QeVXt)Zsb6iv4eUzn5` zd^5#{68$;r@CJmw|1lOQpX-`hw2pT?k%GG6o&9BaRm@7-&Oml9>T;9G`-3$L!XAsI z)#Y0cad9f~5Cg1iC0z-YYLp3CCg&=Z$J6CT7BIsH!zX1#-i4$#k^6=HB$-F^lFh8L z?9VJEGoL@vuyV~p#Mv*Dr!0#1*eOo88<@9!BybSgqd2mHDz!M&Yv(`z{R< zD1gbe@;jQ~Pi;ajfw1GbBkk&ajzSjw*>%j?(5#$Z`LH0}sREK$4ph~Fb5+59?rWEb zs%~^7t3OFew?emF>;xDU$zqX%4sP2n6uRyupVBbCJS28fp=&OaF)m`jUu`A~X);IO z#_{onpxA?{VjD`VkQZ4BO2elqMP9eG4rtN+yyXVr?Da z2{6V|XYukZ?71yDsp_?T8fl@ZyO=9$Y+1ac&nNxoHx5|lt9*I;*k9gF7k~-3rMXb$ zey@vqLJ&}4Sh7ZbRdp~eY8MYU-$_`v!ea_IFj^PXtVnl*hDi&KxmWFBLCHv$`r!HC;D zrX|`rr?AU^GFAKXhh|N1kBPysN(!qX#ibu>zSPHTIk?Y?q|`Gg*QzN+tUl;?AfdV{#3tkdDDf#Es$Wks7Ss_(lD5?Cag+IfYMRT+`?@iHzn7B??)YI@1& z%<#9JU>=?1AJhVE3}zRS%Um?$A-^?%8EwId;`4XvK}}j74?6_L0q#4v>A3|?9Z}mu z>^s`WDQFj(y1@J~85?ogKD8=^{cWUSLW*zBLW)y?+&`FC6m!M@yf(=Kh8ZhPUQo1g z6s97x9VL;XH{>B?X@fr}d(_kiYl`7jD_ycAnfjP;gmyaA*>?|~p2 zxARqYv7{dM0@PRtKMOqu${=c=2A>yU~ORcUi3- zRDXF(t7~Lgn`4gDflh{BO1#7_aX0UkPFo`(3T(qtIFYCas;F@_MZmUn>&Y zEW%O`!5LL~Z56E7D%rcDA9+kC3gPBOKVqnpy>Wc?8{$v9_8)NQcYt#9k}P(~0t3ay zen}$|x-E1Ox!^<8ewO|+-j;zD-LGNtq~apoUnClzD&jGev>Y@~XY*88qy_S0QR+!U zRb?aG9_eEcRVXE1-=<$+xY-=SLY55QNcnXRNNm|Y%x?CYbI9oBG8JwNaamGS zM=Lyl2EXnYK33=T90P3+-A<5 z;$gq?K`-?|NkK9vx>@f0!{jqLi)OdNLXg=qOgCcfk|92z7fR4F%#Z7VM6EvuY~zcj zPFgA3R$uH9E2QZapJ-d2jJ>GPhYzBAtEqp^!9>?I9=)(zxU7V+^S0D%_3`$!>fK@Y z148`ExpVeRI+X0Dc{wQs)56rb7im+c?9Z6fJC37BF&8#vId_u5!3pe+s!rbmc4%qS z)H^o|uiaf|y~x^A7GC;?wP!E> z11)^i^}iboOFeC-L+CHu;pVPR`bY6n@rtK;-2gB7@S)F+*cHveUoY53ikjDf_+Px< zs~`@O*|&fFws5V}rV;ez|9$d*-MOd~OE~h1cH`}v0p(WY$ME|nzZd>jqj{t?w|F4% ziQiU5a`YZvBe>YO`myJuAU`210;2ZcUr5|1S~cg;PM^iOguvn^)wx^?$}ImNV&T=)Gy^^_A?D;o z-lsj&u|kRT|Ha!|M#Ysx?ZV7tA_NQWB)B&2n&1sI(m0I-Y1}nvCb(-u(`caaMuIye zxD(tVxVuY|+sVw_cYSN!AMda4Po1thwfC;t=d51)?5cVmZd;4GbLn8&yS_nF#7m-< z-1M$8?WtN13zXGnFH5bb-L6edhTqFS7WlifQml{LY{elDfvC)LDG7ed=Z-!lF{lp+UcZ-|wz~QPw99+1U zF^X;XfSPl#$$IcQce6#vX*?M2XKsrDdD&#!MOiadZHrtj=hw4GmAz7gSVU`FyN|&h z2H>+#MjhBcY#f0ev0uZ+Rw+zxk_91K!_~6u^BHOR%0W50E}H~ei4u$bw6%3yRn6`a z@56RmO6vQXzWF^V$=mY~jyy#crJUUowQdIlQtjE6QUj?mIn1i7kHM$u^N zk`BHhq5$Jki{v{(n#+xO7PMI_xMXmvwoF{McY|PU$7nDe9hla&LF8(tPeVEGctvf^ z`*+*&!$Eqwq>j7jRamL_Ribvxo2Bm;;r4(h0zA&e9Q5?cZ}QcQ=j+C5yAc=34@jZm z9)c#PtiiQAx=@7omHn3j{)xP}?@B#3F_=0z;OMzXxkd}fq|jHJOyXns0-UinmeqVV zw1XRBgCNU&V}u_)7aZbut+oyMs8$^T5H-BCumSe3S5}-Fzw(rC%7BBMMtm>fw^827 zUBx|MphB=$!E@fl!O%G8s-$O|gjOXGgr0)GS!GcN;0?=mp^nSs0zx=RJGoY~C^v1s zT|J~1w)@h(9Q^QzH_%h6=I+J24p|2SSIntNYL4J}`$5A9K$lFgb4vG3Dy+JL&UxvN zA!SV&C5=6p&#j$ASK^{f-bymg(u$1rU7F%zO(b73Jb^&Wr@la+(P5a^xGb=3pO{t2 z1R7u;U-e^DN5{P|Tq7JcdGIKV2>Pc;qKP+UO70QN|50dys5wAx#Re|w&(>s%l}kJq z$EO+*crpM~m5R@6TJ99{o8Uc5MQC~T?+Z|^=X7=fw3jwza(d)g#y~$J)kh6g#ewOp zl(?Edu;W_PSPqqSK>Hr-A!EK=w-%(Sj8v{VE>IDk0;ZtHlV#!QP|2XRren@!iwFVZ zgSc#g=nLb)`*1V7tUQ0F#2y#P*JiNhih8wL0hm3avN7{`X zRgmfOq+Keg&sTX}(D`>&ppu(<>A<+4K>p{Tmyb-FnZi^xoFf>2u&y1!tOjIR-3@H) zIDLlIT#c%=Wd?)phXHipN@|y)9dJy31E@YgldpEjXGg8C!W}MMcG4htsme!Gm;23L zEcrGzfz7XAG}5+qDEc;BOMUX%PQV1}&QN3?vQqpZoCn*7m~jyhwmc26y1SI4T+wg> zzVvzXOj(~9H7SKA**bP>P7IuT1OXN^5k|z}R~we)ITiZErJ^yY*Eax`67LANy+Q|*(d&l;aa#WxOFda{%rbzBR8hEJRfNs%`fY?WI335YT? zCM-T8OPCx%M&hCqmkYU*q{jATTBAN58@#T5+Gu6bXacFxRZunTRUjcz$=gszFRT|@ znmEPSgGLDdiBUD~Wxu^iz)wS-c9KHBbp4>epvjOjr<`rB<{1g~zh+DJE{>kdCL4A2 zAuueEAhIu1j@*mAB|75u>-%)oO=Muxna}sxBUpch_q*x%u2h;dPP|VPQH7tcC#K{< zxfp;0k-O)ANz=t}WpYYr$S8bhoQm-G=0%!nLsvcEH&|@*DN%MPG{6h0j(x8ff?$^3JI6?lo6cQdq)i@bq zK&}2Q&($Q(`}!R~KQ&-tp$Jmz=@3`-ZEAMK?a<(Z0E6qPF)c`n$3(kq==6d>*?F2` zfYn$hv}|;7VoGv@P_HLQ#!EA-Xg{6d%DFgVsMb9J6SvH0-?QMIao>V@qG$_s%Rb0fqRMW<9(y!#x`b2#J~tRn(Zjn&&RZLr+? ziJ@ogG)K262-&E78o%Mn&k8Z`>33+Hl!;5WKgs9B(aMdrhC0&i87!Od(2O=X;0Q9* z*T=PNeOC+OWg;ljHsr6T&@3EC`HFh64ZTw$nNxn|tqJFdEgdV+U}P-E-l}hLkB)AU z7m**9%ol=mawAy^8?LW+j%9YnrrrnB>#U9ff^}|#(J?Qp-sBf6N%ZHP%oX`w(Lcb* z>sT1q17!PB>R*yt{+}!680KGY*~9}XQ?Nh$?T5jMVTjT2hx4D`9)HIAoAm#WD&9wo z{|T0c+w*9dS}_0&o~=qEFSUpCZyd!h5X%|IdQuXfLfFH!X6;xv8%>IQOE%lNsOaVx z$u`?S=W~yYenh-Al=@(nrC|I<%a&Zt266pNG6$%YahP0jBqwL*ml+zF3!V{m1LTOn z@(C21y5^Bvz>Q2XVwXi9N=0lEqK*p{)|cinbqGyNvB|Y&*iCSZP`Ts#K=JD8=Q@0Z z6r#(~?ofiilMPT>-#tIR7Y@G<4xq1{_Gg-d+_Q&#*EfNrRYLR zCTqv@ouu%wCll=$W5j23Bf=|5IqhD|)9Y-^My@M@I7Srmyp5BV$)5iO`g2F)uH}qr zt7)XwMk3UXca46~bhVZ*rQizQ*j*voO+5B8`)1)qe~-3O%eA3q5<}@!vSB%^4jpGM zP462+_wi`mdWP?^u$l*#K+EE=gx4R(o$sx@CM_`A9uST4ZcAhzB(5Zmp@T zgT0Fdf@|6UY>^|CQzV;Q@hz5&`;H#qb<(|rijdu@X`xfP8n4hi8!WQ&LII|tA}`UX z_|dHd{|*4qhE?;uP3}sUhkkYvZupY$bUCO;j!7g1Os83*CQ&NOUIc;EDIbZKO&D8h z6rCDrFznG0rq~4A8S$U7G{bIX`{X(r_3n}$#6a6i#oVMB}zS zo}HAIUNcp-i1F&QrRc zH`3w0o+O(HOdSP#Q|Z0i_g~Kq7N+We+n8iNn!Tvb23wFQTTD~T8^$u{I6DsbFlRC@ zXMWLSH&<1=pxXq9e>{Fair7^UIa^oL zZ$D&Y)+TjJa_efG8em^D0p1=o0=a~-s=gJ~n96%#bSy|>QipobGB?~EyFiIA?x%o0 z^iwHyCO8s~>|udAM9ka{A{NQ`X3rCG92;6&@ROF`TX&_yJT&J_?lk<~qj`0|omFl@ z@~@(|;_h&QRZFZ=P~x!3Cu+W+Z1>fRY~d(dgI4JYnFEDGKa1I?9RjCikwnir z#*IyR@Lo3kP>SqRu!}`L^KRU^uo7sM-gLE3vGXfmk7|`cAF>BX$~B_9%+3KHw;!6O zpUQ;6=y&&&Uv~~b4#&;1TFxzD%?FV5k?kQF;Bw-5VaMV1d$(E-5e~jAzHtUaiN_B@ zp;I30Y|L5-pQbG!>anp2YB&s+uIEm>bL5!=c`%T)5;%SrabP@r9|bd(lVd4z32bsW z%a&osouEme7sL4&!^+3VZl-ZB&!o>-FUY6IY~I0vzm?0cTYLeZtOmQO6{Aec6wV3! zLiX`FiifwRLgq-+Av({_!Z&i|MAPOo{U_)&i`k0?Q^RC)TfKbDnyDb5RZidmC}{VF z<`L0m6N0!m9L~tHPWhK_`n|&7kcjmq;q)9kxZ7p-^d=3WR9t?Te5>q{qDn`2H_=W} ze$hxErc9#z-mxbEf@w&N^nRE4aREPlnx$dT#rFm5tY|bo+^t#DIIH!1|G+&Yz&&OP zlt1Cz&2zmv?D$w9cr!Dc#L!DExoC5E9MYTCG{YgLV{xZ&SG6Xfi)(()KO#A$c<#ML{wr`6GUo`HjZuB z{L%$)%PR=D*@CG2C>w3aTg|fK;tL*E-7`^m-2=rdnJD+~2S@hY^3i#?W|Ie(^>|pC z5I$}VHL0n7Olb~iu0~^Ee%q*TX$wE-)Hvnjjdv;fngQnO5ll+18_ZOqT)b$qMhOu7 z#E2i?X-b+nxuWX8*{aZbo-ZC3LxH&%^>NZX+E4nsLLm@aVJUU)ludxcSEH!R`Q$-x z=Va&r7@Zv~S?hF$`)OQWEucVEZO!Q!=eC6rQJ;5i(Hg6qT68&2@p*H(2mT@Td&Mao z+p%8v*wbi>?<)HUHn_r@O1aq7!<23%_wu#7#xMcxt8-tcZ|<;l;xBsoxtaqSc2H5P zmYW`q^-GNoB?hMRLEh)_cMcsdhGetGS8)@$)|Q3!J=h@C*`Mc_qv;u6u=E3|BAdOq zj=uG3hQ7aL>)@N3Pe0ooUHMY;7EXXj)ZF<>HZldconAbc36C05+{}cQIi`huakZV| z@t>RS5z4ZJs^s%gRh*MEeBX8%*t2=RKbPJ61Gn0aERrX0hDRLzzYCPLKm}O!g|`IL z_xMmW#&~n*G{fohxtIMf=%B9jK!YegG`k?Y{EEu{l&rLg_5G`w)1;vS-<40cG0&p{ z*<-$-YV{r5z}4QlbPQS2v%V^R`@I5!wvN%Iq0k|-ipJ&T^U0}W7e7an`J}W^sC5ZG9ac8RlzdG_k{gA?Ex21RHKh4|mX zzb{`Osm}x{#Q$-wz7nJsk1;9mZDIq%Z?YDBc|;GM`Q7%r@=FDU-{0HC>wn1#;9N(XVMy9SjtS8ffLFxX9|^^FEo$-DIGRRlXa#;#LcjZg zZhq;}{H;Liw}Ss}{C^bus!$Z%cim$2O$jYC_dR)1+;;lQG{hgR?Md0M$|IeXciFH0 zKq>rBS@P@mqpf1BOG2e25pY{^{ zOW#79kxGugOd4jma#lndmc}>^E16uwf)w zXOF>&Mf?lKj3@5tQ>C`UXf2U_`2@SA0Pw)dT&&NqJ8iEg?(#81f_hPYvA9lHecW|} z<(5)@snt@#VcdNJP;uz2XM6s9+(=)u_a^hfKW0xmOy!Vv!ho<3M$%Q-N2hC&jBTES zseto_H0GIUfyJ5*bU+cdOW`07{@fx}M zZXst=Ab^m)v)HSO+{v}3iwAw>9|ff5db?_b60t5_#SE6#9-RYO(m;D4X?U1kCsZTQ z2sc^5&dpM#C`8qVkw3~_9_R>Z*D!ntCWIqh@1sDB-YM&LS6n+gl_~LQNwh5|s}Eus z3wV*n8b)h^CGPJ@3`UehtQ$O?cL59+;#|ZFf}nf+^qTOvV&6=?L6cymsPO7h9a%E^8_aV`ZfxItSJJDBlpH8YF ztgMVh3wbWSSS==4o~g9tBX(+?V8elE<;~rGmY8?A?5CA_e(YIr^%KM5GR>ELOrx>9 z;PCSW%MIUCMq7@80U}$Y!_3aDy;*6dra9Hk$D+Vk6)6ERUPo86QomRdT7%M)` z1=GOiB;5$#+ej&Ybj|2fs{m2xM_C3V5Wb@CA>{2!DOKwYJ*ybg<{asbzPk(ZE|k+- zZeg##L_nnWTJg=X{)@77pC#}F<8B;Bwn3M82fM;M9{%rIX_0XuZCSI5E|Bp#$J3&& zRvna&OW>*m>X?t^;x;+*P)=Z=C2jC01{2h$juH@z+#yIiLuvJ*_FlU#_7N*;+P4Eb z*E2`HGx0B^Bprn|-5bBx*Es%EUZqKIYqrBDzTIL+qTVF{?Dts9$j+oV*1tCotnudZ6 zc9V&uR>2e>Bs>Ak=T$*-6afe7wxrFQ} z8!3ST%>jXe?A+bOY?G~_*~PS8nJ1LRa2;1)2pQLu8RCqgIX^;-vYh|guQCIgPQWgK z3U`}~lFUouA(z;ka72TUG~?WQueuK6FcLH#(VucMt3E?ED@Nv1dzvZci$Z4K9P-0~ z@uks>|mr!+9>ZD%UVv-IKy}1BN2j7*tr>T%a@C7_ctfd zB!r!GWx9_%4axPZ`|{0U&h)4w|y#%+M?Ohg3z8SM^oH9a*uY|*eI-|f=_D>vhmH>->MBP@{e z$r28*DNm29Y|zTr#APH2sjU%@_6$}19QE6zy+IB`4cX4v3_p4mk;KtRZIQz*$r^eW zkJQ+j`KSq>essc3)Cw!GI)YL1qQj?B-PL01P%uJ2x&;!hRB~5R)(gbz>XJ~Kd?TS= zSeK74=W1TusBb$kuQqL7<%2lO%Wdc5WWA&x(Uw+X69Pel#W4ubR6lMhYvP%%Iz3c>E~ZA%nZ!d=sEN>rWvH(u52Wt! z;r~eRyDbU1ZlTwe6qe+B^Kn!^(U#bTZA)49^`+>n0%uJ-VVdiaVkJ`49%WdfFJ;I2 z?EKULyxJiw0KOl6=lQ2;QL6bLy6as+AgnB9-gg5V-dL%A=MOSPDY-YQ%6LzaU;V>I z-6sCUL>?sh-%^v2B@@aP=6`3$0ZVd>|u! znwCKadqM)u_-S-Q4Pn2zoB>wC*E`EzOBLghw0fQ|C z6*))0B_R5U{aI_!Bj%Zs_;m{4oV`HWoLfU;>qxgw7^{l`QHSnHGSb**mIszsWb^WKs4o{z8zhu&0)tn3-K+y2QYyUbgeuFC6uHnX& z(+n?Wi3ZP#V5z!SsgigwXGD3!70G$|-2W!sMW;t^ogbl{{;%hsJRZW1`tN!0qEo4V zzvTPl1NxCXk$?N`^AOb^ZoePgE(X{56E!&b#+Po}HTEKr$C>{ePI40xR{C!f<#BbZ zNDW1~pvhenO*JVE;YbNfCK6Jncsjw0_uRVCmJyn6>_%tr$r~FJwka0%-D2@byJC*n zmcq^9B9cX`&tg5an%z+S$Cbz?)(jM?Sj zkw2Q4-W!?Z?X?ByUgu#mEJL9fgztD8>_-Y{_fS=Z;wCtNPJ^h_I2T-jPTslMmK<*v z#jDUjn@<&qU zogDqWU{dlY8&5J__8Yt->LwaSi@c^(Mg581b>)99pPM7fyOC`Z?v5@inw(`DCa&4y zJBIl>nvd$L6q;vds!pp-1l#S7M;azhvkl1uOwU;j1IOB#a5Wg;sUr3Osz&%m%@Zpw zHuORpG_nX+6Ytxn)Dq8)8%eY1QG*Ml9fHP$9}`rfFq`)vbOH+qAwH7pVQEfpaTq1+ zn)fz((MSq=ocqDTDjn==yhb?aw)W%CFtx`Xb+#`R>Go1f#+^_bWm?1GdJ#AYN%2Kx zd*R2GP9!tLo3o5I*WS2B+Yik|^Y@F}wN)s=wnH7tvwZS=O_F@JhnSRO^(3}Q9Gek`13c6B4*^+HJf;$j0HE*Cz?mM>jcsW#E@#35zM zzvD@H-|oI^)b7MFodzlEfzim_K^;FbFU71EU`&xyNGB3e<0M5LY)cEkO&CT$Ua38Z zm9M%HesUyK(Hy&-^>K_F3nuv;yq$K2pm%O>trc>u3vwRaT!*!@1nMsHwa zYj;ernxs!^-h?&catk!#k4Dmb@-Esrt_*x{ryimrS8MB@SiQ3;#n>w+5ivW0mBHnD zvB9}KNk3tRPg_5&AJ+<{Y$v4Bu?|b;Tp3P;x$VkZ3RkdEJ+e#->PLNZP6s;h@>Rjt zc}UWz+nrW8(5az`z^rgp&9{8Au?ig0DpBvg#mQ=YbzZ2Nv`h<;6Ai_0_&PeG8|S>U&~^#F=h^(eh3MEw z|4inOz+!d7(tSeV-uF+nMg?BxmI83o@fS_QDMvA563kiZ`rP89 zkQq95oOS&GMk$-i8(KplpY1UMH&o9+-nzk=`bFUss_>1@Cb{F>a^c%;(T7s&n&a$w zOK+#4gfiPi=8+;|C5;kCx~xrPWjkP`%X5R%)I&~thPw9j@l*z->&Bd(WSC0FS4O5B z9v0_?QE-t-wCD1mKUKO=Dsp;7EH58CdQ`DDaxr1hwXkD1j-Z9nuwn z`LvStcxGb2Of~%t4hMBp*xvq4=288SFR4rkBcRc-{@Eb^vqCQt6A7a~=K)2x?KJ~~ z4Cm2^)bdi8pjMjxVhjVAT6L&*ne-q&Lff(5d&d1B#>*{OJ3-O$Ba%@B6+P427LZFK z=>*UA8l$>ek4BVhrA860No&Y_IIp^PL?2xnXjFw9Y+l_^yM&z3D}^KaMR-Spq~$jr zHZO4NOxV7^*g`WD_dvfMwjg$7pJAulXKlPH3rOPmQnGiqaBJzhb&`Vl&T+z-LLi!v z5EW`dmD_CZpSY>37{`@&6AaTO{$YQR7WS-H)+d(MThj=f6~DTrIZD$(J15`DH%CMI z-YqCa$2SpXFW6X>L_?@L6mJD(N$}0)c`+PgW7_1vazz-u@qHxn!ukTJUsA6;oMrUp zT6e4dm9`i&mBt8AV7Fk}C%DI{Ii!LkY^NC3cJ9zvOk3Fxi zN8)1D%o?HJLR*);{tb0bezqaL8ylc&t;f()r4GMt*_;z8^>$v=M!!3vy*2&T*u>Bx z#xh9^zujFv8?1pcEoOoqymCQ-va}SFyuVe-jv0BgKqB+I{~jYgAM#-3+oQ*KJf$#D z;&phyH8!wIksmJxZ)xii_gB7Rq{O*S?z#^Xv&`8{60W$r z)yI>~$Q6lEX@#S#`}ZI4I1R$u)O+>OTw|Hv{-2Azk7)4vHP$bqKbdNcjE`MO;loT* z=bGeIu>Srhw0!cGn-7EhZ|u*HKfmOB`@}K+k&xn}P4rUmueP_AkC=x(qq}fEksJEs zTu2ced15qRXLDjqE+y&-R!4nGehzw$sa^1u{VU2!Ss?M9oju1e2tR8OK{I$TEBYqy zRv@vzu+oEBDNX*Pd9@iQ9SCQ;__!l~dKOwg32Vw%g4T`O2+(s%(`lTR*&XtX33nq^ zja7*xuvJksFD&H<3a(!I5;mf_H;lN84|=QuH^sQ&#L2ZBksFq>R{km6uFCX($vMfs z>tUko#7~k*y`sq1MKOJ+`Upe6D<*s8FerdwjX?jfJ}PZPhE18n6fRDh<2`J)$Z=_# zAoM~8X$p}wf>zl_>PzO=%zsq^1FeDij5P;xE+{zO6R za`&^sTn=Lz1Ws9AUUku;K0bA(@x+2d5HeA3yRn>{HLAu`zasgui?f44a;R=tY+9tR z7Qf_oNzY38{bK7y`C{cJEj8l%^aC=ma)b3snrz2Z3hR*6*d za-6H_)s<|pjFfmr^#&PjdldU=i`?zczLe0nlMqXnFDi{Z8A7Ar0k_h`0nlGc%qr1? zt`2qgOjXM&{HH-r6>ByXyBsPbb5xW5%noBgm5m&_Znr9d`2bxBiKYEztm~HajpSM5 zk0<{A!8nL(Jzp=T!crna@NrQHr7~rs9Zm!TAcNv-9jKB#m?kWO1{|Qfl`#;A%6ihw zZLs;rf4)>mA2AQ6l94ybzaAdvwzv(5f5bh?^yKXZ_Gdgq(64V9>_1$xFdD-!ZqaWW z`b)?V9c=fJhl)Jnc70-+^?HcsZx@4x!byx;o>QFfiI=#R+yC+F;XIn_BzAKb?DCvI zI8K?PIUOx6I9sR>r@Fsy40F`YBi6*@$>Ft#eNl8Y8Sq z8?AhDLdRw6A}>IEisz7AIg=+U$Z24L-QK+FG3%m2RxX7BO|HK(CT9YN$1rgU@wmOp zOX43?)gCpJ5uoUEy(_r-a+#LH#CO(Gf}#{5=Gm4jbMs(zmJ2^TkbYfgnsOCEtQq^O zxM}f`$U^g!T;<03tiq&EjKX`Is@{qMlxKw0&reUI!75U0rMTI=;6g@ z)EyVVN7Z;+u`|}6eoM)PVD8KtPSrUKl~e@PA?HqP(7eeeWwm<(O8EEOJcjRj)dLLbR2mGwyQM>Uhn&Z6(&azjmG#8YxPS|R0KIz+a}9VMMK*u8lxGHCs1fY zhE7gBqjXK&aP{Fac{vW|b3o{6ik4oJP`HaK@l1h{)!=;u$=n_cj^1;{r%zcShSMNh zEtI$9STyRmRKiC(HlO{)UHo!XB!ySnoN;fxk~nFg5DX*0N}wk$bcmzIr%Po~@QaQV zmy;7d2`@{hZGeu|fHam!8D}E|(>)dE1=1?NmHuV%WpA%Gs%}2~Dkn?xG}7v2-rns! z&ku_<-5h~w*#eA?*77gTYk5^#E?66h=x;T`T7^krTP{cRZWDou;R_C=rj5dNJKXh= zl5iywrCd}4WYOBXp<-aDBT&~FGO`rgVRI?8ZyJQ(Bvhn%HYnt-QcNc^tdEn@PNG5w zjK+GO?`UsY#2^h3ct@dtD5^nC&y-} zGdDZg@38%D&=)(e4xO=lrRw|LDEH>3%JALl4<>5XHe$LQ6K_;!0X>5|&7o;>yh-@- zyVxaBztM`N#UYE^^aEMV1r^b}lHd@6*z}ir`Cj9s&HXNHb0T9DYi$b;37wRTGdU4K zHtgk-ScaB{w4Fkk61(3}Or)ZZ7QF!$-;!3c+^Y39gizl_u-wKSDqhZmM04ADjqr;qiM6%$OZDugL!J=t~aF7!-WaD}nrF&Gh1UJ9a9#%37C z)MY)7hFqo=Q0vd+7k9r1 zJKdQWj&cl_*vrSt7CN{(R6VG<;0VmLQnT^ggWoCcYP&YQJFsVqf!xX3SFO@fGY0z+ z0%udm)VSt#r4&PqxMc7I&V_EgZ2Yi455CtQU`HO&7Vh+I!$r53{iQncW}dQd4-UnRYswrL$Sw4O4kQAq9Ts_d^cM z2vbi?!5d*jR}4`V86I^z z8o_tfJ~`~7)a6aZs Y8(w^xr<=VoB@{*^_3&fNVg>Y9WOCPqKy;9P{%=^`CcsV zAN{1XxG!?i6km7buz6n%*9c^huw?YGIq~T>P}LfiE5jIw;V{?~%6hdfOs9m%0<2&c>DChGT(W=o?%r_FOiCo*G>xCnmaGFEaj~`D z02!1QW*b-P?rqcLrX6Y@26gGyKNUMJ$6SRXR7~9|(p^jHaV`&K1*2B6o4g5RswUas zlcf(P(zT0Q=h5_R@=Ug|W4*zO;latV;+(q*_l_@XoYgZYhL%lw3;R|ETw|T(N)mLs zSf@u|C4PkSioh%=sYq(dQHZhyi3P9(e`FUanoWTtB1Zzp&Qq2c757yu%#f|p)u*0O z#%Dt9h2axF7iY>6s-!k`M0s~dd%IqcO%v3)EFddhlE_yZnTWin7Y#D}do3aZ5d6-q zf7VHKt_eCZBmya{63Hrm;IcS*omD7-TME?g`UHb&l=3LI{>0FU&P$B?*iYGlCOjCc z$#}JSYC-Cr4~t|-8{G4kceNPc`*AvBZwy)+90Hp00DZ{@E$oY*J0BJQB{!tRM{%3r zPlBW4lW>GcyHe8siGhZ<5UWc3vJhMq@b{0{#Jbp1QmUDs80vrmFZ8}in;*>HlV2Y2 zWL8_IPmg@s{>77AoBiMJ0(eqZrD^F`B&9dNJ*3jfgoi-K%D`gvNe}P6x_6#&e@{isXOy|4QOw|5EUDFqIq~7O7w_y?T82 z8eQTcnqFhY|IRl4i43m+2Dvy`>`g_BJm1!d+;6J zFxD_W1JYu$6M)fM1x<^S4u^!F4lTVxNA`by|5g5u@B7ff)W4ZyKXjmFxr_TN(E1gM z{S)IiVh3%#{ih2z9-Jrs*Fc+Iza;Y0Tj`We#k+Mke4OK%a~>U@cyIUA>MDfwa&nz+wT<|hUv5QpEV+Q&ZtIdo^;z29RX-9@a;r57TeCt%*12q9py zv7SYt7Bfj}>t{_HhF44c_#5Q1_}KgxZshP&FJBBT%-@}~tq(ys&ki5@nq-A+)fj>F zLQoO2eT~_WyaVmtmrc@Pe6H7=@22T1%-C>=Lgfoq84~l5E)BkuW`eQCMw(N~ZK^^Q zIuluNw!>;(YFxJS-oh%7{i5w{4=aE2pnW-9x4$*+Igfl*@SGxSzp(Z%zm_geySt|K zK#2-TSW^Ocd6hTA_^eGUW-r!$5Ma1y`{fh&umJvguSH*JqLA*mxi1vaNS80(Qf;NP zS%_;IX-F`;Uu-zzmjZl_lMSrX@zj$ml`Q6JW)z}o+7$dC-zjJ2A-BLfy;ACCOW+Tz zhj~tL@$MSmaVb4Ks~fb}61#jKp&1)h#-`Khudf*(Khg4FHpZX3Qh(0A`BH~(vO+;} zX-#3HsJxTO+b6s$Mx5Hi^wRQrG`HWa@u06>Co>WF&5cpuAG;gxHqUM0E2&X7&tUdQx@1;bk9R-&V$f! z1Ov6C9UM(%*O5Y68MfnXRlb|w@y#g(iy>JVTwUjF9Pu6o!Oy{Xd{C&^m9lsCvV?%f zd_8XxtEEbxU?fx{&tRCZmi5>Z^F>OZ%iNVk_X#jOu`)NX=a!jfJ3KA;WiV=96HAnwFr9hgt8;r z0k+rReos2WyOwts9^#nnJyEaA85Qi{NJ}=|cBO8m44LfCi#`Xz>b3lK=_|2P6$pSo z2811#205z`PJdZ{ujU)nL)D@j+H~dxsHdiL^tLaSjJvOBA4aCSXGm6bv`UVy(xNEB z`!_u`2*)RrZd)RF%nfwskKl?Y?HdsmCv_SP}w08d!1=gbErgku;N-@| ztjjW8QZ0b_y}aU^%+&mLmyaj+j(TEYv#AK<=Nx7|5c{^Ue?Qr3Nd`d;LKr4f(jO;ivlENo>i$;!>?i3w?4Y zGXh9r!U&pT$x9&Jdp(C{)j4d~mc1s6jll5Z+NTq!z|xtT=>g~WfRB?*gx>68MTgxE z;#+)T>vFyuPTFqhBT0!-*{{Q8q%4+1#T#L@1d_i43$3_jl39Y9^i!T4bB zJtM3ggU1LjcqJ2msW-eTERH{2isnZ}cm7v;wqZG|NLYg7QcHIhyfX*sdvFQLV6;nL z4~I1*Fld873d0mUSyO(OaFKH?!&@gI{L*cNd8v@}c#4O(^ob+E}hb_V~~Nf$?h-4z7f8Dsd0M7C^e9aU(>bJVyiF1diHGKJU3CU= zSw`@e!z-6`bdbW(6^;X$EQhE|{^*9nXsUaIIhyGNNBA?h^8-7~XwL06DTQ=aD}{#O zL>NQ!TceJ0qc3=wXuMX2&7x5MxHqf)Y|9d(TD|{d9qA07{x7qROfo86_~dC?5TINi z^&cPR!&=zbEQ}x0uRxh}tj7r#4w9#pmz2`#vA?EfY&RZIP2v7x@0CYxJGg zKe`ad&ws0WDW-HC`mdnzN&i2B?91f;24h0kc{;+G3)-CUuwLpb=rDuumf-1uG(ZyN{>T2 zHI{zUAyScA z?L2sjjY(;Gy=q<4w+@lOOAfut39ZMhFUfiKiJQk~IWH~`nl0L)0aodC#$mC?jOlV( zlg;529%wKbQIP@H&1xQdp#K_fm9I6>BT1;@@W`K(VT9P_X*drF8%!2T&g6hN1L)Q- zy`54f(k}SWA=wPIval7cm2j*^BKB(Bxsa)zG*SafGGckX_>4Sv;m?_CV;} z-O3Imx@>Gh+_Ln;6bq>$#vsdHBkg)}d3p034gtwj-xh>9Q=3Y6N;lgvox{tPNha>Y zWhX(}n%VW2bUO9IJraZbt*WoO&o`y&& zE7QRT%o0xGH{w7LWZthj2j+?t04qU z@_0*(DdTVyZ1~8P6Gg`7ycpMCm~!!M3yg_#wZNvQu5)#tjT^}7Cl?pf1^tzX1Rfbg zHNJWGT?Pay7cO{dYjVvrRhT)N%f?nDqE}>wt<0$F@>jw9z3prwXKq8P~=->rk>if^8StLcAz~^8hgh;v-6wyXH(1s0!C;&F$9<^DE36 z-z>RC9@&>_7}()-!5IUA0yvB`qTVxhz6u$0>~%Ao57o1(%F2Z{6tdGB{Wg$D0YEp! zByy9-i>zcl_}y*)h-_moOBk%KW!1?4@euxHX*C|#_#o#?O?L|Z$iNA2E2UB{Gz z-u6DoQ>6?$)!R!y2FGeCB{7x@OQ;sPcis7GQ_B>Jx*09Q0)cuqg6Qnx%YY6{PJO%2 zll<%AmP-;HLJZ=iqb-R|`quRedDkz(%A0o#9KP-}`RTW1)q0?kvNG1jJ`IEJKscSe zM#;27MQDRty*eSymvq7CKfq<`j-z|4h{|ky#t^iem}34Af+&mqqH9T$kH!QdW{Ue7@1C? z#=EEX4I!sgLLb<}nv8nDXDJVrvcFTbLj~1IHab+acP*$+KjbIbN+aLo?y+AkPKhE5 z>>|k58{4*nHC$gcJ_8&19mI{H_s#pZ??7~M;`}o~=6T}gd;~f~@MW#A=!0DOjUWA3 z!!)6-{1RBF?6oA#Rw;c=P-<{yUnxpSc%Z$zc4ov(*|xUreOTAG?c~~QX6+<=yEu>} ztDpJRea}E4L%z#s-Ag8W4wj8O7qz1H`83wd8=2zfaWzEEv6T8cz>poD3|`{e@G7U? z{Q7CQyfTzELef8KHrr#PUhq zR_d6sf_Ktyi{sQHrRPfFn+-``RXDSyw##2NHPcmEL1MJwJAA;G(#r3WDXeoGlOFWz zAbS1ws()Mc7M2%B+2LC=)TE`EnVn0v!s(RdYFf;iFNR&SlaXb!Kd4F9+&xx(Zdm46 zK2f8QTwyf_bovK8P8J@Xz1d2%0|Hl8b{TYTP!zO*1Lay~N=iJ{wb_UWv~l_R#T7v! zmi^puNI$EiHIaX~;=6DW63}7d{Xw{&otFtbuDq2O+E{&+-{&AnASu{+B-HXXXq)=~ zu=kchZS8NrclX{Eq)?!^7S})t?z?z^KnWVOK(J8UeV0OU3&CyU4#gc>9DW}|&dj8+pxRp4cw_h{`{P5#G?RZErjEed3g2g{EGV;>+^@NL!#jCia zEb9!{cz ziK}Ee8*KxE#YYX)-0*3zO(Bx({g?6u%AVvX8kG-hsu`;X~rUa0f(FVJUbkDc8OuZ18U-kxYMONtD50FcpRLDNUC>Yj#^~)l9kb=PR1l zr(N*q=N0-ogDrj*W?9Lky0d65_k_gS5d4cQb?xbD2?p~k6PpEqm}j}IqcPKjfFNA zq(yDjn~F(7Z!iLj8!i0fsa0VvEL2*HU$9}(FZ0*Lu3pxsH2WSo#TX$2Ni1GHb}`IE zk7GZ!%%dd?9Uu}oz*=&Z(I4_xT_ETAGcx-oP3LFyk-c0dG{IUd$&3}Oz0Aim-dsT{ zP1bWugxqlvEC{f&bC-QSg;zo~F`?jhIkIu!UjLDeW$^~?2MHL zR`y9nbHaG(w48t$k`e^)9M!T(2(2vii^aiQ{q z6;}cZMl0Amj>M{|G{vLzHx_pJ3xv$ohg~f6e5)U$aRN!mzo7NF^{XOnpI786WC~ZV z`{{9Z1W!_`6sN=M7ZDrU$@~OJq`+R3*${}gJh=)OGC3DYdn!N~o=@yjmV8KAYG}8_ zTOK!E24~)N#w*Yd4NU<~Dr$1cHj^&z3mg-aIJ`|NG&Ys1>vVpN)PmxbQTouDai_` zt4_ynXiNj8;!qyEjz6ym9!neu;^sury;xwR{q-d5w563H0*(>74)PU0 z$}oXiZXSoBI+=P(C-cO00 zM8{HR2Y+-ow3k=@@#Xh-aOv4WM53lq+@@oyi14r%k!f5qjDoljB@vVQk=L9z;dRmw zB)H|4nARAv!21O~{?b5DXeg0a%Q>&13%NtfGdiS;5;p1$e4l#^G8Sy8G`#jxm0~IR z3}Zv^OBPOb5an^rFBAqdkaNoj)g?2g+VgYE$)>B&%F3i43{s~H^Aw@(BFgbNC*sSq zYGN8C5Yk({t(`8jdZL`LmILuM3~k)4d309?_P69nO!tn8wZr{ffO>&Ci&?N?Ov@g z7PZTIS~2$3Q(2K6zY5sH_D!4zo@uhFIJ-={bIB*j1jkhrt&o$w6YAI;<63X0C zrddHEx<;iS7mBwbXCOGN{1{gznBp!oW0juylxuto!($57{PVAKA0JF#05omH)aHWq zQA=XJ0x46_@&M^DSjIlg3F>vnvJDNK*cxNp83W0*9mKkdmXl^%`ay;a zQ6#|9F+%q+*4)zP*HlS$fB*PU51!c4qXy@P!H~|7OVDi)mzm zXi{8xAq)0ra$mLCr*^c|Fk3Z5$sJ% z&~d$_)@cJHe7@v&SZG=YeDQ~4hvx(zmgD8F@J$fPJCAh4_nIuH z-P`io{X;Z(_4#_cy^b)`I`3VfLhY0kc)PDISy#62*3*}~;>Fj}EI`SMSV(G`o2PYC zz2}rM3AS-T>x(~|`HFjK9(AsIj?X21 z|K6W}lhHiaDH|)|{W^lHd0E1pa=a+UGlyrceBa2X?G_MX0Tvo6AK)35bDo7a8-+zS zll!#Up7EEs#}o4F&ShJSVPQSHy(t&fIw~XRcy?~d49JYBGcGlp)Xey0LUZ9-jMIDV zQXrA(@{Hhllcg&K^1GP*vDb00^Jpw*pj>G z&xK+I|thJJgCl4t49uGx5&!m!asg`ejMoeO zUvz({%c7I8#H6N)L}%3Rg41HKnF5=T*bmM1>|~7{#LH`!(BzppAt{&v0rRUmd6&XA zNOr?*@m`P&M_DeH$81TmayfIwl;~ucF;p3?T}d3VCU5gV_}b>LaaZ#5Y^2IKpv9fj zJz?yQcE1Y|vHv|p)smyTwtyp+`5*z1`C$GuDdV7$4vo55RbBIoE00r z+pN=woHcr6doiPIDRpSi4bqQOuxlYqK)_&~xg%<#M0!3V!F79bF@-6din0MWp2BWR z&8m|Xt#CEt-CB-7Hw9qI8^1^{1#5ne;&SNvmIz1fLafcbv4vq{4mk{;9{!LvNGhe) zK^KfIT9Lp@jBW-Wlqahx!6rpi4D$-=U$3LBeDM!%L-YC*P1Z4qydTX^mIBa@va$8-Y&+z}_39>W^Ea?ytFp9lC37>&*XfTnnY1%%i6T(4Urd67re3QZzb{F`#6La+bKP3!M7Vu zvwNx$SY8P{#Q1sz)4d*MFG=2)K~*na){<5B0)@ox6pV)kjnaVjk8MZ_q70kJh54XM zP;q~Pg^m_|xE%Al*_1x8V9@mr^D6fcmv(_=lfNlXZ4ze{4w}Tsr9#JlwYh0Gsp+eW z&QZj0!{8JREAY%i%N+oMMKybOapU`SoMse^VlFB0NL~}>0B-%B0Rab=U#EO=f>nXb zl%5F^Q^z8F3yK81*3Zm!3{=#HfM8Urr#gd+i6(kxy_CY$=dsGaVA@i4ZgH0_+)f>c zt1!?(rCg+jBb-l}AzLjeD9}hUrJ$aca;RdAZmOm;x95fCfYSI7lloN|YjOIDl=Nv! zRE9Q%uENSqx(;5OeznI$N$>Z(hJ=~CYt*g)onWG<9w%yFBYV%>Wqwjm-qQ^3e56wF zZl%MMWXOBc6Duz~38<|sn1v-63>#$!;Op2fz8tSsEX;Q79K8Lq@ ztHF1`HWxOCnq`TJrucb4)HEoiV?{Xka_prOn=DvgMeWu*f|Zi>=F*vT7{vRQ zW)&QjDaVI>Bl5L@J1guF-A{dK-Z?N4u%&My_x&30Mm^^?#^{KlMOktIE)i=}eQ3W@ zsjfcfE*;)`W!%k4lyvM-m#L3VfHQUOyH%r0(d|nXCU_MVL$u4crf;*m1UT91O#PJa zr@n7s=T;bd?ltd;)8X1*cZg~25#271S;}{Jyr!Bo=4M;b-9{F1sb>{O{g_24H&6QF zK-D!X)-TuAjcEELNW7vSUX|u`KQ16vrE6rOOaV7I&J)ucB7Qfuh85}oMm|(XEAw|z z!zICWLrfwlhaO?WHn;>qWmF+HRy{jh0<1nSM#;}b;i2GBib&v`5Qv!z^(~7V`#V(Z zJysiX)S6NYV_6#}tJSR14qH^2M{HZ69M+n}gJ-%*8NWk?=hGFk;>o4Rl1*R{3h&Cu z>lNI9dFQDvI3m|+;T&#}cf(T{JAlh5Hu0U84@sQLm{CT?C)YAi2LTUEO*7oE(D=&hfB-Kai)L``LtbE%B=sHtm6GP-K0Lw z%-y=H8+%3%_jxVyAvz!Gzf{eZmPghx8mePRjq2IJF3NrwH>`EG9Z!HIHj-!!`E8hY zga7^#xqm9MG&5Y#iF*|3{sQOiy%3q2`Z3yOKyrA(KxfhK8Z)s&bS}QjD8sDW2tH4) z29he64fOW-=xLR+#fPSFDM%So=I@u}>WZ?}^qzs-lwMm- z(W;S8*X05|oda!^>W0A~LxZc}QHhSQowFTW3DE}_Vigu)`JBs^pF~d#pI5xiifOiN z0{!T%5KeYr{3LVQuewh}dpw!kaz1!^U&7JMA;gKrqq zyb#~an*QI-U0-Fb3CU|`oJot7O?-20xoU2(&-&9=V3M9uP5eyb~T(s z+*RK$UYL{N)&AK{*2nF3$%#(nK`J{VY$lxKke$hoEs0R0 zev3tczpSGEJ6*f~*!Pb@)jPVjso^{cmgeE#qLcu>?!j3>pqDAq>&eT3$iH6J-0_{n z{gz}J@&I}Avfv7Gs{Gq5xys~n-8S)~GsSY~PuM~HF`<9L`O7E$Jt7yXlTVhpo0aA? z%3ZF8I#3i%|JxV1|Kin_6aPxd^tla}Cw?qwIrcK3bK?%dL;Rp7Iaa|8-M zPdA?SaCYAS`!GFZ`I7nFwn|@zhhr{IVpUg&TslhAw+DX@FX&J{-P3QAAnCC;e7|Tt zJz`GI3$d@QwAgk$v`os6l#7`jbyr;JB(^opomH(-5b881zCQqElA*O^Xx`rTdL2(T zt5Y2e1qtwVbbqPrH%Y)RTivjK(J~*v_B55NM|8^g-2p%K$fE?Lb&`#BZCjgS-nquG zaC$|{8IdSlSED}R4UKB9vY;!Dh@!q=9%<|bI093&i#4g4M!xRbH%buWZ120IGh<$e zaa?j4yelRtRJBYbNsm&XdTyAQ93Duue;l#&%Ea<^_Kc4_dHhbgW!lwp>mp3kX-`+% z$d<1GTQw}N$7okvec*VhC5dm3irH&5yQEHxXoP>r2kztc|Cb~7~ zYaWX9+b_f(tJZK}qE@oB?-x76)FegUQ=SX|t_`R6I#Zno1ctkk7d$!x3hD)rk}&DD zNHMppi901co{=Qe6EStsD5l#)4woiNNDfz@4J_7CsDY?@uAxcyW?)q~!Q}#Y=KC_E ztX<2ga-J>vzWw@u_)adfj`#5SB#-0++j{QXGdj9rbb`^%aFFG5!x1iEQ*m{lPtVe9 zMIe*KP)_}n#xn|ydKY!>BD1Uhn|eYfXtjd~fyn!%F7vgb(qyPWVW~<}X?sK=L$KSO z^y%nFXPeQyZK=g-UrBWkQ)0(MA5BHc%#dK=Mty=!BOp{6#0|VbNFAqhH`>L4To|-Avufp`!64vLO*fPC^?AcDn?DTmc?Ct`%=sg_L&@y>!=^!ua`HX5URPo|N} zs5$?}T{596l^r|k9K4JI%o$S&lK01ZY}uf$g<%9+oaF-7+?^uNrgf%gJbh%zZ{HOq zvLQM*K0iOC43`8}>e5d?`U0`Oi2oUh2i<_D$0|EtWir2@Zj>$$>W8fZGgWg7gtab^ z*U6j=PD(3tt0ZSj*AznssE~WLe&RBOL#UcurCiK*KovnH(J}q1z`Sre{B_zcdoXjj zy+*ZQul+#XO@S(>Q{z54{}LQzJf5uS)9Zg$asH!)7s}gwUnX(J>DB~K)pF_aDc%wg za?O@O_M*IkE!s46>tsHdof;$VoL@ ziqJd;E%N-ymjaKwZ#{SMis)`9E%8~J@BF<}%TpqdA@xIVQ$gDE=xr~Lj1%&EP)({- z-{^+Cf7h#CGaVgZrylo4Q!M@iI5WPoqWW-hDoU_UL4s^*d0n|}MGJhUVB!zBgq61# zOt57u#UwbdHUuP=&F~xL)p%+g0rPe=6}pMF$CY#IRf6T;Z-Ue=+T~RXdsiro>EL?@@4$7%~puUe(-8b7PH%gf3tU+xonGiKi&WaozMFMdaCP@a?A%b2V!2Ast>Qo; zBnd19td}goUob)q@8N)i1m)&c7LiY8x$!T!n}TvdVhE8P&6)vT3o>fh`GtgKuhaIi zIGF20-mS(7SEVu>Pg|YDi$`{JC(^glmGA&;WxRgP#6z0i?Z-s5nFxUtfCN~@J*yq> z!kj}41IFZ3Em?V(uD>`9a}m-@YKBp_X=j$4t$!4Aa832hXEb&zPn#IWoCow^ADs`v zOW%s8OHZ8>wM&KcbQss^70nu(BI7xEWf}bo&^ozQw99Y4((9bDg$XEHj zbF#c{MGVC|R|@42%PBkQ+>XpyVHz{qLE=QNObwDDR+MWH>nOK#y1M1u_P1D)*a)b3s zs(Ldg_kkltlFK6R)vOyiTX+QDnmETzZxPiJw$x-FHr~acYn2L?JL4xL)UHxBXri^b zM%fcgArR@6*Nn^cy?j8TJ7VIitSnU`4fe9uSNwu|TEV-(qK>`L1fB#>W342fg0E5i zh~u5*$IxabM87#ofD#51f zoKGz*kS*>n`*h$(DL&+tX*`RHG+~3otYG?^h*@p8&X_QIHcE+;aWEBpCAHK}VYt*$u#~psvKpE+4A1-nDHzRNTNsXl?t93^^caUI%ql z`IRctF6*?=A48P?tqSnB=(m+?<~L)%o+Qe>8325KaykmEoIFzJE7MJ8#MYDoEfw;P z#7}qCtThSjSa^xKwR4&6^(3g`iz_8q(!P%zLEZR;ruYTZ+tZ_u(#5;AmX(^h zsx8AqDo86^b`pfHY>mn^6L*wq4$^^fVEzd|9k+%>iAhev3%}Sf*S+lG4+9n}G`Flf zPn`a9j6Ck2resf;da7=HOp%3CTM^En3HbW)m`?h6ZIA-U6fo71NWV1Tb7Q@+vnlce zT5WFd zxFjngy4IiD36;|D@cSlIgn+fiA8ajR5fQ%QFf^~-LQfE>W+tD2EHBmA%MXn{QqgJ2 zJlP5tPc7EImRxaMGuxtpetT04+xeSJyPZg0Huy4uZ%>}bIxQ)GUcluaW< zn_j9EsEP~RZI0w%Z;y;na;}@K4S}9D7TILusKUowo*~p{Wj=mrS`P7u ze5O+rZ|QxOOQVFUJILw7Y?$J;@`B-KCE)wsfOOi`?`hYEECsD+sVRwWjVk=23LB8X zPew((Tp{lL+IlL4x8BV!{Fn5C*mCvL zx6kOxO}*p7ExeL^kGzGlHNNdsRA^^XXp<%gw(BNo#`zTnNx$7{SSXM2c}K_XTY_w# z1$Dd4Pt4nTOn$Aa7|oyWw`1L4<=vzb3T5aS>CvG@N1uCgnrXNjmCN~*MR9fQX5iCr zKYA^I6!$W?s?K^-(z)D`xS%mj(pK8zM8tj2R^QYMWDWC_s&hl6)qSuzdBGuuFX&@D zPA3<{)VakVD8k++gc#)n=XnNpYsMLr;9I3Pn^`Zc@!#Zmt?g{@6j)O;CWNf*Nogq2 zLFPdL{VY6V4yQHBK21sk=&k}x;*^Mebgguu)hKyXP_qO8HTSpjXH(^Xad{*2wvM$J zhJqaZ+-%&Xh_Gnig%=BSJ-#$IlI6y*qnLCpgvoruS(ni@f|aGR#4(Ndu~)$!rpWm) zBoyhgaBO82w-W;C@1=X;B^m%U1h;0aDFn93qkA#A_Wot2Yx>5~^JfuUlxeC_KXUsu zXJ@NuL-8}3pS2T1+MCWIy0|SRzgw5>SXJQUehAIPLfEo$gb#(OBCbas9mi66gXpG~ zo%!2%Qfl~4y^8kJ_&bTg_U7Q(Q6X8BDa^S_0FJXrN}a&BO*>02M6|o|amB6~88r*SRFzLLQ0&cgoX-%*rB$kKMK5*7R&fB21g)hv95|*1VTp z@@eS~0GZ#&DqJGVJQtZ3=efIfc?siu3+J}N4Y;`@dR5wLge2j@%&Ey^x~IoPQ)?9& zg4@TK`+@DEWtAldX&525(@I4IR1_{)Wb&|Zz#yu{C+spAfPWwXmm-dqy6J4|&-o^j z&m{|iPtF38#mAiDKTZd%c`4B*L4ORY_ve*(mo*QOk7Yh6U8V z?l7b6Kr~*4E`b=8|M0Bp1~4;Zz5dSJ&o)}Hc{A}*v{SKD8Ks9C$fV+jaoQxN4OgGZ zt3d!l{5Rw>g*e|iZex6%6o9EmpyQ zq@c2R-(>jpv(J=hX)zT6!6yC-$Or4nsx+mhenaZYdIe*`@h^te7jIw!bKZq>R@ToM zy4pMsru&IRDhf(GfRB2_LGv=AbXMP|YN4i(+?lj)|3Nu#&VI?M_<4HiVtbvWWw>J%>X z2mp9A^GfWAp&BxM-rbv9w2qjo%66;SePhIyd*KaZDu*@w8o-+FH5+ytd68-m*zOjt z%8w^azUR12F02+C2@NIv8m0u-xl=9>wQsqJv>Y>6JtD~|_+jhiM|P5#mW+D&W8O@@ zG#bJ}nsvr9s6w|`N~u{$2&U7`rd0uvyez_FIcWykzw>KBuJg57j~u@&s%JeGIw_0w z%j(|)81s8cH)0#;%@8TjM+BCDWI>(R7;R>43-6vaU97_2n(ux6|2GLn6#DOaGGzK0 zZUVzR_~!>GflnywRbU1faW&lGLU}Pjx_VtZ3X~WXWhwawOGJ;nVb}+TKmS|B)RW&P zSPR61)9f?xhV`B}a|SE)+fSAu>#YKEGJdC*rs$66{{u6{L6ln2kr6YQUQ__o&4OqJ zXY?61Kf;`kqf%B&=HBJJ|5^s2&K=K#P{(bzoxJ(Z2I_z1GYJA2-Kf!T#q+**LEES(4{}P~djCmRBh5Hg6Oi*4<<*ymL7%^9Sv@&!ZO@}p z1Y@lv&~!ebHdFNa>z0)jhI?!lZw4N7Xu=ld*4Ss4~Va$wL~!$r$#fmiZv* z_-eFwhr9_={f>8F9QDyt+Bu=1$4bsdVgmxQYql4V%Js8MZgx{}_{yoQ; z>`cQC2tD7NPLv|r+(UhODcG(0V~Koa=bO|VfJk-Ic2l4wtE2wD`FT~4U@XyC>mXU^ ztnddhM&pSX{orXjwB{9=uG9oS|Hq=&zZ)nIC$jduHD)o?*=5vp(KYxxHYYGNZ_Tz6 zBh$40sl<<&x_IAXxem^2zm!tjw;(AkNv~=OZ*W}sSnSAI>XIeEECTNFYGC*&I)pps z*g*9=ut!=l^G4$ytgjoas8kZ&Wejow7^*xlzEWNUv@Qk7nrPcqZC)m-sC#gdiG*Dp zc9w#EJvl8`3sN5_nk9xMv3~x8JU^bv&CodxTx0wcgk}9vONlzPLI>J0Jbkx94o)Er zvsv6ZrSj@&q4v$6?bRUez8(8>*+?AR(|rt#7sMLIT_U{=>qSp37mgyu8KbNH#WSiG z898Q{DW(Pn3Dpg3kDEtW{CvI2MYRk(#|!Tlp_mbK)csNN^5l<6kIp+j&a=CZjgTR+ z{UIr%=1B$VcrfxL`*py2$VLJm*|#s2M?`bXrovrKG5M=%x3bB-FDvKyZE;I?N zrSof7v{E(STodS46N=}r<3KuX)3?#V1tR0*Hf7@U;k$`Nm5^NxC*4HH)YGUoPa=2G z&K|B@87q9A_@d8M8WIdpNxr6{trZ|%J)3L3Pw`9Y$o)Ap+$@&4V7u6TpcKBHi+^NN ztOaX-sZh9ro3Pc+h*6JX?nx?9pWg?yg6{iWs} zxrkm3neFtqiHl939s$E|-C6~FVQckBZ3YuecAO%nsxn$N-&;awE4bp|vBi!kQ*dn1 z&s9TUC!jUS{N#t8w}n$O*~hO%Pz>dov}vxY6pQ*wUBVA&J~p5gPWpOeL3(JIo@1QPw97C$G}b(la{F z6r2b1^9)aojsxmeja2aFS?(k^T^Ko~^09&ZRD8mVK1$b!=|To_jWLYYxJIE-bg}*J z60hgWO2#e-+>^Iv*}o@6@vUa1adV(|Ic?m!ZXWMrMeE;P?GqC9p{zh|=F7f^{yOi* zV7K;~=JttIn|$H+UiwbwsM{^#7_UNmev^9j)^y-dNl9exI+0Z+?vAA)ORy!Od8!h^ zES0-L6s(oe^3KW5AhRl_eDF(Mqh_`kClg!%*6p#-%h(5p6t*luT~I?jIu6wr3Udl6 z&{QPeB1hR93^})o>Qn2FquGF)XL@09Yn}RSuAL*$_`xkTnwJ# z7l#yD85Zdh`MUcK`l=--_1r<|^>k~Pc#Y*#;~mei_!#>j|K`AOrrEuUJLS)of^DLx z=kkzEo+YwMWOD+SySFR(t>9H` z+Qy)O2(8Qk+V|0T+|bFbKQ>zAR+w1@hUBzY!iD3J93W-Wn8>~9K16&&I82V$-w|+b> z5r{4r?DQT7yH^7}{k2D7cnf+S~#QH1`h6kbM zJzf%;L3ADNHFHmms<<}Sr~~4#4ZXD5tj~6=;l<8|weU10|NREtb3*mU9*0eIV#a2| z%tFX}{ZF6E!ahvGTye&PZ`T;tCCwdB=1bK(ZGeqt|IM7dOAY_dZy~rY^w)B9);p9y z&%gf5;^d{5469P?6!6=xC$xdv4~#SYuE@cti4_?x)euT0ba`H6o{)IV3$KljBy50L-2C+&o|`rdNYa79xeu5E-rYhI0|>W2*f zhXl|b$W4E&D9-l~@7I&xw=Gn%!x}j|2ABDg0S`*)Q-NXj9-`Y`5eL&e^O;eZ@rSl? zg=lX6nP}7CahWtRYQs3pAX_ddb!K2hg!^QVUf@pafhsm=zf*m#QiJwfqf&-mbqVKK zuWH1j9PHZf=IG5pv^gvD{`z=Zj)7=tmhb%^!IkR__R`e}&y)AsEj4UXK^ha(0y|iM zA1|C5Ib+8j<&T-9wBX9=rDez=fP@r`YB{5@mVspd{nr=2Gd=C?C~xpsjulw zx%x-15VzE9#W7F*3P3`F(a4HPdbQ9mSXq6n4gC3}4iEn#2H2Z6*&fXuv5^U>k~WXo zLEKD_we>C#>u6DWD8SRRa@sDLv+Mzay8y0jX0|X?Qm+|PaNE}4{aWk#xd&eWu9}pZ zcp*)RO}r;)z<*p8=3OvN5^B$FGd$GC76AADzAA-SR4I;R%j z{p{hYX*$ez%ML9&Knuos!CVi_oMmJeo;1PID=cC8b>Nh8mudr?=;G*sH^l_WF4M}j z8cq;!yLmafScZq4vUj;q8W)k`3s&SVPqiDL^o!OjeXciJ9xnZfYcQ~g)XP^2;&;X; z>X26Y`7Er@kk)wL!QK8glxDLY%3|Ay!Kqwhdt1WRn!hs{BsnY(s`<=&j$2It4^7UC z@@-J9C8@5T>FbUklJ`-4t_WKT5wFaZc=%nXBNcqhL$t)jy$~n**Ql|&@9oGen}P!b z5G*ly(ZzqE$j-|ev$vh9p`%1U@gd&0X+J*m5ok-d3nv9#!UAZN7cec|Gd`ho7YG%P z0>-9t;zJgeu&BF6dfk@Yj!mPRcft>+6N&`y4=#V^+IHn9y^SVM>pDQzInu?pKI#g` zdf2_B92T_q(;hP>D<<_D`s#GPp8Wxq4jV%I)Hx%KcCdk;@V!OOYY(ot8>|NUs}o)W zW2!{M2B+sSZ>}Se=3XjI9>(gC<%RNfH)~=gvQ@+(jOz9WNSK0SlPZX_%A5Ifk~vnG zIaUn+sVkGG2=HhXQ(2n;EV>9G!}f^A01_oc!t#XU*;^+E9#s5yq+*JA9eXE1<%(`sR^3nqcF(2(0A_v7lbRj(L5#naCvz zxFZ$a;QMoE0$B&KFe`tH4offUVqXM#DY%B25WJGsgRf6Py4ZFeDr7@u$%e(T%gba` z$1rVDhtxS2$J&F}R*7j zjgt2T>asp+UNDyNl`4QXqlH)EiCxJezEjjtGJ=}HOs@#PbJiCQT6&uBrh}z+C zu3(+qRZ)MJWK@FDwq+I)uVK0VDA#71tjEsdm_+>5T+VjrhHCJpUaGD2m4C#BIkiK( z^uYI!$ON_Rind=TG3 zeBv_)tr-EtG;$MtTbh`TLuf5 zY*GSCn$P(sv#@cL4_4|flyuaJthc%`#}g#G$Q#R%PE#|l%hhZizTNYXLLaCs!&RME z)T^}B=4_(S3A*RmfOc7-22efN>X8Aq=N}Ux!D|swmzD`u9HD14)f)f-26?O7lK`|H z@2u2T>26BakK)07qMu4Io-7KA@^j4K6XBqFd7&IJIateW#wKf0DizJEPEK4OgTZ!3 zr$k2?qTP)?d^q%budL&N=&-6yoy~~;M0+=26)~Ld>cu8UR^GER`69n5DZw*ScP-x< zSv#{@J-EVVp*?Vx%qPaSx?Y!}!LI+webgky?NXwEPMTF3+NA(-4Hs-Ubuw6!vz;?D z+AWnb{D{_@3!L?m7bu)-u8-|x9KBYVF$a4zorU*SWHcf~f@y%^eY1j`>~8z~%)Cx; z#YJ;foQus5cm0JwTXtg&We5OEA421f!-@?_+hg^XHH1KS8jAlS6ycF<{hKVuPY;i| zLlbv$)iE2=Z*u#4ka&qqx(@i#0@cPt9+Hvo3UrUDViKWTAET>x$+HKhoV6k&54^dQ zw(i|Enm$^{GbU)RsciSbnbw*ULR=a2V;>i8+(<|wZfEB$z1XiOU;bXyiCuI5^~8Fu z>a^B$|Iw1gv2@p6d*5>X>xqRaCMA&UF7zTm<<}Dlp$BZ>N$7Q`^{xBqL-)BALvJAC zeKw+VbR@7L`!46fZ1!Qn@7I&B_t4N|(}BSM#{mOVJOUd{W%gur&F=J07-p}z@Ajr| zZGSx(V%VU|-k%=3ef7@|{d4O6xfuSrkN$Zw{D1dQWmdJ7sGgv-!M5!QX~8ht8-Zn$ zId2PuPkfXsZS@%Q@ALq9TlB9VSbkh(;*IRQJ|sVyzN-q~IM1ReM(eNE4|>>~y)gR{ z%$=fM^1c^y|LNvb^)Lfz8xu+AJBopeP|n^z z6S>{1Bbj&DmJMx=jal=oU$#{2c%zv+-`)tNWR-GXY6!80fo>CCDxvrb2QFS)22_)^ z|3E%4?{&XutkWbAbyOgx0}lBl4(J(oGM=`>7O;h#zuzj+A*)i?TUgbi=dGcd3o!JL z&(fZxQj$OCa&wae<}9Z=2Br=Kk)RJ#e%j8MfS{(P7L%gaF%e=}7oN*QuU^KS9!NBB zx%WkSsJscF zjSsr0`wY!fyISs0BnsmEr3zL?iBOxUafIW5MNGV9Gt6hT~-~?HF!NKSbU(u(m9hIL^<_{K((2tE%(}zH?sxW83j#XJc%QRuL zkafSurF0_K24F8DG4Zzcub4(obQu8+Sq8cO69Mi zN+hY-_C)v0Or7CdAnFxL?L1&9W(R(jLsu?t2w+cLYSGb+y{4eaT~REDQ*ASEou;Ff8Y9MNUWsg9!3gMG~%-Ekqz{zM*W zX*3(0Agu+WsB_7#(rJDalLa?SPPeiP>fw?Zv-XW547I0fy#^ZmH$-=>*KOEChi4}g z+eRRExxD(hTszcSMG&3(XN<4JBkyjFdI%&=B*hI9G36xn1hb{lYEuSE$a2lt(nI1+ zc9tC)nHlviM(5=cTerB|nt_{HhZeAJLZa7TI9*?yt}2c^%zck>Oo^vy@DgPuWU9x> z=kPL9K-wPk_qYht)29{k#wWqA@XsZLUR~sSVx+!C+ttVu;BmI9`YU`KEg>EcaOVh9 zZFyV-T11W|huj)b&I~HBHEKdUg_5`c!-g`y(`;Kb5Cz<2)RXjJ?{MXLim!yaKu|}L zIgJHZYSgX}?S)WO!_=%c;ybBV`CL?9b9jVFBcHjnGug3dPOeW~o&5nKyA8N%Ae1n? zw5UJpmRH!$Gu9-l|8B{<_~O2Y32Z%7byrxrzhe;@9Zcb&XdSr8KQ?!O2$j>)g zX6m~&N#X^kr;3$fSRTe76PK#0Vr=t=%#U-ADP>ntvE3ok}>a?)UGlSC5ci7$3mm+lLV5Y2V4H%?C_8 ze5{?&t*79)FdZnjXmYll$S(W_NhBVGS62mS?=f2BW|XVUiRWuz6vch2>GyWO)lKR- zV;B?jqbo_VAFWS8rf~_SwSyDj$|f$sl$xIGW|;zbZdsZv;=8?hR*A$Zq>t|DrO&sqn2a?D{quwsMZab-CEFC>%H^`g$wW>*=o!L3G~Hl z<06Hq#7Khu&QtdVPQs3ZIWsB_MhUl7xHyt}M1xE84R54~Sripj;#LA&n%iXYDs|^J zM(%qO%|i^CbU8_dnUwZ3R$5_xio*@%{obR{S!h?2kLPe|JY7>=ZOI6e(YBHPo{Mmd zFAkv#@-FR$x4gRQwjVDwHYN1O`=)Me5pEgLPxr2DVjgQ+9rewHbIE=7WUK)v6 zgtknKuzug|=-MiJjiX0o!@}^AJKi5bZ`fPVGSK;H=MKmvG|1=rBmO@SVX|>eul#ai zYR_L%NqqY+XNk`x84!8>yHpNl@xh5I!+#~Y>CMB23c?+T5nnQazW+2I9P1gLx} zo?j`-6>c9-OkRzC$DsSY+ef=ri7bj4OS$kU%jxI2Q`T=98+ z*CO*rA2Cb1m+?lpuO&(V>RQ0MPv2j${jek1HaCMk7|^oRS`$R8>^OIWTXTs2=qgP+Jl|cTWjAu?Y39u`*B7vA2Gj|N_4=CinO0*d%sykgo^*c{I{>9OFlsXzo zFEu8&`ubD|nB>E3shP{_b|;`Fz{F0fs_9NPth|&Ai>1FMj{<3`8MvErB8>exV3C>a zr84a-jML9I4fawQrM@DJhwusDPEnx%d*4lmimo{ToPRG2WL09_Y#vwn>I;KCt0l^t z2{ zTAIb6lz9c3qtdj$7uHC7oX+jQ(ws~DX8Z3j+bX^rOB2O1cv#aVsE z&Zu#8^XPl{G4;6Do=0w7+dIQzscKvmk^=gbRl0{2M$J_Z3k_rE9sMf<6WCHU8e@xx z=4I>oAMKrII9y-f@8wRDCQ%cj1cN9;l+nvSjA7Im-4M|kMj5?CnlNOvVMZsq(L19i zdKYDMqSqma9!ZY-+~>SG&+}a8e%g6+@@`*iU%P$QZ>_!dUhDV$3Q5L9-ib?5%C0P# z`KUIkHy*rkFto*uDJn7Ke;Hl)Bt1XfIFf6Lm=wG@n1<{#+p;8N_CBBBk3BX`{?I4c zX+TP;_&MvSC)S z{5clnBCZgf2DMMu-5?%2hLg;Xp4pne402@MFn(vhbnirjz_pFI@GsLX;ceYu7&20m z?jxXB|y&#-@ z&ii5)dl)v^rR-J|6KGuJDFqKXPUe!#)=5=!HaRsE-4yCWb|x_wqwVg+99utUkEmYG zj?vN;!(tkglDTlPC|5Um6{N-&nv@#ft;6Vht-clVU7K;atSg;2A@h>XWuk)Z)p*LY zu97WkU`)!FkVTE0hmOe!)S!Md>dN~A{w`74>Ym#HRKkn7d;IzUGwSG`Y^K59QqQ8I zVLRT&vM>SLrkl0)6DB#a%`DBr^bH-_vx&+zlI{KvE1uptic^`uH)ZW%r=s4;>&oSB zv9Fw4F>L0Kl)Tvp5P4|9uW(tNl&Y7%xZ}-@Eo$T({tS77yazgRt}-Nhz_J8y>2g(8 zIE=wXk=9-!Iy)>*Z8I-^;HtE(X6jigb8H^cuwtvE_#lV;4haRm7(XAK1rG4)n)rpQ z>9IOx&DY}uG-(YHNXChm4{v`?;Vq90dC>vf1j&{F(VW1e9;b^8^~wl6 zk6qQ(&7?8F7}y$42FTk4{h(gq!u-G|+v(}ss3rCaO3+tw3wRXPrz8a~T-Lm9PO2F+ z@UBC&HwwKmD|{9au7)1|1=?S@HEG4M%=u8U9f^GzcMab@{-EY-jP!@AVGL~1#@IRU zyYohz%f|SNe0Iw5?n#iT7N}j3s`G?--eR3zmQ&sjn-Pn;H^orwcwvCFjq`@cm3kEO zxyEoXWAww8bc*n|ks-)Qb>C1yL|xKO-vZoHXC1>c;ZMIP;!x4kBT0}4KO#c-)e@&) zYLep;pT2@0H}LNp z^otE>;c~|@Ry;d47Hoh2J!olVtnBK{_y{NH4*xtsw7TD~*Wu8e%GvpqeXctO{*2S% zBwEkpEx=faAW?2uy%b)8n)1kB(>Mm$j+PZE7P;#ZFhjp7Jcf+=RNg;{6!<2GtS)5D zCyT@4-fi84X>t?5{=Pn0yaAf4T|Yasc1sSjkCV>+VZWnypZ%ZI>SUg?AImDbj%%Ci z@W&8UUog9O?P{|9TKJLq$S!(5=^%F}gyPS}9|-?eB%D;wMj0~$*eiBI`9wtpk!{y* zzj?<4{@-)+iDaS{k}e_eWPDL5fO^T80Ze+8<8!9pU#rS76TSVSsl21dkx3`ieaJ?k zIzB&?1xl1WyM2xzqP^vCMn9v1XcJX3FIKgwT)r&IC^P38*4_t}EeUE@TjMs~;<{)L z%An1S=w~*LT4`0D(gl$Hvu>lUS0F{lM#V4 zz2uobeIOpL4t2Kd>6*39LN_YPzX8d1ue}|IgIEB%$9#wFv__U8+JYO7D8&Z5Qa?V9 zhAnPibpT0Ce%bLBN4{!6ljU8K#Yh@ZDD*R^o*Q6*l19|@3pMO;Nz?(Ub7tZTKaOhW zAC<90wsB|~h0K}zz&Z%@M^=fCH30)XCS8L);)G(ha;}r4KzBJ%x)TePzB4wVEE+JK z8`Gm6q!K$8`1xt^Xtyr!=OuxXkuNpvs^fm9Nh~w3(3YPaVXbUe@LeZ_GNj1;RE7#= zSVde+M9EE*&itFgQjHfqGRm{kD}8l+Mx!%T;x!Y+A!oj#1)HPYxh+ zH^=K*DVDF^G#U`o*v_P?8uMK5j#W>LppVUamCx>D=5ovUfw%Wohe-lIM8(uMU(w=2 z69HC!hsMJvkMA_>v4ODG`~fO#;0%_p=W$F7DZ@6>m|u+vx?{HL0NHYR91Gf9t3e^N zIGOH9o5AiI_r?Kf6spDM+9uG`w4K4cR>k#=Q>=YZ;fj^uwJIGN8;@u^`3#yB+i~%x zr4O3z)@iSYgx}-~ov+PwyHROh$ovW)i5FFAtn64=E{<6;OKEc~RO*xc1mEatv^itUM|+v_W8+JBH$!En^UYEWvOPlKYo1o5ncK`sct|SDvrq zj*t(i-2zFycr)?#@Odu2$8gA!;~dOlYDL&%LcF8_|CG_!u|Y>>&sWo@`<*vhWFLYB zR_#i=@G2J5#)ZErex|r~-bl6&KI5|0LhMY zxGZYx=h8a7VaycO5vzI}88y(xG4xz7TgYAAt_pybqAu@2Pol)r9+$!3);*`LrFQDj z;yiCbm=N_nOd2W4O7t^T*2De5s4;KhuK?eE{7t?0Vs)9bTLxU7Wa{OL@+(u@huzIq zSE&zoH~JacCHGQ@zSp7Z3KU*P(Zu+DPp(@X+Fs+DV z7(P>E?}nODweHL4&Ku(oGQ`zQHj}L3XmnU>CF>*QMC5KLZ=0PC7Aq5j#A>*H=(F0h zvtu^-K5;jth7BDe;mKN{!jfpSXB)gEm@N!}e|KWv z9FvWgO?A}Ssz#Y9QEPhS-fF3fWjPIj43{ZbgY)^G#Rv!|jOit47RDwBbs3&tk&xBr z)+7jl#B`EPz9#10J|eX0oPuk!YbXa^`U>dMIU*|`?`T%X(w}DlBz=#Ctqu~9>|8W5 zzD~A<9acVrqmvz7dE+$wp$qwPLR5-nvr7_qGrLly4F6nYYR8d);;osMj_w6eO%gCv z5jJ%H*@8xOtNf~G`K$o5@YD#?JH=c;VFprL09}(agWJqL&jpBbUv7V29fZiGJs=UBkzfJgf#VKjd%>XY)O$>{X+Ytv&&%(tw5csmJ2*kB`8Ta%HiNU3ogmX`hx7FO12{4YZVGLK&dE#ADmi*sNGX zFp{j5kzsKXO9#}M@@#qt^Od}z+!VqiLJrMV$U;vW8!9|#M(b;)0_x)WAJevAi>L{_;*0cJd)`;8E z@CyKbIKnX-CGg%lDx7iREB{-i@+Z*04$Up9o=yeR6cJh%b1Z0X zPJiHaqL+VECi$~7cbE9BSo25HuYZhp^yB{7@y>szHu*>jKKms@7IC%eRcRo5QiK_yK$c$rBI`CBd7sn1^2Ng&zD3{G9 zhsS+HSh96I0Z3vtkhtQ`F9`a?X;IV6J)ZR`RM5>TucvyB^irWvY8g-~$10IAG*Qcr zE$o+y3w7FP{#RSbB5jo=|0{7ZFs@Fc`oomX;l+tRrWv))Ln@P$Uc%ia!PvdfZGr7a zPn*^(M4&FhsKO6jVkpfdb;6`DgQYoLZMO(J+^IC$e?jOs1t$R7u3oH&Ny+i`_QZ_+ z%7=kVXtl)GW)9~I9Ix5BbwuXp!qxKu?2!-HkUx$X!268JFuM0;Y% zz_=OB#qY}#_WWtKkaLQVJKQGZ?cd_N>tSkM$7(u1m#PNoIepe{K5kM}xi<7;t;>aB z2<{kLW$MpZe7D<0j&Ud?VO#!Y`}dMKlc92zKz%@ChJ4PTbibU@dT%(}nU_&x*h?Cw z4|i$eb0?;Jtt*X%3+!%C~_-uWL^LLv~yAI##R|)ScDzY?d7yh5LY>|`7Ky! zgFCYzTA4Y9&lxNCwA>H_*}HVPbWQa+*rZd(tKUnzv5aUG$xy^ zzygf@P0{xDu5-vYF7=;(ig+#?mA18b$(3@QRDrzCC?Oe-!n@+R(xk0Fq zdtKr8*zN00SlQ61ph~Y5QDMf#ue2_E62rYr*ZP&{!h@rfQH?Q{_i6F&*k}{1uXx}G zE?2c8o7TB!_m^jQWwm7Tie8b`cZuE8+&>cvRQp!aRjPLw<1ps^D_QjbcNh20wuD4z zAd!VpYb{#AmvUnf-!ITx#d%XrRR7c|JjFnGL^7C4#04dSCoNxCMUN=dqIxDo50j~* ztX4f+zdBO;szB8rNbaifa((i_kupnID^i@>AVe=v}ncCYO8Fp5m_E z;&J9>s`E++7u#Z}_DVXd{7W$+H{b16^kb8VrOLDn$JtD5U|yWw5C<#$>wT+CQ-Vsu zv>S#PBspNNn(W>J-Y)a#Fxyugv&arD7kPw^J+f*tqK7o~$Mg8iXunWbvHn$^jlqzL8^B+@j!tk2Z7S^|pNY~KS zX|-uoUl$q6yQ|t&yR-V^bN4sATsU7uk6}BOTnW{yLH`KWUlA$uYjdz^;h#+!PE6B! z4|2O9nAKG?(-yWmXI?h>*?A?Q7iifR_M>-H2?Q9nyU6g~+tEnJ4Bs={aY~{BE&-{@ zzEFQxGq)swQ3m>R96cURU#U)~^?doqV$C?46Mdngt?Q6f!s!uR;O2m3=0b+0zY zpKP?Lm5AeKc#M#g$eY0FTlQl)OH^8Zg=*?|BW}FpW+>`Ypq8Nt^V6E;whG3ZcBfQr zKQ+iC>zg__Mobo;m5ZuT_Nl|POgSUtXQAa*50&R*5lRr_XL!+QXJYE!Kxik4+a3=a z)Oc`mlTo8sciO}`Hg8tPlRCjKn9IF4Zr(*BGk&bGdsb*P#dM4lTOQLdzLmTRhJY2D zG=Dni{5fLj zEqB3B(XKp4Gr6mCoV%=_o2zg$>5bb{;oB4Kx5UNp6+ld}tqGCBqs28|)hssC2ot5A(XJR{$DWVXF+ku`MYO_XpsYwqIr znaa3EmSJvQH7@k(BDfushkbHF3Tq;Cw6eVU^XiYFl#^ceb`RlfWm2bg%vZ*r zO95wzpx9cKo=~nQsX!uT|G=5vyFrt4*hf(t7(e06sL@^um*L`t$uHGz7V59tPOU6& z7pHFPS&>}*A|X^q_16~t@{c8#224-U7~d4cS84v|T?1+Fod$tlXzW6GdJH|jkBe^U zM5YS>_1y-+kszKrLPj9W-Ed?1m2g(U&OPRl4Aikx3-r|OggXDkct2Tgwc?Pf+$Tt9 zU?u6ch5{Q<-*E=27-`>rR1_Uq4?LK%L&6ftACjjf-q3`P2cVz2|EB1EzCW@LwEM>CJw+SrsL6vV^S9jCRwcwo0EoiSt zQ6kyb@IHtJQ9EYKC7u+`2g6+CR4TnkwH3IO|H^8QyV1D_>E+NBWc{(CN>0*UYto`s zXZGSr`jBug!PGu$tH2cWxR<(41NZn0p<1jW>d&I)Gq9Rn=e-|V?Uohx17mP(@@t=~ zT6HbmTjY5lZ=75kaqsS@<(Rp+Hhk6-0?1d(MeNbhK|(Z@)Io>*YB6I>Tv^${r>xGL z7wcd+Q+SHm4na;iK}wT%II6lVB~^aHItF#QsW7fyF-ZUR7%TMPlGS&_iTeD*H!a zZo8Fi{Bl5nkWo!ihxw-^lfEH#qo+0KsqQwBGBPuNYkH1@e@EsuzK5J{owtu>dVW1| z3381yQ0=kDUMvwd;O_c1V!@~YZK6qF(N=^OZpv?1HKa*O6?)68Fe13AQ^K|A(Wh^P zXx@p&jz%Xaib%g9$V}USA*RVXADRZ_Cd0~CEiL_M#n7?d##77Hnw`=+R_`Tb?5x== z2hQ~PgBtr7?%6SBv-Upj)E~bh1uA2tU!$p|rb$^&sd>1uvgIoc7x)Z5RkV`LVyR9- z2-Uh(!vk&E-*fFLZ&y?9>dC$LP?gJ&CnLy#>t)m7vhw>xGpEB~n_hNEpd!mb03dDW zH-#=f{{gZYrIn>Jh31`u!eWl^EosQPzxrDXdXfJde{9}5Y=tp8s}B?DqME#fqp9fC znvC%Yj$ysRq-Moy$n6>8-ZVnZn-oi){r1+ZvW33o@qDlIZwkmJO!a6L$!fMB!6rhV z83u)D@9=j%AaQXy&V)$zQfW*MKCpfDH(f`Jt%1btPPLWTUsrBPn)?d4g(hs<7)vKl z#>Ljh2)bqXz7v1Ra0|j=(EL!TYSbi)+G&pe(XR~EooU>Kf0S1b($-)=1aGap#GGzB zks(f~;_h@hVuDu4)3tX$&`)nww=HE^&s zj?IGSaq`H{JK(oQj^sBq!i{j({E_rmz-Eeak&d=!=x_DA?7O$EUQw&)a4+L#&WKN; zS(B{%qEKex1G{{BsP3pr0X#V9A}xCH!Q97E7e{yh1XHjsH`2c(wo__=*E$?H)T&L0 zf?3p4i2;qPw`>u*J=2McSBg!yWfat)si|Zr@^PzvVV1S2Ky{iB-FwgPb3F0!DL^;&;~taD4`R!B7zUKepilcaIJ?w)H9e13iBw=nf9H3t76$`3>adu zmyxLH8Y{8q)Lg*nK0_ILL;;d_yAK{mDwvWEObv!l z{IX;85m+v342a16LAyCnorOcN+v*=x7CV>G4Bih~&iV+quS5-VCzrp>@OrH80E!*Z zx8+YzCtfV(O0lrRKzhy_gYovcHesED!QCMlbwNNj&DNq`>$Irh=>-PaEJWkLoUj?t z$p%%`8RQj=eU_uYMkwO+;wEu^QA^d&BUaFa`&AijFWs*^Ip-&u%+JYlnXiW~6m6xw z!LM1a==Z#}K3WvEu}|V4rSUu-^4Uhj8Fco#ln`sy3H5X{9!xWN#WJJ2+DAag1 z90c{y`^;Bqogl4c+vTg`YcL(|STlvhA zpDY4owpuG6&-3*ouF_W+FD3HAOJFoT2H@$_!#%AgFK|k=RI#@%*(1ZIKvT_n$J%Yn zlo9LCguv3hIy7p7EXFy7^hl|6d~CKj=+rG)5A{w9h!^w{&^Lf68-*z+{(u`+di_*j z7;y~<(0Y}g8(dQyc%_0RLZ3T-mzzaPID-!=b>n(6|k@_!5sG^_5Ob zoJC?{_R$V|VucflKdysIy>ly;PPXQ|SV;@d4QF?0or^G1?>2W{bdn)EJRiE46hap` zvcgXjo3E#$axiChmL#o94cP{qKrKd=?ka{B;f&uD_ntx(fO~u5kwF8zMO)a`@XD*O z_KJD=un)H-=-*mLWhKn?#wri_jCw?4U0npe74A+VOigVtERxe@JGo(tL!33bk&JbI zA_=_LdS!o^P%yBpS~`=uSB)K#B4MM zU}DH{LZX3+L6~he^|n(-TJFcP^?(44UqNZ|Rr@lJj-KeVH!Y=9hxtZj870YGI1!zk z1F#b(fvXnt<(TA}%!+$QB6?do4*lFkj1}m)!hTiJK2H6mC&k@^R)->HbBr<;l)N6C ziR5Sb;z4oF90}1UAb)V=$d>^xg@pSDV!QamecB&%i1JC~RpYRjr!L~8ZAza5cJ3pE zg!)}yu|`{E(K1`YB~_6AV&O0Z{!qt-d2PuxjV#LF!b6mh4;uDo&9_kmUnX?+Y1s{^ z%E03t&k)U^$+Ck^nECptFQRdlkx{fPg1}qvH6_e1ReVan{gAX&T5`mu;d%eWy^fdH zDmejG&&-GA5F12t0={@RDI+JH1K$)qmty)J?GmbwmyB~3J69$6~ z(8!bETP~y~dBEKv1DDw2LlM58m@1R#)?P!*TMMjx*O$ybo8AVuf=-L8vY*dVwZ=|7 z3a2;My~`$M^&IbZ=d!?ri%8kl3y;VK%&#<+`VE}c?G7BLmg)&X5$!#R%xXVe7?z*k zQBufB@0sXl3x+Pyh?rjlp2BAr{qS8L_Y={ndwY2*-s$_UX+dgG;Lp3+6C^#QNM4X? zc8c)_bV1bg!3%*m?m=5GwywV zgtO5dl;PmIb%@6Q+coWpLc;p&MICkWXFOp zxggH!Ju|htL{eVya~-r#kmdKvspcCgNDydWW>3N@T&vk|0i6%AkuHZQKk7T8av$eC zfPCL2^!SfPhX?;)DtO?P1=BS|Z+gvgPgQ^Icv97vIKRS1S$;>dKOi#3pNXF~(HA$y z5yNj>8yjQSEzlEa|f1rV0?+eE$6} zs{4mRz8|mOI*V)ga{2vF^*Q@XEx)qAiBT-Pf*mJPxHc2~`za*NM;ljPGygf@52gP< zLgQ}u7TZff-fL6$RAO-rgUOe$Pptp-hV`fP4}m`f{t);>;17X61pW~CL*NgAKLq{| z_(S0TPTOrhk zYR_L#^<7-k4VX2W3CIdtwe{kl2tX+z#hi;Al&lRwd1SEZF$Ic?`nCMSJT9yzSWT|| zWe&y4-yeMw0T;3%)xBSBEYFKLl3|Pb#6o<{%p5f><@rHPlvQt4gg;IAj%lo4h0T3I z^jf?V;y;h-KY{!2Rd=64kmBrL*7V&tihw?f6I+T?)CD~Gi;KKw{B(Q%n(JlBOUV=i z6n6h51&%!2@JplA#UcR(HxZMyZFT@m%(BSdgRLKs6iir-SfRznVVoV4CVuK=7j@L< zhb~-|b7w93-O5%V>NvSK%3`G=L%_HBRcE2ynwk}(7gB1hCW%S`Hs&HwURW`9F@f=W z{1{X)*g$QR?EZ|faE9?_iXe!s)6`o}htotkf9$8^XX7YDYzo(fX^<+!3E_Ot@`dAW zEE6w7gf8H zr`2uUo6+o@0_v%h#PVLo@ue)tjHSKgsL%Puw^$qOf8C zV)Iu!l~Vj^S5!L_2a9oDUu?N<5Mp`|xn$VWBW|W?mYYA5^0=6gDXp&-$V@2V?aXU) z9d>Ro5OMID&KD5{v3zS6%-r9*Fm+md^_T03-R$0P3Y1^k7u~qvmvY*>N2b4CUAA0j zqZk+p46`@#Dgx5qZ14cOb7eYLk!rIO5>iQUVeYlc{YY&oXS~h|w&k-|UUv+uxKH#5 zFL?uKlH6si(G}~x&Yy-xgkzGID27gSQ1*QbObP7>eiVqDM3zOMVEwmxv^eeP!X=uf z85tHhOjnr49{^!{S>0mN&ZSFr?)Io0`Kc&~+J&heFnL^*lRand6|K~xe41>&NaJWK z#TPPDXO@^L7Yl0qXjZWSu-P-XH~(DYexJ5EE{G7@jkRW9-)_LK$rS)rp;^7c^d}9D zR1VJblMQqodn=X&s!0rv!Xw-uX)v*{sIXfsk;WnY3We*9O2_B+#RtFf6p`3{LO zZO-5@unir|9*vHjB7?mr9es}6Zx_1C^$tA9Bk7nWX%f^djU^Zp?iArYeMOnjLk&C1 zaTcjV{Y#9HUMarV@%fCD>B(JsJwl3(rmD}^o@ISn;xjBinM0rfHfLt#or)ff_NE&H zc{!%Q*N$_pmnV@&{3fL@vu%M?9aa&(m%_?^s!?qABW=bfzbUl7{Q zj;)e!^NrqzAr-9=Sgw&CKW2*}G z4j|W)GOxaXROSv?hFE7mu0Hn4Z-4o2Ws11@Jb%)dW!id=xOA(U0jB<&!rAzc1t2yw zOk&Ee@i6czTs7O@oqlz;8;(n#YF8`^&T5ovuf^gkAs|MAbcPxdXA5@J{O%T65an0$ zx4P+rVO)uPZe;zf%$+8ln7t{7Ox*{gWgEsn_Roq3bFY4rJg`gtZ|GS5UAlh|Gtjtkq1Wn>ocqhXo%1&)sg3vFu<=So4woa z=tewpx?T2;k<6R`lI16WC z`aTpmoI-N6(0X}vYvB`RCKj#GOc7eE-guI8K|&hFrn>J%m-_7tlNDMA-dj(_bAgq^ z5L@LH(R~b~@ZvDo<%35v zp;Dm$S5MrCR48S!+I&S;=Aflxqjc5K; z^@RD=3at^BMtKzD%$F9?A(r6fVnq`*^9xXt%9X>0Wj@7Lx&RLhKR8a0FJ`oBK#P;h zadgsF6xb24YPy6Rd>|a;)%y{)*6JsK7N}=g3qP#RBJ0LA1vW)vDxXAzJPE(E>G!BO zj&6~?)l*=z3yVwrE@&m3GFS|u#?gGxe0{M>iS~AS7O;|wk^_*fk^tpc6`c~scTmv< zD5$rt?u~pDzCBy*?r;TC;4E1D8rhT%i10)J#q01RI`3E!a2?>4@74v3ET>?2<>)4j z;Zt?i<$O;Ghw_c2h?fbeI4lhmN&{22eYJF%;#cw&gg<%L`qPt`E@tb^Yd} u%kS@9YC%&hfGJ!vC?s_#m><8U`m^KzA(Ar~<)wqHi#mx`eRTcz literal 0 HcmV?d00001 diff --git a/python_coreml_stable_diffusion/web.py b/python_coreml_stable_diffusion/web.py new file mode 100644 index 0000000..b001e13 --- /dev/null +++ b/python_coreml_stable_diffusion/web.py @@ -0,0 +1,108 @@ +try: + import gradio as gr + import python_coreml_stable_diffusion.pipeline as pipeline + from diffusers import StableDiffusionPipeline + + def init(args): + pipeline.logger.info("Initializing PyTorch pipe for reference configuration") + pytorch_pipe = StableDiffusionPipeline.from_pretrained(args.model_version, + use_auth_token=True) + + user_specified_scheduler = None + if args.scheduler is not None: + user_specified_scheduler = pipeline.SCHEDULER_MAP[ + args.scheduler].from_config(pytorch_pipe.scheduler.config) + + coreml_pipe = pipeline.get_coreml_pipe(pytorch_pipe=pytorch_pipe, + mlpackages_dir=args.i, + model_version=args.model_version, + compute_unit=args.compute_unit, + scheduler_override=user_specified_scheduler) + + + def infer(prompt, steps): + pipeline.logger.info("Beginning image generation.") + image = coreml_pipe( + prompt=prompt, + height=coreml_pipe.height, + width=coreml_pipe.width, + num_inference_steps=steps, + ) + images = [] + images.append(image["images"][0]) + return images + + + demo = gr.Blocks() + + with demo: + gr.Markdown( + "

Core ML Stable Diffusion

Run Stable Diffusion on Apple Silicon with Core ML
") + with gr.Group(): + with gr.Box(): + with gr.Row(): + with gr.Column(): + with gr.Row(): + text = gr.Textbox( + label="Prompt", + lines=11, + placeholder="Enter your prompt", + ) + with gr.Row(): + btn = gr.Button("Generate image") + with gr.Row(): + steps = gr.Slider(label="Steps", minimum=1, + maximum=50, value=10, step=1) + with gr.Column(): + gallery = gr.Gallery( + label="Generated image", elem_id="gallery" + ) + + text.submit(infer, inputs=[text, steps], outputs=gallery) + btn.click(infer, inputs=[text, steps], outputs=gallery) + + demo.launch(debug=True, server_name="0.0.0.0") + + + if __name__ == "__main__": + parser = pipeline.argparse.ArgumentParser() + + parser.add_argument( + "-i", + required=True, + help=("Path to input directory with the .mlpackage files generated by " + "python_coreml_stable_diffusion.torch2coreml")) + parser.add_argument( + "--model-version", + default="CompVis/stable-diffusion-v1-4", + help= + ("The pre-trained model checkpoint and configuration to restore. " + "For available versions: https://huggingface.co/models?search=stable-diffusion" + )) + parser.add_argument( + "--compute-unit", + choices=pipeline.get_available_compute_units(), + default="ALL", + help=("The compute units to be used when executing Core ML models. " + f"Options: {pipeline.get_available_compute_units()}")) + parser.add_argument( + "--scheduler", + choices=tuple(pipeline.SCHEDULER_MAP.keys()), + default=None, + help=("The scheduler to use for running the reverse diffusion process. " + "If not specified, the default scheduler from the diffusers pipeline is utilized")) + + args = parser.parse_args() + init(args) + +except ModuleNotFoundError as moduleNotFound: + print(f'Found that `gradio` is not installed, try to install it automatically') + try: + import subprocess + import sys + + subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'gradio']) + print(f'Successfully installed missing package `gradio`.') + print(f'Now re-execute the command :D') + except subprocess.CalledProcessError: + print(f'Automatic package installation failed, try manually executing `pip install gradio`, then retry the command again.') \ No newline at end of file From 34142fe0503f26f7aa82c362370b0e43ad3812ed Mon Sep 17 00:00:00 2001 From: youngmoro Date: Thu, 15 Jun 2023 23:15:23 +0900 Subject: [PATCH 2/3] add n-prompt, seed --- python_coreml_stable_diffusion/web.py | 121 ++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 python_coreml_stable_diffusion/web.py diff --git a/python_coreml_stable_diffusion/web.py b/python_coreml_stable_diffusion/web.py new file mode 100644 index 0000000..aa936ed --- /dev/null +++ b/python_coreml_stable_diffusion/web.py @@ -0,0 +1,121 @@ +try: + import numpy as np + import gradio as gr + import python_coreml_stable_diffusion.pipeline as pipeline + from diffusers import StableDiffusionPipeline + + def init(args): + pipeline.logger.info("Initializing PyTorch pipe for reference configuration") + pytorch_pipe = StableDiffusionPipeline.from_pretrained(args.model_version, + use_auth_token=True) + + user_specified_scheduler = None + if args.scheduler is not None: + user_specified_scheduler = pipeline.SCHEDULER_MAP[ + args.scheduler].from_config(pytorch_pipe.scheduler.config) + + coreml_pipe = pipeline.get_coreml_pipe(pytorch_pipe=pytorch_pipe, + mlpackages_dir=args.i, + model_version=args.model_version, + compute_unit=args.compute_unit, + scheduler_override=user_specified_scheduler) + + + def infer(prompt, negative_prompt, steps, seed): + pipeline.logger.info(f"Setting random seed to {seed}") + np.random.seed(seed) + pipeline.logger.info("Beginning image generation.") + image = coreml_pipe( + prompt=prompt, + negative_prompt=negative_prompt, + height=coreml_pipe.height, + width=coreml_pipe.width, + num_inference_steps=steps, + ) + images = [] + images.append(image["images"][0]) + return images + + + demo = gr.Blocks() + + with demo: + gr.Markdown( + "

Core ML Stable Diffusion

Run Stable Diffusion on Apple Silicon with Core ML
") + with gr.Group(): + with gr.Box(): + with gr.Row(): + with gr.Column(): + with gr.Row(): + text = gr.Textbox( + label="Prompt", + lines=11, + placeholder="Enter your prompt", + ) + with gr.Row(): + n_text = gr.Textbox( + label="Negative_prompt", + lines=11, + placeholder="Enter your negative_prompt", + ) + with gr.Column(): + with gr.Row(): + steps = gr.Slider(label="Steps", minimum=1, + maximum=50, value=10, step=1) + with gr.Row(): + seed = gr.Slider(label="Seed", minimum=0, + maximum=4294967295, value=0, step=1) + with gr.Row(): + btn = gr.Button("Generate image") + gallery = gr.Gallery( + label="Generated image", elem_id="gallery" + ) + + text.submit(infer, inputs=[text, n_text, steps, seed], outputs=gallery) + btn.click(infer, inputs=[text, n_text, steps, seed], outputs=gallery) + + demo.launch(debug=True, server_name="0.0.0.0") + + + if __name__ == "__main__": + parser = pipeline.argparse.ArgumentParser() + + parser.add_argument( + "-i", + required=True, + help=("Path to input directory with the .mlpackage files generated by " + "python_coreml_stable_diffusion.torch2coreml")) + parser.add_argument( + "--model-version", + default="CompVis/stable-diffusion-v1-4", + help= + ("The pre-trained model checkpoint and configuration to restore. " + "For available versions: https://huggingface.co/models?search=stable-diffusion" + )) + parser.add_argument( + "--compute-unit", + choices=pipeline.get_available_compute_units(), + default="ALL", + help=("The compute units to be used when executing Core ML models. " + f"Options: {pipeline.get_available_compute_units()}")) + parser.add_argument( + "--scheduler", + choices=tuple(pipeline.SCHEDULER_MAP.keys()), + default=None, + help=("The scheduler to use for running the reverse diffusion process. " + "If not specified, the default scheduler from the diffusers pipeline is utilized")) + + args = parser.parse_args() + init(args) + +except ModuleNotFoundError as moduleNotFound: + print(f'Found that `gradio` is not installed, try to install it automatically') + try: + import subprocess + import sys + + subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'gradio']) + print(f'Successfully installed missing package `gradio`.') + print(f'Now re-execute the command :D') + except subprocess.CalledProcessError: + print(f'Automatic package installation failed, try manually executing `pip install gradio`, then retry the command again.') \ No newline at end of file From 85a1b661f62cc92057c66f1fa04646b0e165d158 Mon Sep 17 00:00:00 2001 From: youngmoro Date: Thu, 15 Jun 2023 23:48:49 +0900 Subject: [PATCH 3/3] fix readme --- README.md | 137 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 71 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 31725fe..2ddcd11 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Run Stable Diffusion on Apple Silicon with Core ML [\[Blog Post\]](https://machinelearning.apple.com/research/stable-diffusion-coreml-apple-silicon) [\[BibTeX\]](#bibtex) + This repository comprises: - `python_coreml_stable_diffusion`, a Python package for converting PyTorch models to Core ML format and performing image generation with Hugging Face [diffusers](https://github.com/huggingface/diffusers) in Python @@ -17,50 +18,54 @@ If you run into issues during installation or runtime, please refer to the [FAQ] Model Conversion: -| macOS | Python | coremltools | -| :---: | :----: | :---------: | -| 13.1 | 3.8 | 7.0 | + macOS | Python | coremltools | +:------:|:------:|:-----------:| + 13.1 | 3.8 | 7.0 | Project Build: -| macOS | Xcode | Swift | -| :---: | :---: | :---: | -| 14.0 | 15.0 | 5.8 | + macOS | Xcode | Swift | +:------:|:-----:|:-----:| + 14.0 | 15.0 | 5.8 | Target Device Runtime: -| macOS | iPadOS, iOS | -| :---: | :---------: | -| 13.1 | 16.2 | + macOS | iPadOS, iOS | +:------:|:-----------:| + 13.1 | 16.2 | Target Device Runtime ([With Memory Improvements](#compression)): -| macOS | iPadOS, iOS | -| :---: | :---------: | -| 14.0 | 17.0 | + macOS | iPadOS, iOS | +:------:|:-----------:| + 14.0 | 17.0 | Target Device Hardware Generation: -| Mac | iPad | iPhone | -| :-: | :--: | :----: | -| M1 | M1 | A14 | + Mac | iPad | iPhone | +:------:|:-------:|:-------:| + M1 | M1 | A14 | + ## Performance Benchmarks + [`stabilityai/stable-diffusion-2-1-base`](https://huggingface.co/apple/coreml-stable-diffusion-2-1-base) Benchmark: -| Device | `--compute-unit` | `--attention-implementation` | End-to-End Latency (s) | Diffusion Speed (iter/s) | -| --------------------- | ---------------- | ---------------------------- | ---------------------- | ------------------------ | -| iPhone 12 Mini | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 20 | 1.3 | -| iPhone 12 Pro Max | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 17 | 1.4 | -| iPhone 13 | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 15 | 1.7 | -| iPhone 13 Pro Max | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 12 | 1.8 | -| iPhone 14 | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 13 | 1.8 | -| iPhone 14 Pro Max | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 9 | 2.3 | -| iPad Pro (M1) | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 11 | 2.1 | -| iPad Pro (M2) | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 8 | 2.9 | -| Mac Studio (M1 Ultra) | `CPU_AND_GPU` | `ORIGINAL` | 4 | 6.3 | -| Mac Studio (M2 Ultra) | `CPU_AND_GPU` | `ORIGINAL` | 3 | 7.6 | + +| Device | `--compute-unit`| `--attention-implementation` | End-to-End Latency (s) | Diffusion Speed (iter/s) | +| --------------------- | --------------- | ---------------------------- | ---------------------- | ------------------------ | +| iPhone 12 Mini | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 20 | 1.3 | +| iPhone 12 Pro Max | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 17 | 1.4 | +| iPhone 13 | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 15 | 1.7 | +| iPhone 13 Pro Max | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 12 | 1.8 | +| iPhone 14 | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 13 | 1.8 | +| iPhone 14 Pro Max | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 9 | 2.3 | +| iPad Pro (M1) | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 11 | 2.1 | +| iPad Pro (M2) | `CPU_AND_NE` | `SPLIT_EINSUM_V2` | 8 | 2.9 | +| Mac Studio (M1 Ultra) | `CPU_AND_GPU` | `ORIGINAL` | 4 | 6.3 | +| Mac Studio (M2 Ultra) | `CPU_AND_GPU` | `ORIGINAL` | 3 | 7.6 | +
Details (Click to expand) @@ -91,27 +96,27 @@ For best results, we recommend [training-time palettization](https://coremltools The Neural Engine is capable of accelerating models with low-bit palettization: 2, 4, 6 or 8 bits. With iOS 17 and macOS 14, compressed weights for Core ML models can be just-in-time decompressed during runtime (as opposed to ahead-of-time decompression upon load) to match the precision of activation tensors. This yields significant memory savings and enables models to run on devices with smaller RAM (e.g. iPhone 12 Mini). In addition, compressed weights are faster to fetch from memory which reduces the latency of memory bandwidth-bound layers. The just-in-time decompression behavior depends on the compute unit, layer type and hardware generation. -| Weight Precision | `--compute-unit` | [`stabilityai/stable-diffusion-2-1-base`](https://huggingface.co/apple/coreml-stable-diffusion-2-1-base) generating _"a high quality photo of a surfing dog"_ | -| :--------------: | :----------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 6-bit | cpuAndNeuralEngine | | -| 16-bit | cpuAndNeuralEngine | | -| 16-bit | cpuAndGPU | | +| Weight Precision | `--compute-unit` | [`stabilityai/stable-diffusion-2-1-base`](https://huggingface.co/apple/coreml-stable-diffusion-2-1-base) generating *"a high quality photo of a surfing dog"* | +| :---------------:| :----------------: | ------------------------------------------------------ | +| 6-bit | cpuAndNeuralEngine | | +| 16-bit | cpuAndNeuralEngine | | +| 16-bit | cpuAndGPU | | Note that there are minor differences across 16-bit (float16) and 6-bit results. These differences are comparable to the differences across float16 and float32 or differences across compute units as exemplified above. We recommend a minimum of 6 bits for palettizing Stable Diffusion. Smaller number of bits (2 and 4) will require fine-tuning to recover image generation quality as previously mentioned. Resources: - - [Core ML Tools Docs: Optimizing Models](https://coremltools.readme.io/v7.0/docs/optimizing-models) - [WWDC23 Session Video: Use Core ML Tools for machine learning model compression](https://developer.apple.com/videos/play/wwdc2023/10047) ## Using ControlNet -Example results using the prompt _"a high quality photo of a surfing dog"_ conditioned on the scribble (leftmost): +Example results using the prompt *"a high quality photo of a surfing dog"* conditioned on the scribble (leftmost): [ControlNet](https://huggingface.co/lllyasviel/ControlNet) allows users to condition image generation with Stable Diffusion on signals such as edge maps, depth maps, segmentation maps, scribbles and pose. Thanks to [@ryu38's contribution](https://github.com/apple/ml-stable-diffusion/pull/153), both the Python CLI and the Swift package support ControlNet models. Please refer to [this section](#converting-models-to-coreml) for details on setting up Stable Diffusion with ControlNet. + ## Using the System Multilingual Text Encoder
@@ -137,8 +142,8 @@ The command above will yield a `MultilingualTextEncoderProjection.mlmodelc` file **Step 5:** The multilingual system text encoder can now be invoked by setting `useMultilingualTextEncoder` to true when initializing a pipeline or setting `--use-multilingual-text-encoder` in the CLI. Note that the model assets are distributed over-the-air so the first invocation will trigger asset downloads which is less than 100MB. -Resources: +Resources: - [WWDC23 Session Video: Explore Natural Language multilingual models](https://developer.apple.com/videos/play/wwdc2023/10042) - [NLContextualEmbedding API Documentation](https://developer.apple.com/documentation/naturallanguage/nlcontextualembedding) @@ -151,14 +156,13 @@ Resources: 🤗 Hugging Face ran the [conversion procedure](#converting-models-to-coreml) on the following models and made the Core ML weights publicly available on the Hub. If you would like to convert a version of Stable Diffusion that is not already available on the Hub, please refer to the [Converting Models to Core ML](#converting-models-to-core-ml). -- 6-bit quantized models (suitable for iOS 17 and macOS 14): - +* 6-bit quantized models (suitable for iOS 17 and macOS 14): - [`CompVis/stable-diffusion-v1-4`](https://huggingface.co/apple/coreml-stable-diffusion-1-4-palettized) - [`runwayml/stable-diffusion-v1-5`](https://huggingface.co/apple/coreml-stable-diffusion-v1-5-palettized) - [`stabilityai/stable-diffusion-2-base`](https://huggingface.co/apple/coreml-stable-diffusion-2-base-palettized) - [`stabilityai/stable-diffusion-2-1-base`](https://huggingface.co/apple/coreml-stable-diffusion-2-1-base-palettized) -- Uncompressed models: +* Uncompressed models: - [`CompVis/stable-diffusion-v1-4`](https://huggingface.co/apple/coreml-stable-diffusion-v1-4) - [`runwayml/stable-diffusion-v1-5`](https://huggingface.co/apple/coreml-stable-diffusion-v1-5) - [`stabilityai/stable-diffusion-2-base`](https://huggingface.co/apple/coreml-stable-diffusion-2-base) @@ -234,6 +238,7 @@ This generally takes 15-20 minutes on an M1 MacBook Pro. Upon successful executi - `--model-version`: The model version defaults to [CompVis/stable-diffusion-v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4). Developers may specify other versions that are available on [Hugging Face Hub](https://huggingface.co/models?search=stable-diffusion), e.g. [stabilityai/stable-diffusion-2-base](https://huggingface.co/stabilityai/stable-diffusion-2-base) & [runwayml/stable-diffusion-v1-5](https://huggingface.co/runwayml/stable-diffusion-v1-5). + - `--bundle-resources-for-swift-cli`: Compiles all 4 models and bundles them along with necessary resources for text tokenization into `/Resources` which should provided as input to the Swift package. This flag is not necessary for the diffusers-based Python pipeline. - `--quantize-nbits`: Quantizes the weights of unet and text_encoder models down to 2, 4, 6 or 8 bits using a globally optimal k-means clustering algorithm. By default all models are weight-quantized to 16 bits even if this argument is not specified. Please refer to [this section](#compression for details and further guidance on weight compression. @@ -260,7 +265,6 @@ Run text-to-image generation using the example Python pipeline based on [diffuse ```shell python -m python_coreml_stable_diffusion.pipeline --prompt "a photo of an astronaut riding a horse on mars" -i -o --compute-unit ALL --seed 93 ``` - Please refer to the help menu for all available arguments: `python -m python_coreml_stable_diffusion.pipeline -h`. Some notable arguments: - `-i`: Should point to the `-o` directory from Step 4 of [Converting Models to Core ML](#converting-models-to-coreml) section from above. @@ -278,11 +282,9 @@ Please refer to the help menu for all available arguments: `python -m python_cor Click to expand ### Example CLI Usage - ```shell swift run StableDiffusionSample "a photo of an astronaut riding a horse on mars" --resource-path /Resources/ --seed 93 --output-path ``` - The output will be named based on the prompt and random seed: e.g. `/a_photo_of_an_astronaut_riding_a_horse_on_mars.93.final.png` @@ -297,7 +299,6 @@ let pipeline = try StableDiffusionPipeline(resourcesAt: resourceURL) pipeline.loadResources() let image = try pipeline.generateImages(prompt: prompt, seed: seed).first ``` - On iOS, the `reduceMemory` option should be set to `true` when constructing `StableDiffusionPipeline` ### Swift Package Details @@ -317,7 +318,7 @@ Both of these products require the Core ML models and tokenization resources to Optionally, for image2image, in-painting, or similar: -- `VAEEncoder.mlmodelc` (image encoder model) +- `VAEEncoder.mlmodelc` (image encoder model) Optionally, it may also include the safety checker model that some versions of Stable Diffusion include: @@ -348,10 +349,10 @@ Hugging Face has made the app [available in the Mac App Store](https://apps.appl ## Play with simple Web UI -
- Click to expand +
+ Click to expand - + After you have completed the model conversion according to the above process, you can use the following command to start a simple Web UI: @@ -371,11 +372,15 @@ INFO:python_coreml_stable_diffusion.pipeline:Initializing Core ML pipe for image INFO:python_coreml_stable_diffusion.pipeline:Stable Diffusion configured to generate 512x512 images INFO:python_coreml_stable_diffusion.pipeline:Done. Running on local URL: http://0.0.0.0:7860 + To create a public link, set `share=True` in `launch()`. ``` Open `http://0.0.0.0:7860` in your browser to start your Core ML Stable Diffusion adventure. + + Web UI relies on gradio, a great interface framework. If you have not installed it, then execute the above command, the program will try to install it automatically. + If the installation fails, you can try to manually execute the following command to complete the dependency installation. ```bash @@ -384,31 +389,32 @@ pip install gradio When the installation is complete, re-execute the above command to start the Web UI. -
+
-## FAQ + +## FAQ
Click to expand
+ Q1: ERROR: Failed building wheel for tokenizers or error: can't find Rust compiler A1: Please review this [potential solution](https://github.com/huggingface/transformers/issues/2831#issuecomment-592724471). -
+
Q2: RuntimeError: {NSLocalizedDescription = "Error computing NN outputs." A2: There are many potential causes for this error. In this context, it is highly likely to be encountered when your system is under increased memory pressure from other applications. Reducing memory utilization of other applications is likely to help alleviate the issue. -
Q3: My Mac has 8GB RAM and I am converting models to Core ML using the example command. The process is getting killed because of memory issues. How do I fix this issue? - A3: In order to minimize the memory impact of the model conversion process, please execute the following command instead: + A3: In order to minimize the memory impact of the model conversion process, please execute the following command instead: ```bash python -m python_coreml_stable_diffusion.torch2coreml --convert-vae-encoder -o && \ @@ -430,7 +436,6 @@ python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --chunk-une Q4: My Mac has 8GB RAM, should image generation work on my machine? A4: Yes! Especially the `--compute-unit CPU_AND_NE` option should work under reasonable system load from other applications. Note that part of the [Example Results](#example-results) were generated using an M2 MacBook Air with 8GB RAM. -
@@ -442,15 +447,16 @@ If you intend to use the Python pipeline in an application, we recommend initial
+
Q6: I want to deploy StableDiffusion, the Swift package, in my mobile app. What should I be aware of? A6: The [Image Generation with Swift](#image-gen-swift) section describes the minimum SDK and OS versions as well as the device models supported by this package. We recommend carefully testing the package on the device with the least amount of RAM available among your deployment targets. -The image generation process in `StableDiffusion` can yield over 2 GB of peak memory during runtime depending on the compute units selected. On iPadOS, we recommend using `.cpuAndNeuralEngine` in your configuration and the `reduceMemory` option when constructing a `StableDiffusionPipeline` to minimize memory pressure. +The image generation process in `StableDiffusion` can yield over 2 GB of peak memory during runtime depending on the compute units selected. On iPadOS, we recommend using `.cpuAndNeuralEngine` in your configuration and the `reduceMemory` option when constructing a `StableDiffusionPipeline` to minimize memory pressure. If your app crashes during image generation, consider adding the [Increased Memory Limit](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_kernel_increased-memory-limit) capability to inform the system that some of your app’s core features may perform better by exceeding the default app memory limit on supported devices. - + On iOS, depending on the iPhone model, Stable Diffusion model versions, selected compute units, system load and design of your app, this may still not be sufficient to keep your apps peak memory under the limit. Please remember, because the device shares memory between apps and iOS processes, one app using too much memory can compromise the user experience across the whole device. We **strongly recommend** quantizing your models with `--quantize-nbits 6` for iOS deployment. This reduces the peak RAM usage by 1GB or more depending on the model version and robustly enables inference even on iPhone 12 Mini. @@ -461,7 +467,6 @@ We **strongly recommend** quantizing your models with `--quantize-nbits 6` for i Q7: How do I generate images with different resolutions using the same Core ML models? A7: The current version of `python_coreml_stable_diffusion` does not support single-model multi-resolution out of the box. However, developers may fork this project and leverage the [flexible shapes](https://coremltools.readme.io/docs/flexible-inputs) support from coremltools to extend the `torch2coreml` script by using `coremltools.EnumeratedShapes`. Note that, while the `text_encoder` is agnostic to the image resolution, the inputs and outputs of `vae_decoder` and `unet` models are dependent on the desired image resolution. -
@@ -469,21 +474,22 @@ We **strongly recommend** quantizing your models with `--quantize-nbits 6` for i A8: If desired, the generated images across PyTorch and Core ML can be made approximately identical. However, it is not guaranteed by default. There are several factors that might lead to different images across PyTorch and Core ML: - 1. Random Number Generator Behavior -The main source of potentially different results across PyTorch and Core ML is the Random Number Generator ([RNG](https://en.wikipedia.org/wiki/Random_number_generation)) behavior. PyTorch and Numpy have different sources of randomness. `python_coreml_stable_diffusion` generally relies on Numpy for RNG (e.g. latents initialization) and `StableDiffusion` Swift Library reproduces this RNG behavior by default. However, PyTorch-based pipelines such as Hugging Face `diffusers` relies on PyTorch's RNG behavior. Thanks to @liuliu's [contribution](https://github.com/apple/ml-stable-diffusion/pull/124), one can match the PyTorch (CPU) RNG behavior in Swift by specifying `--rng torch` which selects the `torchRNG` mode. + 1. Random Number Generator Behavior + + The main source of potentially different results across PyTorch and Core ML is the Random Number Generator ([RNG](https://en.wikipedia.org/wiki/Random_number_generation)) behavior. PyTorch and Numpy have different sources of randomness. `python_coreml_stable_diffusion` generally relies on Numpy for RNG (e.g. latents initialization) and `StableDiffusion` Swift Library reproduces this RNG behavior by default. However, PyTorch-based pipelines such as Hugging Face `diffusers` relies on PyTorch's RNG behavior. Thanks to @liuliu's [contribution](https://github.com/apple/ml-stable-diffusion/pull/124), one can match the PyTorch (CPU) RNG behavior in Swift by specifying `--rng torch` which selects the `torchRNG` mode. - 2. PyTorch + 2. PyTorch -_"Completely reproducible results are not guaranteed across PyTorch releases, individual commits, or different platforms. Furthermore, results may not be reproducible between CPU and GPU executions, even when using identical seeds."_ ([source](https://pytorch.org/docs/stable/notes/randomness.html#reproducibility)). + *"Completely reproducible results are not guaranteed across PyTorch releases, individual commits, or different platforms. Furthermore, results may not be reproducible between CPU and GPU executions, even when using identical seeds."* ([source](https://pytorch.org/docs/stable/notes/randomness.html#reproducibility)). - 3. Model Function Drift During Conversion + 3. Model Function Drift During Conversion -The difference in outputs across corresponding PyTorch and Core ML models is a potential cause. The signal integrity is tested during the conversion process (enabled via `--check-output-correctness` argument to `python_coreml_stable_diffusion.torch2coreml`) and it is verified to be above a minimum [PSNR](https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio) value as tested on random inputs. Note that this is simply a sanity check and does not guarantee this minimum PSNR across all possible inputs. Furthermore, the results are not guaranteed to be identical when executing the same Core ML models across different compute units. This is not expected to be a major source of difference as the sample visual results indicate in [this section](#compression). + The difference in outputs across corresponding PyTorch and Core ML models is a potential cause. The signal integrity is tested during the conversion process (enabled via `--check-output-correctness` argument to `python_coreml_stable_diffusion.torch2coreml`) and it is verified to be above a minimum [PSNR](https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio) value as tested on random inputs. Note that this is simply a sanity check and does not guarantee this minimum PSNR across all possible inputs. Furthermore, the results are not guaranteed to be identical when executing the same Core ML models across different compute units. This is not expected to be a major source of difference as the sample visual results indicate in [this section](#compression). - 4. Weights and Activations Data Type + 4. Weights and Activations Data Type -When quantizing models from float32 to lower-precision data types such as float16, the generated images are [known to vary slightly](https://lambdalabs.com/blog/inference-benchmark-stable-diffusion) in semantics even when using the same PyTorch model. Core ML models generated by coremltools have float16 weights and activations by default [unless explicitly overridden](https://github.com/apple/coremltools/blob/main/coremltools/converters/_converters_entry.py#L256). This is not expected to be a major source of difference. + When quantizing models from float32 to lower-precision data types such as float16, the generated images are [known to vary slightly](https://lambdalabs.com/blog/inference-benchmark-stable-diffusion) in semantics even when using the same PyTorch model. Core ML models generated by coremltools have float16 weights and activations by default [unless explicitly overridden](https://github.com/apple/coremltools/blob/main/coremltools/converters/_converters_entry.py#L256). This is not expected to be a major source of difference.
@@ -505,13 +511,12 @@ When quantizing models from float32 to lower-precision data types such as float1 Q11: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect A11: This warning is safe to ignore in the context of this repository. -
Q12: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown - A12: If this warning is printed right after zsh: killed python -m python_coreml_stable_diffusion.torch2coreml ... , then it is highly likely that your Mac has run out of memory while converting models to Core ML. Please see [Q3](#low-mem-conversion) from above for the solution. + A12: If this warning is printed right after zsh: killed python -m python_coreml_stable_diffusion.torch2coreml ... , then it is highly likely that your Mac has run out of memory while converting models to Core ML. Please see [Q3](#low-mem-conversion) from above for the solution.
@@ -528,4 +533,4 @@ author = {Atila Orhon and Michael Siracusa and Aseem Wadhwa}, year = {2022}, URL = {null} } -``` +``` \ No newline at end of file