From 59197cf20a8652806090a32c73a2e221185b2264 Mon Sep 17 00:00:00 2001 From: shumeau Date: Mon, 4 Nov 2024 13:43:55 +0100 Subject: [PATCH] changing due date for lab5b --- TP05/tp5b.pdf | Bin 128092 -> 146057 bytes docs/html/.buildinfo | 2 +- docs/html/_modules/Lib/Allocator.html | 12 ++--- docs/html/_modules/Lib/CFG.html | 64 +++++++++++------------ docs/html/_modules/Lib/Dominators.html | 10 ++-- docs/html/_modules/Lib/FunctionData.html | 26 ++++----- docs/html/_modules/Lib/Graphes.html | 52 +++++++++--------- docs/html/_modules/Lib/LinearCode.html | 20 +++---- docs/html/_modules/Lib/Operands.html | 42 +++++++-------- docs/html/_modules/Lib/PhiNode.html | 12 ++--- docs/html/_modules/Lib/RiscV.html | 10 ++-- docs/html/_modules/Lib/Statement.html | 30 +++++------ docs/html/_modules/Lib/Terminator.html | 12 ++--- docs/html/api/Lib.Allocator.html | 2 +- docs/html/api/Lib.CFG.html | 2 +- docs/html/api/Lib.Dominators.html | 2 +- docs/html/api/Lib.Errors.html | 2 +- docs/html/api/Lib.FunctionData.html | 2 +- docs/html/api/Lib.Graphes.html | 2 +- docs/html/api/Lib.LinearCode.html | 2 +- docs/html/api/Lib.Operands.html | 2 +- docs/html/api/Lib.PhiNode.html | 2 +- docs/html/api/Lib.RiscV.html | 2 +- docs/html/api/Lib.Statement.html | 2 +- docs/html/api/Lib.Terminator.html | 2 +- docs/html/api/Lib.html | 2 +- docs/html/api/modules.html | 2 +- docs/html/index.html | 2 +- 28 files changed, 161 insertions(+), 161 deletions(-) diff --git a/TP05/tp5b.pdf b/TP05/tp5b.pdf index 2023fc1d49bc92e860231048c7a417b84f15b45f..132656003fa99f629e1377629365a4398b9da0bf 100644 GIT binary patch delta 58588 zcmV)AK*Yb?=m&}Q2#_QKH8Yo?;{hp?@InQDMiPGauizsESe!n18pwm4*jWd5ob}9N zv9JS!5?dp#DM~9+o+yj`?^{Q+NlF~~h~vD7%|5HDtG+rY;oW+|`|*J|dH&~tgs1SN zmnbjMNf0UNEjJI|{3^Tx`hW67ptIDwqgfkIW=SBj7}}M0{owDgj|f7M!fzBt-X1r9 z9d^9_@xhau2UpMH)Ke-*MJTcTYfILxUgyAP7?osEG+RZ z>?CNe?dr1b?k@FL@KC}x_0kUB((Pw-?rt57SrFbFWfw)4d3;<|c>I=?!LcSY-{AHo z4mLEj@3=(LEtk9fEb+HEr+`j>X2kCCRtSai$SeDcDmaWEb3^&IM1%S)%+>5d8*sCe<4#jTC``9>M3c#aum8 znMd}@b99g?H)TCjz+by-9$j6T_E4B6Fm*GZ%|Qay5eK(*u-Z?a6$Zk8?ekVd;^$W& zpDgj8B6%+#KL`F^aL+FYR~mt-lJ^@ae3}BNM%{i7nbn0^Z7u64$C1s4VHPB* z7bPJWsJdjci4GDSotbQZb{L63DA-EEjuzGwsYN(Pk|ngHYo!cOpe6)j(vLEv&YSB< z2U6;>5_J1WIR|Z+TzMjY2_RQRP7(pENrnG%ra|jEH6WA24bIFH%@Cln>CBR!Xc@+t zFG4AGM*%5WFmb)}6sQ32G?z(`0#8KC4+u1L4xPvp+`?X=U^Kvvvf&Qv1v7F2Vd@{Z z2W&|HuCvz)A)Y61wgq*qj&?T!7HF)<>a8yT5!{vCfoQlDgXoEWiYsu?Nzw`M<`)rN zU2pPz`xy5CX@W;-xBFm+>V2G2ZIJ~^=w27kj{rXys?iBA0CQnKQ=6u_zJ7fF?pYjU zVSH)xc^HEG0ApZ9iidod{~SzBMqB1p`MY_!#TP!h!9$a2mK0ngI7WLac>spP34}-k zE#!!~r@xi$MW&K}41$M&&Yo*EYJPwxjI85dvrPD;7#duD#ekj{NA3XUG({koX{z1* z{+wIMkFR%vgg6PLqtUvDN%lqPBn6v3uV0#t-8{K>^E3`3>4;*(%lyhhJ-vj?6=J3H zo$yYMX16QJNApZT+!#DMzqDqvo00Kn=oqW4SkF~^3h5rh+THMf~F;j!xV07e&j{LY&8vcEZs^o-V&vrzc>BM zx+MHKb=;eO90k53sL?|AP>UOB5&HSkopGSZ2b~%qHE4kU&sj{dmlhmc>>;eBU6v4{ zRi-tQIwwFivrcYKdn@ELC$r*uywg&KW0)oC3h2AMq3x?8YjFzQWzgO`JDED8OeQB{bD-%y;CA81f1 zq6|}ol60LE&uk3Id`ez23bbQ?0^FypKMgYNaM#KT-7%m{!!4&=&?XW%j;>j=pp$GA zLlTGzt)R#(q_stOqV7-z)R`?y7A4U;O?Mzqpd1O+(V4MKLx|+!DKpkO>;m6DW8zR! zhXg!-__PR*&F#+J=%#D@juJ0;{4PJvzy?u?V&#$p9AU|59i5>A_92dyfsKRbu}J)8 zS8|xnSVoZ^lTcT7(cRiuvPcV;AXlegMpjPqF&cc+DBS))N3er}8(h-!C(k>^$Hs!4NFbq_m zEy;;M4$~NNDNqcPm@K->U0N#-rO(t9l!~ZK`~^)dtHK_$?iX=d2jHa3KBr^7vkXre zGHK|;E-|dgaj4kg=tQdb@H`VkM8wye73Iji82+t}!$g$#)^>xUpnXy4o2H|nFnu0> zYV*}wL%C@<+T=9DGryVTp{4wbafa~;`G=e)1K&U5{u!`SGRYLQcE*BRcff^B4rwcX z%L|f#&6KZk2*DGF48&67EPF_7v&mhd1UVlm1c*Eq-PsGX%rSdst<45ntH2kmHbr&W+tS2pXxo`%~c#zWxbTh@|6)PbXjkEbhk4hB9DxNRM~ zRH-1rvpZ6020622e?}o6P}3ZLc(FacwNJaA0$VgO|9u~egRj``c@@EAb({(q+4wmH zp2$Z<5T-6#+2rpjxI^Csuxy%k4zdl|)xCW6!_)7UoM{y1*3@(Gk5i5b!u(XZWM*JX zeJ!9qheC23jm5}@9YovX-??r=UZ+KRs+)>+^F?=MT+hUNW_T7@aU`REJT`rC&h{6q zz|T>pb!)oHa9=g-V=(q6*1&h`&(Y*G9y&mL?K6jDT(0ck zU}=m!Xtg$tvaj*Z-9(wy8s9Csp0=uarb(dY-9mb)5gLIU3 z8b4#d*w$uBn<<8b`?bV>PbhR6XemFr{4v&CAp#xCzHo?DoGyk;2I*5|)wr=Q?Hwjx z5rY6n(aV9e!YLF|MM;;_48wGn&%iK+ZtygyR+KT(8VaUq&0$z7do^8T|2GQQ%k0iVjDP3F*EBBzD6qyi*H(G=oWHl%FYUY_turag>r@3kZd zcx2|P=#@31dn6@)1D$4lh3Q@$M{s8mVzir+UZ@e@lZwtE@H~TXCp;-)-*m|Xh~_LY zCX?zIzI8;E#Po*8cMO!By_$m70Y=YLIGk>$R)^yJ?17OM_!H=Xq^r{X)M!9NKn zrVc_TfG7^qzJ}02N6rsaTPCH<7nQYYml`7)5h~Zr1#?G#f$=S0MQw?$27+Q`isK+l zPZF#}PB9)=*2sDb_6rABcq%JfifVbpR!WydM#FtMKMF%hRyouOEb`AI2#4HF3hnn{ zjg3-EuJkD9v9Z0_9%@UDyDeC}sJ6@Zb_$op6!6(cSk%uRb~C)qoK+2ok^bMP8sxrh zA$tu!tVxfryaj?r2QR7*#CtK``>uVeBz|9bTwf8;EMJPA{Xa2b(i(KynTnkWc`_qd3QvOkueR%q}fpZ;!&i-5aK$ihu z@caIM31-%Bg^tQ)+q~P>?{@aH$0=FoyK#EeC4PSakIdm*b~o^4hB0wpS)uy=wlcD{ZaUZEqE)C|eH-FzK0Y)!>-Xnx;-{_X>FMx3|4X%(EA@VG`uQ=HG z{!_qb>aIQqfc^mXjDib`$EIq&qQzc@vP+)uqv61UQ98IDFvR?^eO%Q^zh}cwXmtb_9n{H_&@2hfB0oteEDCw<3H7Z zDGwr<1R^8*7wtn|^5snKN61MzRj#?1Q`kQ+!`RE2)clEpazCy<9ymMXf97E(+kY91 zU^o2su;>acyuwzCUU%Om3M$yvHd!_9n;(9^(6J1C3Vp6%PJAk${{s*21*QsRZe(+G za%Ev{3T19&Z(?c+HZveFAa7!73OqcMyFv*BGB`6emp_jID1W_LTXUO87Jm1y&}Lqs z%4*ZybOYJSgYETXJ>?{`miJakN`)k3vk{;X$cZQA|Gww+1pz{`;$-GwVrWjEK9}#@ zTH_6F2j1ZI(b>(>$N9R~jjPdHbX|GIdK z3l}5&7ye;PIDe;aPp@1VIsYA9)+_k=Z~Eo(?ajsY&lk9I?ZQ@kczb@KKfb;`g|%N@ z%ACI=k1P1foYOP>>N^5y)!DwIPJ9Ezr`IlL&W&M?EJw%qB7u#N?aycM^`(BizIc5( z0!fU7S66Q2ygNU20}qI)bNTMA`|;+Nql=rP-;OAl$A248Weq(rNRN256l(0a;^I|YM`p1!H%nMYW2t%Nj9*;Qu^%xg?u(}=W`gCoa!XofV zB$@I_=)t2u2q+~|2T^2e?v988(HBR%gTCJy5TI2^E*eBU>p9=SVqP5qCG$0WR z2Sdh5M1P2Q2Z+YEL<4m9*saHj@BVqyJ>dP5B7Agr`}qKdw2vb!VEPCf=_B-slnh9e zr0+FJ3(W9Dg(djfWxD0BN4@Z@NE!?ypNJqZ=6{p=%yiy5qvMs)?vK7RD)CgL1PueLuJUa!sQfX6n0;VyO0!2;SK|5jqg+30ah`*=I~mq zbo~gThQN$5!h_IOkPqCWhN`I+phwg+d4Dm3lnpvTC+S0nc!T;VAxf=Nmc+SvZ0PDM zEfz>;3~>*-$4X?i8$VCf_r&bZ6J?RbLq}22GjNI_3JMnYCBdxMg!XJbh0q&9067yE z+S7*~&3#5Fe@gL)h^Vf=2sSt!Bn}9Jr0V>;V%F0&urLG_xm8R_ z!bLi*%5jm8mv?E2(PKg1wTVXnHFj^d*12IY^tneUG$XBeO#lg0LvrQPNMTlL)4(bE z#r~~~5={Ea8gXf;jStla)DA!+oqta$n&q~+)zVvFg-#kz7KvdW+rOAYgq6g4gh^%v z=!p_3iQM#AJEJ6!K^-O9`P7+Nci5QWk?&l(FpgFF)H-xP8m0C^2f@sUJ6FNKY8cLl zzEoj=w6_YD)N|s@Y??rp@RT7E6DENmJY;R}pqI-e(KB3A`xaWbPiRm(e1Emhdvu3{ z=hb-15(7O%5Ygvzh*A-@kJp(4RHs1zYTp){WS|&i_(j$fOYM4aYaM%=l=7fy(rmd% zvLr_ew4hqcdz7MqPdqBE$Tz=w;^fK{mpm!U(dd*c@$I261SE<4dN0v7zjSGcNJ5c& zM4j3=SRi~oC_O_O2G*h50)K*h@+qTBB0{lcbz?P~InpWx$m84Z2#3=6BM2Z`Y1<(& z(kt8vrGf(2awB-P!Lka*osa?MA+IHC6zv`@I3E3UggHnzgwv)I3SJ6wQjW>Mt>Ub@Ku8oQzIJLl^8Qmv27SIeVu z9JU)?t=UiRPzZ<5ed6h%JkKE zMV&T$m#KNFGMUZxN$|X^bM|^x45u)@==Hiu!eXL&Gfbh>huYprpb94@&(7C%!@+pq zOz#o|@F)HDQ0LN>UNB(Mdn!FB;JQuPnn$rRWela~Qh!fO@K-Aqm*!PXL#a|tZ>+V1 z=j2P=ForosMF#BLS*TeAlj;Ul&<6P@RZ>>v$#PYo!|&5sGCP^YRgCU}rNH@o(&s8p znM%Yh!_88o7<#5?S8^6WYAKB?a{UWMTM0Cg`7OdsJZ6G`9jV=Ed|Z^JEpT;t)1E*h zE!PGYbAQ{_ton=rbrlY)Tak^@At*hYdp?==l{o}-R>|!UMh;Cd)vIL|uYW2_FiR%uTm9032L?|E9Qtj-E zMZNAQajsixd*thElIZcxj(D(|#Si*nmd@u24cqton_AzpA>JWH#Ao5A$bp=g-(G6H z)Xh4Q0hRPM)!9N@Z;B@Ur0Euu#dwz9k0;9fQ)YEh>mauyGBCMfp65W zS*9C-9$cAiZ8q?=mz|a6e>)<47Z=3nH``_#L5JCfQKOpQ5r-aX8+P1c*I~nsdwBSj(fxGxEEmiLRcICQ+ZH7gFIYj(5qMZB>!!H-?zA|LLW_wrc4k zY<*f0YLhAJ;MaR>{{Yv$3gME_kacfDqDb!ipM}&_NP9YE1L!$}y7`OEcxJ{gm@Qtr zL!s{)^FoanGo_XK_6F}M)V*g_|IC%FbtC!)e~42p?}Hoqw()C|TWCuZD zSUdN;dGp@y9Ye9WUWmon(aX!DlW(Pn7O5|zFj`!07qMEzq4vX2E-v%M2QT!OE9q(Y z8;a07UrO%{Hk?7>?FE)DZPWRGa-~$@oxXdwOuhH7PM5LpF5kZY0h>eb^oQ42h`d+J z*n9u_4Of0VUqave*FWO|uV5vb5W>uN(4xH4m%M0*{X|3H(XQXa*wgc+Rx$j}O3LG5P5k8>uKv&T{&tL%!WOI452C;<^H(19QG}xHvaYX{ z+pE5z-1Z%Pskq-Co~mVkU9;obJya$B=juPcJR`6(`dOnAQF^tm8fX#T1{v}Bsbgeq zTVB_@qF$=hGwt{M^I}2?atBzfl7v}gIQ>Q1{ywf2Ra^Yoq|Puce1#;Sqx~K7ufZ6@wCu?TNdZR zh3UeNl>x^$IFZIBehi(c*}jSrm{0xxUaq19(GmUv-UJ#jZWYDeTWYy5y>^YkUV-uv zmd!Gt(P8MRSy+mHwDOfmr?3=i+MpeUfmUN7a+iiw=E9Xg7ta>cM5cQ*W3xW1%>^MJ8Zw?Dpr03i=x1$77Qr`GhWOCevF$&eSwj1%(00JX>;h6tJAf6P&b(!EQFejOh7T`=ml3DSqMg|+ z3j81mo+CH*Mc~9LL+0gk=T3YngXgG@{6x5OXYM+XaK07GeAwZm5W3vpEr0=6Q3PTG z7QN#kG~8T&&H5HAW!3RYw{2Np8!il_p`t;*E<>-t)r+<@YMlr_(PJqp>n$>mShmZM z1lkYCBCq1wE<>KcdI_Gx13M5n^rqnU?QOk*DuE7hLZ!foG*Zl~08Dt|H2z|j9lFyB zt%FLu4S@NvXAif2t$JO;Ao7D$@IItfFPH22So)!RD01l(`{c9P8 z$QPw!k5zAzRTbBXXK0M50_8h8x~b2JRm|L(6)mX}KMj&URTW}ii|~<90d&DVGT9qT z^H8p!Ct}LCTz1kzw+YiS14~qC%N@yCMYvEG%`JZ zI?-6qibj;kufZ)P)E8tlN`J4Aj%_7CpLP&`s%8)&1|#agvjWiowFfEdKCIDC(EyQS ze`9J6l?0ohERsdf-}ZY9V}f{k>(D|9aBpw5MLh{3GJn`xS}l4)R%amq&e%I8^D>}f zJ(2;~3S}Tjz9<9W1jy$_AW58jwYQ`$K@W4YQYEIwaD0{EtHts2SE+l{QyFnl01yCC!*%bFalC$%(+F9mfg}FO&^_ zhHScjAz748PVhJIUZIL&!#)2H!?5tc{c9kTv>PkCY`^Dv&JA6|gS(r83vISDrG1rc zihpwXJvckD_iNeQw$%eS)lKKm5%}L14}X($Zu{dS-rZOPdMscn2BlEX`=*0`$ce66 z#7Gqu0Jz51SfDk=8=+el764~-7`!Q|oSGrKXI!onz{L^AatbaIIhY;FnPgFA8CphO zL3A8u&Y5U1G4gkx(p zuCmD3IS~*WQlt)`C3FZDKa$4C%2~L>l~;pN2J?c{4=LV={U9`{jBio;56hT2glQb5 z93QdF>e1fPQ9Eu!;F*rw_Yp2CsR@#>r?_Vw+mwKcFa`~gv;R0m_g->;-nW%=v5Qi0 ztRBqY83R{COm%T_I%nD9p~-@{hLANkq-8T(=*SQHh_fxKt$$Sw_UUV2R_8QR2rx^k z50Hf_s@&Xw2Jv?$%iIoeQ>Vnu2PAJl2MRFL9s4zC*@y0SUlku-Qrw1d2K@O9tPSG8 zyXXuSVEFcl8bj}*=ssM3E-{a=V*qXr+2P^SoI3z24dU*kldhSPggPAr56Htn^g;lg zZDB?Y&jkB5lSBab*>DdlE_lKvD+`)fLI2-IF>JaurmiM&bH>J`kB_nTWLyJbeFS*& z^Agr?jmYVcDJom8z-JJ_TxYw~@V2lapW0zsFX&<70lG%Y7AFML70=WFh zW6e2m!=4n=jNWk@CVrSst75pRrJ2Yxr&;4e#e+E+Q#fNR5gl(`Uh0XIfd*69gYxgq z4#*MaW5&n;lGGtR+l&bM&oULvhE$W^#HG$aL<*-h(vW(YO|!v(hTkH{$WcR)p~o## zHRDenV@GN|T^i1Ro__P0YbcjE)r7fNd?vBQQyc=OgkJPJv5dG5FU=>qDb3`)jWsfx z9>f(ln|?!BJ6{>T1%4V#9pCzzy}`~nup{rZH!C&+#rB4i(v(GLtr4P>{(esk1A$!1 zqz}q=8A*0!JYXsKw<_zR9Xh4#27?LiZ+njD%YhB3%C${@h0+C*=qk&>E-Oj%xQ!f6 zz;AHUEoIF7O-F7ebXgrkE^y1~k4wztQF-3Dh;Zofy(`xzXDHJ}>+ez4XU(|uliqpS zV&aZ0BV!xB|HaDSOfl%1L--gX`PhYjs}<=}JF_R?Ul2MnoBb$DNM_9iaA0yoK)Jb* z$ze#Uz$c7*7<@_2G!f}%-yYy z5q{%pPy^4 z%hsiTHYIxrn8OC}%xpr)bx;5=r4vr-*c)^s{I}^uYyC#oCD7;aMI200*ucg+&i_{o zgXPY_xDCY~W3dZIswV>cth#Rc+%`?!4W=4JV-+590SIt8;Hug1~imEsJAX^Q_-VGE|*Hd2$5=knal68tyFc{_49jyhQhiq6j;s2`5Pea zU~=LFA(X&rr;HsEjk_E;kpd2wvtAk77*ZAIG2WOy(?L!^+m>q+{lR(tG26t~@zq*C zJfumDAxV#MC4gvBI#{WS8X@EC$E))!7_q&I*(5L6Cf10{E2n7Sct4SZ?|!5K4~-HaQGn*}9?&f^n=Zc7?T>{YdWV z9KyVt!D7R$I9am!jBk6fga{b?W6~<<1E0}cxG-?RZXsX=3zmrbECh&U>jx}f5Ihb zZM&uq57J4>wy=)BvFmtbISFvduLkMM8}{^}xa&inmRr_EcegYTDTT?+@wTYHq`WM~ z@@cuFNfbnotXuX?^fMZ$RP43Z2ZXiwGm6Nh&2eC6LW%3bW=7phDa;)r&tT_A_KkrV zdf4@vg6yu?H7;(Tn5VJ$ZNI*M>7fe@I=H1Go{L86$Hqb%1CZx^lB?}4g-JCciZ*$P zNbXepIjj2xn50-j#+t6hnekP-=d5EzfiZLwPTJ^}pc1?B%fV0^F80BtG0Qm5T_~34 zLR-cy83zV*J4QwvPb$=MIcwWyQ##beCNeiC(;EcHIpz-{GBed`78LV;(#*B`Hzg6+ zq?e)a>da~{s~_MpbOlerWmXO4fN}f}03Th7iUN-i%-EvB1Pv#ZQT&Le4m!l5>4Mdj^WU>-tTmGqAS^9CRl(|7W*69sXoTS5Kd74+;o z0s2AFL;{`P71^kPgnjDJcSCOwg*_Gnzs5Ppj5EbVSSTRXc$GmMm;Qy-!RVMlF0 z>glYk`t;S44A8JjKs4z^Q(65#r=N_yvp^_?8Ur>nFqc1%0VtF3LIr;~5`OPr;l)0z zj2$Z?Md}DJ4?RgwqX#)=(mjh^Btam{a$ATkc`Q5K!D9dW)3)P$W8;-K=M+oTWMrwHC9R)$DDc!}&r4G5oJ19lV)~ z-~tJk(73wB){P~-nJ<5&RKfX+7xO%L{p@_6M#0V1>sLtD!TGD_*hqqB^E7z<{DMDz zeKUu?*Ux{)1)jl5G(p467eJB0`A@v4#(v^K1+?o+7<>L^9!uDt*1tm5u75Dg&UG^E z{t0@Ya`Vl_<<<4g#T&!dfL%NlF!287m$QqTvp>!Rh$)&0l8S%I!!*&ea(DLjeKcDE z{g+u3#(6foqfxt=(jt^;0`2YW`s}x}$QN^}JSk^Mm@73)g$NU^S<=^YIB<)H+W{LD zv$v_X`=`W@U2Fz>#Co<6d6-Kx^&Jcy40`gj%wfAck-S})$_zSa@a3-`Km^w~e#8~9 zpCz#!S9i=p(eQsA6o&&ys`$**cFn(sxr~D9w(gGA!A|%DS6tM1l5Mfvnv<;C12>Lv zx=m$giyUSHg@$*~fOX6=+bz=CvOsFxHsMeXizEtlF1{j(+1rIyac~ZYP)Y|Cty%4= z1{Y--$$ZUiWbQM5@A(dtNR5kqV58w(Ic2dQ}{YaDAw{ z&4>0~6vth4{KDCVkZ{G)u0dK_7#<(Hi;h_<`m^%LZo?Fkis2u(?yBLzNU$=4gXHN@ zsaI`z0;4DM910oPAA1&S72n`kZj4Ap4ty3}U4fT?kBp4~y(RYGmMu4zr<#1wq}-z{ zRH=W{FYtgcNrEimLdYr!<3#zUfm`gY*I9!5wH&m}R?Vuywh1q8;7Fi4!`rKh z5;Q=9DjZ>VHi4Y>7g<072|OHaTYki^$P0fm5%rLdKX9<>_AP8{bO2T0b~J9wp(-Mw z;cwA(ZE0svI5JCvA9mZd%!j`-ER*siJpbm%XE2W5#FGP0vs><}T{}3}mRKrDanXnK zzEi$D8VYTwJrwRH6i9_yIRzTq0RTanN@EDgR}2AEB0?d=@Ut!Y$g`PXRZD2*cH4iK zbyGik7VhT~Pdym`65%|_AOPZKR^r%3Z@6Q{L}@!cwlD%@n?&ST;SPw$Zqm<7=^Nr= z0g-881e(HSEEJ&34mO&SX)441YzDLrq(f?91VlVKzl^6L4}#S0)Eg_RjOBWoV-Z8F zaYEV^A5of>jWy7jiJ^YrMhiXz_|ShicnPTd$C6cMRozz2qU(w&#~!C3n`~NVdH@P@ zL$x!t1>#uMJI*2D>y^hg^rej#IW9eW$a4zG_p?Z@vWdo7GBCu2z#*u%G7qLj0 zv&0_>Ba}Pd^&DXJu9%w$h}RzFm}B9^fzR+f1i0ICXrl&#Nm)dU84aj&ZIgyQc`x$O zxIlCK%f$UHP(Oi*fihg7f{``~)<%OtiBR1$kaI4u^i?v-7;|992`9(_?!X1!MUgzP zS_^in@LRUK{kA%qAzy+cQfPmGBMxO=qt2c??^b|Ohor|JdJFv$Fp1+($k+!aEwfF~ zIdd2*1DO(Ug%QkyjD)Q#R#})yH5BNw=nz>-WpcWP+Xeo_0f$4vtQ+n?C~2@z>P4oI zZS%$k6_~p}9rkT!J}3=?>BBn%LN8AmN68%glJMadB~=zCp&^1M_ z(mXE*A_flLeCfhhPT>paMq(~}p~OakYVG1P92Wd4M0?}hWfHjkNWVGmv%&BlG2Avp zL-^Ib8wJ`l@<4B##lb5CJJtOW)mMuiGQ+$(&Re&<`^KSX!%EA|UUzNB#xxwx zYT*?6Q0=!xSxqGnaj1WKe?jLX4DC{9n%E84V4ch&OjL#r|0|-z%1OItkCUU)14!-s zY+unW!{=>n6IcAI3A!K2VooKYYp3!!r!3i^V3!r8V@PFaHLM1(`HsMjW?Z)0pN?cu zKrpG=lw5U~M=l5soI>_Rr;q@|NcAA5fe>>MCUHEJ;_q`6A!vU9$EUo&&2V;Wv7Sjj zZT#Nsc)UyHaIS+b%A~8g$xW>E;wbj*7zf%~1$I4}r2=e(Fyl`1qFz3^Jb5>NO`eu@P1M zu`=5=JYmn$`b3@W$@*&O*%nJwD#QN2=6OW!2q!lcDSh0h7`P%jAIfG)O^px+T1ttD zcqCB}Ss3+KJ{3+Mh2j}tA>pte-prI4hBC^&!MR1DN`!y6mOwm{N^3TRhFnY&etJqb z1C-7|A5(5LSc$v~{u=v~LYRnvm-dOX|5L{uDE>4G{s!?lA8yrw&fuMj7}9o+sR7=B z(JoB*d#@@Ap0L4PecUi@*>c{(sV;c;5eyrKPtd@TL+p%8ZC2yzs|(AWbIR;zH+?a= zD|WUR%cXxPS5=(}MFr`FNW&aF9x?L|OqGgly`mxkUW^Tt9Q}bXwlM4VQ_-Uy7)G59 z9x094($Mnoqa^3nRdygJKhQ$RxW&lEA3B1xy(()1!OT*0YC3z@6R65W%-K+krb*`F znAw;EJxs-65o4%bXHJSA*8gCE!br+bwJBD5Wov)wp#q9nl}Uv;J57R*<|eH_A77Q> zfojCQv(VOA{J>wQ4n5CA2#8b&z;QBx%`kyQRQYHEE5g*zV7aW8h*0QJt@t&ly;U@a zKE~c43WZATYO6JHR!(dxQ%C_F!_|F3g&r=~qb$sUeIea?5L!|YCA%I$Xrue5va~i* zt;T0AVVN4p}( zxyM5$l0{P=_@i#PtOVYn<)d-UX}7FQ zA>UkPA{~sf>`o+3+_|IYDwwgXn6RoXQ)u{&;f9=LA_o3#B2j5i7S90~{kFPC6v{mR zKNdaIWYI%rVBzY2QS*>l4B#XCj+)2yImb{eP~2OX!jFS!%v|IsZJnObkBE$;_KSZa zQ&@JP`P~9g63AN&OB?><2LH3BQ0O078XLpg%H&oJ?b08O_@ku+voBy(3TMUVIWNX*?RX z_~2WBqzQ*G8w_$ErRh*BR|$O=M^k?|9IjaRFLVuEkPT) z`nIt_+Q7Zc8Z!^!AIK-T0SW0tRz<2p)z^t0;T63Zq}V$;mzdW1VHiL`HQP zI}#jwUzH{!1?oE~gT(UlXVY?yaFghTz{{0X;0Rk*20cq$Z5~EeMb6v(Mw+2WGin;=FlFEnPeXYrO zTAY2?60E7rJ_z5;V;z1%bS$uL&CG848j=YOxB$f=d`rqy(6me(zlpQyKN-Me9QO@X zCSHn|kl+{zBx*V}MjpWbR1|-ruzrVKi3cXNviTv>3+FRbM+kp@p6Mq-qe>R(xUq`|Zx-LCo6cH2)%-Ve{?sIo${c}pi>Tn> zv`bo{-yhpq1D2#?=|2NOj3F|hTan2z zM9%Z%(ZBYaOtk=r;-8Xm9kw|6K@V#LmjKe)0XC*UZmNjT_Yy;J0z=O};8rKT@RxYe z7mMRV@&Z#EDRlGQhMaFeVub=)c4V zHIlRLP_-EZG&3?bmp_jID1Xfx+iu&)_1#|~pf4mEaXB1b7uW}HHc3-#nyu~LuvrAO zMA<|nQWdEq&c1oB!gNstDoxVG z)n<`Ji!9MWlBmVidhxTD1pZQa8h(>7@h*JjJ;R0<@bdB!->yv4g@3<{qS!nC@khV# zUOzqev(USG`T9@ToOtJd`T<{3@2Q`8uYY*PA3t6A(D(X>zu*E-VI`W7z|0?^CGyU{ z=S36jCm3Rnc6|k7&o6u(!Tz-VO9bumi7e|U>A3rQ=>3*oFP^=4d3p8hLf{&Ki>Cqr ze!2SN*|V#&f1W8oQ-8Qngq64mvNTz&c4t5T5-!%z{>Mca=ptX-(Wu=bPE-(ODZFnN zmuG)I3tcp4v4iD24T?BkWJ(2Tk}#&9ZmaUJ{pjbhhsOZedjRLQI{2#aDr^b8y5nbw z59O_3z(+szR@;gj>W2Gyri|^n`Ubw6UDd#&@BAo4Tt)?)o_~ilW&Pey>?Vld9Sq&$ zviw>#xMbPat?bZlPIub1KK#;30_R__^Z=jG9)qRyo|oQiVikIo}bC?dshgM$y8u3F1k42IBxpjZk$x z0Zk`a;VEibxnUsh=vKB{UZH7wez}7qrrx`Nur-IQD>gtxzvRrzk#cvCp66)46u zggpdTDYHskZq*(cGephQzG-Eh74d^bcxPaN;R4sOlS7ux{WMm6z-5xt42% zJ>^>8!+!=ulxs5r=;I>~Vbo)%rA0)^s%~z0u)Ta-5Aj;kO_nrqjd=Rzc~pP|E7FK0 zSgf<4C=!rwgs+_+radiPm%X3~M&045i5nVjXnz~&A=-oaMi5ZjzT(>#!hxn*wyOo$ zU9}^^E&$>p#@o!|3~w`J!H0*~z zaQLaZVDCp60C9?a03`r0%qc@-MN^XL0J(7MWigoZtE2sJW?3|@{ZIR$oZ06x~k`I(j@R?buh@UQz(@RgIE=2 z`F(jPx7%tv2UV^dsM0)$!qiN=uKK&GGJo0uHoia|NDYpJszfmngz|j7*-&TI&r*vH zQk|JyNM(kW1#mjck^V^B)r_&RVqRUcP}P|ZRIbNlEV>h{Lm zAUW7ErXvmD<`ey8Ad1q#LPPVWA{lfX)G?1i<%CR&V{Xeen;hje>)Bo`5E33h32;6! zMuhPnwmllUC})o(9|S{`WF&O3@qdnGc3<(Qg&T%!j?GAT&M;OIgYB)&joegCbtwDl zZMQ2A{fND0310;n81k-|MA(`46XJbi@^#!&GLY+v)KuM!r4)@2Wrf2^ZtB_r^DFn5 zrI@=>rh-sSl;y6zxfPay>$#SzykH`>?2aSQAR#MPp2+RQ>|*^|kfKC*(SM-^4qC!ibQ4w2gQi4#+ue7`+YS>ULxC{ zgMKCuM3Gt7DK@7YDC(48QgCwP?1WxMg81#`(C*&ukrQW#CQ1VxS(!Ym#zERAv6c4E zKGgl?`qdk#W@plQNvOn?(3hJCRlF8mY5i{Q=0L50Ctf`E>fUxnB$Jf&W;I`u26>#gnh%a(*?$G#ksGky;we~3 z0vf>zAlw&4&&*~qIQ^*_OaNF4(42D+5C#EQ?yrN@HNCEhj(0_zPHj~4h^m)Z2^F@ zSp)0kfaTE*eQb|pUWLGfgh0cH(nuc3ZswwZkkiykkk2skM`tX6b_?awE^PXdR4u&R zn(KM*tCY_>+^J&oZY^%3`R<2Nw+2gLVK4@lRyPexb9Ik3j(_U7$nu9I-{=e=`C?@; z(cj9BWUPXF%WevKBaP7%-%^wgO#U#*VV@ukbpb>lgpp44;&8LLuj}H)+0=E=IrylF zf?GxYlgK9u5Z*(=c;>nId8swH?LURds2}D8(}w%+G!sLASpJKSBEX>Ew2aWs?;nEs z5$@2*)amm?4S#~q0Cs+q1R01fLYrxs1zEUvMM#zn zk|4_*TV&---SAY$U$B9NvCFJocOcY{`@eHI<2ZX{oxM5Eo@Zudmyv8jvJ;}S_X>rw zx1tcCB0GCUQOc%7W=6*SPEnuF=j%KE`1#i#_w3j6yq@R%ep|k~=DQI4$oKix@3|9t zG!*hpF#AOT(HE(7*SxLJYFt9-tMSZutEm(Xa#tU4V8wiA`)0U9KF7aOht-MPtow|B zm!Xt68_9XDB@^}67+)WxyPr4((fmr|RWLs^uv4~4FY~n%b92CF94!&ry^f8~BKBno zCG^l8>Dcl8KvCgABFL2etJ+(E(Rh9AKw z{mx5Fla~^$IDz2E zx8-0VPN|=ab4L=2tGUQ%-<0>5zr(~K^yC>ZhB2ifE9#52cj(OzcWqU3-q1U(LgjoV zQP=t-9GLeRbkdXw;LX+~0HsGzrP!v&@j_VmTQfBAon$7X`I_c0U=Gxx6)917b#6{1 zyQ=Dze_*#0EeT*H-JAxr?&`y$L@#(kz zkaS6nI1C4`2(NR^J2=g$kKx^GKmHuZ2#P8Rt9WfG>jDI8l>JSYkEB#G?X6p*_g<)W zQFI`*p53mDi=M3+7*796L5QEon46-wu+o+++eOCgsB76)*D7r!9SL5>uIjuT%@#Jq zq}QSn)luz87Gm2psre&7;}xp?+vhiaeWs1^!E*TQ`6inVl`HQBedgahqeg^`+?++J zj#Wl(2nESilNxhY?quqyb`QLYmFC>}J~1G=@fu{WjUy3$#RVn1Pw<)0<=dca_1FCf zsqyA!%@@}bpkoeGDojQ+WX{l6MZRM)*dMyWZtpkQ$sJKWZ(XXDRDf(0o63iKO%B}o z#;X0ov&@^orB8RYb~5wXk`DRdYWim;6wXR=JwuVhJ%bBzo#_S*X_sBT(X1Z~id&Ki zZ=sLaKBIl{vbK07Z^_tyC;iHNo3(qN>=V!_z@ql`xAo7d^lk4L9az-Gp|d{@pM$5ijZ3vM;{ia%O99-yg2`qpGkQ<0E}juz1FS48jA{` zz0yzc6jY?nWccF6zLG)$VME|6Qe~@ZV^#M=4zgQA+2psP7!ugtX7@MR@L0)xD$a-X zMGI=aqEsQdMrVwaC*b?Bde|FSH(NHlP-h44nu?Fe!7Y>@3=m4^a~`Wb6uGN>p7Vut zhsHUNSA#WgdA1+EhqXM0^>~^pQz|f`9to9Z7j32_e~+1<0i65FDcO>UMZL_~GV=A_ z%;cc|G)IYnb}3suLyng9K-pxnYwH(f&&&#WD%;#Q$asww9KJF0jl~AqHnwv~M^WU< zIw|EkN%>^e`Fu7>F}T^!i(Q7FeEgv0&AG>wtahY4!JAd+A{W)=e!=0T?%OZ(k5K$$ z4gC#2id@=qW1~L@)zNggEOf~wgy?cwq^tCX6EJv?5#G>oBa;#k9N5EQ4LcCy8EVG; z%BE?`&9ecE;=J?l`U{@d+?UIqjFJ{#tlt&1J@1EyxHw_F(V8p2+rOF&aZiLM0q4az z`mzJZo#wuY$QOY!iSODa!_B8dnYBnlcGm6zKtiWJ-}F0?!< zzjL9)@QW5kG5fugrTf)Pzy_4MF5BEY%{u{7l}m7!Y#YNY&(fNjPWvB@txL zocW74y)qN}vLi$q7dqKCtei~X{qFk1oOcE!+g0I@;9Su%voqyvg!*+`cG%Gp z;Le z7>DW_s{awFwYZ)xbZ|IkqX}W`7p0i4AC+w=e^@&M+P>Gh7#_w%X#r`;fB6jcrRhdF z{0V2xwxUL6h_*V5tzxZs?ZnLh3b<}$D%Z#BT3*jwK2uU@vQ#!8qT1bM>8nNf<=>5d zUk|sqz@M?PeO{g7oQ3Vfbr#A3)E!E}eWgCEgO%qii=$U$N?yS5!bddAaF{B_Z&x^X z(wDI1``o;&zFqzC=}6`ysS6pIS74Wn_P&6cXDO7^ZE4iK$3pVKjxVuw@RcCGnP?uL4YbVEd_2TskLy9gK^14; z%jr?|qi+8P3-RH?)IP2|orgrp@y`lCJ^8e-kZ&bO`pNhX{DhPsvbdEv*@>i(uT_-)pv)2c=U>&z!z1# z3;F#*-%_)UJtn#{%0bsZpU1NGwoNXMD_2ALYQ0KLnE^YxW*@hszyKTfkQ(~NtvGqf zS1na80mzM7F}beup_A$;%R*@KnM3WYY8y@aXCFQ9vTwFeq3sbs3NCA0my*OL!AbzPr1bbrSLYGyyUq<81M4fW`Z5m_g_MHt&q$ow%ts*iCR3RpX9fZaOkd7&m@C3%IUs4{dte`a) zrE1H0zOGBak_Ol#`>fj7f{nYuE~e*&#WQms`(Bxi)H#lj4U(>nTcls{y@72U;K_Aa z^YG$~U{_>IDakZ+Oy4Gmf-bJ1*iz*+`EEBaDvVt@`rWbv4GDQXUP4qD9pwX(A1q>_ zweD#Z1GQ<7&$Fjv@T%xa75}{UluY@w$KgYg!6cET!*{MSb1_H zU~MXc{4}^>AF#o;@EiraH1M+w-V_p1fYEc9*q$?WF{0RH;$B|Ky#ciONUM z$GyS~J^@|IZ;s}6gV(O|YCn0qyYOaXrCg@<+je+|Z$!8BgDWxxjV2e-zDo8WC5ZIa zcyw^Bo*QA>4Z*|A-Rej8UrkTKiXl*&2n#DLM`hJ;lx9xO?Yn({XXHwIb?TeuBnZDx z;!6D2r+F@2ZydJ;q&v-LaaE>M=4r)dLQot@xH$cLTsLO09N4Rb>v&49V}Enlt_1ci z2bdh*U2%4;rLW3-J2S4gy*Uj;H`F=Y@7lU}kFsyMEUi25ek1*rX3p#-ezj-Xb=O+* z3SXLEdTaQx`+l`o317boElc#14YHa~d$2g`n3c%JP9HK!dK^c+3~qJB%hQ&^47&TM zIK!?oN}J%s#M^qoVR%1QcI4~W@fDg^^X|u~7VqThVvDLnKk0y;o-@L|a#bNE*G1z1i{ciA7-RYf9pBrH3JrRG3 z@~d$|R@Mtk#YJkSZ#4Ni9Bl+ENh*YHp&Wge6|sM?Xux#hJH8LGF;Q7(btUec+rqeP zv39vHbzwy>Sv)Llu|eTk!pM7<%7AZcvo{zQ1mvy^45__;a1i_W8BI^|JD=1SK22O$$YQ+P+u#QaKtB;qe)qt(h@GOCJ|sn{0gj@e zUo~Tba6)MP6ok|=$o;IEy9Rk*?Wn50(dli@ucWq1(vsNUYW7O>*Ix;_lN$Y_l$-bN z*TMx|)xFQ}z)Iji?6=^jz^d`$iIEkB(em*w{|O?$K5vVOnHX+nT+%N>9~iK|Iq!Tv z>heZiPPj@gwRCSl;KzlR=iv4>f9 zw)1s`rRSaX-HQud=Ip5+&@7dKwqiqpT`vs5)iJ>2Uq%j*Ly<;bQgKVQ`_ z%XE_%+W3+8s27#aKzU;izmeywRCqn|nRXcm%iSA_YyFW=I{^~Itd+i8!7`1dz zbS{3Nd&$i9)xA+|QGQoO$l6p{y`^VK7V48vX$|{_wGwyVBOpQusgxTKYln!^`ztR9l|f z`>D57<2SQAW^tFJza}6sQJru*+4NPYVqxW_;rpg2aM2LQhc$SOL*YAOI-Q4V1D8}? zc$+=ujd{2=3-iBHtbXOFFF4qqeJwvu+q*WEq%4w9Dt1tQpj|(`T7jjz>K@9ol6ly|2vy^o$2Rba=6d3Ms+9zm1p6MiLM}s3Rq9$6|E0bByLSxqpx^hqdN<&0^9BaP-ABImaZJ*&*?*e*uvj>G`>_1Xk9) z*Zp!CaRUk?Yf14})AyJ?u7WLpG-lHMc&^p>n?4{K5Q%BVAC|BZ=-GVu>g(Ss1)=TQ(M;cunT^aOfzB|Gw>V#4z(y6E;wmoTd==j1u4ak8 znAU{iyDleTmsudYw+{qPJ?-7_e0qHJ`;C-{?8f?Nef(Y?Z1%kDca!F2 zZ>e9Ian&V3C_civRF<48K3W`XJ%woGpy<@BHu!v49tR{EvwJOBPGHwkqn{^wCZh_v zdRfxReUq?D^;=AOF8O}QRpoG2h;nJFBwls%k2R}%6q(nOJ9~FUmha*Ra2AmSuS^gA zuC&PT?9h`-4HipGcg&%bf`gB6Iiu*`GvF~ox@Jn zwu#0^L-S8U`o6}Zl#ILV8m)N&?w~CcJZfUif2&d(;T4*adv%#t@KsrOp36hBL-IBr zX1Wf`R{v_NkA5-jCUt_kwdV@GuT#*?m(RTZu=gW8qEh=W>CgGz%d_S7$^uu4u^_m6u3V6^X9-im=FR!^_{ZWv?>W)7h@&b<|_=zR<(A(PexFsrKC+yLEvu3!!Vh&2-<%qQ)l( zYb1;=D{Y;|k@nJy=f#0r+%cC?t81p6L4aud20N{}50zU##CxxC@bH=1W6xw5G&;(3 z&THFxC`+!IE>zpx$XWOHCezwula|KkxG(>}DF@LME@DyF#f5W?wEimv<{9?J?$mTA zNrOq1z%dG=>&^NiInGf>j!S}fs^%UJ6+B_!;5N7`#VW^f$J=ff8F!f`u*P1e3qx{(7>SJboi=77hk4sw=;zA-t+bV>O?o?!!=6hx z*5hkv7xiQYb*$^;))m9fNk+y85{vx?3XZdtX)ZFKST@ZjhW#WafIey33!r=MS- z;{K07?DyglmV8rN62S8589JW+n$;UM8HEr&YQs;T>*r*9Z(y5eji7LvYM*p8fsO`- zyZJ9BdHa6@^!Q2w6)!Jm50qRMbaVE!ga{h?7|I$Ra9O`EYFPkm9=f{4k}WTw&ezLO z%PpA=q0>&h950)nBz5g>aIAg?rbM0{icozvT7vf1)>ec{nCa zYaH*Oee+p^xJa6(g$Syxaj+8eOx46(`Ge8X4+)QUx3@KxdkU`tw|1O@uMqDCwbCR6 zSotGpvze}$+9P@%tbMCg0YPqn*SOXY7xqZ&RoRm7x1+V!DevU-0%<;z82Cv0s_ii6%^UB1Qp%m-csBo1$#r)! z5+;8^O`a4&E@qfuCT1_6cjq$^LJC;A%AGI1*xtO8C0-pK&f!_xXukPGZ0Z%R=SPXV zO}r$}u3#nHa?F_oj%>xg#eg_P>d-qNIku3P2<#VM#c- zoDgFH9cmn0dt7f^Ib2#?!f>o`Xe^Wl3TLu(wRD}jI(0P>q(sM67TC&!+y(Mtcfm%Q zy%e>3f$4a{>3e`#UadEj^e0WV5~%m4NDSwf=l-|x>N5Y)1B zx$5NrJ3}YEUpg87Ri|@YY3WLZNuKo?GWA=nln~6*XR?7aWKXbn*z4j0EL<=?a$I1M7X6qrjy(cPRYL$YBL z2BQs?O4HVklthv%a3Gj0T`-D+-*bYhYXJ^uAg+Ls&SRti;INubzx<>JuQY^<8U1pT5EcPOB^pKB-zsUv9;?*y50#LOF^bi>!3un-#W7eQJbD0W zuVoSwpCyPxo`m8am~bQzuLBHAY5*#C2Ziyj;UQ#@)=F*6PBi#xfh)mE?+M*OZL+$x z>*Vb2fjy(iyorPWg>RhfXDK3lh9dCaid2svY7Bn|T=id^gZ0mVQ~j?27lvj!LhUxg z6G`T9PFoUm9zy zMFia8W?^O=sz@skj!lW7hd^pFXX@>`;3(46#)x2{|Kx-g6p2Kjmd8mk3yfyyJ)V(h`+R&huWn?dIyFaoQ z)GmzV1GZ5iodFm$$^f)O;c;QKQ9Vq?X?N;k0|F-tJ3FjBxvMHA%(|OSR1mA>e3-12 z%z-hL#EGd;e>WAY=BcgT0op)OoPV_y00-l{07{K$4TJivOsot_Nd49oiaa7ph;_Zp z6$;Gw3{uD>0tpA=pT^NcIKAQ-CKLM$fIxnuBI4i161>XrCxl?(9|MSj-G2_IzeA!J zCIQj874gmCK=Hsw|4UTi01miVG?K+0V9X>07drLoDXi&L=)y$};ldYxp&IZw!0(6r z32?2SF3tM~sQq0iw89iL)Ha6)DVBaxyUsCk=bvS%)7Nh%*DDfYONyL0%?u&@7J(5$ z7j6g_xdg`=Uig*z;Z#Tk5Ds~y^6%8o#W_xW{IgPDWH9Zx6ADA4p-rSGg~#B4J}vp- zBnJp4B=nD3k7>E|;8nVCp%XY4)&(fA+C*yo{;4~_)JCvwn&#viquhcLk-M6c+)XCU ziJFrt%jmwB>Xo?xMKLd($0P-o+d(b%lL1@1~pTR`jIGzGzm$I~A{I zCQZ@(m9=p2x@3wzyD0fxy}K+t!EGvLVZmNeUv(4Z+<9aPgxOq>O9tg-`6F?4tT?^~ zUpYmHe{A0GD`=x77~a6I+N!!MD7k8opZb6scpO$D5~pGHYy^SnEOg=6);69v z&&B{Y324JnXFE+lng293(ewG8%Z7-7b|H1@!TvjjbWMg!BPJigBn%wYk-KVSL&H~XKM zKe>_y(~C=po=6=x&_EmvCjqaqI@hk@eIhq*a%xcyP8(}h<^<0c#1o&plAF+xzlIkJ zA*x{lF7Y||H|u?sJlpSjx5#>4~%SQkl8ys zL1j`d+)9_;u;*_@=W&$RV8Na6*YVWBLwM_!-@z%K9%2&x+t3F&nthIPl3&WpLpytM zt}^u!asH?t<}D|5-HGt{#uFlvO3z!nI_14uMh^IfowWuwOurtN>S}gueqrI$9IgMVyz4gWW6z`kFDJ*!)6JaL5f#qLJ{Q z(Rdkyoc|^oPto8Ajc#rNaHOH(n7<<$%V01eb5K}CAUP#$2ApV#O}fmKhJtsZcA?lL z!6!u!yDLSzJGEj2NI`wZ*d#0@ews9hp>ctuQb_&3n-u-cYC?0Rh2H&;tbHPyTiP&k}kHSdA3`&0)M(%Y-%)e6NG zEAt`(K?$zEh6UZdcNLDz-J>JZb=U@hD~5Zabh-{50}x}!aFl}=QKY>bAU8eCG0>qxrGg%v@#WxsO_JsQ~m`Ue`BL)YIFZ_<1O^=DQ5Q7h2vV2lmAwn9E3xH z?V&*Sd;aCXJswB&{?q)6srqQNC4dY~d+Y@!%Y){oBY+zGHsH8mv@(&bLzPE@BK=+} zGnlP2r2#GTo5Hc;7{MlOcvWNtp<>vZOt5t{8qC#v(pgjwnm+p}e(FI1kPK7dFj#dw zw{xTVD>1bhlVQn_FuE-q>{T3*xM%v*VW!Q*!P>+#m|_v#zdiJWOHT1Majs}81$J}G zI#Jg;n);!h2x~Tnh#^HhH{O@BwQvPn#sGq%Z;M{-5-Rn@FvWVY0j@Vhvfl;>yM11; zg$d_|u%IIy6>nTw1gH|hG<<+w8lUIOc98Ze&0_f`ZkNiJRvYP3XN9lG-5fW!vAR`r z!-c`t8?oQ8_(bJJFu%#rXME4BZyvs*SE(0V;O=!A?h#BK{O(~twMwp3#MD2LQ@}xp z4nD<9U_bLj^N$}8|HzZHH243SCrfBhGnA{V2^F|^o+#0FR}a9#53|LJObJYcA`2j) zG5{7|w>uD6l9gNX1{B$bLF*g{+X-AZ0d&ZIS$(tfm@E-L&5$cG(gZEKBr2{XWN95l zk*;Dndosb9K{U-2!I!A43-3`ydna*@JumTcX=O+gR#BrLQjKX1^Q@Cv27|VZJqNBb zRBijtzR9v}s3n%OYsi;izsa0A5#`|VhMNgm%wNCm+-6N~-hEZYvBd#U+%@!!z)P2< z#f0W|)LT*%;8&m{&tW)jkr{xAu#7tUf5{@!#g zgK01r*@}Ogq*bl ziyjt){ES0q2Nm4|b>V#T|^o6fiB+EATj(lJQrpMJLXGHj=2t;?g`J%caiFw7Pt+zyqyt6 zx1#&CCQ>|~$%r{$U4}3bnGaHtEi5nBN@i4Um()5Fj%Y^d?Nd%Z-XUM|lf4@9d^&U5 zKcUeohj>adaOr%a7k9xOMJg^5-4bOEeA;RN6IAFR_b}=%OtxM@nK0HLr%OAweh5&3r46r$q`HcPx29T`f{*Rn z&^8w%bD;{%B`>UVEgFpysyx@G6mRTlQOW3D=JVvUvXr}BTjdeo3syUvF43={a}%R% zF*p|e??7G7l6ES>i*Yj!nkxNxM1zKF+2Yt@VQ|^dkN9tj_{kJ{K4tzm|3)P9T+^!! zUYzAN{Am*_f7Y_qBRro`8lRVegTeMV<)4Y}K9Feq<%D0{C*pU#5gtK^9^*2$H7nwG zm&i)~k9tFs{_g?rv`b8rhp(ZnDw1tVDzENZ4eSC#)0o!a@|H~@M`#p4d3Tf~;W!D< zu7J~?+*ck;kuJ6SJ&+S9l-kq}Or>0%^WmqV6D?=<|{>B@=`kyhsj)wz^#N^WwX|$}9p*(wRv+yc);Wq~zZefkzUaDD^JxfH?A9z* z7fo<%b+Cgu7Bz^t29ngfun0`6}a^d!D}~pz7M;^VpO!m=^L>vu1LS5 zHneM95t-`s3CM{hByuw5oQ65p&psS+()s+0g&+KT3!ipAW0*Dpeh@)^01M7!nPEzl zICvElbSSY2!ri_V%S1DV3XFt8K!WABB*jfg}&?I|C1qIQv2J2Sk=_ zYf4$UE%D7qY+%qn=#BiTH zO8IQN@$7YMI{9oQxFK0*p?y}GQ%=jA_Z`b@KWC;I+jKM$4%Kd*oeEtdg1F#|{UJSzyphxI^bixTF zvb0EHpCy+VCX~s4eOKg9EdSZ{)C?kOb$|9(281{^pkLW&@K3?g{wKjk5EUrPUDPfb zxR1%S1aVYJ#nmbK*SoVp{utyB&j#<(jiKNNu2b>=LmWfDz(b&z5(C+dz+C$&t|Kr6 zO|y%M``2hDH6-^5OL3pp((DYSk}GH^FvHX-=p+7CQcjhy`Im(JpGwMs&9Mq7P%C=2 z7fQ3cDs&q&wE$V<;0J+Z(5W_{DJh0?M#B%#oR}fz=Qxizp68>gFZ7%tsf5HCl|=Nn z;HL!UufFRNT8C|;`7B_ z0DD{NbwDu`xxD2r6vOl@(iBk@G1FAoyV8(z9zkEEsKG_;XF>?{ms8NKIyUQ2XCv=nb|V!rcxu)yM1pzrgH zB;~9j)uge!{zyuqz<~Gk%P(AEyIUHTl-46n8g(E99C!&igTG0vu+C&PM63BepyP?) z^g?Oi=+U>H!d`R>qv&oU8b7vGOx~@?Jwjb zd~OKja3olP;nf5)U}bp{5CFzuRzd*{EfdiBDb^p~acUTli;|f{s zCX#uj_$W|*Fw`ykF*F@(66CMRquN+4xnZqR`}HtX=JJ3#%YY-N`f_C_ey}~>8k`%B z&}hDfi}@gotsrxWEXb-4(mSPzGq~v?gD&_{C{5{I7mwWU_=Fow#Mk>4_wik zD02pMtkgEcjb*x}G5Ik}zaN+fVq-l{c612I3BKht3hDn8mF;gIL=uub3x&mg&FAc0 z(gavS6sptmciredlxDmD_OXGa!nk$;#lJhvqT%Z%_T0gAYUwOKL#Vb%IrOQJljD(`BMeIx}ZMC6~R3WZm8>AG7u}c`cl+vxg@Ldhb_Oa zw;>ISh=a_-Y(D%>7GWTx45N*Lz+--MbtGeMUh7Azl$V3*2RcpgCV~&RFB>VYcl#SwENU z;n=v?egGBBmOZUG@(>tu018KA`W;e)R-y!35RnP|Hr(<+w`q+vs2Ni&P@vRD3_tf^ zD#6m{&zAKVuMsDt$Z4HD9TUY)?gD;}i8OS7Sva3PCjM>Vybla#f}o+DO87^hSb3Tz zYY`S2J^TeGNH26u0sDCFU=lu_JJ6W91A07ni2mCD*U(?^JWJHG09fo#rG1CMm=;6h z|D13QP8S`*zeHF1v*|cn^1lzbXf*r?(?sqv{hDD*fTUCysc9fcWguu49FC3GycRMI z5Y}rQ1F$cr(dLBe$x0_CUJW5Vkae3OPPBXlWKEOLA&G@rVs~1eK%IpT;@w$l9pm>u z;al=|UvWy0{8UR+_qSS=08H%A{6#G-zW+YAqtRn%8#I)8j|q;#@KhM01lS7R24RAU z5zqyNK+}R|AYe<*JVt7NV#;-Y}7i@v=;I@JRPXFAn8LdYPnroA_Z?+hy1YihhH2^+Vh(5NANw+JqXefuy~^ow)Ku zf)yWqzgdcN?M%3HYG)O{k;f}pZReQpTEfpf$8$Xg=FRRuaWqFI<-95gAt(smC~!Jt zc_>PHRrWG$HL#j)FK~`X3&#uFV0ToA+EG?P8vKz$OTX+nTaGZJrSdI?PM?bgrqeFu zTC?c2yg4E?0PD51*jdV*(GUp3PY37=y(a^o2^9pQC;*e79_+IZk&g?OwP7TDckN`oAj**Fm^fKf)4^~*&>#UT+2|4f zwxS_I82FHMv7|+aVf!`F!%qb|=SBk;?!Uwd2l*Ax1fXX)+;BOA#)d7h(gVR8_@t4X ze26KWoeV>GWgQ@c{mq?31OCH0p>H)!z7%Uq@+{mHt+d_}O1Gz_O@@aPstT=RsK`~c z-o@8#10$HV*Fi?Oa=^26Kj|ODf3^P%-5BZ&Nf9=U&?2q7a4+!%7AF*oG!z;8OIO?x zecd6k{^6<=K4!b~J(nmm1orL^ChMbO4wslxr7sedvKC90mcK}H z@;PVq!W)24-#U7y4=iF97Mm%Ylup8~# z4b!V+s(7hcniq_V}RWZp6EGYj_(fX zi61Kg!#_Qb`sd~mWNm|4YLfpN0x-DG)ce=X*#7|gG(I#m&NLW$53`LpK)0?Hp(E|8DKB`dwx>sm33;x(0WsxhJ0F9SDK7HgO`^$ zja8Z~dn_q~>O8C}d$5~6Xm|tcQF>^Q0^xe{0-%ZpRcO#uMyLWJJ z2t0q+mfV`ld`HAp%~j%w+LJkr=e`TGi(fLg4(ys~zud2-eZU|pI_pHb$Jk9wV-+r> zf0U1*=ou% zkC@|`1La^mAk}Zxer73P5j9kmEBX-_b54WxXB_?P0fc|=yf5}wYP2CS+`R=KR!ADP z#J2?;uczwqn)8Y$$$-7u9b(Y`Z7`r(MuQQP4weVW<$QAYGEw$v&HRrnH)l4hW92$wc_RYIZd!H7CrQN#MJ_7YSICvk$&Ez^7UAooow83+u(2c0SgIEtS zMK)=y)-=>DU3Nb`VGo!3fORbhA6tqc9L+i-|hs}8k#;g|*<+K-eccUzMZz(rUR;fG_QUHK;HgJBM+Ori*p zba2Sw3cITCsR1_GoC#pTV-BYm5gAl`cSCS-XD6F(h~z~RqKEegz|1Jv@l$f@vw8^0 z)9emAEzZ<@SV~@kuw^r(ILexb5Y=?d^|RnPahGrzM~>&ub4do<5eUVPMaH#*TYDc+ z-*|788W3Mc=|C9%6Ixarr}@k|l1&837NZk9bonlc|SEl%IQ8)j5LqVzwJo3xSvYM?QU<6qs4h zPjP0xwDBUMoBWHTVm{^@QMB9{I2r_b1y4H}ugA}@I;&4x;*R6AzkBI>->9D{hO@tJ zE+V5R_)+vtNrqBmhctIlCP53Zso0#j8DHlsC#^=`+3eLx*}eIF!o@kGmwl4^1@`Um zt4&t|-{WQ^Co1!57I|8?M-k>zh!qTW&xts?X5^saKikBh(yj1_L1r|T^H?9^wBEJ0 z-CD_fQ}EWj{4jm^g8PrfXU+wx!(ZN8VCw_R>3-z!X5ed`I|;?(ZMyjHcImV}V-AKe z^;r)tbaGo#g-w7J)&~>*z1UN|cf8oM`cI2J91t!pE*=nK1TZ9M?j<7W?FTd;AbY`W9=gsEp$b&* za;D{#rwDLQ`LotSNwHu4I;&s!y`Q}pFY5#nA_<$!Q-sI4RNNoZ76F*h|b?zlBbh;q965rs2rAHE` zGd9ygF;1Ph{4(&D59^2h8V|H$S2muw#&JdOVoq$l_$@G9+b|YCZFt?HkyBusnBom%NHy zkSspc@GfLA=n{#Dbedl*YVdp{N#55E_)*T1xn!%z)f*p~(R$hRE)M2i389f~yVUsi zlXGMV%mx7r3kg3ojOD*vD6Y-CJ+%djxbv35k3`0)t(p<~3UGn;s<%+{SfghI%l8_aVq!XAU3dPVsQ&TPiDk@3S z_#{?iQz`XJ54>6)9YGMQI=y3U^d4=j;yb}ETSFE<@ z$EOdeKT5x%UU?1ZSFly?63n!^#{0fs-tk#sieYlFzCkzUo8yH<0f6(5kd%Kz{h#+P z!a^rEeHfnXR||Ej->U*VEmA?46s7@wtiTef5<5lpYoQt(9UP_-e=mOykFmLrt#VM? zXSDa~!eK6LnotD2`(&sy3nQ(Z!}COeV&>OH<|{fW#`<(`ZS)DnIqg#YUwld^NE(e5 zElsJt-^wta;+X^JM?$;;0S=(sxPpR?_4Xe%eeiTFv9y974<>u5Uz%N<^l6tr__X)3 zL~i?BL@Adnol@nE_jg|jt|K3|>%XD&xa;WRc)?YrNAZlIR9N^dTIqMUe|%d8KRz-r z8Wa`AjQ;v?g#NF7Q3M!$j?0+luSe-W_pbl>C>@Q)tPLWp;7W;v^}qHT&+r`>&ak@h zPZo&m=f|f1kiziOb#Pz2G%-?_0%!Cp zCzurb28E&5&X7L^Q~PB#aiwrq$<+OUUXj|~G*4@ykHMZjPn#L~JMUMzO?y4h+ZvRX z0yW%Yc<;LF|59LZ-do*-_uKpzfCUCbo&4K{>Y}tLtSMsKVKmX^gVZ12UM|(n7l`X< zsq_)1k11{$^5LP6K@-``>&=2$uy{Jo(&ZP)^ZQHyA%xj0>SJ7ud8Pv6YB7V~uCBuV zr>kRsUhe*9S3@8e%7kV&Xsj_PXc`*Ya}b2td;zgHL)L)rZG1^w0wwaZF#lm1q(v5w zfXbE81Atrw|3nF6#scC3^CLjO#A`Hwlp|*i7)H+ZvWXZN#xx5(VIuVAjmOVciRc(i zPiNKtZzXi!K{F%3N?AN{42ci|*Gs4?CZ zFe$hzWF%-LWNWB3Ajb_52Iewbrk&CTN`feE!`_|V##T@mO`fICS9M6#Q{if^WlQ1emq)t#hWEP*S1G2- zEISKV^GL3jSd#S2f63EDGhv@=nnQzh33xhBrZIke-s-cY`qiJ29)Ab^PZIndgb=4< zVIBy;#1Q5h{e*%O1!6jw3x7HoBoOmB0Q}3pmkDEJ%O(J>Qq&J9E-Ghaa0|l){-gp^ zr@05u672XSJ-LPkidnpzZp-<*j=_jRWk?>I!hD*b$cJt)ohd5ndhFD%j(7+&!Am`@ z9#7{W(Z1>0XttY_#lHAF?~>VOk&l8b*jFfPJ4mW2vxL#*-Oaj+#l^#h*3k$e%E!|t zUj*@p%DpyX8bm%PT@V)TQYL?z)@8^cOwM~(W}asZmwp|r_<@@BObbdR>j{&CPA_;- zr&ShUh1u4g99?Vv^FST5cl(bA>a^j0n8yv^#sjd{Q}*hz8STxp?DV(0KRcJysdqqZ zY@y#z?S%C<5Cat`+Sf_(yP`@cqc^d7Q|-RikQu0zP_W#|Nr7!K_T~Ff+W%Y|20{wJcbKg}dMG#pG>`*>`FTj1RFGPlc z)QP9iZ%7xCS4k74pY~Zmdq~Isa%M;I==IKt0b3=5FIr-E`|ZfTn2FuhwxzrTls*9Z zjGS4-5ND#-sq_D4SDTY9xF+l$*X+j&&HsGOZcDR7dnDduDH{R-2>}eKPr}gNjiv4k z^I~G}SAzuoTYmiJd4J~zT*UA=KTbDlnEb#HqJOz)*ZLn0nZ9Gr$H8d_m_y%wfD``+ z>B$A*Z4lqYS)vKUlJ$kj{zTq|E?EqYlBi4{J)U{o^fKM2sI7`aQ)vrts z1Bs!7js1P}J;EGlhU6ZhLolayu;dftn$JhRIZL_Z%Ae?S+6^Eo2N6QY zhk@AE1~$L7F(5g<<`(*W=AcD%yfFFaBLc{u3zP0&PbcCYF+q-@X9@ijebo{}d*6Pw z2f$o1bfAAeBQ=KZ!W^kxokD{OmZnCauST+BwLmx+dEjHv>ozK44o z<~RUg`I^`%uS-@Ez77ToOF}e+{pxIX>tao z@Rtkr-k$?Y*mNy6M2j?GDx>K_ELBjG;$Iqi@4TP$N`V&hQX54u)$<;s-UGPR$O_J~ zr$s1;QTZjYgHGx<*oROxg5I`S)Ur z0diFri%r+>=2CHdeV_50yrn(PQuKH+0TM=truGkEZiEM$ov?&3oE<)p8uyF2ES|K^ zpe_HM?`$Pu-xM5lWK)6%w~b4NKZW+?ujKFI-P)>1(`KpD6C;tcSLBdS*Z#(do3nTg#?WJUj|iS_^*}C-Nee{hZe#U;E5A6tZq7%3fFBB3R<@Cp{{0$ z()T3`P{;J0b`IsYI1P5~d3G9*{H%N@>}46Pu4V zm+!mX2W}a=WqsJX_FnZ_Ic24_x+;Ce1QS4b6!pbDtLI`ykoKTb330lL9MwaMu=O1q z#+Wr;?^@d@n@{FfTt;R%+CjGgm$0(WxDXRYoRAY@r{qNW&;3ksfAt5*WqiG#QTlcN z=7sZ6ksVWK-&YSB%_fKPiWhNWaHqCdoS%ZE7R zQ^318~FL5!s7Csc&C08i9iM?L6s%-V;_c5T%>h=J z<0AvlljEa*-tDCQ4~KL|pk@pLk$eX!9@=1v_#{9XDF6yN1i{PgXBPonB5^w zL5YMWD<=nsnFNXNYbkSj04obmu{}%U(+1_Q{fWeB({y9-c!(td3}S9cYPZN=3c|~2 z{;$2a42o;px`t`o-Q5%1Ex5b8yK8W7++6|$0t5>XGz0J=okVgM+JR<~atMS9y+Mlrfsec?Sl> z$ugd-bZC@(AdvJUiWL>EfoA+@a?v0;>Te(@WD{u;5t?6*F-4H~1D$qu&YwM*Kab$Q zcC-UVCT(Jp4?vNU)}-Dg_eXoO_6ZXcb|sI=vc0197Q-q^%Tdg?*-s<1BwHVe01^aLqic%CyMbX?HOH<))Lfwx8SK^XqQ!f7h`Pvg|tl1Ft1Li z`m$>ID))*D>HrG*@ePn$yY!!(?cPaNzVJkx;H2w0xofh@L&jB2Y! zl5JBzBDf`FE|%#j=H7sEPAWp710%7A2)3t(Gt_i!tLMqIQJ8Tf(2$K zqaOhnfE;h8>wd`TAWh}}tTGkH-&Pqv>whjLe-j$P`XwMl1VK>L%Qn+Z^Ca!0o8DhX zWDZY*kcWZ~TsdL?gA)PHG{2g#T+?;;944@G=dW*urT({XmYMnAsg~ex1_}xWWLew* zg8=Y%9LSbxkSw+US`^j+NaQ1^5DVzkd&2~UL1A#l={Nv&0?|b%xPL{NsFlO{Ltp-Z zVu_veH>Tn-A#4v;lRzB!39!0gzd=O(^5}pD7AprD6hwgN;rbY+)6>0X`cu$rvh8$K z62rw|>48mj|JG6+Dj&4{i$y_RRAxl|z-$3T-h!Yf7_HZhJvBr1+G)N0{=v8SGihDS z4{irAM6#uK7uoUJ3Wcre+%b4*r6JSbpus`(?#*Ga|G}76BPzW z8n|!6&iT9Zra9jJqdj`S0?o`Cehq7t*P*C1D;ytu46P1t{Y%ziuXbsGAu3PSsWDqd zEjj1mbrz$@c5`8667$`p>777I_<~nqVzE$~7mZ-bEHj?aRrelLrJb6#n!VbFlYDtw z(wH*Kd68DOx^9Zz(2g1|k4ANIy@*wOy(2LHxFfhEaxb{0cMJla73r&=MO#TGT6fEQ z=BVH)r=h|O$0a&G0meW{km;m|*}J!-4z|rAV;aH!CO!D6iVAjSm_r?Hy_|Upr$nhB zwyqwFV0S6ZjvQ_3D(M_@68vTQZf5_Fb6K?zFJ|0jLEI7%=Kne?PQ<@v<$>M+xDffl zlBrDoS#pi>W-fG5ofwG#pd=n)PD{XIy&#TDee%S{9fvetdKrV50Nz{sGk%Wa^T4ge zrL!wzY=tfYAM8nQISe-?YcgkiSmKk%NAHKXVq|0XbGslGxgsYNc}^OISvG0sVGaXj z;qqFjO5`E&8_31$i}MMlTTtn}*`$CprNkX{7GgQwn|2uu)esZ7?**Sl868@rmaZUYHZbO=> zQ~gO%Sn_{Q1Umn7A_(s5arJ3_d;=E(g^WzTjTUw_*3og%9t>a{>>vk0C>#PI)Q5%1 zr^#4*FVM0eO)biUH4t_A%O_N>^Hm$f7a=_eRCoqHf$%$~;i3?bL$e^mnS1Ipv424v z3GzYh|F+OS*ZCnQ8+I^c|1-U%Pqf}w5O4?2LV}5Qsk~Y8ZRs_05Cen$a8Y0E6<$6L z2umQ5`}Rp5X@rtCoNQIb735wZMc)I_&x`!Dfc5!`ZYRn>kQL{*!7apN=+)e9@{ezk z**|^#cGnV=@&&Y29RRX^g zMShW-ZnmtRExS?@TuH%cf_e?@c>u@~$nJV*GX7Rh!QT7&u>Z10(HyH)>R|EuaY1_EsS1owNyioPXn20>4uL?Pf4h}2N%eHl)~jK4W5pDZy03Y_Ybsj5VQl&lpOgm zutG7_STiVIO0!^^N`9A;V34G4orr_2f1{`q-3|;h`hX>58p(9kcay9b1=_q8Ecy5Z z%fp4J|LwCPrh3~i0jKbr(s5CuuVRe++)8}BW*ZsKp#<|Hs2-3VvvWOEnSmqf*R!#H z`nRlA-3?vthp7|HVJ9WI)E{$!GO&9IoJ!h%G#9uNh8GYiL}dk8Cjm|RJ1!D~FGW$J z%x+Ww1^7bPL1mB{^Z*3{lVZ{!x>#_j4av|8QGzdp+)H=Y4v-lP4IzwQ`6Ywb9(ApG zXw`qVPxyWZ{o431UK}1Y9_+-d*Z`P%5na(I_eTgtS8DT`?>Si2$EY5);{e^up~JXz zWR2ek+=8$r(kFx8Sd>}e#VI4hGKW8j6)pQnU5I2%e=_t_lK3Q* zQ3P?tV}jax+(9AWp#!1;hYm!bo{E~d=w)J=+#@kb8DY+#yNu=&52zI$zcMDM{h*Xb z?P{pXuHOMPL*C6=i&?SV@0!FvA%Dlte=6qY3z+jZZGL!wDA(7J(7UL zj2!${%ZfQaJ09aL+gGT+WL`S(*tJ?I49tOS&bYP11- zjupS)b59j;Il!I~J}Y2`8sd7>VH+Xu4_S1f@qn`iJGg=O52S$Y-WBD?A4C=@+YH%6 z04Z2<{R^M`!7c_Hkk$WcZLq08h^ou~ix?vM|3VCL2?YhVI?@OslVDYUkpzUG-UhO= z0{y|!debD@7JSJM1p=%Ck$2HDK@e+TWi~7D4uT#Q3mN#eN0?U?j&fU;c3VXeKrna# zXEu+P)M_%c6rA%Ec{TqV$`SH#JlZyXCczyD;)&rM#P7z*fVsWsLreWY#dj~g{cHRV z?v}3P8A^!&0$}{8C}N1oJ<(10F>*2nMplR!i zx;(V&OQCH^A5EAHd#TsqhclpQ$u*!6-&a;K%QO?IEnCXH-C;*6!ZiM&_gML|dMX-% zpWeg|=E^8KSKsWb2D}AN>Mf$zt27|QE5L}l-V_n^dqMPv2L02=0=&$>63_3&{lSa` z1GoR578eXTgCL-wj)B-Aop%r#A->SZXyg=N;m~yLIhn~t=fxewFC2u;ph+K6K0$Y*C11j<(|x|_~!9v{PEvvSZs~A zshbn7X~Yz3xMsw%h)Co_40wUr_>O(7%mBv-%xA7wVQ(D8IAg^m zRy({?omIZO$e1PN`k*?2CFfedYqN>0_@ZzR2fu4MOk>S8QK3boE==nL&{`;h^w3a$ z6-eLcv8H-PB zmxE?Q?`ubAWeq<>@iY>tc{qCoN1iU)>jlcPpy}W#3P_;=NEaL0e;_G)7 zY~P+)`|oB5oclMgK2mn3_F}MpdRFJ_|I$NwUkQ4(YW0NyaD?o8-q`9a58mzv$BQp+ z*CMwOfKBLZ2PvLPE#Sb&PJT*!XaX%V?WVVdxTXeY;UK8}=F8~sE zP^mz0XQE?(41YCJGMM@kFeqdPED{2Nc>c78(8zoqVzY2RRPwO@X?y)9*+80t;izA2 zO7XutnBf0kIGAJ-fdz_SBNY)*5sZA^z>b^XWntu6AjH$MggLOR5sYGl{E`(v7MC>n zHR&jprjGZQ_Yw|v?)$O^l8x^tP*(q2EuW4ZZ0ice@yG=$K8YEf>JMJ5T7y0^;fkGz zUdt*u@I;t=8({GXu8!lFXVasL*)NXhq>=1s@D&LR={K3^K3DOla=v}R(!SKyMN@2K zXZ>7T-s~oM?p>bg;Z`}yv z_nz+Jz}%LJkjEoJ^&}~p6TzgZhQ?VTV&1-Wo=!q=a>}5mkNXgRDbk%*asnwq;tKOX zWTn=ifVG*de-i({P5-Yz`rl2zFj(tNaR>H;2}P>~nOuP7m(agC<$WQl%ny7QZZ6z^ z=77JvJ2>j5?~zIfQw}#6^IzyQ$3M{L{~-1M4Pj*p9{^2~fM5tH^p-5*icI7xRPbBq zlL*j#l=IAS9NfqGDESgN(t|<7QFr|vKsX7IzNrb=xd#ZL1a@Np1;vByaPCat$H|q0 zAXk0{J_wYk^!xckwG{ObXNvow;)3%}H~inW@$Vu2ueR}pFj#62`nTQtV^k09-uunV z3ekE9q6Kw=KtxHhzj#H!NXrLYBkwoG56i3H5fh)lh8iM*F4_K)JS&2V6>r=UCX_pg zoYu*-AU(WRO&%%U6PAxqdKo@VW5t3_reavh$m(wY?lL)dxPBP*hxZnW^c$h;Uu9^mdC4G*v>~I_p(=A!L-8zR zzFKGp7TubaS;L4CB17C-_QG-S z)g$;kfd?-u|M{U1e5gS9l>lDc3rp|0@iGx&xMVMV0Ij)|9@us;{P0isqQIcd_ zwN-;MW%lu<`=?YHT&!o*YDV&?+-b#egVi0S2BA%w+N|eYEG>l1+B8C)uWJArr2sDa z&9|JmHa>x=pyBi2vp2=JC5ub20+#0P4E~KG9&E7g6siO~=khM^fnRN7+14I$j@Zbu zRPQ)PJT&58t+79JLJqdsI@bG+z`ZR2*poo@FQeM~%KqQ{Gk;X}IsfVK8612G*A0NZ z1jfPPZ_g2-vEG;p_y=7=b$^4}CBq*?I}kQu6$YF9blwFCs7wH^VS(_S!2Dc5_=Plk zuvHMa3M61bqZQE#*|P+8sGzxyU*D?_$3lrep}8`vB;3L!LD*8of;TfbvO&Tjzx~>z znysiF7%a~NMFtxfivE}4K0_`MKmvAho%}%ngfKN1|C4OMwbI|*=l(;n^gG$ikqvO% z09C+7THXCRYUBo7DiOPJ{}SKW zeUb`$Xc&J(S$>!&|4|tV{#K`uHRxnoEp-eddHZFXXrMzLg5g)M8Jx&;Jw$p$ZTNj~ zqq}F2+a#5eca%mtCNb+0WEJE8G_X&e`GV8s<#7lZRI8eiUFpW!w19y6V$zbUQA+zv zroUVNcV{x?)tyr=xFd!yFh*b0>&&8plgSz%^NNNuSUApgFT>z24(AIKra@fTr8B3$ z9Vm*#a$H42N2!!>)WpRykgF-gwVG8lLnDez?p_XEI*E4PN-BqMwzUxl1&K>PAj4$` z^J4x{9&<-^;fJsiY{tm-Ta*iRujC^9S5fW{8_KT#Y^8yTjEp}AiJ(os zOa|^_i3}t6?20ggSt8xQ$5vs3ssJ+bFoHYQ5Erl$uN%1ZrRRVO737D40twex{mPzr z9x@L#Sb2UTC4cB;e>+A0%U-)z6XWZP{G}#V_^)bWuukdMV1jRm3U=Qi6&@yPvc3KW%yzl9+@nrpS9m+SDDu+2h=PWwYa5}MM3Zb4n~dfR zyGs-hTAK*6Sf0UA*>}~isrZwl-Bd9$k{Lalbq;8m76Td7l&k9L$<`eAD9Gvue+AN` zG%eC5`(ZUZLV}ORIfyxv%$>|S2#nS^tfsbfUr_{J7MHz*atUpqji?fhfDqiW%kejV zjP03hKWBJnCfG6lc)ET0O1ZRCHUh~XAXO;5{m{T3Ks?z0SpR8`3d(n@fIT$b5OloJ z>pUN?Uqbp~4ebq?~EI{?x>hJN`vbX*|V(GlZa2$=~S zcv_ySNsCH$$|AMt@JJhXN|$EmpD1ikhF&L!88EBP?R(5^h&W-p&aHWf_{DIZbIq94 z7YB-c$tetKsnz%(PwOv`!@YX?3hLQ*65eD}k;On?k#=agXE1N1W``mGqXUM?l1)n8 zUEO%ZvmjNl_liT^coOxxP!HBOCg$Vh1=*|OD@3%J<{jeeXW+j~vyAn@)pIGJU?aX2 zgM}G#WLK@COvTiD+qKBs7zS@BV>mGizZ8S$a?S3GCx?pyeZ51iv zDAK0W8$B?G2*wTlvpSk2e5rINZfo@V#F?spm^T)3bln@-tu_9e?wcFIMG~o^#|28f z`9=~~@v{_n`J_+FORE=c>w9J6j$%*X*K*v_4nxk`BT)uF^rwlXaa^IwGO^{V>Xv+4 zN&E^cx^4~pO2h)ig2MwBl@m-%n1IDeVm*Yfm*81WKa5Jw8r|KV8N=|+P(89yT=Ij6 zs@u(2jnvF8qip*cV>A;j>(R8)+QTl7o^`F2|;|$lfQUq=>I5% zV8Issf3`o(54Z$7Y&lsZERq@z-Tx75G=r!pc0mXobS0w%d}(oh!3*@nbya~7u>LV8 zzSkIR(N;sdk4lA7->+b-SP?11Y_^O0xv+IEk6M;yt~8oj$0eQIaC^^JST3oeWYD8T zU+9zUlPOuvbPwfM#NBjKHi57QOBDQt$4|_UWQUXHla^yERA-YzPVzvobTXhd7ug*d zL$!Ch9aN_>`bCaJTaV#LadO_QkU6j`TQUiId=-C)*_Sc?5db~{{gJfPC;h;IB!My% z3aL~UU~qS&IV%2_vh%*6mFyHVOZZ_)SEBaO0VC-xcXcK~Cg@HD)qNO)VZXnkuY!w= z`h~15f1FO@f)%iUnyS{cSe9`&Q=(yYXU&s3xx$K3wx}hYc<-@1K_Cjbzy4}4z^*+^ zyCB5b#Y%eYYjA!?55?OIRQ1>bNmS?(B$n7C;HK~8+u&j4Hg0c*sYcy-!oane(FKq3 zw}*S->jafsP+c=7R}ZWr??V;OpYGHjQ2?BoIR}io`Y$Q*|EA8t2frwSl@*GOAAJbw z5KQ3!nd*?zb8FPxLPcDGpPU`6zq)8`FO>ci-jx4x*amZM{_%ikXXpKixc{tZ`VO5x zQL-u;eQnGJAHL5awc&qsl=XDMPaANwnOGj#2+5Hy4>Bag9dB`kNCwvMgLL0iBtAE< zbl);IvYpx#XJSdI%VQwrYXqivJlfK8d*;6XE~ObMz%Kxp_O?x6MsHHe*{;&5c>eJq zQ&1pe$fqFQ1}ZtA(WvS!tN4O>IP3By9{&D-#4sM5@l{^#6hSB8JKDvQCATxB8`BN! zn=Dsq#gC`LqFnn<@Wz@ybr2Mo9|%DRE!L*n8rQ&GLiY{i=P0o_O1 zM<^P3=Kc>Y-Jg;N^)GD!n9leMqxBeP19#KF-igs_I?o}OOgQi$9uYC->)Gm3tC5RJ z2A2k5BA~yWlRj2;4NKFnUK}J(555^t$r+(WXU@1;FLd}@Wi#|V^J7hQ~?bW*Z z&~|(Q zhlE7sRFXTysz_nv1WoHbZF1k&gJINZ7!osDOK9$ppjQ)Csi!ju$H_;!2#Ul56uln z>Kif4f7!L^zaK^nFi4{AOph}k9aJ^czp#gKzIQizsX_uH+^Krd3vJxfze&D%8(Uci zcbU8jFZ=bh8^9n19n(!wE%-T=EUTIEFxi=If*NmEn)*?RyqfZ*JFl}0Z5@UmwYrgS zg;tR|u2@gO3Ss6~7ww)kYn-FG~U`YO?;P;)7XE-L+ zPQ><7@!$1!9}*`O|;Ea*Be&RNb^Xh*juXAcbzTx($i*na{~>0|9byqFKZ zqdS?xFCayYB4xI^37S#B+mUO-m&j3sn5ZEVV(&VUjYv01*SzIj7|xNDd6I3+#t%Fr zvKaHpQzvz)9&;M-8Ot^V-kLBI_qzperw75_KO zzO9%Tg8mMyxPJKc$!1_z*tm--eJ=yL9XT@tz#H2Qr(pIDep>ql@NK#p0?HlB6I^%s$_kIIeI*U^(ns@2EhN$LJ&%rF+U;W4YNWA;R!J0p z4EeGJhs~ff@z4bPRg)qA(ba$%CO^|bVk?+mf(=%dQo3ZfbdCl9URczHe#Y0)W)06z z4~ItrOS^4$Rws@gAH&nBhmnj)K!-aDMfh#pEO>bAYU$ZkN;6cBP4fkmuPWO0o0jdb zS|49fW^3)fm{r=v={K9Vzx4+BaRXePc0 z0noP9VYKNZO9)Y+ONxXR^kYW2W}?cTq6NZYvJ+klct**Wf3xK#Z!?ovU?Yc>>dg&A zAOViB-jcCW5Qhju(~BL)21dx1(0;#39$Iq@U$p3y!=OTcCWuHf86*9oE-Ks z{6n8>=xu)entUB0OzlO*Q3J4jGmU0rF_5rja}XjvMA5(e&W+bRC;#*Kc!8cv9KG%& z_!<2&Mq8b|)aor)kyqxh3{;*Qqfb4i73!z;&|c}~*-dQ*&?u|%V9Pry1=4yYzHumS zoNZ2C33-FPSKKDhE+kWHkY`KNE9Xqlr+`MT+@lXf>@eZCVB0Z;Y^WjS&@n-U zQ*h}}#O3x|_4A$;P#L9K_Vr!t&^PFU<-SCvZIxc>hO#|h#jBNZFpT+D1|_6E2Az{x zBjb|0@9(ahRLok)=FmjIJ&cKfcL^Y}Vc35)w#^+5fdu6?_RwE*qJSibk z?_Cn{gjgkQNoTl(g$J3h{d<7?hz~xFy3W`aa8T@gTy>_Y8}}DHso-}5*BNCSNq}$o ze%wqh&C7ya+1T!H-gVOf+StK&96#OQuv4JGcUs*U(go_ajFsLO^YX^cvUhGvk~}<;`bJ7s1f(xs8*o+SlJ&SP zJ>%zzn)lat$o6e4{OYLQW=zi`bt`PM_GNpW16lyMayE0DOU%;Ud4hE%+tWJR&0h&L z#u`}i|F97esQcT_7Ty}H@y|`gR*x2i?;Z~7djt1ESaHTAk)XWgCxzNwG zfspwUkOSxSnY*7`kFn<@9Cu6{)H%3cu%&L?)aLZ1XHOHy$19`C&r5~e;;lgpn9+-W zdesON=3~44GVO7BTIeQLSK0FXP31zyN#X=ugOk!boD`8#J|jLUtbFKf^WKpZ(&g}DO-Tx>)8wCnB(JfF zuo@8fHBjLwD-u<}R%_D(u2sn|r5er*Yt2W1Bk_jRp1b8Yb>GY2R^<$JP6}J&((WAk z^SGmm@sjg7_>O&S^a&HSJ7&Kjd#|xwrSU0C+Q!Mg5zd3+Xpf=LXKPRR1PbR5f8k#n zD#UgD5iXwobgF-KdcmzKn4>S{Qv1tTjuGA-tAN+k;T^m+Y@s}gRH%^7h->kDZ)>Em?ZCD95-jLQE1=_H-?Ai5k zz08vuZn9sZI(EW;G;Rxpx8gX*Bcw6A@kZFiREXQL7s$(=<$`6lMx&*p$#eI*%igd0vEtWyJo{Ir?v9a+cgOaeZC*9G+!MxxnWoDB z+!h?*R>wc;%>N$9IB!2QDE^l~ZflnHXX%aQf0xnbo_e$KGSCX8Q|8@lXYb2>Ad5R+A>2~0oShyh z?JQ+Le_F9aLcLwPa$Dp^6I+z0`%vpt-XbV^&i5SFiH&52c&B7L6ygw(FL|<{e27Bl zhDn(dg8IAAXehs9wmA_KuGy7X?8ZxwiKW-XNm;dlF^}`gS$Ry$d-;#8{EyMu^_V5s z5;Wp`0|bCMIhldZ+s!SY&75%uhUyXr2Cse8;vKY+>{whi=3cWpU8$^X@+eW$do*`LwD>b z2#ASCm=7bNkA%XQl`hRBCa|;M`#7LNrGH&DSGx{e?_Fd5eVf=RfP7xW$eCI5a@@))@ZH3#!@6ODW7!lo&dfMB-9%jKm5iuSr5~0#hfn{aDR_weBjZM< z3rR;hPN0({Z?ON0%ftb`LAA5bmS6Ly8?%GTUZ#LbBCi0A<_2+G&?Oh)62Fde_9jc{ zJJY;}0{I7U4^F~A^i6y~?yxyc>}V0nwHn76jn}OuU)_@lMZ$=$z-iavx#xSekX*9+ zwCh+ED6kJsyKRlK{tUgT{Pi0@qO~oysw$>IfXt9%fgc>L{(j9^i2?fi3*=SDjx%9!QR|WSeWiVoS_UEK`BkMwOpi&9A&$N_gtmF8qY;cJ^cc^~U)q!U)iQ?KaJE zO=+>s{kF}=V?u1OSjT~TXn<=*_`8OT4_{m@UGE?tDZQ#Zo!-Mp|Dc_3J2>TcCdu%r0$v&KHTT&*mhCA(m@d-*mZ zm`sV!klNfc`A^ih*seH8tq)AFKTc;xP6)vsvn~Kr-yE29MRa9nT`o%H^^LJx4?mLa zJ1}7%wG_5m^YQ+fc9(yp-5qe+J+KYM{hfB%$=-sa^({DBnSMm8=+K+lAJLlsuhGhP z(b&G$^nJ_jm?zYkY2SXaF>y@pqvybiFfft3FOgIW4IHj&8Riuagew>}d?4@s{~o(s z|1Wm`U+hx+j@{3E=7SH!E<0Za`wD;(z?q@B0x*K(WaHqxho+iW0K|W87FPhek2%R7 zYgp=#E7*EklC!h2v(u5=yO_G$xLKN#ds@1>**ZIsb2D==b7mNQ1JD!lu-(%sUESQt zx!F1YoN_t2c({I^Zf5lD-H3Re-HsYhkX1g%JcK3GuPRH~<2{^{B_2w&Feqozvy)v= zDH2m7^$WbsfjWt`NKL7$Q?I8fB=a`Nx$fv~wb3Kc9uOli)```BJc!AI8;^;ESESTJn7tma=uF^( zhEZ#n4lF8U%t6S<(_D^U31#+25ORMj$x4h9fRWRwQOhU>pU+H_A1q4M`2tQ~>T`j@ z4V}IO&doqM_Cb671#4N|bDxQJeHnS?a1F1%2IIEcuVP7sFp0)p_X z#)tfGGEe=Z8eMg^4m(CM+&}S1p}z8@4i@8;vmF?M$OzenNQX+#pvff%YK9bmIfj8r zJc#6P8;AjupT*uwiC=x@7gD7thQm>eO+vkeM==zb33>!nvP>wO>GmHw2lE*bAz z0SSR(?9pI6sW54@b+2^zmgQjydi&j(myA8JEj(LXJxlE6qJt;*)s8XR8Pj5Bg;1$8 ztNFM6m-4~$uEZvd=Vz&=$hu4O%1y2YeTs46-p!dz&tAPtJw~L>Yi`f2_&DR55T0bz ze*Na|&RtL!sI5a@fgimQd)e%L(}+H1O2C;r{oO~VBt6fA{qiP`#=>52j6x~XbdfAT z;})5pQlbqa)4SCmCr@iD&nW8MOoqqA(b?IKqhzM`4E({yj$NCP=~G`+vS^+e zyQl92s`TnKF#K*nWXsPN>KFTh@OSQ6Z#@|EWx;ZnE zC1VACAOhGilNKxCi_f4*u3w=PUb}`EXWp#&ipe5;&7x1|>!wEvHc&6>JDxKh%<%36 z(+TUDv}9yZgSFw<8FtRIunI3l_d=q@+)#_b>+39D&$~OP$%L&^)H4o%UXZhgQ6d%L z-PBNFJ9V2WfqO;)`aA86cSEn0d;4);cxwgZ=4u0-+kmcG4*0MWr@JBPR@8yd7iubz z3GNb8PhAJs*q;r`GBe(Ij9E8*OnqAvW3EozZ6?5NtebO+M;=}?(j7}QHHKV~)UDU#s?qV2S!&dX>6X zKQ}jwBrKD(tj(Q}_9a&>Oc)=wanO%VEoL{_Nyt)4#W&TS=hhRtN$;JO(IoHGUS~yw zQn&j$a)ZRkqG)x!`5?}uC0##(hE4~xA&5iM~mwDpC ziGfi={?apr()56~*Oe%xvNYH)Uo){aTg=VQm)9%^roqPnSXXK)XWww>&oDWQo8Viv8AmjOk71vkc#h5krM7{Ww8|_$9B{ z)3B8vA8<|Xa<)sg7mC3bp)xe zalFMP&elkv`^7rU&_q2ny5G<=$UQAiTvE@|$NUT>a#)JJ(GP-gHJ}>JCM~ zFcQ+DpCXA_e~JQWrVwlyf`83D=~3G z@cCaH#p?bCZi!g8L6Jl@?p(U7BNFvC;X0)(54#9@p%@jE739k;Sn+Osnp;&ajc1&gDPbQz+xc^Swwb z^R}Ey(C-?`ii;`q*ety?_^fL`{qjq#U`1cK!D`;!HwB4K{VgPVd>H}Bn5lN~ zj6;V!CW*rgyP_XLnK-jpXa7_L09^a(MA_nK^4{9Sa7lH8(MuxiV(SL-83J&RYYbD4 z9PNPiZLs@03Cl?Z0Qatt%;=_`B93_w=M?ukpxS?ak~)gv zKz)=niWX;40V5k67*_8MtdNf6BTm%e#eJ6MkQVg`7KHwl-&@8^aN^2ljFgap!)!4j z{g^q~eC^7ILrbfdP0|vd3AClcw~Lfc^nEsbFg|i8e6T*dkfU}$o=JzS`*v+-e3H#~ zxQ4;d5>Z|rc4&**d^g*gdP)iO;dO=Wz%!wElZvg78_(3E@^MOm2HU;$yh)xp##brLLWlM8~liQ;H;BF zmsFlr3m2V;k~8T7SIBpd5kqpjjH=EVv+wV$Ixd^`^F*f$hR-8=rlP*6(Y^b&Er`KM z*`d+K7t<%_R92)z2rQ2>M6UEKu!}o8!81hJEJ`tR#8x@XN5*~;YW`z zG%<+ke##qT>JYXPGwCe(_3_mbk=L<7eQbi;$t@XLXKj=smc32Y8tvPO;V3_fMlDOc z5c`>ksT$|K_ud9OMgmpw`zuc?{SF&vZ@pXM5eO3BQBZt4_O5Uy znyyiIB${SbT_jd!kN7z2!Peq5%5GW>)6O`}LT%_d(dtx3d6mx15Mtq;Eh)m@9KTON zu;=@6kyV*LJM3VcxmzIfM^ zENA-ad-!d$e8O8L3R}E0dq-c>cHnHoVp;1-6^;77Jwd#gP$20_ouaKsl_LM+t5577 zH`Dr%LB*bg_!}YVdd+K3To_HaM6aet$&$!Z_L{)(YzN_=A)!M6`0&M9Hqc z_n}M&$EoJ{xot3It64b>9}Fc&YH;_)X@xD={ApNl+qxm7yU^@WJM4TeB7t7pJ>#iI z>S>N|X?9McFyCxl>&tQH>jlzVaF3WnANAsd&(viNJ(ZznXAcZlKDxXn&0lp0F&@5f zNbUYMGvq*<(_KVZcoWF+a(nZsCafJ)C`%S%`)gQVmp%qgq~~EH^e-DzvJRABci7Is zTb?4mM5hsVJyD}}15W-qiX<@6u}5+}-NqU>Nyv@zeUiX&?`T{x!G$5F-GS0N|5YQl z^LUtv>p@HMTT^CIq-<9<0oAbQKIa}s(xirJOmzwVUIJ^Y+8dlkG<E29gdb56;cA`-W^?inr|17 zK4YzX);}Oxm1wLfaAi!=uA^)<<#v**Sfv%dw?WpQw8Qo;9@7e&SXlK%#pvasJf(Ez z!kvm@b=4HotI8dY*3`?H3i<>b%={@2k7Lr7_@3%T2rGOABhu*koh{YelS^!I_W->& z$2ex0b?pHcYip71j;@}-tJC!cXt(`%hrtw*(pp?qH57iEhno4`7=Mn-K%Do(iFT9zJqO@0}frqIVx-GcQJ!Reu zLQ&Bd)T6zZW(}F&eBC%O@CqWmt8rj(g11)7pqGUyEs9+h(Mdt^+cs*zd7EL_3u9 z#{pG5i&Z>~bjAQh0za~}3EviDfU>u@ow#-Pr$lt^gOn}P0#L%*U_;!|COf`pPHT6Z zZ>jG!V19`{SLvx{X{*PdfP_f!hiS(RSvk*D->Ug)bK{NzKXHi{UWx;+s=# z6|>NYTJ<`OmxA+UGNFNH9@~=Lm1Kog>ddK7JnANAV62jHAn;;u?ZXt)3(~w%+T&9o z1KC|-y&o}1al6>{`f688oe8An9iW?amD&eod3ttw{oSbH3}|!y_2cu;0Mp}n?4(8X zB($^qAm90@1*(^M6p_jwLRd`8r#=he)sxvcTBaTbS6VG?N$a6;I2@iLiu!-53k+ip zm?F`G5kL}oUtxRVSzmbOTsMp>mX=)ZH^Y_33zlwEs0=wrHuujv zQZ2Iep`XiYUPg+m_qWN z^3T*-oq7(WBx`2V9XY>>j5-~wYViLs=Cwm0uv8vlIL(kAW!JCxF%JHD-VV;l zp~fwLoA3CJFH5bCQ#COC8!hK-hb0W_#AIqlEunUd+}f3@?$H9%uE zb!ue-EhDzqH$l*{A|a-wDps1M=JMEZO})Qatgh>XepvPD)JxkmadNC9l^|MsDtpV< zezs)(6Zf0roexah`L+D?Z+wKBOPR-9_zNJ1RW_&RnyQDG}yDH z4sLV>04oHEi2}SJyyEX3-}(l``t!;On<>}V;owf##fQg5nAfO-EIeLQe9%U%PpWQV zRg*^z6NxVPurVD#%AN0czGP}qXGn@OimVuxwLlJ;@99(u$bUg*7bIkWZWWPAr$hcaGQ*FNT;2RgwuKWhbW$)S(jr1v)=XN#W_I2VYN;rCaEB$IQ zVj#j-w1jLy93lSgB!7pGAG&a>$f5_FXL;oG;2UXnN4o}XQHrv;*ATMW?bYQc?Knq9 z<*S}Fn)OiCSssN;s0~%gc1-W+pe(U~V(#f8$?a| zE;*D|%Gj$a#W5?)cFh=45u3{2ESTtBJr2C{8M(}L3*0#O&-?C{i!Rof5{9lX z#$dxVX|h~f&{2xwc8gCyJ^rkzEsjt`+@{}vObSTH8G^X(%P|<#C%_$QB)}b9BG3@D z<72_)h&o)Hl?2n1fvXR%ONx_RB0*RkZ2ywVJ(RSk6BIT zJ_G7+3JrnG;TMphm{y0+n_jXaJB4MNpf5la-R1OJ8 zI=~4zE?j?^yAdX$8y-n>&*RG~Uz-ngT*y4aN8xjCq$#DVZRkd*{jg{kJcSVYOk{Nv z`UR937qsb)Ru{5-8$?yd>tlKicurN@$zeHU8nU z%b{xeMdtY&fPY88BXI22%q@#DgU%I-l84^4(5x!lkpCoh5w7QvbPuV~&Q$G6o!X&K z)*L_nXf(@gY=CkMOSCgkn*0S^!9@%(01hs?dO4f&&{6s6Cg5;!YUMhw*EHd3x!@w% z+1&!(08<(*+PvkCg=qV2|7?KDwV32F7WUp^5MD7Q{Mz$ zaqdx6tPR>2;OCg*)$anpJLibTq({uC=ovb#3yL=%G3N@_?Ql=@tY#=DUe1aDjh6_k zaLbH_2+L@h#80i`m7_}JqPfi7jw5dw#>*)y=_l`hcyimS z{b{F=vd&}PU&G-{y)v;`Z&L1%#!&-9wqcw8!zacgjZE2BpW4Eiaaz$Pc2-34>m~H$ z8DR+J7@?Y#8R42WikKuntDOj)DeK3$SLxWw2EWNZd5?Yv$2xcZZ;m}bg^h0RrmpVZ Wu9jAaY@D3DynKi>G?L0vi2ny|vtHo< delta 45910 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 diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo index 1f994e9..f2ba597 100644 --- a/docs/html/.buildinfo +++ b/docs/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 486d1ff73ffb3f41d31651516deff8a8 +config: 33a23b4514891ef44049bf19634072fc tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/_modules/Lib/Allocator.html b/docs/html/_modules/Lib/Allocator.html index 0abe9c5..2c64d77 100644 --- a/docs/html/_modules/Lib/Allocator.html +++ b/docs/html/_modules/Lib/Allocator.html @@ -92,7 +92,7 @@
[docs]class Allocator(): - """General base class for Naive, AllInMem and Smart Allocators. + """General base class for Naive, AllInMem and Smart Allocators. Replace all temporaries in the code with actual data locations. Allocation is done in two steps: @@ -118,23 +118,23 @@ pass
[docs] def replace(self, old_instr: Instruction) -> List[Instruction]: - """Transform an instruction with temporaries into a list of instructions.""" + """Transform an instruction with temporaries into a list of instructions.""" return [old_instr]
[docs] def rewriteCode(self, listcode) -> None: - """Modify the code to replace temporaries with + """Modify the code to replace temporaries with registers or memory locations. """ listcode.iter_statements(self.replace)
[docs]class NaiveAllocator(Allocator): - """Naive Allocator: try to assign a register to each temporary, + """Naive Allocator: try to assign a register to each temporary, fails if there are more temporaries than registers. """
[docs] def replace(self, old_instr: Instruction) -> List[Instruction]: - """Replace Temporary operands with the corresponding allocated Register.""" + """Replace Temporary operands with the corresponding allocated Register.""" new_args: List[Operand] = [] for arg in old_instr.args(): if isinstance(arg, Temporary): @@ -145,7 +145,7 @@ return [new_instr]
[docs] def prepare(self) -> None: - """Allocate all temporaries to registers. + """Allocate all temporaries to registers. Fail if there are too many temporaries.""" regs = list(GP_REGS) # Get a writable copy temp_allocation: Dict[Temporary, DataLocation] = dict() diff --git a/docs/html/_modules/Lib/CFG.html b/docs/html/_modules/Lib/CFG.html index 6764529..12e2257 100644 --- a/docs/html/_modules/Lib/CFG.html +++ b/docs/html/_modules/Lib/CFG.html @@ -102,7 +102,7 @@
[docs]class Block: - """ + """ A basic block of a :py:class:`CFG` is made of three main parts: - a start :py:class:`label <Lib.Statement.Label>` that uniquely identifies the block in the CFG @@ -138,7 +138,7 @@ return s
[docs] def to_dot(self) -> str: # pragma: no cover - """Outputs all statements of the block as a string.""" + """Outputs all statements of the block as a string.""" # dot is weird: lines ending with \l instead of \n are left-aligned. NEWLINE = '\\l ' instr = [] @@ -153,11 +153,11 @@ return str(self._label)
[docs] def get_body(self) -> List[BlockInstr]: - """Return the statements in the body of the block (no phi-node nor the terminator).""" + """Return the statements in the body of the block (no phi-node nor the terminator).""" return self._instructions
[docs] def get_all_statements(self) -> List[Statement]: - """ + """ Return all statements of the block (including phi-nodes and the terminator, but not the label of the block). """ @@ -166,7 +166,7 @@ [self.get_terminator()])
[docs] def get_body_and_terminator(self) -> List[Statement]: - """ + """ Return all statements of the block, except phi-nodes (and the label of the block). """ @@ -174,39 +174,39 @@ [self.get_terminator()])
[docs] def get_label(self) -> Label: - """Return the label of the block.""" + """Return the label of the block.""" return self._label
[docs] def get_in(self) -> List['Block']: - """Return the list of blocks with an edge to the considered block.""" + """Return the list of blocks with an edge to the considered block.""" return self._in
[docs] def get_terminator(self) -> Terminator: - """Return the terminator of the block.""" + """Return the terminator of the block.""" return self._terminator
[docs] def set_terminator(self, term: Terminator) -> None: - """Set the terminator of the block.""" + """Set the terminator of the block.""" self._terminator = term
[docs] def get_phis(self) -> List[Statement]: - """Return the list of all φ instructions of the block.""" + """Return the list of all φ instructions of the block.""" return self._phis
[docs] def add_phi(self, phi: Statement) -> None: - """Add a φ instruction to the block.""" + """Add a φ instruction to the block.""" self._phis.append(phi)
[docs] def set_phis(self, phis: List[Statement]) -> None: - """Replace the φ instructions in the block by the given list `phis`.""" + """Replace the φ instructions in the block by the given list `phis`.""" self._phis = phis
[docs] def remove_all_phis(self) -> None: - """Remove all φ instructions in the block.""" + """Remove all φ instructions in the block.""" self._phis = []
[docs] def iter_statements(self, f) -> None: - """Iterate over instructions. + """Iterate over instructions. For each real instruction i (not label or comment), replace it with the list of instructions given by f(i). @@ -225,12 +225,12 @@ .format(self.get_terminator(), end_statements))
[docs] def add_instruction(self, instr: BlockInstr) -> None: - """Add an instruction to the body of the block.""" + """Add an instruction to the body of the block.""" self._instructions.append(instr)
[docs]class CFG: - """ + """ A complete control-flow graph representing a function. This class is mainly made of a list of basic :py:class:`Block`, a label indicating the :py:meth:`entry point of the function <get_start>`, @@ -254,7 +254,7 @@ self._end = self.fdata.fresh_label("end") def _init_blks(self) -> None: - """Add a block for division by 0.""" + """Add a block for division by 0.""" # Label for the address of the error message # This address is added by print_code label_div_by_zero_msg = Label(self.fdata._label_div_by_zero.name + "_msg") @@ -267,53 +267,53 @@ self.add_block(blk)
[docs] def get_start(self) -> Label: - """Return the entry label of the CFG.""" + """Return the entry label of the CFG.""" return self._start
[docs] def set_start(self, start: Label) -> None: - """Set the entry label of the CFG.""" + """Set the entry label of the CFG.""" assert (start in self._blocks) self._start = start
[docs] def get_end(self) -> Label: - """Return the exit label of the CFG.""" + """Return the exit label of the CFG.""" return self._end
[docs] def add_block(self, blk: Block) -> None: - """Add a new block to the CFG.""" + """Add a new block to the CFG.""" self._blocks[blk._label] = blk
[docs] def get_block(self, name: Label) -> Block: - """Return the block with label `name`.""" + """Return the block with label `name`.""" return self._blocks[name]
[docs] def get_blocks(self) -> List[Block]: - """Return all the blocks.""" + """Return all the blocks.""" return [b for b in self._blocks.values()]
[docs] def get_entries(self) -> List[Block]: - """Return all the blocks with no predecessors.""" + """Return all the blocks with no predecessors.""" return [b for b in self._blocks.values() if not b.get_in()]
[docs] def add_edge(self, src: Block, dest: Block) -> None: - """Add the edge src -> dest in the control flow graph.""" + """Add the edge src -> dest in the control flow graph.""" dest.get_in().append(src)
# assert (dest.get_label() in src.get_terminator().targets())
[docs] def remove_edge(self, src: Block, dest: Block) -> None: - """Remove the edge src -> dest in the control flow graph.""" + """Remove the edge src -> dest in the control flow graph.""" dest.get_in().remove(src)
# assert (dest.get_label() not in src.get_terminator().targets())
[docs] def out_blocks(self, block: Block) -> List[Block]: - """ + """ Return the list of blocks in the CFG targeted by the Terminator of Block block. """ return [self.get_block(dest) for dest in block.get_terminator().targets()]
[docs] def gather_defs(self) -> Dict[Any, Set[Block]]: - """ + """ Return a dictionary associating variables to all the blocks containing one of their definitions. """ @@ -328,12 +328,12 @@ return defs
[docs] def iter_statements(self, f) -> None: - """Apply f to all instructions in all the blocks.""" + """Apply f to all instructions in all the blocks.""" for b in self.get_blocks(): b.iter_statements(f)
[docs] def linearize_naive(self) -> Iterator[Statement]: - """ + """ Linearize the given control flow graph as a list of instructions. Naive procedure that adds jumps everywhere. """ @@ -353,13 +353,13 @@
[docs] def print_code(self, output, linearize=(lambda cfg: list(cfg.linearize_naive())), comment=None) -> None: - """Print the linearization of the CFG.""" + """Print the linearization of the CFG.""" statements = linearize(self) _print_code(statements, self.fdata, output, init_label=self._start, fin_label=self._end, fin_div0=False, comment=comment)
[docs] def print_dot(self, filename, DF=None, view=False) -> None: # pragma: no cover - """Print the CFG as a graph.""" + """Print the CFG as a graph.""" graph = Digraph() # nodes for name, blk in self._blocks.items(): diff --git a/docs/html/_modules/Lib/Dominators.html b/docs/html/_modules/Lib/Dominators.html index 657816f..7c2f30f 100644 --- a/docs/html/_modules/Lib/Dominators.html +++ b/docs/html/_modules/Lib/Dominators.html @@ -92,7 +92,7 @@
[docs]def computeDom(cfg: CFG) -> Dict[Block, Set[Block]]: - """ + """ `computeDom(cfg)` computes the table associating blocks to their dominators in `cfg`. It works by solving the equation system. @@ -123,7 +123,7 @@
[docs]def printDT(filename: str, graph: Dict[Block, Set[Block]]) -> None: # pragma: no cover - """Display a graphical rendering of the given domination tree.""" + """Display a graphical rendering of the given domination tree.""" dot = Digraph() for k in graph: dot.node(str(k.get_label())) @@ -135,7 +135,7 @@
[docs]def computeDT(cfg: CFG, dominators: Dict[Block, Set[Block]], dom_graphs: bool, basename: str) -> Dict[Block, Set[Block]]: - """ + """ `computeDT(cfg, dominators)` computes the domination tree of `cfg` using the previously computed `dominators`. It returns `DT`, a dictionary which associates a block with its children @@ -174,7 +174,7 @@ DT: Dict[Block, Set[Block]], b: Block, DF: Dict[Block, Set[Block]]) -> None: - """ + """ `_computeDF_at_block(...)` computes the dominance frontier at the given block, by updating `DF`. @@ -192,7 +192,7 @@
[docs]def computeDF(cfg: CFG, dominators: Dict[Block, Set[Block]], DT: Dict[Block, Set[Block]], dom_graphs: bool, basename: str ) -> Dict[Block, Set[Block]]: - """ + """ `computeDF(...)` computes the dominance frontier of a CFG. It returns `DF` which associates a block to its frontier. diff --git a/docs/html/_modules/Lib/FunctionData.html b/docs/html/_modules/Lib/FunctionData.html index ef804b1..d4179ba 100644 --- a/docs/html/_modules/Lib/FunctionData.html +++ b/docs/html/_modules/Lib/FunctionData.html @@ -94,7 +94,7 @@
[docs]class FunctionData: - """ + """ Stores some metadata on a RiscV function: name of the function, label names, temporary variables (using :py:class:`Lib.Operands.TemporaryPool`), @@ -119,18 +119,18 @@ self._label_div_by_zero = self.fresh_label("div_by_zero")
[docs] def get_name(self) -> str: - """Return the name of the function.""" + """Return the name of the function.""" return self._name
[docs] def fresh_tmp(self) -> Temporary: - """ + """ Return a new fresh Temporary, which is added to the pool. """ return self._pool.fresh_tmp()
[docs] def fresh_offset(self) -> Offset: - """ + """ Return a new offset in the memory stack. Offsets are decreasing relative to FP. """ @@ -144,20 +144,20 @@ return Offset(FP, -8 * self._dec)
[docs] def get_offset(self) -> int: - """ + """ Return the current offset in the memory stack. """ return self._dec
def _fresh_label_name(self, name) -> str: - """ + """ Return a new unique label name based on the given string. """ self._nblabel = self._nblabel + 1 return name + "_" + str(self._nblabel) + "_" + self._name
[docs] def fresh_label(self, name) -> Label: - """ + """ Return a new label, with a unique name based on the given string. """ return Label(self._fresh_label_name(name))
@@ -171,7 +171,7 @@ def _iter_statements( listIns: List[_T], f: Callable[[_T], List[_T]]) -> List[_T | Comment]: - """Iterate over instructions. + """Iterate over instructions. For each real instruction i (not label or comment), replace it with the list of instructions given by f(i). """ @@ -191,7 +191,7 @@ def _print_code(listIns: List, fdata: FunctionData, output, init_label=None, fin_label=None, fin_div0=False, comment=None) -> None: - """ + """ Please use print_code from LinearCode or CFG, not directly this one. Print the instructions from listIns, forming fdata, on output. @@ -214,9 +214,9 @@ # We use t0 because it is caller-saved output.write(""" .text - .globl {0} + .globl {0} {0}: - li t0, {1} + li t0, {1} sub sp, sp, t0 sd ra, 0(sp) sd fp, 8(sp) @@ -226,7 +226,7 @@ if init_label is not None: # Add a jump to init_label before the generated code. output.write(""" - j {0} + j {0} """.format(init_label)) output.write("\n\n##Generated Code\n") # Generated code @@ -243,7 +243,7 @@ output.write(""" ld ra, 0(sp) ld fp, 8(sp) - li t0, {0} + li t0, {0} add sp, sp, t0 ret """.format(cardoffset)) diff --git a/docs/html/_modules/Lib/Graphes.html b/docs/html/_modules/Lib/Graphes.html index 8530b26..049b6c4 100644 --- a/docs/html/_modules/Lib/Graphes.html +++ b/docs/html/_modules/Lib/Graphes.html @@ -87,7 +87,7 @@
[docs]class GraphError(Exception): - """Exception raised for self loops. + """Exception raised for self loops. """ message: str @@ -97,7 +97,7 @@
[docs]class GeneralGraph(object): - """ + """ General class regrouping similarities between directed and non oriented graphs. The only differences between the two are: @@ -113,7 +113,7 @@ graph_dict: Dict[Any, Set] def __init__(self, graph_dict=None): - """ + """ Initializes a graph object. If no dictionary or None is given, an empty dictionary will be used. @@ -123,11 +123,11 @@ self.graph_dict = graph_dict
[docs] def vertices(self) -> List[Any]: - """Return the vertices of a graph.""" + """Return the vertices of a graph.""" return list(self.graph_dict.keys())
[docs] def add_vertex(self, vertex: Any) -> None: - """ + """ If the vertex "vertex" is not in self.graph_dict, a key "vertex" with an empty list as a value is added to the dictionary. @@ -137,7 +137,7 @@ self.graph_dict[vertex] = set()
[docs] def edges(self) -> List[Set]: - """Return the edges of the graph.""" + """Return the edges of the graph.""" return []
def __str__(self): @@ -150,7 +150,7 @@ return res
[docs] def dfs_traversal(self, root: Any) -> List[Any]: - """ + """ Compute a depth first search of the graph, from the vertex root. """ @@ -165,11 +165,11 @@ return seen
[docs] def is_reachable_from(self, v1: Any, v2: Any) -> bool: - """True if there is a path from v1 to v2.""" + """True if there is a path from v1 to v2.""" return v2 in self.dfs_traversal(v1)
[docs] def connected_components(self) -> List[List[Any]]: - """ + """ Compute the list of all connected components of the graph, each component being a list of vetices. """ @@ -183,7 +183,7 @@ return components
[docs] def bfs_traversal(self, root: Any) -> List[Any]: - """ + """ Compute a breadth first search of the graph, from the vertex root. """ @@ -199,10 +199,10 @@
[docs]class Graph(GeneralGraph): - """Class for non oriented graphs.""" + """Class for non oriented graphs."""
[docs] def edges(self) -> List[Set]: - """ + """ A static method generating the set of edges (they appear twice in the dictionnary). Return a list of sets. @@ -215,7 +215,7 @@ return edges
[docs] def add_edge(self, edge: Tuple[Any, Any]) -> None: - """ + """ Add an edge in the graph. edge should be a pair and not (c,c) (we call g.add_edge((v1,v2))) @@ -234,7 +234,7 @@ self.graph_dict[vertex2] = {vertex1}
[docs] def print_dot(self, name: str, colors={}) -> None: - """Print the graph.""" + """Print the graph.""" color_names = ['red', 'blue', 'green', 'yellow', 'cyan', 'magenta'] + \ [f"grey{i}" for i in range(0, 100, 10)] color_shapes = ['ellipse', 'box', 'diamond', 'trapezium', 'egg', @@ -261,20 +261,20 @@ dot.render(name, view=True) # print in pdf
[docs] def delete_vertex(self, vertex: Any) -> None: - """Delete a vertex and all the adjacent edges.""" + """Delete a vertex and all the adjacent edges.""" gdict = self.graph_dict for neighbour in gdict[vertex]: gdict[neighbour].remove(vertex) del gdict[vertex]
[docs] def delete_edge(self, edge: Tuple[Any, Any]): - """Delete an edge.""" + """Delete an edge.""" (v1, v2) = edge self.graph_dict[v1].remove(v2) self.graph_dict[v2].remove(v1)
[docs] def color(self) -> Dict[Any, int]: - """ + """ Color the graph with an unlimited number of colors. Return a dict vertex -> color, where color is an integer (0, 1, ...). """ @@ -283,7 +283,7 @@ # see algo of the course
[docs] def color_with_k_colors(self, K=None, avoidingnodes=()) -> Tuple[Dict[Any, int], bool, List]: - """ + """ Color with <= K colors (if K is unspecified, use unlimited colors). Return 3 values: @@ -336,18 +336,18 @@
[docs]class DiGraph(GeneralGraph): - """Class for directed graphs.""" + """Class for directed graphs."""
[docs] def pred(self, v: Any) -> Set: - """Return all predecessors of the vertex `v` in the graph.""" + """Return all predecessors of the vertex `v` in the graph.""" return {src for src, dests in self.graph_dict.items() if v in dests}
[docs] def neighbourhoods(self) -> List[Tuple[Any, Set]]: - """Return all neighbourhoods in the graph.""" + """Return all neighbourhoods in the graph.""" return list(self.graph_dict.items())
[docs] def edges(self) -> List[Set]: - """ A static method generating the set of edges""" + """ A static method generating the set of edges""" edges = [] for vertex in self.graph_dict: for neighbour in self.graph_dict[vertex]: @@ -355,7 +355,7 @@ return edges
[docs] def add_edge(self, edge: Tuple[Any, Any]) -> None: - """ + """ Add an edge in the graph. edge should be a pair and not (c,c) (we call g.add_edge((v1,v2))) @@ -369,7 +369,7 @@ self.graph_dict[vertex2] = set()
[docs] def print_dot(self, name: str) -> None: - """Print the graph.""" + """Print the graph.""" dot = Digraph(comment='Conflict Graph') for k in self.graph_dict: shape = None @@ -381,14 +381,14 @@ dot.render(name, view=True) # print in pdf
[docs] def delete_vertex(self, vertex: Any) -> None: - """Delete a vertex and all the adjacent edges.""" + """Delete a vertex and all the adjacent edges.""" for node, neighbours in self.graph_dict.items(): if vertex in neighbours: neighbours.remove(vertex) del self.graph_dict[vertex]
[docs] def delete_edge(self, edge: Tuple[Any, Any]) -> None: - """Delete an edge.""" + """Delete an edge.""" (v1, v2) = edge self.graph_dict[v1].remove(v2)
diff --git a/docs/html/_modules/Lib/LinearCode.html b/docs/html/_modules/Lib/LinearCode.html index cc12086..63046f3 100644 --- a/docs/html/_modules/Lib/LinearCode.html +++ b/docs/html/_modules/Lib/LinearCode.html @@ -97,7 +97,7 @@
[docs]class LinearCode: - """ + """ Representation of a RiscV program as a list of instructions. :py:meth:`add_instruction` is repeatedly called in the codegen visitor @@ -111,7 +111,7 @@ the RiscV program to a file. """ - """ + """ The :py:attr:`fdata` member variable contains some meta-information on the program, for instance to allocate a new temporary. See :py:class:`Lib.FunctionData.FunctionData`. @@ -125,7 +125,7 @@ self.fdata = FunctionData(name)
[docs] def add_instruction(self, i: CodeStatement) -> None: - """ + """ Utility function to add an instruction in the program. See also :py:mod:`Lib.RiscV` to generate relevant instructions. @@ -133,7 +133,7 @@ self._listIns.append(i)
[docs] def iter_statements(self, f) -> None: - """Iterate over instructions. + """Iterate over instructions. For each real instruction i (not label or comment), replace it with the list of instructions given by f(i). """ @@ -144,20 +144,20 @@ self._listIns = new_list_ins
[docs] def get_instructions(self) -> List[CodeStatement]: - """Return the list of instructions of the program.""" + """Return the list of instructions of the program.""" return self._listIns
# each instruction has its own "add in list" version
[docs] def add_label(self, s: Label) -> None: - """Add a label in the program.""" + """Add a label in the program.""" return self.add_instruction(s)
[docs] def add_comment(self, s: str) -> None: - """Add a comment in the program.""" + """Add a comment in the program.""" self.add_instruction(Comment(s))
[docs] def add_instruction_PRINTLN_INT(self, reg: DataLocation) -> None: - """Print integer value, with newline. (see Expand)""" + """Print integer value, with newline. (see Expand)""" # A print instruction generates the temp it prints. self.add_instruction(mv(A0, reg)) self.add_instruction(call(Function('println_int')))
@@ -166,12 +166,12 @@ return '\n'.join(map(str, self._listIns))
[docs] def print_code(self, output, comment=None) -> None: - """Outputs the RiscV program as text to a file at the given path.""" + """Outputs the RiscV program as text to a file at the given path.""" _print_code(self._listIns, self.fdata, output, init_label=None, fin_label=None, fin_div0=True, comment=comment)
[docs] def print_dot(self, filename: str, DF=None, view=False) -> None: # pragma: no cover - """Outputs the RiscV program as graph to a file at the given path.""" + """Outputs the RiscV program as graph to a file at the given path.""" # import graphviz here so that students who don't have it can still work on lab4 from graphviz import Digraph graph = Digraph() diff --git a/docs/html/_modules/Lib/Operands.html b/docs/html/_modules/Lib/Operands.html index e2aead9..16ce5a7 100644 --- a/docs/html/_modules/Lib/Operands.html +++ b/docs/html/_modules/Lib/Operands.html @@ -118,7 +118,7 @@
[docs]class Condition(Operand): - """Condition, i.e. comparison operand for a CondJump. + """Condition, i.e. comparison operand for a CondJump. Example usage : @@ -144,7 +144,7 @@ raise MiniCInternalError(f"Unsupported comparison operator {optype}")
[docs] def negate(self) -> 'Condition': - """Return the opposite condition.""" + """Return the opposite condition.""" return Condition(opnot_dict[self._op])
def __str__(self): @@ -152,7 +152,7 @@
[docs]class Function(Operand): - """Operand for build-in function call.""" + """Operand for build-in function call.""" _name: str @@ -164,7 +164,7 @@
[docs]class DataLocation(Operand): - """ A Data Location is either a register, a temporary + """ A Data Location is either a register, a temporary or a place in memory (offset). """ @@ -181,7 +181,7 @@
[docs]class Register(DataLocation): - """ A (physical) register.""" + """ A (physical) register.""" _number: int @@ -234,7 +234,7 @@
[docs]class Offset(DataLocation): - """ Offset = address in memory computed with base + offset.""" + """ Offset = address in memory computed with base + offset.""" _basereg: Register _offset: int @@ -247,12 +247,12 @@ return ("{}({})".format(self._offset, self._basereg))
[docs] def get_offset(self) -> int: - """Return the value of the offset.""" + """Return the value of the offset.""" return self._offset
[docs]class Immediate(DataLocation): - """Immediate operand (integer).""" + """Immediate operand (integer).""" _val: int @@ -264,7 +264,7 @@
[docs]class Temporary(DataLocation): - """Temporary, a location that has not been allocated yet. + """Temporary, a location that has not been allocated yet. It will later be mapped to a physical register (Register) or to a memory location (Offset). """ @@ -279,12 +279,12 @@ return ("temp_{}".format(str(self._number)))
[docs] def get_alloced_loc(self) -> DataLocation: - """Return the DataLocation allocated to this Temporary.""" + """Return the DataLocation allocated to this Temporary.""" return self._pool.get_alloced_loc(self)
[docs]class TemporaryPool: - """Manage a pool of temporaries.""" + """Manage a pool of temporaries.""" _all_temps: List[Temporary] _current_num: int @@ -296,20 +296,20 @@ self._allocation = dict()
[docs] def get_all_temps(self) -> List[Temporary]: - """Return all the temporaries of the pool.""" + """Return all the temporaries of the pool.""" return self._all_temps
[docs] def get_alloced_loc(self, t: Temporary) -> DataLocation: - """Get the actual DataLocation allocated for the temporary t.""" + """Get the actual DataLocation allocated for the temporary t.""" return self._allocation[t]
[docs] def add_tmp(self, t: Temporary): - """Add a temporary to the pool.""" + """Add a temporary to the pool.""" self._all_temps.append(t) self._allocation[t] = t # While no allocation, return the temporary itself
[docs] def set_temp_allocation(self, allocation: Dict[Temporary, DataLocation]) -> None: - """Give a mapping from temporaries to actual registers. + """Give a mapping from temporaries to actual registers. The argument allocation must be a dict from Temporary to DataLocation other than Temporary (typically Register or Offset). Typing enforces that keys are Temporary and values are Datalocation. @@ -322,7 +322,7 @@ self._allocation = allocation
[docs] def fresh_tmp(self) -> Temporary: - """Give a new fresh Temporary and add it to the pool.""" + """Give a new fresh Temporary and add it to the pool.""" t = Temporary(self._current_num, self) self._current_num += 1 self.add_tmp(t) @@ -330,7 +330,7 @@
[docs]class Renamer: - """Manage a renaming of temporaries.""" + """Manage a renaming of temporaries.""" _pool: TemporaryPool _env: Dict[Temporary, Temporary] @@ -340,21 +340,21 @@ self._env = dict()
[docs] def fresh(self, t: Temporary) -> Temporary: - """Give a fresh rename for a Temporary.""" + """Give a fresh rename for a Temporary.""" new_t = self._pool.fresh_tmp() self._env[t] = new_t return new_t
[docs] def replace(self, t: Temporary) -> Temporary: - """Give the rename for a Temporary (which is itself if it is not renamed).""" + """Give the rename for a Temporary (which is itself if it is not renamed).""" return self._env.get(t, t)
[docs] def defined(self, t: Temporary) -> bool: - """True if the Temporary is renamed.""" + """True if the Temporary is renamed.""" return t in self._env
[docs] def copy(self): - """Give a copy of the Renamer.""" + """Give a copy of the Renamer.""" r = Renamer(self._pool) r._env = self._env.copy() return r
diff --git a/docs/html/_modules/Lib/PhiNode.html b/docs/html/_modules/Lib/PhiNode.html index c3b36b5..3f607ff 100644 --- a/docs/html/_modules/Lib/PhiNode.html +++ b/docs/html/_modules/Lib/PhiNode.html @@ -95,7 +95,7 @@
[docs]@dataclass class PhiNode(Statement): - """ + """ A φ node is a renaming in the CFG, of the form temp_x = φ(temp_0, ..., temp_n). The field var contains the variable temp_x. The field srcs links each corresponding predecessor in the CFG @@ -106,26 +106,26 @@ srcs: Dict[Label, Operand]
[docs] def defined(self) -> List[Operand]: - """Return the variable defined by the φ node.""" + """Return the variable defined by the φ node.""" return [self.var]
[docs] def get_srcs(self) -> Dict[Label, Operand]: - """ + """ Return the dictionnary associating for each previous block the corresponding variable. """ return self.srcs
[docs] def used(self) -> List[Operand]: - """Return the variables used by the statement.""" + """Return the variables used by the statement.""" return list(self.srcs.values())
[docs] def rename(self, renamer: Renamer) -> None: - """Rename the variable defined by the φ node with a fresh name.""" + """Rename the variable defined by the φ node with a fresh name.""" if isinstance(self.var, Temporary): self.var = renamer.fresh(self.var)
[docs] def rename_from(self, renamer: Renamer, label: Label) -> None: - """Rename the variable associated to the block identified by `label`.""" + """Rename the variable associated to the block identified by `label`.""" if label in self.srcs: t = self.srcs[label] if isinstance(t, Temporary): diff --git a/docs/html/_modules/Lib/RiscV.html b/docs/html/_modules/Lib/RiscV.html index 6e3ca50..fa3caf5 100644 --- a/docs/html/_modules/Lib/RiscV.html +++ b/docs/html/_modules/Lib/RiscV.html @@ -90,17 +90,17 @@
[docs]def call(function: Function) -> Instru3A: - """Function call.""" + """Function call.""" return Instru3A('call', function)
[docs]def jump(label: Label) -> AbsoluteJump: - """Unconditional jump to label.""" + """Unconditional jump to label.""" return AbsoluteJump(label)
[docs]def conditional_jump(label: Label, op1: Operand, cond: Condition, op2: Operand): - """Add a conditional jump to the code. + """Add a conditional jump to the code. This is a wrapper around bge, bgt, beq, ... c is a Condition, like Condition('bgt'), Condition(MiniCParser.EQ), ... """ @@ -141,12 +141,12 @@
[docs]def land(dr: Operand, sr1: Operand, sr2orimm7: Operand) -> Instru3A: - """And instruction (cannot be called `and` due to Python and).""" + """And instruction (cannot be called `and` due to Python and).""" return Instru3A("and", dr, sr1, sr2orimm7)
[docs]def lor(dr: Operand, sr1: Operand, sr2orimm7: Operand) -> Instru3A: - """Or instruction (cannot be called `or` due to Python or).""" + """Or instruction (cannot be called `or` due to Python or).""" return Instru3A("or", dr, sr1, sr2orimm7)
diff --git a/docs/html/_modules/Lib/Statement.html b/docs/html/_modules/Lib/Statement.html index d8435b7..04ea512 100644 --- a/docs/html/_modules/Lib/Statement.html +++ b/docs/html/_modules/Lib/Statement.html @@ -95,7 +95,7 @@
[docs]def regset_to_string(registerset) -> str: - """Utility function: pretty-prints a set of locations.""" + """Utility function: pretty-prints a set of locations.""" return "{" + ",".join(str(x) for x in registerset) + "}"
@@ -105,32 +105,32 @@
[docs]@dataclass(unsafe_hash=True) class Statement: - """A Statement, which is an instruction, a comment or a label.""" + """A Statement, which is an instruction, a comment or a label."""
[docs] def defined(self) -> List[Operand]: - """Operands defined (written) in this instruction""" + """Operands defined (written) in this instruction""" return []
[docs] def used(self) -> List[Operand]: - """Operands used (read) in this instruction""" + """Operands used (read) in this instruction""" return []
[docs] def substitute(self: TStatement, subst: Dict[Operand, Operand]) -> TStatement: - """Return a new instruction, cloned from this one, replacing operands + """Return a new instruction, cloned from this one, replacing operands that appear as key in subst by their value.""" raise Exception( "substitute: Operands {} are not present in instruction {}" .format(subst, self))
[docs] def with_args(self: TStatement, new_args: List[Operand]) -> TStatement: - """Return a new instruction, cloned from this one, where operands have + """Return a new instruction, cloned from this one, where operands have been replaced by new_args.""" raise Exception( "substitute: Operands {} are not present in instruction {}" .format(new_args, self))
[docs] def printIns(self, stream): - """ + """ Print the statement on the given output. Should never be called on the base class. """ @@ -139,7 +139,7 @@
[docs]@dataclass(unsafe_hash=True) class Comment(Statement): - """A comment.""" + """A comment.""" comment: str def __str__(self): # use only for print_dot ! @@ -151,7 +151,7 @@
[docs]@dataclass(unsafe_hash=True) class Label(Statement, Operand): - """A label is both a Statement and an Operand.""" + """A label is both a Statement and an Operand.""" name: str def __str__(self): @@ -170,7 +170,7 @@ _read_only: bool
[docs] def is_read_only(self): - """ + """ True if the instruction only reads from its operands. Otherwise, the first operand is considered as the destination @@ -182,7 +182,7 @@ raise NotImplementedError
[docs] def args(self) -> List[Operand]: - """List of operands the instruction takes""" + """List of operands the instruction takes""" raise NotImplementedError
[docs] def defined(self): @@ -214,7 +214,7 @@ return hash((self.ins, *self.args()))
[docs] def printIns(self, stream): - """Print the instruction on the given output.""" + """Print the instruction on the given output.""" print(' ', str(self), file=stream)
@@ -273,7 +273,7 @@
[docs]@dataclass(init=False) class AbsoluteJump(Instruction): - """ An Absolute Jump is a specific kind of instruction""" + """ An Absolute Jump is a specific kind of instruction""" ins = "j" label: Label _read_only = True @@ -305,13 +305,13 @@ return hash(super)
[docs] def targets(self) -> List[Label]: - """Return the labels targetted by the AbsoluteJump.""" + """Return the labels targetted by the AbsoluteJump.""" return [self.label]
[docs]@dataclass(init=False) class ConditionalJump(Instruction): - """ A Conditional Jump is a specific kind of instruction""" + """ A Conditional Jump is a specific kind of instruction""" cond: Condition label: Label op1: Operand diff --git a/docs/html/_modules/Lib/Terminator.html b/docs/html/_modules/Lib/Terminator.html index 2194c58..f0c0dc8 100644 --- a/docs/html/_modules/Lib/Terminator.html +++ b/docs/html/_modules/Lib/Terminator.html @@ -108,7 +108,7 @@
[docs]@dataclass(unsafe_hash=True) class Return(Statement): - """A terminator that marks the end of the function.""" + """A terminator that marks the end of the function.""" def __str__(self): return ("return") @@ -117,7 +117,7 @@ print("return", file=stream)
[docs] def targets(self) -> List[Label]: - """Return the labels targetted by the Return terminator.""" + """Return the labels targetted by the Return terminator.""" return []
[docs] def args(self) -> List[Operand]: @@ -146,7 +146,7 @@
[docs]@dataclass(init=False) class BranchingTerminator(Instruction): - """A terminating statement with a condition.""" + """A terminating statement with a condition.""" #: The condition of the branch cond: Condition @@ -173,7 +173,7 @@ return [self.op1, self.op2, self.label_then, self.label_else]
[docs] def targets(self) -> List[Label]: - """Return the labels targetted by the Branching terminator.""" + """Return the labels targetted by the Branching terminator.""" return [self.label_then, self.label_else]
[docs] def rename(self, renamer: Renamer): @@ -213,7 +213,7 @@
[docs]def jump2terminator(j: ConditionalJump | AbsoluteJump | None, next_label: Label | None) -> Terminator: - """ + """ Construct the Terminator associated to the potential jump j to the potential label next_label. """ @@ -227,7 +227,7 @@ return BranchingTerminator(j.cond, j.op1, j.op2, j.label, label_else) case AbsoluteJump(): return AbsoluteJump(label=j.label) - case _: + case _: if next_label: return AbsoluteJump(next_label) else: diff --git a/docs/html/api/Lib.Allocator.html b/docs/html/api/Lib.Allocator.html index a9bb12c..585183a 100644 --- a/docs/html/api/Lib.Allocator.html +++ b/docs/html/api/Lib.Allocator.html @@ -1,7 +1,7 @@ - + Lib.Allocator module — MiniC documentation diff --git a/docs/html/api/Lib.CFG.html b/docs/html/api/Lib.CFG.html index 68bbd2c..f978664 100644 --- a/docs/html/api/Lib.CFG.html +++ b/docs/html/api/Lib.CFG.html @@ -1,7 +1,7 @@ - + Lib.CFG module — MiniC documentation diff --git a/docs/html/api/Lib.Dominators.html b/docs/html/api/Lib.Dominators.html index 9fe1b1f..be0cfe3 100644 --- a/docs/html/api/Lib.Dominators.html +++ b/docs/html/api/Lib.Dominators.html @@ -1,7 +1,7 @@ - + Lib.Dominators module — MiniC documentation diff --git a/docs/html/api/Lib.Errors.html b/docs/html/api/Lib.Errors.html index b0f8251..f1c4dd0 100644 --- a/docs/html/api/Lib.Errors.html +++ b/docs/html/api/Lib.Errors.html @@ -1,7 +1,7 @@ - + Lib.Errors module — MiniC documentation diff --git a/docs/html/api/Lib.FunctionData.html b/docs/html/api/Lib.FunctionData.html index 1da9c94..b713ba6 100644 --- a/docs/html/api/Lib.FunctionData.html +++ b/docs/html/api/Lib.FunctionData.html @@ -1,7 +1,7 @@ - + Lib.FunctionData module — MiniC documentation diff --git a/docs/html/api/Lib.Graphes.html b/docs/html/api/Lib.Graphes.html index e917ae8..8715b63 100644 --- a/docs/html/api/Lib.Graphes.html +++ b/docs/html/api/Lib.Graphes.html @@ -1,7 +1,7 @@ - + Lib.Graphes module — MiniC documentation diff --git a/docs/html/api/Lib.LinearCode.html b/docs/html/api/Lib.LinearCode.html index 428159c..135da3e 100644 --- a/docs/html/api/Lib.LinearCode.html +++ b/docs/html/api/Lib.LinearCode.html @@ -1,7 +1,7 @@ - + Lib.LinearCode module — MiniC documentation diff --git a/docs/html/api/Lib.Operands.html b/docs/html/api/Lib.Operands.html index c6babbb..77fd567 100644 --- a/docs/html/api/Lib.Operands.html +++ b/docs/html/api/Lib.Operands.html @@ -1,7 +1,7 @@ - + Lib.Operands module — MiniC documentation diff --git a/docs/html/api/Lib.PhiNode.html b/docs/html/api/Lib.PhiNode.html index 22ab0ee..30d9044 100644 --- a/docs/html/api/Lib.PhiNode.html +++ b/docs/html/api/Lib.PhiNode.html @@ -1,7 +1,7 @@ - + Lib.PhiNode module — MiniC documentation diff --git a/docs/html/api/Lib.RiscV.html b/docs/html/api/Lib.RiscV.html index db2c035..43d0bb6 100644 --- a/docs/html/api/Lib.RiscV.html +++ b/docs/html/api/Lib.RiscV.html @@ -1,7 +1,7 @@ - + Lib.RiscV module — MiniC documentation diff --git a/docs/html/api/Lib.Statement.html b/docs/html/api/Lib.Statement.html index b67d408..5372635 100644 --- a/docs/html/api/Lib.Statement.html +++ b/docs/html/api/Lib.Statement.html @@ -1,7 +1,7 @@ - + Lib.Statement module — MiniC documentation diff --git a/docs/html/api/Lib.Terminator.html b/docs/html/api/Lib.Terminator.html index 769a35a..b1bac9f 100644 --- a/docs/html/api/Lib.Terminator.html +++ b/docs/html/api/Lib.Terminator.html @@ -1,7 +1,7 @@ - + Lib.Terminator module — MiniC documentation diff --git a/docs/html/api/Lib.html b/docs/html/api/Lib.html index 7870a6f..56b21c3 100644 --- a/docs/html/api/Lib.html +++ b/docs/html/api/Lib.html @@ -1,7 +1,7 @@ - + Lib package — MiniC documentation diff --git a/docs/html/api/modules.html b/docs/html/api/modules.html index 013bbb6..e20adb6 100644 --- a/docs/html/api/modules.html +++ b/docs/html/api/modules.html @@ -1,7 +1,7 @@ - + MiniC — MiniC documentation diff --git a/docs/html/index.html b/docs/html/index.html index 7868ea9..18c304a 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -1,7 +1,7 @@ - + Welcome to MiniC’s documentation! — MiniC documentation