From 6e76e97a4b3e32032000199738854a7d3a4bb961 Mon Sep 17 00:00:00 2001 From: Talya Washington Date: Sun, 25 Oct 2026 18:07:45 +0100 Subject: [PATCH] 7 commit hausaufgabe --- img.png | Bin 0 -> 64772 bytes src/matrixmania/compute.py | 13 +++++++++ test/test_matrixmania/test_projection.py | 32 +++++++++++++++++++++-- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 img.png diff --git a/img.png b/img.png new file mode 100644 index 0000000000000000000000000000000000000000..e54a81a0155e7a6c86237b005a4d7dccf5240882 GIT binary patch literal 64772 zcmaI8cOYC}w?3YR=+QzLL??m}eUwB^B#5X{gJ@wGb#xKYYohn)ee^MU@4c7N8Qti; z{YLV+_rC9a@Avl?&e><3z4uvXt!F*!Is88;$l~Kr;@r7&2mkFGsgHN=+?~F2=YGdS zO!N_37dfRncfQ?uEA?8%QFm)*Rar&Li|hKJefQ-q#f0PvUD*$;2P!4$jdxfd;!tq^ zz8CPV9q@wPFV*h}X~eQn(ypJ#OI4ED85eWoue$GhYwgW5H~MNWubsDNtg))%E#oXt z>rO}Z4sl$L?j2W*D_lwT#J#y34N#Smk}CV=?q@VlOhm*XXge=srpriAPd{gHd*G~* zP{j8gdc>}~-`V~9(SClWDc0WT1It+23%BR*s>9I++#AR^iHLsEg8!ZpZ?U=krEDJF z#6(ZOe;;ks^smuH9JGlJLdQs+e;NM&W9i>c6@6x(?oiDmBCo>qHy>*(a}ec!gr2h@ zZb{QsnvkhLjF(z1H$8nSva6=)Xr?rxxtI95;Wv5)9}m{)jGT<}N{MdI_L=xbv53QCqkdeR10kWW%?A_nDz`Q@rfu0&&ashahngsn@Vn1ixN635hA|3ut#uGg% z7l^)=9tZ{d`}tjd{*>GdnyAEO*b!Ug^0)}~alhII3M-bIPoX!+$zYP^Bb2RR;K!!6 zyU1|Px|b^>Jq8fRM(I(bR<}r7B?As+H$Pa9pf1X*EbZXl#~~j4(H)>)>|}lTW)g5R zbKSSbFrZLs2l4h2*-hS4Q~UjD503!i=Y*S7i7RVt2PnySk;rqxlx5j`)a+|*cp;O% zo8xfMBs9WP@UuvWkNjwoDy&i=HrzWd%ZLhIe|1eRBqd;sG?h>*Sbz1>_-17Xd0rqJ zVt%fv@P1RdILnwY&U-_|VsAg1yYw0gpit}IG~l&=^R7qhX@8=b&T|-<>f+^svg6pO zcl68*1!jbL+Z^b z3s|gAK9E#F)E7)&W0v&l*IC>jch1(JhRP5KRK!T0(DM4m1;1Ck3Ahl2{ERPqUAq0* zIAFrdWO#U=z}?|c9Gk)1Ew(Vf{~t@Dd%Uzp0yxfW+j4aUZF2IF#CUWO#WCk9EK z)!m|E(u`jhhWrKo?F(rJ?T*Cl;Xw%h#Q9lfre#|74D+s|n39cMiLKATO{Hz*j@?sR z2thRc@D$*Z6>Ae4AaD0@n$%@pm%Zo#H2z@uw0fnhp;!|WDy*?;b9icYd2C{2v;{5H ztLMlWII^F|S5S&$B*OnY%W?3k$O>DcCs4puNyvWrbIhVH6=a zW1|Y=SdYNg=k9o`(8!#&U-^c6;#Y#t_a7ALpZfHAjOskiHA`vCiaS|5r+$=-JV>va z>|4EO%6SwsCaZtoqp~dJ2&q$!CTtTRAFjd|bjVkpEv^xq`Qg>6vCp5G&(Q}$p$0Kc4=kWGj^=SKz7?qWXmN`T&qd>^m?5PvpVEA zoldnT4@lVCnj6~5=30S?I*i~^TNsw!Dz_M3cdIddZR8+oc~aLbU|wBeVzJtpuo0s7 z+Uw}ZkAB+K$jQy%9<3tMlvDRb!P|zxq)-_5<@s+Sj3~uyPmyTnB}9~p50w4t)U2uM z3ft9f#us>D^E0FL9_e=QN+0=Bd}z-!vu$#hK0LhB*5mVw*!C);O**FKDf42TRnZOZ zg1MlB)gDmab~E(o95g+PEex|}0JqAqz8w2e64aaB*Ym3Q%qy^(79hWw8Wvqc6dBKN zC~HH^-@oVCSH^rVo+SK37)5As6rqe6H`_!p8~KqC)z7>G{m$^>%9p-W~ma0lPe^2?6QDr&r}!x-niK8 z1BA5l{-$M5I7_{Gd?4Y4mG_0kF8-`Xg48fnG>(TM6>7>bmD^o|3~eCGM<`j{J~uuZ zEy?v!lA4RpbFYQZuVJ`HXR^DN@9SM1Ht;PiN9TUV(F-h$9I3}xPn_lUhTzY;LTz1! zGlwaX^LkI2wo1LTn=dGw1N27)6Yr0wpnlkzeu>g)AlI5SEXxwEj}FctKrSr;jKMt_ z#;%f~FAgo`hSfOZlUfcVpILnLn0Qfuj-PR?4k)$NUHZgH{2Q-7cUO6NG;%b&QL zByAG4tP)j8N7$a5S0v8RXSQn2!}W+VPAdMTY5%}+&WN=Ki>dib+4;D!A9O6GfSLBb z4tATtLf4Mz%N>^X7To9#j9jza~-X!wFJ`4WvSrgovwO7$K zW7{V9-MH|$=q#u=QK(E#fNXIqW!MolP%-V%&Za%1>Q^AVI-l4^OXj_eAe^_(TAJva zKSlwTW5mDs2X5vW`YvzNmNZ`Sv zfJNB3=Fl%C5s z#pErJiEfO#e6C_sCZAIFw)0Zi%Nw(K0%wn{rtNnXFGTVW*<3v)13(0M1j_rChuYO4 zb@7S-iCsQj|M4H)7sc`{QXoVeMf1pkSj`qy!|L^8i}9R10{r1P!L52>i_N9+Bw>W= zVCIn!TqOO+$kyS5S?WGJP5+Hxx(_Qurmm%ig?lTY3Tq|77~-h+G=q_G%Jv zr)`x@S&9zY1uPg|8Qm5+w*g#Csgxzb9`sZ)Zz;_f)?}oA;&drv_=E^G-Dy-97&8uO z=aQgA_0{Gf-Rfq6fh{!2fO9slIi2j)-B$fe4kT8O{)}fGL-5*EDdBiXMYkatYG=YPv05SS zhNJ5w%_TG@J{*=eg+&;-HjA-vRZ~R{|DNZxzYOV(&|a@6gU(Z=+ImB)k7|hUJTJEQ z%(nbs5e1(@w|-f^7mn!1D>E>OkfeQk_Zv;%2fy}O*|_8!umimaS)&hCfV#6J=A zS89x64sMWtI;vOz-uk;}I+}u7DF`Cj~FZ}LPb!=GJ zm)lN~Sxz-zGgOr}=R1>o{r)X*_l?D-X>23GqUVgIpL?!*{%(~ZW zyyGoUc*VgY*q_<4#D?<4({l>}EJd}NVL4GDVG*)YFTiK)Ct^zOLzZoKx8p{WMH_xRwzGiML-t-5xwb1A zL5)}j*HtX95k0epXOHOAqNa+SfQ1{M`J8n)ZTS>wE}=%td}mhP=E!I7bs{h1eq*7w z4uRU;5HUhy&2X0YPa@?&%NPWe552sK#P*Fx=^qfJHyD` zKL3p96h|!8$YeF1L0fa}h?!Uu|=!o1J-kEh!TqlD*tr;1oTzpaH$ER}6ccwAs}BopiKri(nq z*W+j89ir2ynsZx94||^#*L*V_{;KEfgPyfQaVI94B*9l$k^59yi8~x8tu?t`qigm? z&!MZGiF16zRbR@=`~ovC;Z5Z{II3ym{43@0r(k*WU)CF*Je=02 zj^{Ie$T?*S(a1a(>o>pqGi>L@8vH4?kL5S>b|sn=J9zJN;9FAZM^^9JaiCE- z{H!}Cc$Jyw&qh8uLC2y>*#ycG`f>)DR)a%VVKjQ5V<5;g`@4G){0%O?2 zb8qx?=Em=df$bfB_tEVUL|2%4EI2^mM8rfn*#+i}GfA=(PA|V!J8NuT>2E7cEH#We z(H`W)Cph1+;vjS?ihCmLCFj)~4L#S{sHy=0WHFGHc622ES>qCEm>t=;%}Pf1|5<>w+oI{NuZWB2qLuc^4Dq& zrP@TzQBlcvb5@y8a=9sSGb|BxRQp@Ls?_&>JB1+B(GfAPa^-{kgZ?%R61m~h58>)T z43QV${t`JirTWQAXyBd}?K8S5-Oh2n3^f%t-{uR5kzg$<&&gf@>|MFixd#EQO@BJ9 zC`X704b$By`14d=_6)Y-YBzF!xq1R?vcaFu|Ngk9JR#mr+KQz{!;_t04^{o*D^)!F z;hIzJb(SII&${`XCRC#CH$O zI^wyRY+q^B7HNOrQ=i`mo{MkL@pIyHo>3EP7ZJLKu0IhT5Akg$SXe|6t4Lusltx_D zmXvFTc$&+J`$3Yof%B6&iZPUqep%}7Ey2p|18VBtKFV&ks2}9)U;##f#mMFf?;S49 zV#(FZU%)HQW9=%+WS+J&ENI2;n!d7IqI00Kp#D%Dx!%iyw@rH_1}^Q^8b=xU1}qwL z*;@~iQGFw2qv179$pB4Boullbi%1 zaMJ&3Ew>N?a^dIEdEiB)*luhtFb;qQx1y#VBXB_32Y4u2i&v{CIbL$|&k$$gXAZ1+ zZ#*zj57+=>LA2)*hj@u`N}si|SPRTH4W`|3qBAJyvX!lDf4ErCZvYR9Xd zr4uGYNhj9%X%!^8K@EHb+$l)tmFv>U+s)SZ;iq7O(v?)a|9Xm*A%9a0lY?A)2s<#T zF7A02dunjZm`Uo@566KEwuH_hLhniyjXpYE_91sO$Cg9QT1%2r@^1 zhk!=OA#c|R4DOu@ir`+)K|mBrgrmQ` zv`W6Jks12Ea5gPL{Mck3T@6##qB=~IDBzZ8$E-f;P}Z8vf{A41xwJ0z!cdi-$44Q3>l}W$TyUtDI?*M)+FQ7WVw?U6Olt%)CU#W=!-Z+s?K-l_Iif-!J6O zN&j75?BC_R@XkmZwYk|kFf7mZA9sILBKIaJc z@AA5TOh4;wPb%`7QoT%|(M>n$*1AQtJ$_!O8%3UVP_Y&*uADUNBv zeNK1@u6xx%3L`Q>UT6Tpt^4@AUl&ue&PB1T>#FXRzdc4YO=I8DuQRmGHGJV~6xkJ^ zK;k&&K%}*shGbK`#+&wzQBNCBJm-yJ>AyeTf3koXfTVy^*&slKE-{Jc-xl&r2JP3L z_LbYsH+reZv1=STG;KrI}zG@amS-CtJDse)!_1 zX7fb|Ra?>5DmV+Un>FhnEgU*o?90g8V>3+nyE}67vmwB!_CtJoKyz&B^N1GNZcnZ` zDnR0QQN+nY9TI1JwHNpywbF?FUgRhT#oC6Hp7J1|!lUK)df0>#Y|$zW>c9WND3c;u~JpT))QFw7Uk|j<6+xl7~2C2I=^`v_-T|R4t!-KFZ>u)l^g~Np5)6Y&Fbp_j}e7u?jxM=TEFpNt>wf#DXDTx%7 zRL?wUX6IL(X;3#mbEMS_PRhuC>GSvPfpOp5;-cA!m@0e$m43L};9v+#R2VvL)_A!% zTL|Q)+RdI!^{&ChJ{ILY!7?nj&(B}g-BDpQ>uLdPO}IY{4Psa1|aB zq^9YfoeQHku5c9%mH1|y_65Pw>o_OKd2=B=pfH!|_aSwuIRh#Kt&Q!?SaYmr(JoJj zyZDJej5^XZGxQO5-&~tLR8)*e+Yj4hS8v^Tnzj3sM&#->IfPRuSnB_c3j}~H2xi{cH_-vQv!xz@b9tfR_rnB6WRjFG&WZy&bX43g=(~a>Bw6p zi4aa3RW%i`6%(%*sy4#NhHfni|CMwh!KCN zZe%54vap!=q=;C7r(^+n^*L{(Oc{eoZ&HU`g`;*#hw_gQz`wl;JLwT5}ksv z>jr~Dgd*zWxaeuLlwU>`ULDNm9bD?Ctd0(9A1p(Ss+-6t9Z*dj)uD0U4#@^9CVZT$ zrIx7-yo<9^NEYei`tmF5y`m4T31*f8oit(W+Vq-~CAJ&ZH!axO9FxD<7*4?GQ`;ik ze;DX*o_`p5JZ&^7E&ll*-hNOFXSzkaXNSk^mh^5gVV{N%@Wu6^8S6I-r47N_|r#7^huwli(e-JN2uEgaVHa5<=V)mza-5wDs%`XT|-wB^NECpox1C#WnztCLQ z*H5Lh!`9*e@Kj5iMj?4|DJfEo9(HX^%cq^<7xlE&2IEP!9)q0RkVU+o-(vzoHY^Io`|5r@LcY^4 zZ=l%YmCNNfRFctt9ibHPyT)RkoBji*pf^^RsC>$w$*Qc}2vlXH(%!fG+R<8Ap0 ztLdlwU>oDL_Y+NFPPHP%8CGdtxl}dkGv+rBIBHGW*%X$ zv*k?u`t_qlRW30GZlR*4l2Tmta54{nsvzK%g9BY|H~WW5q5Dr3%!w?E@aa=O7jNA^ zSwBE$C~IOqAjGUI$ge6j*ffvxAWHn6dXc4UtsBF~4$3c&X&bLh(oV%hgX>+-=;ITU zn#Qx#!8`(T2xBCH2+w$8qPyQp%!84{?e=lDjP0#MHvkTVK#A=OHNQG!Va69*>&9j# zM+r|)?E6NGeH`c!5k{bq2Q3OkJ^JtD6CYT)i}SOA+>b1w&&e}wiMHGD5hv_^pSFk( z0NRF1i`7?USeCSwb|S4oXLB#ptX@pJ(0aM)WaE}%LCffg>}UG-;FFIWbs}-$ z9(jaI$PZ!Ya0M!dUlCqj_&_DgfLA|W&xb%BKS|!i?`ue1v##I?LblLF zXHVGlGgor~ck-iIh`vjAe!g26hC>5vRXVemVZJt z__48pZ+<7TK=n5!^l8CENi`H_8AQ8%VE#qjC(FH`T*l52ERIk5eMd9+(;-Baq3g$h ze=bY(ItnW}Kk_E+@XUKmmJ}4wWw_=d1O*VgPx=`6=7r7RYj4saC*!N}x$^1haU4W^ zsXl*a0~gTq0~(6}`I2jIjzqxCfz^>(-(@&cG*_RQRu+bRU~FT2%D{Q|Ehf1ddSiH? z;QQ~NVp_^w-_@?&zaz=vW2W>4GzwU-H83 z9_=7OhYOAgumnHW0q(yRRP@Q+qiE&!0MUVli96*wh7!%8h0B3C#=iY2uHLJj>=xNI zo_f+Vosc#24vCs({?sKoYo}L27FVk-ErkpW0L?LNr0&OReJgUmWxXgE~wx%z7lswYi( zS^|SNyF%`i6(R*2SN2=MgD@s~9L(GODT#NFYJOqe{xaXMXZS}(g;a8?RWW`s$I)@{ zo4oL%yffn2;Osh$20+6SWU5GMS17|fx@@nX`6Dx7u~R!v04of60Y z$IGccFA~dz%^lrX__~q@O!!PhIbT5EeE);?ke=aiqg99a32of(!>BdoLk?KVEIQ_M0RAR`e5fhxcVvAAHXw zL}%HcRd6QnVMLp@_2gl1CQ=2FAxb%T*>*eP-u${cq^ZfBsbV&n&@XEYQqh zW5HPU|BmjVFGtN?UkcdxS@v`d{>axH_B8If?w#vC(h5l&I+R8QP7H-~uAB8JD9*Re zI?4;N2`ZA}p_}U!8iZtd&7&O)E01m0uDw=1l>S^#c5k0?seKcuIAQ^$c$-%O&MwC% z*Q8P+;=dtNmvUfde*SttpHod)0jG}y<31*5W$SPQSxBPk0jr&Nvd2{&qlCIdEY zyO!Mz8G8lu7Y&}<|LWP{lbSJ^?}`7Y2ZZk0@3D4F227O{u)g(|{cc1sa=7xgcX;p7 z8RdO}SE6p$lsn=Ism80E^07op>bFZWn%$S3#~ItsM!(9MmG?uJKe+gu^e?5oEb!0d9%3AFrB5D(N zuZG!0#MON-?fZZbwls{T;XeCqgi8p2IMX4ZohJNSRq55~*U7d&DOY`*swI}x{4-Rh zuhD%ni1h-D@ACX8v5iP0~X5tS+sOjmpg5Yzf@I#y%o?sPzGnY7t$TmA4zA_l%AYjORpA*x3_JJ$R}Or$K;n9K z28lhbaFo~Sr#`@)X6p$eOfiY?gzf)Sllq;H^e3iKUfIuyhL>}6>e3JgMC{XYsKY`Q zHS2PBiVEOI3hOQ#V|Oj^^*~&>+&e9$iUy7n5uq`Nuj>&1lp`g-^<-7v>$go4dCsLzj$=^N=Dq!D)w zzD&<|tQR$X6}NrqD5=N{z~n-tkyhRV_MM zlcyX>^8n>&LS$gC77%hY^4fsCBL7Q${O0AE{(YXFt2cDkg03f}0G_lge)CnPSF63& z+TuF-ufF#sv_xsYD0J;T;C9F0BOrvoh-0y8lUz2(n|}J4G*_mO>p@xrS>C6;^Kcff zFv@6FlAFhc{yg?>>MJDh(qTjRr)*`KlDpgYy9h4r!>AJkdN*h~WGQt?kL{+~VepXD+)Mgcb`8@h&TIn~N?S^?PB_mUMieTY`qiV{5SqEy` zwum|tPF2&*YHIko;rLiQ@C|W5zoFcS%XnbQcJUdG6TQQ&NaFexYPa|3i1f`Dx2U$>|iSGVTyu{*4it6g4^sqNuwZinF zOZ~OM9olr3xN@%!M46=OV%np!>k8V9k^^5_LED(d_g;W&pZp1_ogCd9U_*#*g$Vy1 zf1L7|P^2_V#KL77p$#yNx}5ZvPahpOj4jAM>glJWj5TN*%CffQSKujq7fVtq$LRG3 zUq5`TT^aY^%`cn-66+79RFebw{^J%&u6M6o{p(u!TVNxIal^8|dq1?Hl7LcG^Dhl& zpr~}AhH&Y&zM8|meC}{+NN9aff*kZ027cWmP1|xKL>~CsB=)DBo}bYWd?MJZqO2~U z^>Q9Mr~ed+WRs&+GzN<5X^0G@%um=dSc3PiuxxfYd8E1da+EMc(I|z#)yNIkA88f zs{G0Ob|Qp{&L2CREr1tt%qJIB_mR$o@Q1yP8PQ#^b|4N&v2w8;J+G}7y1{z=KsL6UbLx_PPanIL5Zb*WRw2|OK+JH^ex`$ zzE@$sF1sS)r@hu%hF!DcRNZJXUvub^7^Q|(Q4{^-;s%?&4GiXb<=%c%?wwDhBs-#7 z!9u@Jrpqh+PSbcM8<1_ir)9M9+n#YF7ePXFhI2nUs%(1rX3=3jplah74WXMPyUNm$ zkn1dFjbK0YABqT-k{)1W*&x(#WyT$xFLOkDf_i6h^joRN=x&@>?jjVoPS2gmyoR_p??nmbl zYDNnm%&9ob_*3bF^7K;APU!;Bm%J~+f(jnS!_0j1Qv}KU+1*IK{TV%mlBfr?U77kH z^d9>~QHi~a{hkC*l-1Txu-!=Jy}Q9?o_urmu5!x*k6iyyhQEuai4UQpfTpEpm*|Xe zz78r;%~bV|>5RD-c$y#WglBZT#TmBn;Qk9yjkG?#e^CI#`dx1EPL7zEgIvtJFi`e& zpV~+iNcydu2r*z|^JsG-ibTopb(u-Xi=c~umU>>%-mBxiC7Ia`d z2|9Ug5T=G|V6Z*KE*F`{Y?CfF}X@plu4uB(QsbTK`}vJ6Z9@New;8svg_U zPVY6N{2a`A(;*e2ZLvgxiYgrcuPH4K25k%^6rxF~=O<_F_8tR23SM0BDwbZg&g;&L zNsM39xF#mGjHk#tx~|_t&22QdurQ$&5k3QvWVwh!<#}e6#f`{3M{q6eu+5|_-bu`j zUX4QrS^1zR8N49Ugj-A~IJOw#=&?hI(yjG9*%8y1;k*g@*=NI;Cn2!2_M3-AG4$y> zRpZDHPWR`eXleV?hCY|SUq<`tcTL@kdb97gbsxK3mc<~J0V6*Ob_%#6I7B5HWGY_CD67 z9cLroA{-wz+qfJAxOpAd`b&< zS6ZY$ZWNJS_eb;e9+P_kJ=vQUvI5E83}E|C{K8#{EUerEQ`woARVXfV-riH)Gyapf z4?NvQ>POYd!(m)`D&E&rL7wbtE+@|t2%jJ}@&&N`{@|XCa{SqbD=@E)vSl85Ex9Dg zqNqq?=Y!Rgu$t8nn+d0E45wT|HmZCht`G+G)%$oqt0~~5BP+t`3EC3{IfbjC=90+f z4nqNcGl?-JF!e`wG(cd#n&?f5LI-?iSH7pao` zPQrl(W|pOxagwop#7!UTjnBE+CuXg0`4*HxgN-?oB)nMQ#b9XZ*upNO8)UlMkOr(Cc4ov>@s z{ibnkY_K<=J$ZnN_}UFRlHjqv&d3(<*~FMSd0Nobex$D?7W7U_>PjlXSp>s6yQR)ywnUYsHIzpuI7j;~jGArz>1=leW~?}G zHfP+gZb`M2vZLVXemmK_^!XLI!8)&d0g5T~Hss0Z&>biIs^A$91FyYTYw82kM&ep{ zbJtlay$7);1^Zh+6>*L(Ik0XSl^Mo=M$9+hWr+IY~1jjIu>CN%M%ZS!ymfU{4h4CEh_j6N$7Bg55 z@8?hU-d^$#c$dioE(uVjCUyWo zPEaHik9R;ecuR_?lp9NN=C%lgvvHQ}-uV}zU)uR<0;rvEu83cV8Z+si&5}HRHH{4! zO!6Z664d!J_mGW`q0eRJpKYgpn6<-hrj5+v@i!qkAuSvm(Ryg$tu-pMM@pCqOJFiUR5j(lsvuW zKrh6l$yxvBQiwa}9IZ~nOTvwQF^d5aM|9#~AEy)I#+cmu>8Gi+J$?eH)*aF&%{Y1e z`pJ?^1adWvk>lI<)a;_Pa#^}R!l^~HY~!~oiG5A&k!-?hkajI5nswH$oJu=a%Dc2Z z9V7AFO>%nzC$d&`WSk2G`uHNePMU;q-iu425rKa<-`h3NMfjy@o5#7Sc+2zuMhqBO zR`=Bt;w`sO&85|~r(cA`ue9dwW?7Na?_;2W5C&i2eSv(+D;WE4mKWA14`3JT8|Iq2 z=u}ENl1^sL%31gdEET1e*)PSkHHY?r zH_9aWGEzGBF7)(z`tw7-)CP|9;y&|zf&LwZr>*I*B3zaaedj5y8R;!q0D=!p`2`e3 z#@VF4I+i4@=kSYqf@!(?3ypDZ4tb5UE(VF)8#3mb0yA0HZry;aO(^U7Ejn_R9G@lE zM|5AegNbCUzN9^8&@R>47e^Y9ZHj3@K3$Y!LPzTrqv%=8+&$Qbavy#% zAy2KUxfdD#GK{G1@d6#n+q>-9^pFGaD~|0?s@gsyEjB3$XSrvvbVfSs$d3Zgc*rum zk=Y!5vaj=x-ToI-C*eWm?Dp?~XL$-URx=Zs)xQkyxUruFK*a&^FIM{go6NT@9p*-!>Ds3)MDJ?vL@?@%%tfzs*;xkoLEFX z3%M@#miIBH>qmX}6ubH$4sa}a>^%D^X8oN|uTvdMp!eLYSZhP%yR}W~rv9k;geUG# z&3nh(&-_FIG`9rbio2L$>ds@74&2AYiy@}?@M7-^U2b1p6QuHzA9dr1T}!Cfi6BFq zjv@SlH+I1flg7GADUuV~dM1E1^$>hW;VfFSm;C(7qwS4}&@X(13kCdN_&x1oqGr*R z8}dROGigv+Eti?}y^X3QtraVP9;VA6WSy91#v>r7UwPly5f!oyn)hTp(wNL(M92#yNDf=5= z$e>IAXZk>~AHWq=#h_*dejZ`k8Mow!d0t;lpRZU6+B1e`7dVh-@_sg~goORCO?I+D zsz+{XqyZ{G6Bohv`fW8=NuXn~bTT4VbEniF%@LKZ8%&m^N{PE%nFk}1R+;Qfhd??OUTVR~%5T=ihReV4r9`0*;^vqV34W*$rS+6_eFKF-d zhBri1rOTIc5$__2y7F5tpYYO4Ux&d?I;IiKxZ=qL*IfxLC}~_^o>jy^wesT}w&+bM z)ijUyBTpL3MYf4BMRn_U!UO?3s%qo3al>VxX7d+MX%*bPP|vrI&CEWdADJx~Jod=Y z@7*(5sWm;bsg25kvezVKNtl+WW0pwp$_1wd;V3Ewqu4g&pYA3#=P5Q9N=>bTVP?W? zK&|7e^Yd`^TsN$+l}B;MAE=spB|utiU+zy~MeI7xL}as(JJ`8LbY~%K6A;1=`hC;Z z;~ZelgD%{>bZxs2Sg6H6Jhz*FY|myZ-kyTKjx4t-GVQ?>?Z-c`ps{# za51PTs#Y*W+sj&c_tw|qH^Xdf^eZy!lEk6-k%SDPGZX39pJY)q9~I2kR0&RIvxo9I zb>3E#C01(scL+_%nW6ch7KQUPp$Yr@w?yKPIMQD~U|DjGcw2*d7*WYjqPjg$;A>1K zm${|2$=q#3T`;d5fxmNdPfDQx%o}^U%tyAX>&loxP5{KMGPfu3sbDtWL3r7s1#!X= zeT%7U0^HEtl&=uB|1GF?60st*7&v_U4hxM7U-z!1vTX|7NclqB3Jh~j^=M&V?~N#< zba~6Krm>t>g{+-RGkeG&2s!=olDk3=Xi|i_u09;d&u{ovx>4!h_Kr22_3{;5u8KSD zYaUK-Q+J(xg7hBq)3>HIB+gx^b&aK=_G7g9-M@xk9j&=h5U;vtor9l`!L4xI{}X&i zS65(sf}C$O7o&<`iKa8DY_^OAg+JLmFYd?!zIUo-pD}~=QeNsHD%_}u1Z@;2+djLM z{nyR4H&b@!^rjnU-bHHzb$u8^??K#m5YMVkMd||FXJKg*HX#CODdcm#g}u`SUY)_k zA9fdS%Xt~Xx`#Jj`(Ltegch&5)OME}$;TwSN(CV1s7||9=QnmMQ+<_$Y+1=+ZjXUG zN@Yg?=eG)|VXdR6xR!T7=XgH;=G4AjRER7BXmV! zclqKGabT2g#?@h{k)L|4xS6VO-(e{G)h5QDx@5KYtcgLZavPSbNRb^p9--AAw>$yMCzMc)aWV zr^RlA6SW5as7>=h0@;6ZEL@;~F&wgaDs6f3m~fNl(Pq)dz#z7^R+cVrf&GxHGwkJ@ zB!(^YCug(|-D#6stnO1!kePcJgqQJ9A`}nVmXh6lyDR(pA3XMq8o%r*`A*$dxWJGx!?eG}2~NOz{n|Jt{IFC1CfTDntcXce>xdzn_ad)~)U zGoM^;C7dKa31W6Yjg|IIw z*{a2gpAE(|bM+iRNZcxD7MJ{tfWx#e9G@cA0o7$yfRh4os-qMzZH<*I)yYX`*8OFE zD@~>4=H@w4_$^lU_f^gI8uhCtgn^?;OJv+Tt^zBPK@0RdpIOA`K@f`k4ivTNQ zCw9zH5Q~_>sSQIw(_e_@jx+s|ZDsV!ZCxf5x`zPMasovZJ}OGt(M(z5E#`5|Grt%` z1T%aZN>FF(HhkzW;WW&I=b<8@B~lO1nmF@UGPvfEQ!toE#?-{YdXt@i!*1k*x>c`V ziWN5%e5GySS|Pj>E^4np*ta`+0Xt%$3FFQQ+FTmMlNaKUM=K{hOe$gEW}1LRKhtVDp`FiDSVmEBpNvw*k0z9o2td*yGLr-Kzz zP(MmML?Zu&ub!*6U87HW(h{d+iDC6r`1M{SB$l<8y#=;~_eI8gJ&7Dbimnw$_RcO~ zq7Mx3WRc8R$uC^87#03nQ2}THnwIX5-py#m&yE*$|4|K=9sZ;J_%}kl^p6Da z8(Qu7-#SK5A@I2Qzy0rk|F@p-ACv#om;WXw`B#C+?lYtRv41ONP}3>CzccIJpm%*t zi+{DhiKjp-o?-S*s%)AYE$8si(MUyW`Vv5*dFx(&rb34EzqBxuYa{-T&-H~JJ`NK) z$^0eAc_WRUnvKf+5o_R@q^$DO^H5!c+Arw#yW!2&c_LWY!-y6ywjZE743)_7xf^=l zwYGeKd`B)HwQ1Yd+-0qH{aFK%yxwx%UmhLZ`hTFig$|+N-w(>bk8La&-e0^B6uwpJ z860fOkS(HJK!a1KCL~^9hi;*ep3msoKvX54K%K!iUaKeNf-p|9S0*#l<8}WL;!W^X znlYmB&A-;1XFDSFC0gA2lar!(fusN2<*Q{z7%QL(nDS$5Ks5pSTpEd%JSc?o+DGGH zT0VND4-^sh#v)99uDRxnPA-E>S$l}&$jIVq_v>@e+aJ&}2l8`dqKdfY;tDN%5v)6v zNo~riAidaic2YWGo%Fa*qPL(d^+AQWfBjEFxDrJ!n_d9AL;LDS{zF77-pttpD9b*M z-0tBdyAzc`M&7J@(Vpr&F^B4L{ZAIb*dmc@8T4p_VoAt<%S(igR7>4NKl=SRj8L(7 z`&J?qX%Ld#p%U>pDh(z`i%~q4l`Z|h_p!d*j63g>mRvn4(msFhn!AATe~~B~+0=8l z`Og0%FB!GbeQ$*b6t$9b+lDudx28QcVgK3iyKGUpAhtw-x)q9{Ll?#vSUGto9JwVy*%8WxXtIz{G`Y!ikLVYTcsw!pdMXwt`p zmkJx#!Rhq&iLl^lOI5g0NJU!a3-Zdr%}1!#3r#$9_q`-0W%Iv3w=T26qUrP~`k$h= z$^CBI)(Gn?M2)`rQkLsKMJi8r03)#|QMkZ^5 z$A4v^>fQXtSvyM~;8n9v`_eUZaX$qocwLn|Q953rJl5C%1~cUYPGll%t*i*M7@8>I zcLlBDtfjqEvKMe<+A|ZT`v3MZ;_eK_vskq+5m>|RZPDes+lM}B;a>f5T~cpz#KaUd zNE+$y65|l#vQR-jKJbg0fNcj*7jVMsh^J-uy%lkc;)z3?UDwdVbnJ7Nc&&!fxJm8G zLUK$$&?#i@>xv^_NmN#eD1+Mex4}GSY%9)81HrVcpvN+&d-8RVf1MT_vOt-HAHu57 zE9xD}f~#bIOjg&8tgyamf4Am#+NG^GspPf^YLQ8#{%Ei#m9A4S znE}{c@G|-FT^O{yHk(V6%pKe~cKDurXK;%I{d@tUuSdAeK&VN)zpHBcZ5V@wKkKjt zDcIf>i|R=~pm^bL^D+G9sGan9skI0)S=Rv}CHQi|ck(2PS*P@ad-W6NSlXm@hN1G3#?>YvrVPdA#Qpn_v%A__6S*2@@ zIU@*RohHF_#l08*Y)^*p@t^%EvD1Q%I1W2YXZbyyT%5GtSk2xq2**;FDpTf|DfyD&fGTwbqEmPA0Wvf3ZmPjaDR zb^HL=9bby};brZN1>-!qL5bNrF)+jD(u$G`7wqj_QHPD8Jg2jNZPP{s8SL@LDJ<>; z_GJP3=2Tcl!rVgdVsNzfyx*c|+M!ybviY4L{?~5D(HZ_?&q`vx0IIZ(j5pn#7)rO8 z^KUT!O|6qr?cLU_>}Z>ThZA9l6?c>s$g^3EzY|lH_td&9f<~w0MuecN=DfJN`Fi4W z5u-~LyZti{K(K@194yYyuhnGyir%@@+iRLqh~>@GknZJ{jCHc*t)ih>H`Gx#M^dOf zA$@cv`|GM#gt02H`#O|>f0tQ$EAfbS?x?ml_(eT;IKT0gw};Yu&MOFmLHg#OC(Ha} z{B*h$-Q8r!*0|@ZL%HjSNqlx~RtL1*O{XiHuNquVxvT5{;#&y-DsPJf4)%+5* z6VE4tA(?#i@TBP45V9^J8-nfFAgedAQDhd|}1b0wpC)>1nFM;{=j0tUy?M}U~9KL?C#WF%esmrl-imv zttZ1A;v227IymAg5b3fYhQmMJZ{yEDSpo~<&Pye<)$9fx%6zmJ^=;ZN-M$+$-HQJp zagRH9tHX(LY?Y_o;{k46QiGH8l4D)k zf$K(fn+UJaPWjA&c&@q^xypQhzhi4}`}QPm(_ZmDuevQvIwXSV8FAN0pv`KugilGD zqZXN8MuPUnimeg63F`=+%G0KyyfGoKUS^Dc^JGYI)(Zg@kvo_{b^0lwy~&F^EaVq@ zNm2aSB@s7=2yBPgz$dqArObG?mZuL3dD|poE3s!`x?-_Q4%LeB&%px0oPX(gSXlA9 za;p79ki^DyL)NIMW!uM2xbyt4zaPf^NjUZqCE-o4t2emT@@=WAXDAB4_PQ9oTdW+QOoYrDmqD=gz)O_Fv!bX(6ZN+?j= z`gzmRWEw~B@|t`_A>2#LTnxDxIZn%B!sn;8hdl96+1QSpHHMe2LsD2LMuTo5m%}3! zKEgWN;p&!J$Z;oq7weH5FC zsgy$+m{x$gbgE)5l*7%5kgM1> z0aYU?wXfx&l_X+eNdF*?*bGbpUfWYm%=`>)7Yn#JsoTjYtQJ8pGNQr5SWkInZ%kf>f^+Od_ z^#JeTi9%ix9*V`v3y5hI-{_9~O(51Sxb0YVFU(uxL*}>3sn?BoEh>DP^!%ES)90s_ zM;f{A^WYb#M}Ev8K?(UXAiCvFRux+PRF343!C0{>K86P`%$ayR-h#H<)K1wz&US~U z+pV!?nL+FoyL~Jtzlsd>-C+y3;*LN|8D*`9O-N;T&$;xI%C+})H>3CP4cZ&Yurh%Z znJ81-yb#=qJF4FFbiQhEJwiG;esx6v`xB-FwEHO$a<%mp(M$^+Z|kSCcXoLE!lhz$ zzqf>F%flz57t?6>xs7hU0G}eao!WDcMG+XC;l?pdyH|UVNW4gEd7sS=Bs0CX{oRzI zTj&qSml-+vWo)dEG(2b8s3|V<(@hIEWa}U96=Af70$rV{Q;SzXyxvD?k};i)N}c|o*7@k+2qT`<#!}f);pg~ z4JIkYgTg&n)Ne+kHdQ+1)=Jl!u0%o2u;DaIS^lX;l(nhe_cbp)mrU(V(geI@KWXMT z>nInzS?4QvFkhWk?)_eDitNJlEU!N%k8=B4!Mgzd361ySH!-p&WtQiCT-}lzs1!aA zxY=g)?~?glB>$?F+kngFm6pQXj$hgK;Q}m(p!e3CH;qil-w2W>t5vBFL)Nd<(@B5a ze14+VYE5C5i*Ff|ni^1jP4(W$Ry1%Je-kjqZgOQF1O?nOJH_6pz&_ z_aT#OwqVa35O{_JU%#8HS9VyTZU4T>{Q7WwReEbyFDlR)R#}n%h-|(sv0A(Ibl?Wr zsHDQ~yjqZv{Qf^@grHSF-C_RFwdLa1rU^AHMO(_B#sNQi55s=>2qAP`M_LrSlA#BUM)%V@AN^WU zzfaUJRW&TaCiZJ=H@kUTJU*VQ8>R|golKja^Ax~W9gl{SqK$@SKEDZml!4VzRXTVc zPdw#$G(12;mCf?tM-6z;H`1U#kT(YRED_aHzH%Q4p_?lPT%Rvw zU$ep~?!vThjmA-BwE%A@ud5XA*G4(OT%!Uou$!b=a6Qg~8fdIOWU}MLes5k&2;Wz(C1{2l7 zSS=}fnkK%X*1sbo#Et>%C0`j{+W9FesRm?0M%F+*GHUZ3>F+Rp|9Mu8qR}{zD%O^E zs&zlA@Wpnqo?dAlrgm0ttLDDp?3vtnM>1Xtx`-T8=+nsVmng6&p(BfNM&uAfNLWI<8iv<~tN~b+b#(o%`f*}y)uUo*tSQidv5X}gO``0N zej9P+WsSHJgmb`7f~&J53riO2)t3SOeKM-qo0ImAlp*pB{AN!J1KWYHrqxe2RMU^q z19rF)H`!8Zjl&GX%A(SR1t}en;Jr`p^n-l4*d1Feoey*o(c#fctu3_2#s-_~ftPO0 zUD8O?eSl_oR!E9!ZQv>@CcAM<`}RiAfZNDHe9o{v zV+S;TIe+}4Z&>a`h{$&@LKd@oWVMYaJuhuR+hM0UdQ@$PENR@)EX;d(g%E?L^= z7Q}t{esEjPMBvt9z7-%lq>(?U)6Xk-kQ|65sfmAlZ%p-l^}XH7 z)zjMZsDWi(c2{)dC~Kwn*ySDXg|9ZhAm_TzL#%bYicS$T6d^F;Qi|>)f!{vmnvq?G;rQ#U(+1D7=!B0=9!@pZEimhr=SW9c! zml|MMRO3Vg`ytyn)Mw`{^ZQd>y{AAwQ2N<890{4aPxzo zULX?1!N|M!93+)(LAQNkqIk5fQW|3SrUumnth)7Qjcyn>4$xi&m8YLDx@GtZkyTGzaZA2Hf5(hAs zLJeZXx5GqK$m@ihn=E2>=P3TzvM;XeqXCiKoHU{1k+jkGQ~DISJkoB&N+;fOY2PL# zTI6W;i|*Xc?#aQRvr%ycL>!V;2{dcawC&=s=zE>Q?`f)gvI1yx^Yy%e%@T@-KIhgb zM_Zz&CpExncT5uDz~a^1juyfPweyR^%ZMPWD=_f1h=JW+pHR`M9p}?hX#y=uuuXU$ z?_Y9QSN5vus@NpEyFXeVo81eGsa$?M=&(p#yRi-QQ}{hN8~>2$PMtOsaW{j|0<#e) za!PGJ={$4K8I))tBY%b|Aw;TcjDkG-;0G#czvE&=s`9Kqi4K+lpW2F}GehsBq53`? zm1(mO0Xotc9884-Y*R-J(*eAQpZ<--8YMN=j zvyS4|)b%iNdtRsxb5ScMWb%g%4uoYi7df0FIVbC8BWV~-)ED%ybm*p016^8 z@V$I=6@X(M1`^fVzC8^#HNyyk|LSrhJRD4sZ1r%YSbXK`Z}{=qHZvAo*7lQ5tc}+f zO${V{{NO|)wJFu~x{j}AU%GZsP;1_Vq#6|JPk^>Fhc0!>w7-gKX`ef4z^&*(^)4_foWfgfd_Z5B-!GdH)&o zX!YUeQ-+?`7+!a_;zsvUBjp3$e1dw^N#=GwD%-i7Lr^J>c3@K*UN( zal0YZ|Gc@#u7uiXGLj>$XV?3h+2PW$paWVfmis!Z5NX_*-(*i!fHyXOMs7}GfS9m7 z^V5HbecqSB9_J|03GrD!JwQq_&)Y5AgDr<5rm+cm7tdZeX-mI)f56=}ieADlLr(E- z%aG`=nC%M6m z`x%{MOqIp*Ua1i<6hh#stD`$H#3eQG0|D&{{7-frr#p9Hr%bH6cVtkd%h?6yF<}Nkk!2#apm3YCm_Wgj8&OR6yha z1+COq@umnFBiGuP*hKm$b8lnXex((TQ=D7|EBYdFunKWM`{x+ay$)|$I%L}Kk>{G4 z0XO`X3R>EquIpwU9A^Gltf)Awkmt;FhUjuksdQFq>I^Ho?AO^wr!8AKw&fE0NpHKG zCdokHAHBHRuWo+8WoRqN)UIbaVy))`Z(t2sbgwaf4xd+SSW*-L4*sWD3mo`af#P0$ z10m)U2QvjT`4X}CPNF)e^}SC4i)y*o#7&9h<)*$p>5{iMTvdehgxSQ6BDlxA@&8ra zMv~I3Be`+NJY6<&z;RAI5=K8&mYuQbfw4k z;}|Qm<&GCL-MZMl2_0c^SpP!`T6|{t=>TeZy)$mVbVRwp3s0;Q>U25WcF1XrU41$< zIqh!sC;Q5&8uy{8sYZo;&*ai=ql1p)?uGcvMg%Ct3l2;OdwDL;dybC=4*eS{-X^7l zWiYnr+^Y|pmK2Q60(j&=dUskd@8sZ${H(bgXm_e}de$4-*eP4l8&OW;>T3C?^W_rz zBgd%Kj$TWhq3MiWP~p3=NJLNg6Hxy;gDXGZABLu{uPD&F&cu1Yfyobg4;l8}a+<<9 z)vdGBU+7aTiXFree5`j`sWO-1rPK-DdA-lOFhG(t>56h*G2gQ~ zX8$UhbTySnFS0EmgSVYBc+cfMbkz;4hATB{nC0R_1&Jra-D<5_AQlVX<1oxE&h zEA`Z<)@JH{WZT`&wW1pvwmZoX|3Rq})uY$t(-XQ7J^ycxi z`;>`)?r$lR`w$ThR4ud3TboxMi`=hk=Z&ua4s%@e?PczxqI8&Q-jZE{MiIB&5PCL6c%W=>w}(=@5EmAt)a0lZC0vFcmVWtW@F&P$v4;@K!z zAU|{LnYBxDC8JlJhgR(B8yg<18Wk%Fmx)O)*28lzoz(=t&RZNmS>tbq_Iw}PStRKM zq9hO3AzZ#w0_Q|H4sx9Wd#+%2JZq%It=i26+nCCc);?p8N2^%~xgP%dO70l$GW`i% z@>nF%o2Lz%9u$lwzt_N;kRtI4N0XD=KJp6Y zCr4+6MydPC^(oJk+8V?vM7+jywXJ|8?%AHJ*ac~G)*y>s2K}hb`LS19-=gaB@l}H< zuTvt8p@K>E%EayB3FkLGhup&Vq#fttm`UFc8qCf^qHZ?oZqWAFN9=EoRxxwo(-gES zP*Qe1NPFeStcBI)w!hx{z$e|p?Y4Hj69lzElinSno0G>)MZ|1}wui~n`Ai4$-w+$J zb$H_hJ|YBwFfAO2Aq{tJWMBHI;%mPkQLCIonW6odVA(KW zoXwSKtj-&J=h<_fqtXJSUfVm1FH5$*wX$`ih2GfJY1Rxa!kwbLaT@w-tt|)45!Dvj z>(Lw5nH9clEvEU0C(H51f`r=qw{1OR&ubRjCqRx-1EFw!&k?RXr&FT%0rX|zz`ITi z|AmL;JK%rc4W*2U!ouB$o&YfSZsxUMsot;MDp{R{3fEO&=bV}AD~zqlO0(%d=du_NHgAyGybc_$3_k0+ z;d3c&^!_0u6jnWApCjtgU=MWNDgtkiLzT6^k4H)~;i?4ahS9JGMt)sFo_O*c7e$FTFi81qMO?>qpKy|y@FY?tM)waEU5z^^U#>=2-$%!hrG|W z#+O&>1*ZLpWRttd5w~a-i^Y;rejuDZ{FYZ;@^EHa(c@WP0YTH=h&*$)k`tt?!yZZc zfO1F01baC~-3fz26h39z=u(J>Oo8Sbo2n|;0_RhQdvy4O3ynIEoG+^M@f|+?Vxs7b zgIKr2xsG6dAic-#z503JF>zxUF)$-)$=RO(mu@z#g@(1a_WTiK4i*NcU-tp49F_X)N?p3g!6mS?F z?Dg4ZUtchizWb%Ppy#1ymT^gvpd{4Tsq_1E#*4m0;EwghoSXE}k0s1^4L$RuKuO|U z--^$W^^91)Y4`4znIm;N2@2Y3`G^p7H0SbSGnQ*v94eAH9Crcw^Z;kHJVYY@HZzLg z!+`56<^*X@r?q-q=PYmSyFe1}1McWUIQ?s}S1Y3!>&e%P=p5OUngRr|kzdZ^{&d?R zQVYCt01j1JYp*2mhOM?k5+$Mw>uT07K<)d6ipwtNXw(D;g@Po1wm5pvuax$pRIBlQ+LV}-Y-Pz_3p%DYgfn|x=*QIQKMl92`CfDvgo~y zaDSEcM;|_Vn_sC~l9<0lf4bIi9`3=4QKZK@!*gCRfB9L*=bfMbn9hR=ZSlz{SNeL5 zAUjs*P3y<6fz$#CgdbUQ3fMqPXKQ=ECsdpI+kZ`{zSk$OEKyiC)>uNbx8Mq~X7@7a zayHJB(v3aD#dd#{KWaQo=`XzH|1Wrp03q==-m-j)Ov{HD!3{|rxYN)Fe}X(`r0l#Xu*?SW>ee z&Da(>ciKD(0sUjQW>losmLmubtHe?dleDU$;iB=yrjaXx3JA%jYlgjfns$D_f&OV< zw7K5!ps#@0?2+5m1VfO4C5%&6Au!ZT>*P6rx`Zfb=}mpi=O9f*^oPD;sjpF-J5qMQ&jvf zPy%a3=QG~pcBRBAe%k)*u*HqtbCTdT%o+_;_N{OVXTa(1^{tegpae zJ%V*Kkgu-Vay%lY%eEd1YF>=%apJDvQ$O|Rw+k`*$%6oeLpg)Zeg@A-tZdsx;}s?b zr1?^3f9w8DX{IXyABOqQ%;r5%{C8lAgSA|u2YhWOd-MSv{u6RG*1q@~GfIE&m-^?Q zT*vYL_NU*N_cz}BH=eb2rA(f#v!UgxYW-p{yYZ5lX6NE}n-eQsrcMuFW!-$qP4&{YMAPev>K5x8Kjd<3b3mq>E{Z$pIUlNjeD=I zNEkd+LokJP)K+D0P61}UF!;5 zI`#Pr7t%?pb*A=SGXiuyqoAaUlU;87E`d@^aysz~J$?Uo;VBE3Kbq_D*Nv#U-By+V z4WyB;gX?x?@&SU@&$VocN5)|(a>*izW|e{P5x3f<`-qYi4tk0dP&h!Y6Lb4ERZ3ULc{Zzj^}b{-JN;Hd$4)Ld{|{70Ho|Ogc5tu4nl5 z9wwWD39;J=YfePyv|AS(KQKIXsqZwZckkHz4scilVxd=p5`;_J?CUpzLdiwu9_4eh zf<%?UAl+5nA-*B!>^FepO#@e&y;#ICt6uj)qG?E|{Kk*kDqtoHNA^xnSl86@@&poO1y~)cuKL zI?G`5H~l=wHQI};hKreC+m+bU7;@u2s}}9h$7u@GM*tBupvi)!wS`SDvu<-B?iuc2 zEjRZv4^wMdZ@~t7a`);nP9qhm*QGtm53s+8)FdZl5UL3M5#SzWSveqRx2~~$!MS^L z?+VALUul)(Z4>as(GqC)f2UZ)!=CAh>gL2Iuf^R?-hK3QZF7re;!GZo1~8CX-Xb(C zE#WD#TSos0hXV3`ZT@P&WHZ2O*K2ifi+P~j=V&~|iy+Fx?vF;?zRk4Q33jr`F@bA0 zt%ljm8@s(;y(p!*WYG-_I&}d)W z^%A^fky)9o7z!Szy|Ttd@&#T=@`B;p6^`m@uT7b9Y92xhH$lJ{KGeiU&t;d9Wu0?B z#>c6R6_59~x{QX-*7{5O>-MS$-tz%pAK^w{s#&c|@<5619sgeY?*3>vA!rZ2^Q&f? zSd3uyGNBip_)3Vb%?zxXF|D$BkQ!6*A8Hw)4$6%x`Cu$18Csj9UT1c`FwskN&%1BP z_QkX6aHk3m@hrfxY&-(}5m|1%y@am%l4*P z#|n2)cUydqCr9ycLLyF4$RzA18Ci*#Mp@nC zadUXbbXT4uRYOO3Ppz4YJ@~?XeE400Dln9-RlZ>!KkNT+7}6|F-P)jG(Bb$5IRnjE z{cwye0;{`hI$;Gk+%@CEbxb2JWSNc;pkb#_;rQ%o`=3=mrovmJ2Dj+WZd~ydD*?H3 z_Du!QjPQ5p$Y#cEWMv`U??%~_ao8AoxzN@Wb%5h}j&1Q{`#?I8iJ2lbzTj^^sCAj!;I$oBWKK?fe|^OL5w!;bW8ct_+{w))L)MOV0=V zZT(4HS~RVT<5vi3MG5}NFVa}#X-e2a>Owr|)GYfMkyyLuVQis`Rs=HVq`x$er#W$T;1TAW7Qf+J2?2m#QRgg&`r)3&$B`0ce;tO^t> zaHo%I1o6fbbgtLEO4&bh#%V^daEFttVi}VbgD9d&^?7O{;8d`n^a}^K*yUArX1G0W zeL{RT9W$AE3Bsc7z8Fhjo9YUcCId24nVI_z75u5TqNNa>Mb>&W8@{yEw9be&*Bqr**oc~1IRzgN^n($)zx`!c|7&UMo*Io@AWF{|q=AjEL+{6Sv5L@~b%QD& z`f^!rXQIQ4g+FxpE9AXdxZG~C|5T&_>b7PYS|6ACCJpTNG0o^p&xb##CGNN9SD*o@ zPCO?qAATGse`QBLg4PrgMXZtx0+((18y#a_Ii;o``7Z+fUyH^6 zL*Dbh`-$e^)NA}Dn9j|#!?msA+%;jW({+o?wN@*2eF)pOyQpXuVE)Eud{u^?S9a&f zWON$LmR;Hm!d5K2-wX6SEVL*V7PDMQd}e|n)!SFV^Vg2_=e;qN^<8OgvtG&Yq(5wq*RBCmj*7|1`W$x~6VzflO+hrlee+ z9xd~MNSIAznT0Imjp@{ln(4$5QZnb(gW0XMA}_AH2>G$xb^rR{MUBD61S!scJ0 zvNXZ@Zm1>o-FWXp43im+d{Rt&=?cz(gFaNrhj@PIgE!=S@7Oq&DZB>LcI=NiGv{cb5PIazEjGpWe0!N6|%-=|QX*JSTH za^I1|pn(~^P#|v{&~*5b|0%r&Beq0GZK?VC_#xCsnUF0H6M=KvVjZfZzzUio+-2#GC$j)(;qFO@9p6~pJAFvAk5)$ zV_X5Z+FA=mo)?ej|JbJjg*7$vE3~|#xIDDW>o{E3hL)-nIsd$aI z>!<>*0wE*h;Ne+oSMG^`<6ghr{{dj#IaPEcTY1&uHTDp3NkhWB^ExH-JoXmeu{7Jye<()K}Fx@|826 z(W!kWxgz6@PM_w%(IYQ{TS)6PczJqL(!S7a>+4$VPzlhYN4M5y;LYc#5t)$>w*@vei(CJ7 zS0N-HP!Y5da5vj5EtkEWUPl~xJSZ3mGz4_wH1w{9Q@#-6|C$GWOtJ1j&`L)3sj3F| z1}jkCBZu@F6m`Dh8t)t!S96m*Xo2fQ_6UB#7*u4bTwa9(S=)E??>}}tYfRB;4*2u4>6;VX-#o24= ztkx%u>K1}W+zH?f3JwX@qXRDgllNQ}iVqEPt@R1Ov_cpRo za~tVHA@^qYqh_h`j`TO>L)LbrJPToL72#Wj{U^ziFUu?5c-%EQjFJi<`$4#9i=ROC zW{rVV6J-9Tc=Jq!mS@gbbsLlPZ9Cr*0+ANW9Et|L2?N*l)e>IutC7RLtkPvBtD^)& z_GbE4`JtBW0TfNRG&)z@bBWD2$vV)S$0_T??v^#JXBwW@s1nu!6L;D>;s zxxM+|D8+J=kd)jB1N!R$*k1DO>4ji)AHiy$<9g6N+kyb@%l9 zS?sdsbp)e&I?9Y%0hdMnNSrk2@fVd7IPS2=<0$_3)b=GZS|hL8t3{H=B3$(4OK%&| zq6C!Ww4SB3nwT^%*9DJId1(bHog4Ez{|uLWEF+~&#kPtYll_#*J0oBrQKW&nw6UZ6 zoYv4h?Zw<0n@D4H)?$!an%FJllNs-Ql|C!JAe_m~s;;`d@5FdJo~kiG{dZv2vmmx+ zfS+R>e7Tyee#vn(u{V?)eTvr)L>9nq_x2~)BQ-QxuC9MM{JmBE`N{P{w$ z6#*12+5>dmurq4X=UePXt=*Qa8Di;8{l5G;&#`{Bp0PGP+33he z=zV9A0?-Ng-(;1UZZUIPG~+CNeUiz{L?a=O*g;L&Q@5iG-m4k(rfEGXK1?4;%ik)d zI&1rcGphR_=Qnz}?3S~sjvJg8OS)%e*YEVxHfYK3bI znqqGyo?O5gK0-+KJG%DKDw-oZ+gg@7b*2}6tE~Y5q}DE@`M&@l3AX!X_p$p~wJlAsy1rX?GZ`-ik-LREJepFI89$C=W6|k9k8`5|oaYky? z_!D+!cl&Y$_-^I>o&iUL1M4I1-vBC)y&m!6*4y(Rp+2P7NNOyaDPbJ2)~h6b{Hs4- z+z4ocTCw{A1h*%6*KEPd8?Q)%)NnDUj{!IOwWM zo?Olo>4AquVm5cj<6(vG7qhlat-2g2jLNpkrff3k2~|Fo$cr`6&e5UmFEKaD-3-so zu^)iGaHaQ>j4k9Yn7=>pA~@CnWJn{yipY*l9hkq^E&qi=D@J4fl8A{m? zFx01vX}s(=U4lz+1uIYX%`T~e!(QH}M4pU$TeJC?!}HU|gQO;T{&v8>EN`#FD2Hk1MlIJ$m@&9qr|WZzoy!HfWqGVB7vFjVLSfQlrAAL#W24 zM^#7X>4$?;TSVTA7NfoPyjpg_z;?vTcZaUFAv^SktMdIrTzW_6HY~mv#Ou%zbvhKI=mo$ttHG5pa z+ileCSJkrLC92o{Uf`h|1$AHCDCT`jBfrUnEkke{^bUd>Tm9)6W_yb!~To{>#@4sLHG zhhG`=Bx#{n(*2+>5YXjd)yV$RcSCj%pDj^}+k&6+Mv9FE7l)4J~L2?keO3%mbvA1O8QzE3H#U#}B3aoO5K|C*Yc~(3;O8RqM6qnHxKu zufRIR!}|{DrJLv~ew`S=i11wORo2G4*MqqI{k$J;rqiX)>BOXx)YsI~Aiu_G41>}iB<7*1*ww!L03Puz(L=KoY9+A-^i zJiTJCxdes1>1)M<3!7`bwj*PoYh%p07&7VlIP$2XR~T5wnbgeDtYw}A59~n#$vwiq zP4B=jh(|iKy$AVt|DXv{8HCUN_`|b9QuOWnd&4e%R)L@ zk<&hgwbDtU#uB$kMswLTPsFIrE_+Z77~^Q=xE*srswJhetrkzk?dLl!UkZ6bA?d_4 zovp1L1b+0C=z~qu6VHh81Tiqdm}ML*FDR^d4&A87Vqgn(?Lbt%5>ADuG$omQvtmiX zykXnb_N33QvqVP>h$w$!C+;j)nhjOSO5Hcm=H9)O^zI85kb5D={3{{G%q#0w>znPC znwOwOrlRAG2k!>}=u(q!Vvmd#`>D#tqMnUq#EEOm<3ap#-}F9qo@K{*r&to>y;Oem zWMo2R0-4t@x6}W~_W5%s=Bss6`-0I1OLJQXbi)6Uwg7%X*@A}?+TQ)Ell^+*dT;5w zBl1v@!qbRe0I}`NM39LKv~z!g4qMJrgv;u7(A-PqLd+BiJfd|hQ2A|X3OdQyUpaaR zhQ=R$MUAnk@AE^PS9L^J0Wf47^zSbBvd=0Fi>es*uav`$4 zxuxKE^o&6*Pg?eW$Hh9 zimF9RfTt+qpL)DD;N%!x)8|5*7o~1wOtZ@NvV6>{pn~L{dAD`JG81-W)!r*cRAZ^P znmDPTzAxlpKk4WImpm6<`4E5JrTO1#@&7kOf@xje*Yz|YlG`6}tR9`C%BKrHfH zAm43-K;2!=K;m;0NSMXB!u~JDfpt(OGSgJAd;={EPv=v~NbGF}#n42ppqkAdIl8(i zMTLEZNty{ic>X?J{y*aa{NVq>1-xMbxPYSnl?yQZg0-Ik@vs+==7$ZMuU7Wu1=zpzHeKl$_h&5&v-3ouwH7$tP&~(PeFdk_y*VZ`z=e9rS z1Gjn}YLdfCZ!r2`7SUx-=RYgw^m~!<`3R>axdQ#|J#nmMw8hGXt&-Yxfplw1O7k`d zC^*nH>(-j|Ru!h~2)Qn$!-?nd7ZU!= z{SCp{w=rhh{|>?VvSjp_?-4{7gH@J9DN9^S8_6MSKPR{Smsmcl0B^Szo$(HG?=H&T z2Mpf1@b4I0wM9?f_G@B}wZW7ZVT2{Pmf5LrsLZ1{RbPT3Ifw1+30==6a~Dh1HPt9?R<5LHQ;jXqvwgG*-;sGp!t@lU7>S2L-sV05DP03 zZCHBh+p1wxDLwA{sXR_o8fH2ejXhtFviz_<{!O`o+fsN+nMR&=lk;Q%<@S6&qHy82 zK+RZuN{8F!N+ndPtExqr%`L?VJ;xd{rmp*`wQjbm@RCHUa?S_-IKlA*2AgKd93-`! zpt4VY^Z96asm{zco2(_C(yrJ10)Wg;dH+?0JEdqKj9Sy!Rj%D^X^>R>&U2}+>E&$* zbdt8lLA_tLCpO6rH%IagyB2f2X<;4Sb+WjbT~F8YX$if%Doa$FKqQ4TKH_Vxx(6~$ z33Wmo12x4>4pWk?#9P9U)R)4CB%I51@hnA)2O=$4K#_XFD5PV<2Scr}6Qp%&<+LreGQ^*%k^{zM;O-W}Fe zT5oR}1MQ|^&dJsmL49)R>VxY*tjp+nPURm4aunQp?dXby?ixty);Y>8WMqp6a z;yIpg?mmK{tp#fTVr99zx3Z|Xz_0FyfuRjGKS@gQ*Z`0G=&NykF`J@YtlY19qH5VN z5*J3-Ia!cBhi4OK4v+rup8@F0ocnr9yr7;me{+42AG>;%`s|@+@>wR?LE@|L59&0B zD1HNxR|egvn=csdy)i-Y6;(*|qn!~h^ECO6L6u=y<_hVI!_T6IJ;vWx8lE?&T&<`M z&BGkm*`k*7uFaxfOsH_neuw3JP?*2gwt*~Y20n(a3M=arW|-pBQQfD4+kZICC`M<} zl1Tm77G&v1u|7z#+^8QBq&j}q4Ik$KTu^}b=&D=fM2F8u#BHBH#!)K8E@vle@MC$; zrj=r738Zqaa$AF_ElFC^kFI*QyRPXsJA3?LNa&MDb)S!( zs*k?s#w=0oRN5{Vv4%?kNv^p3Z=#u7(z1WelE&?vDlGXwmzZgPYrU6Y1hkn#*4Se))%!F5WIakZ`a>a`ht?)#j)AXZ2-|InZjAFec4;woA4xoW4> zF$1QzMY{s<0Xr)p6E6a73uA}oo-_`n8X=_w*%M&c*10Eg=w^8XM-8M7rfyTbaQPQg5 zV%HaliRZ_KU!2FSC)rR~f=sS?~j(TA$1PLwY zkUR{Tul@}ZZli-6#DnP`w@s5A*lWGkZ(j(0ng&UlJ3WOknKXK6i65p6`Tk5t)C~)D zjbcZhdG%VK!!2t0%S`YNe_KN8#ES=%X7annJ8=)YFFkHmQ#A>CIsoC*jY70)nV7RU zCc1gZyQw53TA`i)8JS^RPvmb-19ji;+%MgbM?Fp8&p6PoQADmw^?^@y0$oS+gA8zw z{4OMgn{EZ*oW^OnGv4j(L^Re`4&hn9VH^Gh+@9H&H5`rD2bxm>xMEZ}+MHs*NaaAO z@Q%}d{!uBWs$dw#oZT^gV_3}MXvH<#k2g6RHWpNR_rni?xb?6TP1)rGaVM8T) z4=HICSkd^AZu0!u>~NLNv-P|PT%Lkk;?Ix;GBwV5;b0wwQ{Tq$u!Edh5?Cj z50|32PLyhVFLHUK^W3yS&#DKa>t3tZb=UOTX_&C+F@SBx)C|UaNYsM5n)oxzDi`>} zbkJIBQrhK!0`C=Fu*7FNOJ{v=S)}?>G!RW*;$y1?ZJ*|Thxbyt~N?>?7XufGU{si2eyW&c0ay=7RG-`WSNNJ@9Nba#Uwp@eivN=tWlmw>dSfP{2+ zx72_%Lw62cL!Afzd+&F@=Q`)>iEmtU4fCve*1CUj-)ro|*wmGIA+mNn>A#g^#?h-= z<^onsO_9H!?gM3#_5C9Dm=?>ZVa7zjn(PRi^V1HeD2~J z!?QfB4|?|Nna|Ie5cFC-CxX3lgVh|CBs3S;K~-trhgP3(m{Rr3|0~sM+rl_~Q5q`z z;1O@M{`omS%nW~jI7&IA74MYH=hyANmrwD_I-#rFs&bf64``ARR)){CVJs!SheK5w zr{u*JFd)%dG_t{Kqu{nQ_R9f-x#sYCDZ*z@Ye>9C{*S9epSd#E`^T%J40J`?^$bcf zmEX9n*lPlwL{eF6^_G0lEhSRG)@P2f4FEmJQcM)$N|g4Pqv(F9tGo~Ycbu@uP*(Ym z^Q{Z1|5*Ggeq8MfS+Yc4)f*osO?%z*A~TB=R#Jb^k(s=PI+HXChr98b-q&0q+_36{ zv-#`V`zB_Q6$}#G=Y0`zPZxZ{>F=L2Yj+DV1yImQ1dEY|ZefXlG1f`M_W5;ZfXGn) zVnvL7qvjmGz(7HoK&Zla+@f1ZW^VN3<=Rx2tJvB$X5(I6h~!ip-Z5fFn>zC@L|R%V9T6**g(jxz;m> z5!xd7nS^~!)BNTi-Sx}C*rm<0UOU47D8hA1vK@dxz*E2BzrW4Fuz)#qL_OC2oVvB@ zo}Ibt#|{f7-jeIyIn^ft{fS8k?~VdeP<3bRm`dC%1635+KQo2bzjGngjEw9`HV$%R zANh#7HZX+q#ywb5rJrok!>B8Ix;Qx7w(%BGL2TCkazE5oo_AzUztg?w#oh$j<)qcP zu}b&hWDor2FSDk37m*u^eVweF2Hs&SJQDH_T$@)3vKVRYG9mjoRV8+&(szGzlfLh8 zpM@@f-Pxd?rjj!11)2r`b3DE*Rt|f=%0b|4wjud9ckTSKr<5c#U^$b-dhT_ujk5kl zK157Q<(>>hKGHr-Vg({O>e?jVuPmJH8X9if7{YG9YaZH2hoTo8mw(KElw9ipQj-I+RP-(8Ugrqs>&|f(WmLDePaf2k zeR@>R%eF_>TLorC(SZi!=EG3@x(!d+423iV!bwaFpVGP>C24TnLaf}@^nSK$hHmKYuza%ZcT{*X8L+{?I!;a*b!#AQDX4l0C2Hqx zE#B7@_Ga?k>$0Kht+H;VZV&OpT$jgoF1c(aEj9ouodRhE)BzCHHhnYXUzgi8WzRT# z-(~unI}aR&J{&+Y;>K~+kG{|{jG=+R`i9m-^z9DatS1@FKUYi2Xi)KBu*54jh5>F( zX*T;zN(&oSpa5*Kn42t=^5Yx$*@ns%8wpw{^yVl2wV=?0Pz~vK6y01lpo-AvZJiq` zoX^DjA#By?qDm46A4ODl1XA&{iBJU>@rWAb1PYos1p^KQM}?f6K=*}-e9v;%z|Um{ z(}(sD0G-HRT<$^3J??;78l9bA-?k^aqDTQ_t-qkm*j~C=W_8r#cHl#Pk-zI*8_O6w z0gG*$72qYR0It_x$|srBCCq#V5QE&ls9qhXdYbIqsEma*Uu9fu)BYUmKnl-_x7}0HL ztNtkgP!i;n)hx$Ddp+lkP##xzhv$oZSvWB6MnTR%Rs-t2Ou9Lx+bSsk{;h@{X;wuS%82i3g@<-LX8t{->2Y=;L8P6JzJ1T=C9cUHmmcHfo3w^)@-X zu=i7SoRI*opUcpsGY$EAJDKHjV)3x_RCQvs>(Nn3^JV$;zp(6Tci_)m8!^swXDs1|0EB+$tb5Vp~`S&slx!PZl0rLO$ zQI6}GP*PT5grQ~k)?Mikw9f|J9j$C!)T5NTB`VG}RoW-y#w$7f#NI~QxzxBLzEERi zqP;C?Q8QNQ&nIsjy3)d#;x=|Z{OUIMPZ%G`Z<8KyRYvRAR3sR?R;YSrM3iN~{7=$K z0B8kE>ID#6VZYo<+gtFvrC+)D+3q!u|2L%4@pG4FaE!J0>d)&#c58`8tVfe9#O2ax7`2o{<3dVuxDO7n`T)?y!dZ$nx)7yymqA{lMlKKdB=h^07RI4Kzd7>wcctRs zEYhSm>@2iVmPy)8ciX(d?dvfWag~QKQRzg7Hp};;&iDoI4yq<_wXDCmizY-Ryq5zL6Sy5{ zqE|tE3&F3q@w}h5ZhlYGePTX%|Kfef2)VY1g_fkQ_ud z@cp4~?puz}J&o>jt1evrS31l8QyRzrz4a55^0NyG@6Vsq<~F5f;8|8tX^D@roGL~d zU+OU@&HxuS+_zjKB@Z*i`V_M;{S0|jQIwx^@`oahg#BIkH^eQZ0LvbwosN5)72E0D z0;dr2`+fKsK<(Gzh56z5AQbt8Y3gKMmbnodYHhWUABzHa3x^b)qln>n)hGE=^Lbwo z`ad?mQ4o`m2z)8S=4?D-(jWF^r@czP%Z#Y=0b8ibR4-ay&raZdk)`Icp8+1`=*h!TA+;tv$o|1T!(wEo$W^O3dHPm>GQo#aZO#5nsLSweMn_Wkfdz`vXVWo zQ&-&SGMinebK<00Zrj*$U_BsGqDMA+aNKZ9{f;;pt5flU{AJI=2 z&b)m8B%UX#PSd0eGh6(zM%MUKkJjomCc70>xW^p%O4yxti?nYNX}0vpoB%}9`55nQ zt$U3+LudBmr#oBuqGurb*p*+K69)YBo*Jn0erw-$v#bSSW(p|2N%h`jp^%r(fUGauQJP(P2RP=#ND3P!lB4;$AGxF^f0*W@XcH1wuA% zjU0+o2k+M|N<+@ga>TOh#{#qd?8!2n{y8V%9Ich4y>M=u!4N&0s0T1`ioR-p z!0b8)&Os{@N)86{w?`?m_rR^1^D9w`uFBVh<#^C^W#6F4^Sq%hk7DGzS!RXRN6!}0 zhYcfnUU_|b>BuoJEodjp+X1eLcDQTH?Wd=$?H&=%^9{^Yup6a<`G}=TV(?diCiP|Lrl5!7Kd&uxsU@1=%HHaLzQF_vE1HDvLRJ(H*Xf%w?^4M({c(3d)f- zZtZ3%Eg$q`$~oC+JXfPQ!_N}UkpI|S&V_DRX7i<-fj`0RrQRtJWQf3rzSok!B}uhwz~>~i3& zoY|P_`9dR^QOKE3Afq(M)yr_9aexq#X#XPbtjiZg6LsOpb6vAcI&hVvMg^guIYw+B zYP796D_Q{Cb&htZU5FZ(kG?3G(P)=2?6)fv8gF-hjmhk`dbP11;dNu-_p0O+4Pwv| zF_5=0gwHS_@3-zPaHa1X3Oc)LaX)!S2M^5>7-Bl!nS4vldy6OsV6PoWdghVVX~}Oy z;~f_iA_aH4tEEj561(Q#fE64Ipb6YV%|8r_fgW0RN1h<8JBV4iPER|F_3PUm!F=|U zv8zqqdY5z=ASJZq^@1GI6n#c<2PbqD7qr}XV_Igkxtc3|lCS4_v`YJ(YIfHHnm%9j z2yI1GVL+~B(p;|$fTXh-d>-Q=55BXO94mg!Bq6tbKAgpXf0uH2@7S)$AovmtdiWWf zKU%ePh2!RG*4!Y|M^(6uptS`}Xw)vYS+T$Prt);jF36(-=bSih&q$^szDHH_s z0iXZ^-QjK5a`2F!4=ixGewPFpt4i{3R2TpGCefI9UJoG~l5 z*l^5*=k^{3Kk~z9>NYIvf@4z1V&O*R(+u~Uqmv(EK%yRB3qG>z1~4tu=`xB}L*=C8 zc{~l6z$+``z8>+p@ea+3^R|}nFPHHeuzk)LPWjkpXf2`1!zSEoA?L_&uTp?a!$rh( z!bUg*+LNR5$EK&{#_K9w>HCUi{OHt-Ph5BQetG1@3lHtext&q1j)e zi|U&;$snp|wLt@M6;3}!7w+jYtc2Hf)X~;=%ybr7qAv$$nXsq3fJnHHbS`N}CQ*B# zgpB0MeUp|X;2=IxB@lbZ)^MbB1b$~Z%I0;lSBk?(9P_zbLRy+vs89&RksO@&T#Ei<*7_+9*Nk{#)I|J9XTw8ccRLH4I(sp3~2UDtSN#>d*_0SN!l8kp3K1Q@s0!Hba5XS zP>5m~uLemoH0g(zo155K#%xRvVWX2xX}pqFEpp+QtKm(R<5%@%{1^^I#aLqJBK)9fN zpOwzXr`e`i-XlKH!`+klu|h|#?6Sy;A1xb|nAFvW?Vg{V9LOpd7$(i(Fv)mS^vPOi ziILb^ulfB0Ie#W1(lW+T7}7@MtIsHIHhk<5XgH37fS1fO>mW^qUP~@_QrRgh>6k(T zBAbXGazRm`PtDX>1X*p@=cD1In41l)JA2Epd=1+Xsn=67tj&Jb1#?zqxl;|V9Oa3unq0BE5`Au~>G|OsM zn1Bo)-BYWjkhxK%>jJ^x3Q546eY8Q8WnTL5ySGUjVc>!Gvg=QC%{5EV8!?>Vs(Ma@ zckh~+D~MRTGJES>@D`~v*RR;mL3bv+kT+!Qv23NNZyI~~;E`-$bKW$1$qMNOS`tqS zK4yLvW06(2Z?I`VD(Rvb=bbQ(s&Jp@C1$O^;^ewCH?{djWi1x&d$*_bSZS|M$432& zu)@94FXUsUUqCX_#xGw7%E%>8@e1S?>i;|R+?<@%WW*<=( z2plSkidQ+`@E;|pe zioFX9yzj$skLS*i84U^Y@q7CSJ5;PiM2QdfgtwziWMA&1O})}IyG)D1Z7Ga~@tV2C zaGu6H$=$44U+2e7!RGlS*(rXzw+}wH7S~>Mqj{QQm+5;+K8z|;#Dxul zofR(paRZ2tPUMddz4PK6KYVu?Q@%O}FrVHN@vTqZ&iTBe8PehUUvd2rmYxoJ== zl`;FlseXNX=yV`8VeZkSWF5Eqx&_QW&}UEfuI{XZYICH4 z>1vxqTFE0x4QbJsY!8387-6n@%!JKNI=3#}CJm}A$t_$EFDzA~wc3ocBF=YITwMit zUlNRl#nSI|6Mng{f_zULn4^Q`;xa2t5CeyTRUSx+=i^I6U&|RD>c`4Ym1jl2H|)l2 zf39*m(}ndamv8Z8k&T|FqJ98bbv6Eu6vM~stxs6RS|NDTxPryI_CZ02z5@bB3nM0m zE%TG9{>6b!OV}iBIT`3Cd@g#eXFd51gLWVO>3*43dC+vehqw2R$I(VbCVwUqTaO<5 zgE-ORD@@%i1D%jA?K^aTR4iTFni5!%gz~nA5; ziaGtSg)!tzOva6gWTIWTxlSh=J+ou3zPt+EH@h4_f{<=_M=B(*3Q}{GrQs#z{hIMT`74$W zCgbHw4uv|?-PH{Xm1G}<$QM2|oaD8;vsd)sgwW`tGjGeEhgdjp0=kGCALs{HVi(qZ z=-+?yQ=|SGMm*R8m6wJ z2HMGsjkd7Cp&iAW_x%oS6j1hAtYcdusG)RNG?Pk>GK zV8u(tE|z_K;#O@r(3~IHzE>6-4KvlDhu(CfF;|ot+VlmcD152Ds6hIxg9|lRs2oGv zP)TMQ{H3=-zs@9R<1)WbY#X9qb9(8+;;rC&m%Q9!2Zyy-@xo4Z_)lvWMnwlq)I*=& zL@JdWI-i8IsBfzyu3LHS4_aHFpyJ9Sc4>D5ItLc8o_$h<9nNVOWXZ@X_-%a}Ru0`G7uCjy5H>K(61rJX#`IO}bEF|b|9`Uub^f%l=g{YV*GqwavX zZ}ttz+NRZ+&d)YC$=$eBX$os0be+$wPdiVH*yC><5^u%)Dz@+GR0;9O_LcJ|hxV5k zffZvJw-Ww76qc|1z3ly1g-`wCI{hqVBif@)6V@HqhRG!pr3LKa=$QCtSG?-_mWa4> zPg>5yD8bsQFZ`8H6fv5ll2Wcjf0oWlD4+KzsJ>dV#)g&$hpZbNwG^e+YmN`&HPExM z?!i7gmP?R26z-NdK9gM#S4U)Ju^xKTO(RNTRlRzW zgJ1r<3}*mh7zQaiP}2)_dYV5MByOu4%^b^B(Jg{)gq8DDP9S4*b#ISUR9-uu`)XOrA7n_f@HM z5h=&u5XOp&PxnV{s73%V6gOc#d7Kj{a57CQU8V$rS3~=n5(?J3vtbUb9B8JaZCYBj zXZ|~eE}k#=(99^5*QD^ch2k`qLkrpPPWm)rddzJ4B4a^b6Z(m}-woW5%o@BQ?5Ayv z+9QeOR+1}&#NO4O3*OqEAra|c=_AxF5AGm_BjN<%?UP&huKJ0hHLSwhxQQIkJNqf(!k};cC zc=MOiv~alTXRY?Xyn82Iy4XL!g)eU)+0wZzWDtBNkEHC;_#kWDlRo*qx;pdLDAsUl zWM8Y>@RIdk{Wp~1l9l4px-xjQYaQu`eTb5`CbR-YnO-vGT&=g1$No5X785OJ-pF%+ z1vMY9?oq#DmRpaiHRH+UGI%TzYS~9))-bd4nlKRV?;J&QUfJ(Q-pI8uCmT>`W5Ph% zb7`FQLVt(eU)g=&gRI(d^mO>?7?(uRv5qD0o_2XY=qydaun^ij;Z}pJNZ!$j(DLF* zbPiT8@y&~y!xG06WLQdC^pvdB%Aw(!)u4$N@7&P)QKY?V>pW~eW0>n4N7-m%piwfC ze$B+r5c423Yt1I9OPcultq}Cthc2=!rRinH=-EY!mwl^>8|n5IZYk@S;ni>8Iy0}p z`R_DdEz6%F8a!9@h~asUs|RQh4{f%NkhUddLW{$+PCBm^v5#NZX2~XI4l8*sH`Ji6 zNuFCE-AbR&u+ZgOswwm0o5BxO%R4rMn(oU4doJjw-;++Sc=y$$hjm^8QB_{!hJk4} zA+x~rL+c3j9hQmF@J&koYwZWwqPCmz1C7#8=7ttS@0!#7X$my+R_NRBv%}K99b9oD zrAb_jM0TxT3W%sIP1fhHnp8x9%VM$uKN9i#c=zD0qpeRw&#@llX^>1c!w{w$jg2?- z^uk;Wkw8+4;56&nhk^`#>?(?3zZ(C;-#n~}c|6n68!d=JFsfA-P7O=5HfMt@>Nj^t zXmt+ntZw2NU5XVyJTAaV2emtl9=IaV6l2!n(K%h)Q!K(+JeDIt;}#1|LNLLG4sB+W zl3XGfxUGVajoa?=Ag;&1jpQK?NpGOQRJ@7+xj-NudhbnmQpa5g?J=< z3WB4#*d6YWbeC8v5)`zv_wkQQEni2z~I{X!f%r?Z1r84p6?x;8whXGzH!>$7SfyMT!*L!8D+oqz@QGce&E6L5% zVt)uS>0brj;w%>FjpNR2>?h%=F?!=0tpue(BG^v;(166wR!b`W90XAHl6IfyXp9LF z>|>ei2`fr7nH}cY|FTEqkZQb^M$wH9U`*n~B4)22Je&7b!)bX~wQn)Ea&lAZc(;td zon7skN8mmH%IQ?lT|7X~hxliwxLoLHfk{=P?&q zNNa7X)SKqA36aQo>*&e1PEC$FM;y`Tdz*Z_Ln*TzNk9zA?u}%-93l17OoLi<``Dyj zc2S^Chqm^BrI9&R_}4c@y;I>9Yc^!iIY|oFqIKQZ)Xmw#(@M3td5@lyRp>kQ0cO80 zv8D10X0W-zJM6`qp_cWjxeFIHM&>i4N`nhJ^6)&e@Aio^ct1%YF(P z)|cNGV1G77)eUjss~AYQA5S4(em6S2{rongja^@&>Zf80=@&M(AMf)!bbzxGu?L)Z zmi32K+n46i*Bm8VTHm`-k+vFAx{`Q?W4q1Rff!f-^Xh(ful8v6S9%#OoH-e|gHXGG z!{dPYlk9oifhk*ItHWvIrK`=(C#DYf~ECq(H;C)*+U zOFDlC{C^knt;L;me6(+50-Ur`vy zlCiijnD5fnBF88lFj2g6dMPUX-SXOY1+~9+^Lu!-%8S8jhReSFoujdM>=%M+^|ZvR~swnyG$qNM0a}P(;leCNK(hwYv&YD$-59}{oTE_*M;rDaAj#s81Fdh z^yfih-rEDsa-F3xOORaSL%se{d7A)exJH*XZvIB1Y*`7~jd%sD$|-YMd2mQS*=d;n zod{n1$L_)Qhfk>d*}3{xf6quIFkWxLH*IJhvH<5AO7bNb567Ltu|TGevSXKC&{o*r z;ZHEgR>xh#9NwP6pxt611vugUjJtz(QRtadnNdV~^N3R%9;O`bl`_7*!|zM_wuYxG zQ(3Fe5})6cpt3?&uSZ1^X4keg`{XUqNq7jk8VzAI8S34@wLMZl4*L-y1IC{4OQ4I# zIY^n#3pQHX7gh7ppP96)=4GrJJJR2qW2-q0`P7zk(WmW-ahyq%BdUrPKV%oR(p4y= zWc$=#Vnwzk_Co`K_#5sjiufCeK;q9uq~19XQSO{mep$#qCc}uktH??C21m_dWwI11 z)XFUgJT5z*Q#sG^&xfbf6Xoh(-e4^TM+&VMD-AON8Rl;*>@nV+dN?$*EC!ZXafCm3 zYE?9wCn(#y>MHY-040em1(5WIl)9(Uk>MG)_Qt%^gcq}nZt+f6{T&~=X3HS&>UK;; z9`MFog$fd9q3tP0;+KDWAcgAp&z707H$mfWXtYP`j9-0Ecys$5*SdH?sli3D-zf~1 z4@OyVVd5Jt?$}$TZ3~&Yf4BTh>K?*-r}2{7cGG>K3E9>wt##yV*sd3|bBUCz&M^`t(}W9e%*pvPxYoz2j!Q)VA1cWlr25BDShv{1G0L?0Q#1n zxYwRxhOKI)%#jWQ>|+KWZvjKc9VUT$+71jdLK0xHk-Gz5VrdgK#8&hTE^afYVHw#x zu6C@muxE{^3D2-mR*=eFy`aTK`)tkty&>D68M|@V5(D?+4P-o;BKFKKj3*v^`npd> zGK+U-ufkN3?W0(7fTQV9LGnJkK~wOc zKe8ddyyy>(a#olF5JVli3j$!70I+I;|ZP*-Px%WkBY&u4RdAYcg>^JYXL~3+N@a+J9 z%8`fBM-@+8+t_eqZC-%RX-;^zZZUdBq)3B6`E#evaM7eM8yVS%{7rY4Ap!$Gdb<`t zBshSA2!f9ofc(tPW9B8nhywvu9pFH}nQV<#+~Bk4?&H~FwU(1Ol4>~`Lh+2;+?f&F zM{l=vd7jqj%QKxu@R9IOBM^8JK1}vWpL{2Wc4hrzCu}U3v=j^^ER~6CXqG(O%))OV`K)AlefFF?nAB9f=?%m zG){{qik2N^Iz<>zHU+GiU5?jkbY? zch|noK7N?A+p$|xseV3zRb3ofhfK}08h9toZSwVV{cVp*`x?*7qkD4Zx7}wuH#No> zJ?w+6BfyG1ohKTNs<_Hm<72{q_d?-!JZIY!v9m#-_i^yiwEMnANy;n1K%aueTS#q} zNB{W(Kk>ow$mja0+iS`lm+kc)9Y83jq@TSKzO$jRFe zk*fAaO%X++)2Nd=r@=(7Fv@;S2a=>V-M+f54@{!XW$h-Dp5(r5LA-hy=l3(C7`poU zYA}pC$#WMlNfsS7`(><+-FAs!>@w!q#~~xIKE#YLH}wK98#& zUKK{$pf37HeutBJleeH8=I>>-kK_9qtY9$E_t`GH^gp(vXud^H!(S8)Dp)|q%_VR= zzt5C2Dm;VskQ7ZC$}>649LBY zI!slEQLgNgH7&^_5GP<9xm=3qMg51`vt<0ZDxL zEYQxzCOr@N>5opX)Kg_YEK=ldY}2UiY9Yi%M~eh^d#9|^iVnwcc5M7e@witltcI7e z9;YAH+RLxq>AbCuxSosN@lO2%5~Jf}rr-V;Im|CF5u|Cm^ce_!dd2l--q2O4=B5b+ zwR9GpQs9vs`?1~-tGLEhvzY4GJNAB&k4I3VXCk5~Gph7WBfvRiX_3#!+4p=^v40b; zq;+gAJ1g8Rb9fjl@cs#-S0n6sg6q#KMQT-YlDf}et1rV4QFuMgjz8vhNP0c))r}gp z1yPHa?r`B|e~QIyC-TAUsUvQ{aIOI!5{P4pM9>CBzqjarg3j>tjXaK)S8*rHSju1= z5RxDTV(xSG%^24@6P_5^LZTtL+iqz;4Ng1t z|35HKZc)lfVE>k{T<*Sm+3d5oD*`dx15eovPuR_hBWM4`A5mE}*bLM`ISPxKHwLNO z#teB!G(M3%Gi>_r?HdrqaP*ubEo7GHoj-WI4_{^&9w@J>wQ_+sf7}S!F}+2k(t=eW zIg31SD5krJQQemMQR~Y0};zy_(M5f>wbpjkunp z{m6!n+H|6&e<`P(f%s=?ivC?-3!Gt|#$=h_#=3Tvk5+QIw1+E8!{>V0ywB?g6p!N~ z_eT$2r3zUxp9x_3_TJL@ZUkEO*T4hZ-U&WHpmnYs%R7EV-znTR-Lu@JImmSVQuVvq z8Ti-5Kqd>L9I!#ycF_F$*o7M?;ySP>+>qm%sh1ft?o_Ua|4fe;;s_q8xb+YJiKqy& zM+SJqE^(ki?<428aK^eXUR68uyq=WJaQ)5UP<>&DnOir0AUC0;7iF9;MK2o}G9&i` zpBv`NZ085N5H{h2ktiiCCiFPcp|+XmnXIYNThfojAhoOLAdy-0^R zJ@nNb`nvnHxSB~J3q7PqY}xH$H7IJgR(18Lw_tunAoKEASOTEzoduR__u!odC6lCBLS44|JRSC z-P&=V-pFYNeGMgb_3NM(PbQdc)gEQPehN;LY(i}SyAn{}r?0S& z(ezS0DIrADf;ctsX~+Gz2dtC;+DF;2#7|n|3C2t)U8z95(xF1=-wcuGjEIOoF#=ay zkqX~|n|P38TR|2tw@L4i^`cGC>Gw%r9nKhCg5F5ezMjX}-(DH#w}FaXsQq@!_P5Sh zv(+NNJ&XS#l}!7lx9b3oTJ%`TOF6exIK{@k{ZlN^qcwkE;*@F{zC{)6%{=vV?8r_| z-`r(JurJ+f+Iqd8rI$m8rDVib=#XDmB%3R};eH_5Xj@{BCOYk6g)b?f)SWVlUXt!n;!kQ$q5u)b2Ar2#Vx{hT2%*_P?Z%=sI>T=lC2?fZ~;U z6M13(iB+tHmFrv@)PYg2eO3S`+u<%%Sl832`mR3^T{@@?BtpPNa5`ZI($XR5ou9cg z62gJy)9Uc(NnbV7Tngx8yt>|q8X#z#4}j<_xqsHh0b4wiOZNz}^zE-N$*?6G0l=kH z{bbAc1n-r5V=nJiH83B>~{TZt#C0pscXo{w7NR~*1M`O#{h@)oC#&h)FT?F zcHyCsrb7d9KHpq?FJ)WRJDIaBLxnWr$9`?l{uu3}$3YjQpP%jHtN=sK068xF}fcs=#C8A|qDpsFb! zM#m9bwRiit^b;IQ{;UTf#8md&1LknMx-ja!h!8G_Y^x~{76Dvm}6ekw;hxEcnvs4Q^H5wce*)-2SfR~7V zGS!OYugBP^^#=N|#mslSjJ(9#c&v5I&hSu4KlS{+Mc9+?%m-HT!E;0GvD01vNS4IA zk#o~pqkhZlGD-V)z)P$K$Jd5Cc@H(N?Pa{soQvfel~KyXJwDx_G%*OVk42)&0GJ_q z$ht)<~QwV4MpN zY@ul0E(GZrwbf)6sqgXK<-}p7_{-bCs4T*G6p2Pvv_^prp#YWQiHTTmxV!nvA&~`p z5#xRvRlRGP*C^f~yT3=}cB+CX2g;cE{IUiEBJXD}^QY^!`nMC0e!;@|_v<@PgTt@Q z#30Mt$_|?z6=+C|0qK;R`kh$FmUcEU`2-lFyJEY2`u`y$%DtOLsaqe#pr4eQDwLA2 z`Sc@!xN9{d-g#OiB)w_K1v%|CN~%=O?vPuB=Hc}}M1>uV#O1sjufy6^TbPJ+knCnd z48v<%df)TV;#Er(`|YX+oibCRgod%)d~Wonsx!_-q-o8ZMdLt3IslLPS1*M%T2xD^ z1|ZVv81`AG9(9S-RXh9r0*HfGxm%6_%%h}~kVYRIjzFgf*_Wp@<#KrQ?sHb_)-QEP zkcbrv_$y|YF*>-Q!wVM3)uw?=2CEyz4KT5|fmIz38r=puJlUkrB!=HIUCp<6_Zv|I zOlI6gC14!wM5k$!a-H7m?rt&9R{u94k^>#m@yhT}gK&rkV*|(C+cSg5F#%lNI1Oew zP2-gne4!&1R}0g<$92TTWTud6Za3XY*LN0jO0UB!?5!$1E3vsxExf4U_kUxTPtX13 z86Ld_{JS8wE4oDz+n$K!Z7WQqkL0{mb*MAuXkG{ED_|f=^G@<}0^;9+W6OT6>@dhC z7#Ty1ZkWNnR`Wp2W$a@1BIQg3zb|B;$>3=1e_GdRM((|qnx@<4*L#<^vK-|;0J9Rf zkeChkD#=mETvUO~R{W3Wl!Q2K9wS<_ zXKgUq3THlm3&)28Y=`98%?U+IL21qB?DF6HL>2U;n!vIfNpX*1WeIwu`z{ z)RX?=Z+;z$6|EQL(LC{^a$lqNtGKkIp!2W2L1>|)S56C^yUzJT^-%DxqaRbiV3uQ&0%J#PsmON!W%EOgNDmL98 zk;z3^H=8PSy1Lg_X?jHm8Mrcnp&FY_2x>d^-)N%A6%*zouNe3rhA~1b>T(!n>m+y+ z4M*yyFV1|~o?*CSN2VASN@LueX=Zg8xK zc-&XPY40?>KapN-@7VPjljrSQ8jT5d+RyHj$*U{W7B;@gYyn3IKY&zWD)$V-?D5P= z67x%x6P352p~M?cyr?wQXkq}6E@DwMZd4A#X~0yKa1?+%GM0bT%WMoc`pt`X&9Egl zI()fEl5%)8^FbG+ zTrAXRcqq*OZ>$|5u3|~!+28l&PlxE2c+w(_ND#p@;-{Z|M*Ly60OGgrSJ1d`s-&<@ zQRcs)vgr5%%l%&{9Q*X*i_x!#an-E#rdd}Ryfi-#n)*p+?CE$+H~MxJt5_K_ zwto%|2;N%X)>8s99XOUrL3Kk{oec;$|J1(4%vEtXTp&P?6h2{T?LG*Qalh>j7CVYE z(pb6Jpv%11sq%Vz2z{iIXFg$J>%Kq0jz*2?s%~VC8UF_%JFLZEB!wE!_Caqa{0dU) zp?8Mv+|dnAR}9lh9`g13BJB;KMA7*VkHY4?B{Dt)#95toW_N>*S1;4zafeX5%ojxk z5yV8jk91G(=DCqJ@&-~l#~dil{)OUCl@Q>%P#5gLC8tvpVtYAcjH0FkhV{>Eg4CD) z#U?bY7)N1>(44_}=iJDaiI91;K5ugPz$O=5gX`AlKDKz@;m~}TJi9@tO*G8qB_}L% zI}mAL;t?3&Q!!G~9{79DP56bNR!wWjuR=J}*E*t&nKEx{zcxpL4cR@DPoFU{C5Zar zXC>4H_lO|-)5W5z5wSo80VFriv0=nlB#=WWF8iS?B;}7U+rPl^P#8;ieb?>C7xEswS$A>0lq z;m^$e$!~gSVb0!uHbbU4zkCerj<0~-QDXfn)7^bP(||dm&*4Rh5U$J*(ThvjHlHhw-o8Q}(I)gLVrK25Y(w*i za3~h{7QxIl>hr}Xe=GG7p3`X4V+wJ~TqQX54bJAVjLoSi&d=}_^`!O$PilgW{6j1g zk3>iz4&|q}wgqUoyawu!Q3==5rw7z&O<2rd0N|&bYZ_d^ug!V7;EdLMN+@2f=1$(R z=+d^OW}#cW!Tu3Z7DRFHkK`)`P|%Xs2^9Asuqku)@9jItU`JhdiO8eC`FM7DwxkWj zn7y-TNUT+BajU+hz4(verxThtOOMyK_^f-TlcTWWMehRTtoh$G8Xy3g`#kjiC0o6^roiF=mhD$L~N@RLJ>^|-5P!YTg0Y_9mXy<-uP zR(UWOayLugd=KIuzdWYw8ZtDk;>^E%_Ja_k0|8=paMeFbBx9*OmLA}(IC&RHoKrbL zk3HDN;zvPygz?zW0mjEFMbW@xN=RZUi$x?8#|~><_sl3Blso{@o7{69fj$s5di^&Gz$*n>lMR?~@C3M$U$7@b75Q)L1L zSElI?G<@}g;CRGJ<7(PzDWxMIcZ?0hYL>5$CE-o=!m$eGEZEU@*Y^;tU7G;#s6hi9 zQ32pwL@5P(u7d)T71QZK;WHI8#lV(F#566y=aF-3$onUcimnk^DAp)CYK(w2AAY%9 z>4*;-OP2}@aFHniPB$eab@q34EAqgf?}6w{LK%CJln@oec_-s%qKN&r0>kn7d+;}9 zwiDLQSS=Zp zYEG?ol3i@qP~D0&AID-c7oJOtFZ4nBeH!625*2Jx?_5}7lJIiq8Sp-Rb<_uWR>$S5 z6lmGDwk=wcOzcqbu}UY)pr+WM?!R^(|KjGDxIokUMjW(|;D#s7Du~_a^Y((pE^i6n z64r{mbw&4@j)M{*DSw(@UqA2_g9B%}J0&tg6q7^g`U_dE__&{(d4L;85@6RcBhyx8 zBksa9%$FP6%mJfbAeOHA2~mGjFu^AIzW;#5dG9wUs@*I7yIdh4o?+*>2dExt2wEa2G_`gSPrf7 zvMtCnF{tIod<2Y66IZn(K0A0mn6s=^{+bt;n;y(5FJfac7=Bqhp%>^Oby$c)o2BW) zO!az7)VX6GqNqY;$tD~!yE(Z z89wR{%wdFDSKI%UvR`_3;g;H>{#69)lqiFU|zUsv6(a?Vx3e za(1@XcCY#VVOn-MWnz!+u3aH-6S5fui4D|LzHsJ{{B3xdn2&YTNahmjp)oGbY6P z9%$87JRga!=qHiCis#JZz(0OZpuse3EMf3{N9{+P13ay*9Wm)qGJ+UyoqMqX38{8P z3dJ&+@VoL^Teg@`GmaV07xRp&?OsGssn1*;-EZ~qu$EvNHCo6Ur12#kxF4fAKM*bl z-r0iDBgC{8T3_nneka?aeUp;oWbzRwzlv*IPSW@p{3<+y-_zfa`VTZ2tUd7-cG#qu zYR(e(@CUI#FGnp~I;1bi9p{miPm7u_O6Z$4bedgW$D%de4~UAJXgZTZvg-bo;>kL-UNBqnMRxh!le}JRFGEUG(!K zcH>DMF_+Er>2^sBABE1nh2$pqs9)dpMsW8X$8^VF30LlL@OpjxS_0=rS%7%G94-bA zUyNm9dL|r!N}yxnv2EWmXOl?utm_Y5ddwB_Zd_LD;Y{{0H6Cp7`TCXPQh$I3Q8r_} zx>CL;zmB0$Pb>e>efybXX)dE!tNtPjqt^_O8*?O!SI3@eHIpGDDS(YO1g^lf$6svCr!z?3w7KotlC)bQW_yNyAT^PT$#b^ z{kR`g(XFkE$XZ5QZFLbpa_!yWuNSv59h_%o1BZM}-dH4(EosMjvXO;TA zXXp3^fqTdXR|h+MTX)nJoDP>w^o<*0^dJm11Fq8xbUrlqh2rNW0PNq?iGw)0Tb;Wj zg%Lg92d)^}6By!a^(+pxabz6Dj-B)r1(B%l;H`L8y(7)%b7l_g#>)WsYQvI(Z1RQd zvX^v#pUn<-2P-MKrzUHGc>P-2Pn+0Ayk0Nv-X?+1`>(nC4&49tVOyTAi>96Pp9d~# zHr8oAkBED%2TQ$9b|1u<_+ zHivmMFH3LWu$v>e9(JXBEfsQqzV!mWrNzf7=k<5AuDXT~g6c$w?XZ*h?T36rc4N+f zNt_8ViAzMtchwpGP|1Rf6#nixVo0{bL`NG8%D~VIM4(N!m2jgR&JM`V*6u2ZMs@k* z@rZG7$+s(5;H!B|ek#h-d`-1nb%r-pAT4q*QAgn31ZdK2$tA)6z|84B{q_@@)bJZYK=`kzN4DNBxyuB*{zUw4&OY3*JE%Ew=B&WYSka0pV_W}%@ZSnUdA?GkJAicRiX^QggGVPqr6&OK&~oP zZ?~KeUZ%QbkULPeqY&piIC)i-vGoOoZ$ECGmrCJ1>%fvhADlr6Hoh|RlJ7=7nX5aT z*p1N_n1_LL;m5SNf6(Gl!^d^c81wXuFf-sX*71y3Za#52*|N=x=yZ>kN9fPr#utOb zZsp7MMyDEZSMR}PnB(@N;bNtDrNWl+q^)biSyjru*ay#Rnf34f34L_|=_&yVyR&oT z=;{aG&e9POlLVP6FV6H_wY1x^IkDa=Z?sIpi}nrLEbEGYA9A)Tx`fAa4gv0JZQ0u5F<+eGQ<7A_cbLv2>gcysPf#n5w97e$}DVIpC&v zV%(|~TiHgWNNP&&4S!-DBDh8uJm}MBk58J^@_)2EwoP|bI(akRJez4h0nsootF2&V+IINYK_cyk?2^cm-fXH#_w8& z)s=FtcZfmH%mi@H1H%hG&^-B*!{z+tOrg)~YNv#dUEWlYPtz%<@_N3uw{F%M zg%mqfRVP11BLW&COc~#iE%6O;3nZeAZOEljeDZxf2Yos3=dXvVTB2&nI@gC>CkAu5 zf1Z8=JWRNqbmN5d4$-oB$a!wT>a%e9kp0jCG=bDEz4V^3NpO_l53mB3(PAfJKQTbn z?D;I)w8^HwIGMu!McT%cD_`;0MBl3+``!TM9$22*#&~X6GWr09CAQqtXRKl-Msd(7 zyck7Qm$L8K7a0H`!M(x>}xYp+C08vQV}Vs4But%)yoIR6NAIkia#ChT=n zDWh$U4fqlYz@$toEn;67eIQ|J5f)+*32q##8&h(fDrU-K$d+ zHgCy)+%C2~LipeVY?};kYvNTKPss$lZ}|^>&NN;uOz=#aHdHD~Bf=Jy^8sPAu}Z6s z!L5=nLiMMCS<~0xCmXnD%lactv@M#3s-;&63Xr5r#9U)f$FrHCO|aIf;DOKVGttB) z4x2B9%_WcBMi14gX72(Nl-Bd4an+FJL;k$swPDYfb#N*TDoT194+Ih}%OTFT{q882W`k9~I zvp<>lgQrN={mLueWtWeuM8t+$f}_G#|IvC~Nk&{&AP|U_8MpnxU=KJjNKI3Td3UPA zQRCphVEYZfrd#%z?>|&B#&gq41m)fEQt=z?=-!ds2{&=GIH^296v=CZ@GEy%4`2d+ z8~#QauLRMx7amPiIBhoLDoF>yL1Vxz;tQ71yy>kc{XX8s(dXrZ*m%Y)PoI1GV=J`e z3Qj~{cxs~`QCUEVpZZ%Q7prm{c`A{kr^?QHnGBQMdS|;RP5n^R=mP9>?c*FVh&Sl$ zlz&+W-k5nj{W)^;=`T)BvB$=`vyn-DFgwe&zwJ@`F9w5Q?n07mF^I0Mp}S*s)!TIP zlT)kjLI0ShzbmBvc1>xFN4#Q|S^VDU;I`TRq2=SJLM_~$u6`tQL1VaTT|dv`f3GYp z5Nr92DX~|?WLZ}GfTgeYfoIlq*K!M6g5@NAMkU0N){zsy^2-2=z!dKclzVtMQ0scp%NQ)u@;F5RC$`E%#m^fZ&-A?uh=rf^Ua zOY4Nd0Cg1q){U*LP7fiDLULED8;~e7;m8Im%NC zE0uwUWHjJK4y?!cqMbfEf@+P6OCGNzZ-Phej$nU3c#P<%?#f$E5_%SgdaZCzAY# zH;Jyg`LMc;E{p%6S(!sha0VaciVIv$r0K?qst6PGrh{s60Gm4r)?T%;O3tA}VZ+-f zxsyle(EGE10E7as`8$Z}XQ)DqE+*a-g0U?&1>p4SDE;Q8rC`q!X02rNte~AL>$oFS zO$h=HmRr+Z;pJMkQ#Xi6HPQP9P8;DG&D!LXm~f=oP}Nb$y+;m6WEJJBz-#~>YxpNi zN>K~b5*o}!{72_+ZhKu7mi7-)ZUzn}$O)R9f28S5hSo!S$bVjY~cV=am7`pX0z11=k%)wimb{|%h?Ig=cw%(Cc5=XOYE30~mGvI{|HB4&_cOm3-f7(S;ff=4YlATTaQ8pisZT|yTP}*;Oeg?R+>Us3 zo0G_=qCH`*#7d)tBw47)h%}BGvvbq4>TErf=gHmUHlKHvK`e$0pI@jx3+%h}n`J73 zPdj12q=pjS=X`T+<1lMLjC1lYnp*|F?C7RVTYqU&(;UxfUmR#qn^gE!XYh$ttH2dx zao~cC4EQ$%aNd1pW9=p0Sh1}6)yuu0$y~<<$0w^XtibN!AKBZV0zk470-N1c)}iH1 zN2VHXr`wj{rt(Vu34m_c89yx=yBG7z%x*|OIoupnSU}3DKkf;i)+)2z=l=|(334>o zo^pQT5KM}L+774X=Y%%OpHURLEdqyp=d4wHa!G@t z3LSLj@m)ZuXR^|Px+I@G!oNvhvChb0uP#w?I+?q|!%k;JIQ+;TMY6QpU^=1URN3-- zJ9Jw>q*6V5nf0C@@YXMYnzjekYa3<>YtJx*L=cHRbrUypVm>9y+4WCf8TOCA${nFe zop}#CGAM2L@NgX3%Vn>Q<*p?t|Apg&R~Oz)PdC@;hW1`iX-x}s2;q0qRGN3rx_`Ce zLZk35Rh)}?=bk|qR>@tA!s6?nmvFKOJL!;?zb-LA%J@s~;5gmv+2Zt&k)tGjU2rsfLW-JEqrK*?TyWy?2*d zgDSBczi$(04aaO~3Vb#mG;6iDC>Kb(3?>lPTiy^%zDfw=oS~xNmIjtLEg8l01WA45 z=obplp;@M<(77WA($>4e&v8@i7Lvc}5ZQA)Zo*UH5e@-+1=?7wjBi#r@y%@|nl|gE zazCJ{3eYw1xf#ZHA9O?jy!pR><%#HfZa^fi|DO{R@MUY&B-QtPt6MKk)1*Sv!esX# z`zgfDbtLxDMih#ekf~Ijfh@rmK_Sni`e^-M&063*VoSc$KL)hsUHD%4&9OUI+`WZ= zmPw-{;Pwr|Rk{K|s=(deZTI_P#jsmsDB z^Nf5|hpJ+rpz5OX?7zoShRDbE;+xU#Lbs8^_NPl|T;8p(kKOr|vi}*;?DY?Z$ThYQ ztbW-xWhlX89Vo*STM(5oJ4K;XhtrmJjD-K*Ro(`)TGSba>^o0EI6z!kXrY-34m-ct zLdoJ27`DL-8^-?JN)cLT_=4B|m3z<6;UeS4r@^vhc6Tb?-;@7tMG(ibl-X3(x#^e> z3asj8yza7HMNaXp{2heZ`{mW2;1lDXb9%a4_ne;Y^=Jv>1g1ss48IRJ|M!yRVs3{@ zpb4vz(aUlVdA=!@F9t#MJV%jc(Ev^@^H#0s{8!Zk!sRs2q3z-?=YDD#!f^b3=pxuM z^5ovM@}5*&Dks1QXo?P??o4C{6!{C5&ycP5U{&P-po|5$?9;F6R%xf;%&DQ z9SP-Xka}^@YavZr_WS^CV$GI2`Dn7XpYr#%?Iio06CnwQYc97&p*0aVG zT1s_ev!t%)g){TQM6N(P-RnVw+4U@dLMSdOYrkqiviG`ND{4A`NxZS0BmwHq1d+vM z3BIAD8t^9aE>VrGow-kV99SKT74e!d!GU{0P}wl-DX(y!fE1%7gh_TF|HJWybya!x z+aKVWZQ>IF72EWM)5?9;lF!fla7;=*7}U#IVTQ$yr=yMxT>ct=oRubLL z*Xk*=N{W9U-i_909bS8v$izsk5F7LR<9vm#zH#g(&{(zF?D+oM;XpIuYF|EX5poh- zVy0?~&orfP1QC?@NPzUeK<1K4o`^^2FO256+@0~X!H-dY{HcGYEfHeS&6dr6e+9YS z{x1f(|M42VIBtnCOVZ;@OE%=w_dCx}rO*mTfyc>dfDYZqalo&?-))My(~NT^7?Dw> ze<8|%j5m9S3cEl%d^zQ;N6E@ygyNOVTSP**G7wcqPXT%4M>N(3bZXVHo-1Ani4%`{ zZV`s$`XjeDZy{;%Q3c{~TVa-$l7K>QuenI-@~%`xPhVk=yS7)=lmd{uSm&)ia?GE0 zx>H=-*&lIr=)|uLjp8$(r1W}nm!Wv*`)m=GmnWy`F%0igKD_+|=wH#0{p3NHIHeaF zQswj3&tDRijoyM=*ufvGgO*l)sUO@Mx~}XtKffmdsiPcGrIiybK@sxWeT`QO-RX2D zDKe}Qkzo;GrA1^X6+Fgv;qH8}pmZluEPaX?cgaZ=x%9s!^yM%@y4=vv>0$ujlp<=J6t#~t0?_xR{BDLS zL|6}}&NGQNd&nU)z88IdhLL}>Z4sP!_CRr9e=HOjcOa&wt|ETI9^__;w;Ot5t<9gq zFwyfo_+W_pYp;$x8b#Bs>{D8*Ds55J2x?EkNeTt$XG?s>8~DEr-kVG zlB&4P`-nfYo{`I}(z5w}LUcoOI~_I^`P^BG4A0iK08X8I0|{H2Z&hEeAu;Sa|K)(6 z%b_>L@JFcLX>&uKRc!0*s6z13pi@_ww5GM2U*M%#XM><5B4_49aHPUdPcgHEn=63L zFH6K+Wk(<)P6%@J3 zvCO{W;Gc{&`hfSnOy6-qV4x9u_(}(nR!Y^Q9h%o~mwlJ_vhDMV6)b`&q&BoiTY3JK zf(O#?S*w4Z$gVo94h`$(NYqn_4n0zzgmr%)W0ijrQ_nedmD|u#Y=Gq>ku1Obra-ie zl@9vkSzp}!rFGXM;;Mr3UX%1tilBt{>^DWg&4M%Bf8WwkUOuZ zzHdeIQ>zbvZf*CGyQIT%n09tH-_@^e)}Hv^+_+<}F@!gyLuM#tK+@<%%kJ1OxA!(m zM7ae~RtUBJ9tjJ(=66uc=*P75VPwb`a*aI&W}J#vD_YV_{5$gg>ZrPRzkHXBR-8qT zW-SRk2$;Pc_e&})#0bgw3pA$e#=?`4nd}&=Ao%J;bEpXN>{R+&ArZAg1ugMj_g=rZ zScVpV4fTdMM@i##9k2ijW+p%JbA5itvXYUz+v!-LZ=ex$xA}!Ha-dz}(*wNqv!M~j z!ja3h?!uQN9h%1zqPZBalv!iH9|5$rL>h>QyEcU9a$;AzcVMFr5p&QuX@i4En|zf3 zN-wn5ZK$Hxm~Ij?QMsO4w%I~(u`PLO$cG3+H8}NMp!PlPmy$&;HoeU8Qrf=eOL$kl$nm7dIT>wPPM(*~o;zF< zFewRse);B%Z@(Jdf0PBL86?hSe*l$b1@TFKv&-)EdfP}BXbUcMt%XudfpMXndU(yP z1b;K^X7saA#12DF(A3#P)eOG`1}7`EE2outv~JO82eJ=zKr2PWf#9}6&Q&s0oTSG;YYXe`R4W?2pPBhHXZYG>hu+Irh< zB~qQ$WD)}>$$~G!Zbmal@Bhs4WxV2Ez1M84$`Mj{a*-CPbAMk2q+_Ji;4F=19u88q z&0I-TKa#CLkL-FxlNBf{hhZvTT!>pk4JC7=u z9A#fSg|3L+!f@Q|ivZ>9>G4xISY&qPoZZ{q5XQQ?0B|!WwCv;{jKzW7c*?MdCptw) zIl=68ECTamFN3%&ZUmvrcc9(efVp*Qh5I`+@9=kMeoWfC(}pGb9Mop|V|iY1cuXib zl-J-tsRcC6^$auzZmhrveE2)eBCLJaVV9+Y87B;ZIiq8-8P;`y5#ibxb%_%#B#it*o@ zQ_?9yduEHR3B2$-X~_hRWF=VVrE5Ibo^bzM_e}+macutMFRka=oblEONk@oi^nVD%CeYpMK-~gJq_*e(dLY?c{2Rb#|F5e`ixPJPd7s1LYkJ= z5HBK8E<;Orvk;(x33WB;Ptf-c9mWRXQ|s84*D}UM0@kbFEyc)yTFJr+_~saw`a-tB zk3G(ocCXM5CWotf((jT|VcTf3uM(5dv4xahNqoM0BYy52Q6cwMeh{+wQ)I~k<`AK3 z*FOiJhPG=m>p;0U{NS`qZduIU=8| zBM$p}^u#r|uzg4mcudvo-3G(eDnc=ZhLKrv$CzQurIOKtw@{CX*A)f|JV?q|bUX{x z3+^Jbe)Vlcj_lAct+z9!{RjRaYV0AA(Va6DR@p)=@Rg93fhZ~;q?`sDyiR!*z3{9M z&7~@g56qfmjT`{Y5zzDk5sJ00NpGL{$kz(e|To0<`!4y`d4O8Nb1@HK%nQz^tI8ad=a-Y8# z{gG#2UV;$Cm)9P<`5^G%{CW2&uKv@ZT$yw5RhMD)Be`{><=+Q(Sz%cz z|3c^60Cav!&=N>u%e~4W@f{E^=p*cauKjKRD~My;A&JDyxhH7zlK1i$--WcQl@ z=M-m}KU=7wIoFA-OEUR`gp*9ykP&)b@2JZ#>Ca8xP5f{^JR_N$*#x?UgoE67+)(u0sz_ z8_lxztzl|UqLySeRbJ;dkOIkiWKh;oI#2E7_7pnvV}8$_`1QSO@%z)x!dP!+cdo9M za>zl_Tp!}}K+!}C?QA`e3t7UXTiVLkrmHJXeQd2E7Qsnr$ChiSbD53=^TAy08Zo?AG=;FVYwYOFQc}x3BvT+%cw@vEr z&sJZn#KA`N9d(jraze+)URyRluwr&Kt)ORYJm)yXYgydj&TsQ^oSONKQa{#Cfx4$a zOd>59_FhtN@Ed3A2%%hrkk6LLt{sBt(wZZ@WBx+%Bdh-dov2E_|L=7EomfRA(7^~@pWc`PCh-TjwK z#L93>i4~uKY<>IT*%=OVnp<#0f!dcJsdbnv78kq(Y52yQ7|T`FnBxBRKuUFIcAvP+31K3%-GAtzghDwrR2vmO|~ zSr1u!fD0Jt-PoJvmlL#Bh@G2tNn~#^CF&m7`K^hC>tbaLL{8zs_W7?wTM|m1<)av) zNX5Gc0`R6^&#=epR2nQS^IHKYSQWo@lKGRdx+CYH1xjq`K0eZMsG`OFbWzOzP%w~S-B2zCbJvT=%1hf8>dBqbx;XwT=CsmU(vJDnsRN- zY;<$YWG1!@TjV&-ZdYvB-wg5G@bwfLA9G;NG95cG72NTk3^G|~VMm&3C!4}PW@^mN zu*kmgXla6Y`rPg$IkZ{c9%X8HI#CzzqibN}K5ri|n%4J8ERc8RcshQYrLcCxC`$=D z5$fTdy=i*9v&Lrb{<0;E7;m;1BeUtvVm6ORv=gHCg^H?z_BylgL!*LE*RZAIA~E=m zx>S~@T)NF?yCmVUX}I_nF`?PT8RO%%88CVo7T5F(vGqWJ5jh+th+RC2UlP=*6MrQe zCNIZ$!gz@8U+x8Vb(b!b^bYjHQ!SMV2=0Y#t|;Wmy#qW9ix|nB|L6hn7*W@zP#Ku% zV1JiTJ}glpI#$R6TNU9u+gKTsI9!^WaK;qAhcnf?iMU*gNl-f8d|!bboBJ5Ae(N+G z#gOdH4$BxK_F#;Q>-^E+VfWl^PP_r*r(tt6 z3vAO7w0Y7a1unF;)R_XoNHJ36E*X_C%~&yV^gqaXn(nyn8sM$b!;#A~CPsUOc@tf} zt4a3I6J_%j$usoKSshf`C3Q6xaf2c4bp?{eFN1Lv*N&wu>9<6tZ>u)5Q^L87fy!^m%Kl6>l#w9KS1zpc^n=Gqn zlysBG>G<2zjvZ*w!E@G^eqtIaRm3%0Z9C3GCo>aF&0emj-wq6Du?M+J^S|d(hAP|i zo|g4{vmHLZCWJKP*=&ELLl@z<#!&ZGh3_aYM!>h zW}O^m7TRixI-3VJEPN7^VH6bHz&b27OAJoZJuYk%opzv8E4U64>zbK9%1tb}Utf(d zl0{o;ub7SWAS$_}s(-7T&`6I~1zzvr^EU5$+<>-P;>Y@{nXOMA9~XE_WanyPhpVe4 zgqs>kTBcZ~Q_YUyD0P7c{W?-(RdjWqi0KnPu)#woz2W_z+I`! zlVy96HG3uOS&c>O8&L=;Z`COpJMXiW(ei$TLlU9~*TV`YeoYiYeu0#T@dC|Np$oUE y%r89RsJ-y+q1#1{VAQ3Dm;V1h{J$OtRLdSqZ(EJ6>gfgGPhCY@xmeLE tuple[float, float]: + """Projiziert einen 3D-Punkt perspektivisch auf eine 2D-Ebene.""" + x, y, z = point + depth = z + camera_distance + if depth == 0: + raise ValueError("z + camera_distance darf nicht 0 sein.") + x_2d = x * focal_length / depth * scale + y_2d = y * focal_length / depth * scale + return (x_2d, y_2d) + diff --git a/test/test_matrixmania/test_projection.py b/test/test_matrixmania/test_projection.py index 1f9f534..4d6ec95 100644 --- a/test/test_matrixmania/test_projection.py +++ b/test/test_matrixmania/test_projection.py @@ -1,6 +1,6 @@ import pytest -from matrixmania.compute import project_ortho +from matrixmania.compute import project_ortho, project_perspective def test_project_ortho_default(): @@ -9,7 +9,35 @@ def test_project_ortho_default(): assert project_ortho(point) == (1.0, 2.0) -def test_project_ortho_scaled(): +def test_project_perspective_default(): + """Test project_perspective with default scale and focal_length=1""" + # Arrange + point = (1.0, 2.0, 3.0) + # Act + result = project_perspective(point) + # depth = z + camera_distance = 3 + 4 = 7 + # Expected x = 1 * 1 / 7 * 1 = 1/7 + # Expected y = 2 * 1 / 7 * 1 = 2/7 + expected = (1/7, 2/7) + # Assert + assert result == pytest.approx(expected) + + +def test_project_perspective_scaled(): + """Test project_perspective with scale=100 and focal_length=2""" + # Arrange + point = (1.0, 2.0, 3.0) + scale = 100 + focal_length = 2 + # Act + result = project_perspective(point, focal_length=focal_length, scale=scale) + # depth = 3 + 4 = 7 + # Expected x = 1 * 2 / 7 * 100 = 200/7 + # Expected y = 2 * 2 / 7 * 100 = 400/7 + expected = (200/7, 400/7) + # Assert + assert result == pytest.approx(expected) + """Projektionsfunktion mit Skalierung""" point = (1.0, 2.0, 3.0) assert project_ortho(point, scale=100) == (100.0, 200.0)