From 19159eb98d54b0cb30090cd63ec47e29aeb02774 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Tue, 15 Apr 2025 15:46:24 +0300 Subject: [PATCH] lab1 --- .gitignore | 1 + lab1/.gitignore | 8 + lab1/img/diag.png | Bin 0 -> 113884 bytes lab1/img/result1.png | Bin 0 -> 28237 bytes lab1/img/result2.png | Bin 0 -> 13773 bytes lab1/img/result3.png | Bin 0 -> 26287 bytes lab1/img/trs.png | Bin 0 -> 56866 bytes lab1/img/wrong.png | Bin 0 -> 7437 bytes lab1/programm/example.txt | 35 ++ lab1/programm/lexeme_types_test.py | 73 ++++ lab1/programm/lexer.py | 59 +++ lab1/programm/main.py | 98 +++++ lab1/programm/requirements.txt | Bin 0 -> 242 bytes lab1/programm/test1.txt | 2 + lab1/programm/test2.txt | 3 + lab1/programm/test3.txt | 4 + lab1/report.tex | 625 +++++++++++++++++++++++++++++ 17 files changed, 908 insertions(+) create mode 100644 .gitignore create mode 100644 lab1/.gitignore create mode 100644 lab1/img/diag.png create mode 100644 lab1/img/result1.png create mode 100644 lab1/img/result2.png create mode 100644 lab1/img/result3.png create mode 100644 lab1/img/trs.png create mode 100644 lab1/img/wrong.png create mode 100644 lab1/programm/example.txt create mode 100644 lab1/programm/lexeme_types_test.py create mode 100644 lab1/programm/lexer.py create mode 100644 lab1/programm/main.py create mode 100644 lab1/programm/requirements.txt create mode 100644 lab1/programm/test1.txt create mode 100644 lab1/programm/test2.txt create mode 100644 lab1/programm/test3.txt create mode 100644 lab1/report.tex diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f7e924 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/*.pdf \ No newline at end of file diff --git a/lab1/.gitignore b/lab1/.gitignore new file mode 100644 index 0000000..96dc833 --- /dev/null +++ b/lab1/.gitignore @@ -0,0 +1,8 @@ +**/* +!.gitignore +!report.tex +!img +!img/** +!programm +!programm/*.py +!programm/*.txt \ No newline at end of file diff --git a/lab1/img/diag.png b/lab1/img/diag.png new file mode 100644 index 0000000000000000000000000000000000000000..10a8e9ce018923797129d7482ebe659a0f0c0d41 GIT binary patch literal 113884 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°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

P5Ys&w;;Xo)GjRT9|kXnKYxHcJskrV#oqh@X4j) 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%0D4%Y>8 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

r z9x71hg-Qj46W&~fzfiB&Z4N}w6cFfBh z{vhI?kc;L~9wp~&UKzjtf|!3aV)$6?W2%tmrkg)`DTWoWpQhyS!8OL3AV_`Kc7^U< zQ{%?3z%LS0x+R+6Q#F={nATeX#Gp;czeoG19NpVPQ`rR=xy*@PT%j$QJkmgddbFdX zhKmT%4ni>dMkp-UloGs&ly3@rcF2zT&P71tXkKsC^|1O&h$-)wwwkE7+PgSxj(NP* ze25g!QO{{XYZoR>P<}!iz5G-W$hr zwKGLEk26VI7$5cg;@(UyctxT#XXJof%%^$fM-z*9HIf*pyMc^U1?6a^;Ue%ax3taX z7E{W4)jLD$D+W=OUBy3t9AvXM>qNFtdW^Wz>!eu`9l7jU8>OWa(6%0{ur>Zqx9bTr zl|Nm<7S4?;boO?;)~U}RrE>cG1ylvK=ls zIXRW6?EwAgy2obZW>cwZ8o>giClCGuocAmw!eN+Li1QsSx=x?3tFG3Yq}heScltHe z{k~vW+YS)LBqk=#e4Hbl4>nEWC+iiNFe6b!6)Mp?V~FShC+)3^mvZ6PatQ=Uw;XF_ zY8(R}-aL#FoR7miXwTXXxM4lq@QhDz=Y#+7kHj-4A-ygLg%59fdr3mhZ(PZ*t1|(1 z1sh~B%QXoFK0trT-S6+UPn_BU5t9UPn2So{M|%-d?z`_SMYIEUwwG^{w;%SoE97wF zD5>4wQiRxezzLSu$asRN4RO0^Z>*@JKOUwJB~f83CVYUnZ|#NNY!1a;JKp>D z-%Q6p5#Hi(Jy5+sFrei@DQP%fyYYuoQ&v{xxFIgTnhp~fVn<|LWKu{4JY+!ox5GKW z5|&)Ep;ov~rtUNA+SpTNFCTqV)AY|dg8|t9Ni9;7ew0TqAS;T)NY^xGRircwqIurp zFRkCniwEp}+`)5erS|z22-*G|0VixI76}n;3=)o|rly_&n}GV>pRNvZmY$VW{{)}Y z&S(h=MiGDz?f!zdG`FMyAr%Bq+h7@E&m?3DzcdUq zqD+A`Mq$Hu!WXhh9(pDwMMh1dD$U1WC{{Z2X>8;H@Cg+suoks4)zoBQWYi7O7<$F! zpgbF*u|Hu%!j5p{0)U!OKevO|CYyq- zBS{!ofNZJjAP%=e5Ou4B`8qaoclh)=u42;@+P0r#S^>#G=Jjniy3SaJhntN67|=21 zE*8nawf8^wo2oV=wAw;teziRgAcw(i?uUhioxPd1X98}YWWbING)Z+Rr>dEthwuG= zJJ!_Dr+Svy}k=2{dK02duy`^}ZrVEUz-$>;Eb3o1eepw<|p zW6@=ojt#*4#!{rpqa6?IlP&#G^ttt6L@zKZvqc2ufg_hIK*7!t&z<9b?bhdb?^$f~RgW|Jnwk@V%bp}+7cnhW1D<=P1x$%4hicE{ zv$7We^CW!t2=_UxfIyA+627l_9gHT0KH`w`z8RF6LJ6KcKGgjKoM9bv_ELNvldj0 z<=jvJ?q-<`9423BW4K@H({A9^7D~V+D${;`e(s%?wk&>GL7dPEVBbI@o(DcO%J$m!Ay`%l4Z(dmDhrf>w#hDbn(g6G z4@?2Sj-M#!&d$mTIlBS4DD@<8U^WG~77{qpsR$glU3W#$S$6%WPes5DfK!1ZJ)Xd+ z`V`>NU|HNIhK3i*|7S9Anz#T5z2CFL2fbT&@cRMp&Upho+!A1f^<2F!C@lfIvyZ?6w5Kc@jFWKIJYkxaeO z^rGoU6GyW|vqm=XEQpeqmt28|eJa-e`Vx5Z3vf>D*f0OXz(TU;J#bkZbm9XtO#cTQ zqO9-`g$%ZX_9+2(TnR7(N5do@Y}5t~=oheJ>V}Fr@Bm$x)Np(qaHdh^fT+PfW*`GH z<#@~vSN=1~lvzFrz*TcWVPV&v)V%=(eI64~(L+Aq2z^ literal 0 HcmV?d00001 diff --git a/lab1/img/result1.png b/lab1/img/result1.png new file mode 100644 index 0000000000000000000000000000000000000000..b7176bb7bcf932b8429a8a803888ddc482b9553e GIT binary patch literal 28237 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
7Xbsf4)^S@K<}97K?!>tH_o3gLlH}*+;^I*a zs1u7g;qjCMd~uufB$t7YYcXtgVV0cwzx)GKu&WDeMx+ki=cX9iiibBL*kjCLZVhWI8Yig1b4BgCg$(Gb2t?!=#v(u)HJ{!TcTxH1|24}yGTImG|L zu5-I?J+i;f2=lPhTH;~ zBd!wiBXd(q+TgV`*-}94LHe3ZS-h#*si-)!I>7ex&fD!2O%iZpWOi&a!-^$>vd&)F zFXPgTbSQ+E{XFi`Nh930PVKUAE>!&z1OBG^=gyS>RgVM@$2aTBB{Q;6|EdlD9#5u) zXD`24aMJNou(N0%z+9qtC8`~$#eY28Wcxx`K1@iSGYCKCs+(_n>8O6ANFR65mUiN< z8fLT)VtNBgmPz^Y$Y%wgX5>J4NUH%Ru@~**w6N^)!dat*8sFH|Hay?G8BA6yaGdNY z<2k?s1!Cne)w$A<3(kZ;?8x1B!xs0VO=sM*-F?z~oFk*LPdakWd!j=egExO6cq=E|Lfd1 z5_gH~TM$7J#+fRP?v=y=py3TqlYxLUYDsku;h=bNV0ru83^?1>%{cpcx>9<4k42{ zRfsqJ}O@3}%HUeetR7 zoNWQ<5SfyF>lFqiFsv^!7A5sQ)6LUSOB3Ieu2{{wAfAcr|d!*=Hs!zzId~PN{hwUQbD-C0LwTBW|ifn!Ew3@a971s`>H#hgniO1Q| z?D=gLFkvpmKd5=kedZt%$SdJC-Oe4Hj=u95G(>cm|81CE|F>;f0)pR7Uo$QSU%OfX z+MEBo?FQg2T7um*Tz|8nz@GDT5yt7@5I9lj?EyJQ^JO<`s$KhmZ`A=60&ofaDEip( zlEiO(pVQ)ECM3EdW4Ow1X!0g0Su?D~kQ_c@@Cu-{KW2u(mtA^xmk*b1_PQR~KdCqz4mI3NcRjB~IJ7q@OD9&+sqF z+D>cLVpv1{3g8m?hs8YfpDkwIw_|9LRYKW7djS!hbww(hsgVYzesI?=$bi;B zoa5GS%rR@iCt*=yb2wuE#kiv(?w?H<&#hbG(ki*SH!DDZpn2|f_m?`Ynn={4wZyh% zHRF|N-H+s#U=!Oc;nD-*=eb@cVne0kfv8k5v43QJBB&eg%q^Z?Lb+5S=WWKBG^UXi zSr*w}u=<23E-0O;JtM7A@Xk}Dur(7;Q$d(TiT|P6gRDyol3->da`s!7pr1Y@yF3o+ z;G8&Nuv|nS1z*sFBaQ}mXV4=9xkh*@2Zp^E$6uj)^qjIsznMUv4Y$T=Vtbt9*E2KS z=@Uk`&KK)RU=To*-0yx&G#%Y+EMg`b@_Pa%p-I5yeZ{xSJ50Vw>&A0CIhFrhrnC0w zl>*|P1bLkmShaP$Yr}Vay(KrK9|KC0ey?gp`^DJGO!Ao@Pfpc_GYA56^|+HjjKhRf z%>XD8VqSQk?7_wjR=#65QqP*v`sj&sSr|(lhk|XD&C`?Pk9HqK^+qVpP8B}D(^VK? zW7y~|?`!#UQR9dLd?PMn+5Z%&UoCquu3V|RYiZ6Sf}tOK&*UYAuf6;w&8YF?$fw&w zf%wdFWWqQj3d6B6BeU1jJ9j~E&~go0e&%)LdiVa(rk6DeBwrHgs2>%$h5PoZx5=tf zZU|Cy)b6F&juWIsdO)F46sb%hZ$CoZ;9I7S&lQwwSikFdG}~W2*g;w+r)w`xrmfv$ zhcndtZcJ^l>+E4TmDK#wdA~k=3<=__tw%$#s_)WFaV@qSPd(fu=kobWrM}MmyGn&6 z?Mt+hJJ(##3AJ`lJSm0Nds;!r;oUaTr=mCjeOFfIt37^sl_ZN;;i8nIL!w1gVBpKj zCe3Z`%jy4wAM@&OSZU~Y@QRrBkNuSYyBtXlu};tz$o50Qe~I0Hs}J=wF9G>AUnuF3 z%hUJj)@{4))9+`YFNVSw6SAr_1Sp96_0txPi)#9@A%l~^@XXff0@ z=X@Nvi+tuWP3O@0>HHnn9vpZD?~+XR@s+M77@JErKt zhj~NtyIIc%@@`J7uus2|nq#Y~%v^o7$T`LV5M%w(JxzTl|eCiCl&E_$k>q!SJ zHIx0q;?Hsbpi0(C*vMdJet)cA39Y|k3!2xxBpqJAz}#NfckulHB@>mNU(jr_D3f3P zDbJTT>+W?v*WxYdm+-^CnHki&eoTot{m;yG-$0S&gd?>=z1eFghzetHW0x4autUbF zW7)cJiPjO<84A%yj&50@vN$tZq2a4E0zHfgob@h6X0A{obKrsZ0-UlNddRs}_I~Xi zY42MFVvn+w?Dl_`KSg)cN+X>iQsfr@H;f`i@tIqkffi3gYbN& zo^rQ8+rFqjYG<@^Q1nf`Z(O!-MRl-Lk>ss%y> zB(PW7y=>3>2H*alLSeXE0SQVl|3;LCy~{y+zQdiN%F#0LlI$%v?xXw9tiRX)K42)y zL}vR(K3;3d6wa^yyebZ1Ba;D<6*KhO@D6tHmklJqAg zVF&b>LIvM6aK@-)f+5`4d$mKoJ8S5{RX#ya4exvnpUExY~L|#f&YcUHr zw9u%CJV0gK3DXum8GDa_#z7=F8b=y*rYtrhycO9u8rU5WYlJ9*Y{`?3LcuW zTceTQU+^u{x1$%XHni4qC;CyBYkMo6R zBPrL+xh6QR&nDBL5E4CP1N-y#T!47#7Fhhyc7UAAQAU+FSbSH_xAIln*=(b;VYB07 zIf1MamP7tjQ;)xdfyG`xb}fS6-Hxda3mQG_q@G(H|C3b zpftTVx?+;;;2mAG5G?N>2Kq`gmPmu<;#=<>uz}9By?=Jm5?mC_L(_v#kUl3;q}Udj zs@r=agoslK=M?p=;AA@oYdVR=6yKfIM7<%{zoNv^c4)Z| z8ujVGQ{c8f{jQ$_s34daKO#{AaC~Rkin-LxUH7M%Po5~>64Zh@#JMyPs}V7!8Y@{x zY~Pkj-Ou9klMat!2l5|a6$R}c(tNHWG z5zY{hOUhOJ+%E@;fZlL&T-i=BQWedKm-aY&O}b-q-7~&Ti)iHlDUD;Bz0c!0%qQdjq;DyCH#ORF2^ z%489bc8RStk#qrn0Am;?epX!O6u#-Q$->;w8oiD1;SC&fN9%c8C zB(;A!PqJ*=_2==joOZc?Vwnc-kS+~n1nIw+>)W>a<9X!EtT*w)t>a}&!D;(~F?#a~O-!o$mA&72dqcl4G5n4&y}LI){8NF9xZ=NV%O>9<=8-&wKCU=* z%DdRDxU9J}VZZooR#FW@uD0tH6h?_XGvqS1$(J5!%h8hX$Z8GMi-(Vy+p0d1sk2{; zkjS*Wn=BBn($NATd{xt_Q%ZSm3Ues)Yd}?5>?tAL17gv$aDMO~M7LX=(j4SoNk)c5 z!LH`Yqyf)SNZY(_jK)Z4v)SuO5!?H2o#0Cqy^-#1bW_D2pOuvbq!(_ z@1uv%NHJi{vvuEA3y(8-6;_v~o1m6;uxx?1jz@%$I>=E8_c1O()I!F2u1Fov!madS zz_NdLkEOFx{>3yp;*#C@XNVs6{C9|+kN zLS?8VzTD~-sVJUT1Qs5BTFTbNXRQ9cZ(xe$4_qzC-no9UjCI7$Q-UZG9 zF9~_WXNC2pKr4GFgyCrJ*r-OfA!?FT$j0Sv+y)^#`-TrcpTXB-JPHtE&EcD^16Oh#A z4$dUORUln$I>2xKW%9eega*%4!GRziAFQ4`l|$GvmUv~2oQ4)BnDkbnd*tsur2ixA9uJ}9I~{bnmxKAi2NSsRNsj6vrhV|nA}Jq3xEk?6Sc%#xjM=c3 z?NIl{qtHT^JoE1gTR7RbAl{k%o;hv5g|3(7%=h?m6JY$1^mRcR6za{X&d!dzbSWWO z(Of*D6cFCTv7ICC`VBUJ?2u%VqU6Jhf5=2QImi(FtSQZi>tSp=2;Sy^`3ixc-~Z~w z#~Zvk2zaTcR#Gw~vx6oR7P&4epP0}p7^5R_su@3_Gxg_qCABi95HFU|T{#1)QZ%Y{1rfNYk=M0|3UYriq3pycAE~ z^=>c3Zf}R?Gz!0Iv7(1|Kc{XEUpcfrMB#$3`Gaksx_-7BPGgU#`G+z8QIR`DCBl9F zCF&3Xk7t&MM@3Ejv-+o&DfHw$hJX zWMDTw{jz#X-^NdxJ&bz_vO)K;40ij|!lLuXmU(W({%q^6h+@?P_cGUC;ZY+@DvUi> z9HZ%<|4(~o9TwHT_We;rKvKz(5>N@rp@#+m=|+(5?hYv_N$HM}6p(HZkS=LNy1TnX z-Zkjn+r6*%IoCPYbN+n(2L@O(>v!MZ_^hMuzS`%jK;H&KWD;n3l^2MZ#UygQCy9IB z^KlS)bHy83eHZS@KRP_V9jOuzt8<|c(fKmW|0dyXcxf%pceF;fIqP?1<4vK8{=N{$ z$c|Nk`%*F-*csc9>YrGFY7#D!m?pFC@gK6^Edm77A3X#N>zfpPJT4RC8Bl{H*Z`K2 zo~~xJX(T4|@u~Y1SLJK>%0>%BNekaXCojf*D_Hkee+ck&_1xfO9`W6@j|EkdSzYhA z54gokw5y#tYpy$$GF>^LBkW=>xz9#;U`pzNFGBTB(C8KuP_~b|+1hn9fQlU&ntCQ% z7u9ZUUh`JO?)HoCU~Wu%lKP6Q>ojy``dy2^$sr&A2RY>S@qR*S^p!tjxwkCM{;v8C zb^I#=DA<(%u?3Ap<|A!&Q>>0+>ugCI1z&zfq|P1LKu^oIHBKvMY4!4d*!O*eM}$Gg zT8e_-ATpnUW5z~^P%VlL@}rRS(is*|HAt~V3-iz2J$m;mgfB9pl@?HSU*~=K-@SZ^ zFOVZb10xL|#D}#{JH|s%lSM_gFGKlHaIo=R_ugSQx~IJes_55W3|m*cG4#XiDC|{1 zyaAA7E?32r#AAw$>Bj6IpFDQ3G#75y*V=Q;TJ=8KjI@HywI&&)=BUNP7SSkU{PT4u zfYAE-unQmK+k8RH1%ci9F9Wt*+P z0{Uj1@1&g-i2+|@EDmMXlyL>vH74{@MPhABf6zNSj9WL%QpG!%R4Q53P0g!OyyuxT zfLj`(w+=|6$SG`O@BOu%*;$m{_!!*(A!uNz;33Em^Di~#pMADs0!z*HiZfmN(xZjy zDAr5zlcZ9aky_6g!y+Ss87K03nwL@GXT5MovjBq0zYK%~Q0G@{UyN|Zpf32^mwrRG zOu;&KW_l&Fm@hNJs@SNo)q)CggJTASJbTqgQ_;tjU*b3{$Fxk|Pe~9ds1a~_O~4A; z2vqRLfJz_F-*nUpqcy-~*>Rui8W?@P48JSroH^G=Jh?IXA+d~az z4p628ENRQTP-$(En}|NVp%#)?25d%;yn(9dzS7%f%M*{U43A4_vV77Bk@&ByI|iPt zadg=$^7KELn7h?Sj9WPpv>5LAL8lAo>HuyBEH5pdWr5{Va=FLogXFYvCU)kMtg+Fa z93KJ@Zpaag>)@`^^-p4PTV0t7t`OeBGzqpu1kE@ZlF!`8u&dQ4Clw5TdKF zcj@|hZ3ncm-D`?}Bm>By`rWY6~zR=3-+b(~u4AG%f6~aRW(Y zc{eL_x4Sk8;U*^~F5i9G+8XQX&`2gSG@x5(3WN%vrUjesfi?pTa(h)`4)Ypt^%H)J zp*M-A-{TlxeayyXle*=WULpbp$#McleP?X}?~NZ2#ixH38J&Yu?J3p5Zf|$xh%wsq z_zSPex6PEHm9@u7Mhx{GGe0FqkeB#k7z{flJX!fIfB+cf_orLj5FI0R6Yt2 ztbLiax;njS|CKe$6h6+DP<2OYnlBz8A`O8Npw+4^C2VUPnD)2b`n*IgOXL^J{-&^hkYO5fZ&4E{HjGSA>w* zaiAT~Y)vp@eJh4cv`aVoI`qfA5M9mhBzVL136(M^9SA08#BKXd0Ly}rLrsxb^lEs&(h#1PU>>XnGr@}=4vfN zZw2GPbIkLQA_PUVu$@7A)}t14U#_5ECuYRbnxri$Cgaa!+ucjUTuR<4y8*XA;8rem z=6sM9BXh0M(sXG`zx<*R$#!0)(WW;QX25;ebed!_-4MO~Y*WTM6v!py(z2{qG6d!k zhd*<#W9GsT<}eX@^6pzfU<4gJcVj3D{4j7DK=z3YA;(s`TNLLQoq~TvI4o-y6vySs zZ~pTCSUmqV77t)6B$o_p)a8Ds@*+G|b{bs|Dv;3dGW9vZHUwXwzw8=L#ZPoV0kp~9 z|0wB>2e!OL8!!sWF%(y9*!&ITt` zWJ;ROU$MDj@~bABb6iW*uaA9qdu+KCJmUnMXWbVHHcnmC_PFy8wXNo%2%t8L z0~8mfHL%XPLKhh2N~g z$}zlxISkeq*GVup%^hwQ*mNc{1u31~V!9vg;5INhcNNz}x+X)e0FWjL330Z#Uraeh z{8q2_9^vL98fs6&=Arf?`6Gmuf8j8s(4ELCCr*|p2yEsJz9{;lM6;j_p$#?s<~?avc0rkO$f^xA8&AmBvaXqLD1tj%$( zWZ=yRUDQ2`aD;AfoS$W&wW?#0tYk6Dsw(DW005syKiZS~JItG+YK#U|b=Gcy#=T)` zw}H%^E|rQUA5jBZkSxZM`lxw%?d^pE*QnbGy>b04*-Gm?C9fc_IRNU#%$&cU^k!1E zjT1i4ne4qmqQ2?>vcZ5ZY(5ix;PBcL9~7KD<6n3r$#?orM?#0l{e$O>zKZ-e2*r4d zevy-S()R@RV3{p|smA=Sp2e85Dt*@{N8q@8J8iVAuJbUA@l8z|mw z-IwY)T0Aewb9UgJs0&K!NyJT_VF-=3(SnJ_0^Jc;LP$ADHQ(N;kSQkP_1z{~ZtMBK*(8C+OY-MT)?2&H6Dn1kj4qzYeZqkY|tn)>w5M z%2>qSUpVD_rU$gtb07DCp;^ul)}vEXHXm3z2R9bVtPx%Y;o2s; zKT!6_4Wa88dd328n(vZu0PS*@DWdKlfogZ);| zxLNI!fC5ALd-i}AU5S);KqI6CP)5%`6(1dmUy2W4sL^Mv4#Fu_U1`*i{+}4Efsc1V zUapJ&Ft_i|9c`<$j_hR3fFX7KlEN6RjcqHCeQ{+lGvdLuUVUwO@hX9lBoNzZMHixk z)+jT3lw+Fu-XO7h#lQ`j&f#WP>351OuL4~Gq+EX&69~ALPwl%-U$upu2v`8@s};v1 zsq1EBu^c)}e(c3jzbLupXRvr+=3I>MxDCqX0nV6uMq79&EqlQT%%xc^fPkFqfNfXcgbZLt z#Qx|`Tld|Rnk0V)&we3~f%5dv^Cv6fpXZO4%ib~1r+3c|>xUSY0_zTBEwjiUsv!;J@r=wur`xA3O%pzR^#Fph%bV{(P_AsD`=MLN7j-fN%MOI*RjBTr zo}LP+8O&7CzNO!F|WAdVy_?^mn z@i#+^MRKkv`av>=-57oq^+Oq`=F45W1?N~?UOu&j??;8bwH)u6`(=$=Y>Ybh)Q?}7 z_9MnwqUPba6TZ$Y@z~N^pFrmlZ@EETT?O_ni!;y}#r9a_aV_)<2Uq(rW~p=4wkVn& z7=A+HlC>%p_ICYZqD|8}!+9OX%k!x*`_?)yUB|=htPw=59yQ7l#{T_Dw$M60#KIVw zqXcFq`+A%>x@_t(7*2{3o>^bU3BbJ~3o30GE?S0}b}Z859nNBj&`+I{ZU*mbcv2O# zAg1sob?!;VT4GaJ4n|BzP-Wnc_!0iJ(R^Rw2DJJq7m9O`rqP@}ufVqnx!%$2nVm<^ z=7$()aIsrS8}}j*W!Rl63mq&c*kA3m=CvTIlvVevQ_ePSN5%qZaCrFbT{Vo->94WXL) ziKeH1O%A8ZS?t>0Tm7mzq#1?iNcsSY@`iVHc5h|+rTtU1nfM7=gie0du`rxv12KB+ z=|b)V`hEgsL#%}W+6rfD%_WDXRP!{)=W3Z>BWTM2PfcFlln;*WldQ&dC^VRU~ek3uA+cpFeCO1{4 zo%e^eM%DE0E<|7Tno(u@-3;%!7(ob{+)gmrkQxcq2Z49y2xj?1Nqe7iiBe^jv1TGU zt842N8dp^a8ibGZ%v+(l)~0=R`^jtkXpp=Wtlo}+w-GPYLRxdnKBo426;~TJXRZ>3 zAuTQS7|qjtxP|=8e>mV*SJlZJh!CLqe;9t3eN}+Wpa5P(A3{(r=I02ha=4UtW);<)+rX2Y7G(Sr81K4 zKoIA5mZQTMJOZQ!#<9$n>*hKr3PH{Z4`t30;dHhM-%p3l(7QkbspJ#ojG>X@kI2+F z$(L{I{I|~)=Fx4wS@+H#vsm-#0BEa+%ORq>6>a*M%IJjwl>~v^W-A-fY|ET^Gc^ex zVT)oaY&6_ya){5g06-{;PV~bCEqT$>8>rRFx1V*^SkCI;8d8uQAi{d8|NlaoaWfZ6Z=*^{}Z(WOp#v%8`WrRC@GcT>V4pw&f?>^WN z^be$1X<6o{AQv-;=xra!Vx{rvx{~{RnJu0Ld=ja;LDu!WM74WBim=K7;DhW&V9&_A zz0{wYFZeK8WDb( zwXz74QFEK@P=rd|bIg+F{H@q-#jiw%DpPy*437J-fT0O z1Q!kfuF5^ldyYFHlWk@+(KO;YOQGAya;cx*$tiiU9c;{H@KsoG*7QfV>QRErhVD~; zjA+!qrX=pPNmO{$0`Who^#GCOPC6E3am2s4&HrHSPnXVZn)%_YuN<#Eg{sZ`N-PU& z{7NkIfS*{kn60=x%RJj99OoZ%Cvc6k|^@ zV$h_@<&w#o?dqZ;IV>KkONVs+nUG43cCPu`?o#}Uhwv4iE%8=|TL7(RtBCW|l~m(x zQ0Hy5X~-jP6y@87mrj@SYh9-eW$Burg-nk6{XbW~2<01<%nU-lr}&-=h{k z{1uWKQv)`TW6Z30s=rcFWY4KJq0BjRHFM>BHYb%Ht2t zL?A(u-Fwac%wD*GU-VIDoKtCh_juKsFEfGWKjO+wLcj+Y=e}mfZ4B%+x4yURt)z_^ zG5cNzQelxMfTk8;Iy!pxX{0vfbrxqaVkB3rI;BErsm&82wscCzxU!^v^d_|xWtTWL z%+*H!FOyPV!*l=Lq*N>aL+Zr_!EoBsLE=j`YilFoMp4_p1g?= z4_TFfV6S+ZG`FuEgj>O3a_R(5t);BnUZu^z%_ViA;<1W!!02EHJPxqjbVC@i5FlD? ztQ$LUaz@B9STXmcV#WMo2h&gWPq<6Gm8G>4c9o0pbg)o*t;N#BlgDpvE#`K0v3)DsR-2e!xZ4c~MHd(fpl*WL_(_PvSRR~oA;T9YKGXR2ThuS|K4 zA=#OxZ~)ZW=}3sCJO&vg1Gt(@Ob;|WR14FqY-GN0bBiN zrMEAbR)~A_zK$6d5ZK+h`4N4L;xw3OUp(i2rCE`nWjMuRl#W`SN~>Mu^-<1Ohq=!6nfa=g4U| z9oP zU&B(CH!2&NlV*6TPR3JX{Vj@lP*=3d{Z>-DiU0Ak3stf`*{ZH@ghSh#_`8IqO)hvz z8k8rztNk9)Gh>Ebg}VxDslxM&Fq?v*M}(^0E=UqFcGgjC+D=DmNjUd)aYVbOMIo$U3V9!@m%>n+9ck6}>W z89C3Hn1^aVs(M5ac@1={K6F*}XY1G&U*%SnyZ2Bcus_IIe-p1>GCA4T8@=y*x|m60B%lbRFU8`G`znl|7v6O_ zWn$s*QjbAC?D+7@NYUrhN+v=`zdhN= z?vo`0Fdc#*H(;qIlYh6+)=4Mwx9QNaIb(4YWK9N$XMxQqLX=|)gxp$*qf07PjFZ(&C`51ROOio35?kWn8yy%C^_{o1sb5bzHkUA5NeY`I+#ZzUw&GbzxZr zS%aM-<;u?%wE5D$BgIqHR~NvLR^B>Jkkmx){4pg`S*73yq(rw|3R6@13M-8Y&hY*M z&(G295J0`rbcV3VdJ}={6|D#7A6OKM(HkrZ&GFhNp(iQW7C6`{0BZ5c8X*3fhAQ}n z3B}XxFe=ywrN4S1AQeUUWU4E54Bk46x}!n&FtlKZD!)1YLHRPs8m9^^#Y^;><)R?X zyY><8`=p-=nkk|#b@k2UR%_eMVQ8?dng+cocsD&sX10HZ9y{#GPmm{Ky%3-n$c9s| z1oXSv+akZ~$h;{ z>KjG;>BJ0lFYe0uKk=ih3rQ87+_WK&Jd=!YsRXXjH}C=;E{Ldw6HtP71iov85|zAh zg%jCkNCot$*cx8@F8qIFG)^J*1s5WU54T3ph%3!mTN0um?qd5SakZZ^(_dEo%dIjJ+(S49YUW9kgCsSKfG@?6=0!%gNXn~EK;Lr$2(tvrOE&pH?<4&Pb9t>An@JVOM$lM&c&o}i`c zNrg>tFhvW0Mwdo1qdi zb_Jab%CIDy2xw@hkzb}?X_LmCbPc2~T8ryUDg9O#{ck;e21DrR`qmJs{DjamaTnmX O1BnSsKQ9#2_W6I~-q2_O literal 0 HcmV?d00001 diff --git a/lab1/img/result2.png b/lab1/img/result2.png new file mode 100644 index 0000000000000000000000000000000000000000..da696cba51179290a740048808bb8d50ead12929 GIT binary patch literal 13773 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 C!d=M# literal 0 HcmV?d00001 diff --git a/lab1/img/result3.png b/lab1/img/result3.png new file mode 100644 index 0000000000000000000000000000000000000000..04365a87761163dc1232d3f0c5191d3d0edc77ff GIT binary patch literal 26287 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 literal 0 HcmV?d00001 diff --git a/lab1/img/trs.png b/lab1/img/trs.png new file mode 100644 index 0000000000000000000000000000000000000000..efff39492767d908cc49de7e8852db990457da93 GIT binary patch literal 56866 zcmeFYbypnC_Q#tb!EJCDAh^4`yA#|8*Whl!-Q7Jvuo(yz+}+(B0>RyLd7j@n>z+4o z|GTqR&s6nvSM{peUGn|x9jT%ujePwwGSVlEkAttXaxW1{mjVg&zSe0 zk1lG`VjpTIfJg5c7)wz_(GMRW@klQq*!Mhwql}KrhYtYPe~ynE79^e@KCCy%N{Fg^ z8lJ4f`eI2F!fpN4Su=3D->K=3##s~#+(Bj3&DlA7|8%eCqLZI_^LD;k+%xS#6_)b6 zZX7N$wk)@=x9_=IY^-CTi@}qIynj7DNel!a{F@{V@fA(%=#aeSTQ^CRp_q4B`+zv{ ze^-(2(MMd|ZH&BGGq-Iu`pbSm8iu*PFeV|CHGgq~dV?0*KRtNt8j( z{hGj<`QOU^Q_cUM{r{{X-fSg+rZ4|(@D4njsE5e@9o>QSzxRFr)6bGvIT-)fgG1ck zg4q9S3!hZ-|4IMF<%vawKx`=bY)BXDU@(lWnS-PG^{V>OqqU((LlT&yo^s43yYb(X zf4MZrN+m~}&Ljks43c~QLZBdWX-qiXv}Le}xJ{zD156K)pV(D2LgfG47F1tF!$Tf| zewF_{LcTw(r53#3hB(2QGgT5L7}YG_UC{vFP8e<#laZbVc{a6(lxNkhjW+8|c#zxxER7B|BP{H@dPlYBL z(XO+n5&5U?!2hfJuO*Mwo~}el$@ZNh<&Jt-ZKonJeaf&ys6OwQv635`*cr)Hgv&qcJAY#Lh z)$URKc2W0`bJ0OEv^QuxUDCt=RI;NXN#$0^!|2;WS^PCdF3 zapYPuuJXHJ>=Sbx_RmTc14w^e+nV#^hFsISf~0&%)qG%{#JnWD-ZB+fo>S z>BEyTE%H6Y_kIo$m_-m1df)$BSQss9ZvBy$=K=hK|Yr0%YtwDAEv+^RSMm^ zXt64R_a-b2VyB9|m(~1Ea{yplx9tIZ|or*Mc)zfK5wgg70}Glja$6k$Zxvi z7w1Vi&));p_eS;REG_WC3Gv<3Hcl)W2zEpnvl~kYhSdwu+LC1`8A_c6C|$Yc{HioL=K@5k)P-{2 z89sJr7=ibFg*cp^!*`Nr$scSuP;*p8v(3K<2EFvKdU>(kn6HDk6=?PObU&=iMLYS) z^E7U#)-f)vHt??z2v#t7iT(VHkGm6TrQCEaAt6$^*q zgoDIlY5rvy3YTFBifzYAI}i~|Vv={X7^2=V+=vb4V#RK4EEUlm0(6{Ft=gnCdw#}_ z(&w_89l(FIqXaub#G>8fE)tF|Z^D3=4CmWC7$?q4MLHxTH`Yh+%r3pG<3v>|m4)Pp zJRh$-8LhF)yJ!uhlpW8&vH

n7pX;EOZ@ge^y^ft>Bjl))m%{KN&uc=C=k2Vm9ggc;`Q zCoC$F-3a=)l7AdT9o(MUmS|G|g-0%Y=DogpWwD{0aEKHSsboA}YzU3bWX+xKE8YIe zqS9P~a`lVgdHQnck=I+NSjCVQFj=-0nRNBxs`U58l>!43m8@!6DZLFY3-|YIfT)E- z=m620%8YJk`(RQcRmmT8M}ax*FpH+PzM%GDnJLH>hhikTEwoMxFetl%3O7?J9QTln z)qM-;rG@Szq*lvm3e5KKHq3%-VQza~7^v+_fj{i9zPF!nMTbr8-qr)Z>-3E373l>B zz{n`T%*#SbvDW6EA?aj}>A9Ae<@*?(5DoghNd1A3X|!-h4^~jQ>x7k=<*N_b!`F&W zz@Nj;C%WhnZ{pD4>qI)2O}kt^CDcynLOg4M@M+s(CuV)qI+Vw(_i6jDm+#>7bJG{} zEvsP7`D)PP1pjZcjMkN6S#czZcH`6}T)B(g4@0{tp051Z%qBk>j4U!6om9V}7bfERGW9B&2@9b3iAW7{bHZ}JXbY z2+oKBSR4MjAnW5z&Y&Eky9*L0{}SxI!K{#3P}`63^)Yi-+XLf>6V*tlKW%F9^W5de zMQf7kkVWXGm;-WY( z*u$o%^8O_eu@F)(rju=PUbB73Y zsjacj1Em)A=xZa*1DjotD2t1I9=o>hlJgU1H0RbUH_5>QYN0HekF6aC*aTWF&))g_ zBkQ7}e9Dj;p3%vjRQQOpKl#4+IRZpw@pQ)LrolGYRrM{?HeJF??&J2+Kg<~l`I94D z#IX81W>pc_I?}_mE_JOGM_d%603Khd`P3I-#-Fr{6$g(|88mc`0 zl-Ti5^IL>_c$Wm|M90-NQ2(L#Ft9v%8QbU)9(vB0m-vRsSmOG~D3T6){(Sgy(ZY zLPTqg=4L_ENeRv0EPUK)49uT_KEp5i57jlWNk+7eyY755LVV2o1yQM{i#1p@MExx7 zxE1o|p<~A~5B-^iI)8x~trWtVHAC^C>@Ec^oCr#_aXqqsV?LxNIE2EJ*|K9z(qn$L zc<7vYJM~b{t`QX}0MO^yEOc!!=I3Sxpc(3lq;@BgVaA<@}SJJt!!k*mnHmyWz-Es{O~J#JCq8 z?tu7R=sazKxGiIgtB}mpq-Gx)z;phG`PN5cA^Ng(#<5U;#cFha!H;Dmm0g1#Kg=kV zNMuD4f>FX0$D_>$OqpLsamPopMSX#i4Op7M za92vWyM_2J2r?Urv{I>v<^(FG9lMK+eH0-5YbhxTj@44nM_zl%gdsB;y+H&?m)}m; z-dTkeB{ET0xh^K#DLGcR!IV`Y2w8n#cZk?LfhM{wFU`#D!*4cF|T=L)2JLrH`PoX{mKIcXWB>%b)}&GgVU0?%aW&32|v~Y?5G#gjbS0 z)pks4QJyW;Que?q-o6;ZEz&wl92g;Br=|^H-Z_u#2meeH8EBM${w*rXQ{I~del0;X z+^^c+w{vc%nRR;8<{Lv=DsZybDrhEQnggh~{vp8R+q}sPu(tsYmBz?(qClbFCt3O>7 z#R&{0TmX1txr_XXQ@V&!?nl5;NUDu?R=?UDydsvB3cyT$;qU>v+O$upM@&u$hrMsb zmQNF#dzL{km7gHLq#XnBj5j@ocsXSGzz)|vEhYu6!a*Y8gT}~S1_=|Iq`ir)~pd@f4=200zvnh1y^}IoJ!|% zP+BYa)wU}Zt0B5(rokkHI-eP}<0?J&Wk9K1{_1@ha0pA@WZ1Oc_&F#2VgbsrSpnh} zjs4sPaR_q#c?OW?$(rH#LQNW{Jrx39e`oPzGMr_LST-&GxeCVa-DD>oS3zuqsvVk_ zjR&vEv%a19n)_*E5t<$$Nx!6o`_Cqeb3R6SFPwectEQXEnIQLQw7$DUvcUz(X_>Lz zkUPfH`Z4M9`1g%V8$2;Fjw580MpzO&bQot~DQ{v(VtHY}ReAu}8*&J3TksaJFuzIt z!m7=|k2m`r2Gl)Z*5~Xk(QkHoUuxk7`#1di{#UxZ_L+{>D)Z-vPTW{YpZW5I1)>I| z3?-5x=_Phpz=`>V1$NB0@Tw=Z+XjotiuVO|N={ z|Dai2CJ#kOWr7*Ccn6S8`{fIJxQEHJS7OBLVgt>WO$@JG1t?;vQ7DmysNgw+PlJp0 zsK~{T%i@8{VkLaF+Xx?Ed`mJEYsk6TnlN5CbP9X~cCiTUHN*2*!53PHS%I+ktv5*j z$3gGH6ks$@T)xap6N%;##YebmmiV*$1T=Qo?bjS45o(=2ISd;KC-!C07}+U zcdo|ESk;*7k0jU>ZcG*rRUXaD!_mge4hOK=pmD}mo zOI&6Nr5e6XlZ&(>Kj*@vZ)hhD!KA4d-dh%SVD|8V)%rZFkb3fGqY!vCIQBgVK%BT# zO#k3F?(zn;R41~T={uh<(L&bWS-Pj+4; z`NCb=Ss&R*B^y}$oScv|ixc~!eYr|Ee$Nx$M=owje+DXuN#d5--oFs)1R z#pz8$HBIjA`r$G9YOf(kUYm~zu4B6XPSJ+)Okbm$FB~>%zy4c4oFS=6V}5ii0R7M+ ze1KsK;#XXo9RceHX#8EoDf5)wI`LG(VW)!=dQD0;cbtuhl#bI?CEId&xCHz?Keu95 z5U60{f^?IaPBNNi&hW_65e~gpKl+HTVFhT+*C>|pvrM`6+jSzP*S0(9V=+B6a*_F( z>}O$cfOaP$YB{1b)HJ-d0C3~q@4CU~otn}L`Bp!z4Iu;2bNBBk{lY)K9SXEA_MK`j z*%wA_`K#>vr?tRK)#YV9*4tK@|Ansyw^JQwdo7NpY9-^FijUsS-*vd#>udx}8F|L> zOH*l*8wZQXi|b46;R%mkFJ3#kR?}lo2M&7kkJdqmg|Z~t(Mgf2Pt@G%!`6JpvYIck zWcNi(cn{R04#&ErJL)lx#FboBVp%%3n9M#CWJ^SjHKdXIZ%^9^I}Fd zCr&CC&>&bEQf9m8V<8gXGVBovN~K&GF&kOxpRe6J)wX(ln+n@JCBu)|DFc0WB~qm( z_fb|kQOQNC`Cec4V(h))QNqI86wC%OHSmQ3$qn&vB9^iBw zhNH3CTolrqtrrP8?3>YNoU+hXVqje^J7RMwrxy@nBBUURwE40ptlU>rpvIZ2+Cmd9 zeogN9luB^i#Fy+eRi}Tu(QRetQ!t1&pQ{oCOGlC-eAM9S%|Sp&d^}wc4oBB)?q@Sl z@6Hn5)QY8#PHzlgFJkvM8|0{Zc*U@3g6}dYB}QPLaePe0>F4t-G$OQAr?ZU?>NvP? z{$wb~?aJn#oZ+|eQfjYSlauQNk-YS^0Q-`Q>>cgyEphM@TtQV$S?_%a=WYV2mRJ(I zEb)JEZpVZ5XIZZ$8cC}Q5v<(P(UUc%8uwh09^#hjqf_Rx7}8roczqiSSCp399YAT+ zrwh$Rx;9qvvBbJeYoFI2DJrLq%b|@-4QTEjyy*xnWgH-;i!6?IF3QQqBa>(U`PNQT z1M&MxxMOoN2r|yzL~!9s?V0Z17_wHtk?*^p*@=iFN8GuAbthhw2QBvKTN#qE^I#od zUN=f!e|&Tb+6+5=-kIphn3{)ubXhH$EfM2!D*8uObA)kPbmzi9+-FrsUQ&{(By z0lAU0KEXfz$ZU&IQp1JETgy{p#1x8OZ4a_#>;ERt%Y4G8k60Pj+NCIiABH1BdI?{JAgQjjj%mp8p|8yob}w|g-JT2*F`OC-?xV3 zh?B!kvv(3T*HP9-brHF}>HxiE1(YWq`a+I| z6ihn7+3BfZ#@(QN`3y^YDl3WxZs}OWM#pb}!8__5jVxksf0#jfgytt1q$a*QnlWc- ze7y%`uCq)avx)0gy`O&vL@&G;?0zo%^T-ozSb5fo7ry*Cnm%g95?4QROLGb*6>0Rs z)e>ugMA71KWFm;y$ts`W%pT(VfXv$P4lfkwIG->s0Ge^?6uH}94 zyib9f8o30A%oVByftWuISWP#5On)IHhGN@rHhemqJjU=1U}S{L6$^!<-f`kp4e9Bx z-ZrNWn-hbw)!c;lO^XAo3x$~OTlw-a0b_dnh5MzIY4WdlP|#)>rWykUfpxJp5{`^J z5xPRUIjh*Qep+f6E=DeV zdW*K6^6s}SYNI`BS7I(c7$j~gal;;j0OVT{ou-p>g?3!Za0)&7m$i|P#LEKJ0Pr=f z{v`Hk<%pxb3!Xp8@AwWsBa@vS&ybdtB0X{bi`Y=RtCeDNUKg0$=>ENJ=IPo=BxF3S z2-!bs#$QHpLi@Z+N~}YLKqNsVNAIf&q!p|H4|ax%VidlcO9^WoK6ge>${bsgH-Rwl zwRRGGiig)u6`NjNZ0M7QnJK&0y%r#%~7 zzOGWa;SyBcNs-LJ%s38_cPnY9eq1WM7>nIE5a2klHyC2q1azO*pN8a6!onG4nnAq- zv4p=Ii4w@^0*&RHT^Re(vIPig!nrkIqun$Zbma*i!k zs`WpyPsaMuvxikmevpr})Zh1)Czb<9Jxo1f&JF{eH`ID_Z8EV!=~fF1N>LFK`G%HT z_^@3hYP&anYflp6SR?jn>lHX7G%80DZx_;)M31YMcC^bH4~Zrgh&lcw&Z9h4WzFZM zIPrZsulzh=8E)veraDJkk5DF{)ZK_pu1x8ZGD&KBNE#MeO!=dJQxD(cGn+27yLQH- zZsAurhnUlCI)$6(Cl4uj(mi4EQnl@_Kxh_r_Tc2?WY$}H6Z2RJsz48r56A2B$Ches zube8WwwzRVO*O3Q?Vy@qzv-q#B7rK(gf>+58<}Wzvd@Y^YWpWDOZ4@frA!);&w;?J z)H=x{F&wZlcJL4jWm1Eh`s+B{X*9%nR(rr&XPIPZ#J@F%t6YBoae+a{!ZwaA^;DG) zE}VLjLnYdrX1Wi$7|yF8A-B*sYiZO{qQOkBPiV05|kZ zodQ=K`la8?T=DAY5I*t#nFUA47;^d^$@S8nFAjsi#&WGeR4;>@h>JzB?qlq<7Q1P;1T=r!ZFn^Qw`OLe zJUHbX9;e{T!@oXcaSr(s{{rzL!lb06sWvYcWFQYZqh2G&cfi#VSfx*y0cVk|)}R8+3-|3LFSga5;)%Oz!HyVJ$eGV=25|NF;395=z? z1FYpgWdFU?E0p(Q|3lk5KK?KBr7EP_OerY%JXfiujJICx_Ge*0U2N$7c%$71Prwt* zf@pg*QyN>5A8uGFuJ1@!v!+SLMC3SP8#`iNwf&VbOlB!a{AL#h*is`Nczjo$vWN^w z1Sxv!6HMgGNH+HYQL_2FR-q#Nl449f=7%&kKBiu0i__T+Td6mLsWCuzIOVG2I8V5d zJWkT4`j1@o0t;3;^Eg}&D|U-f(AJOEZvOi_qCD};}J z7-rysoz#fP2;OexCxYAYoal6sWNbx9!nuaJI#wKsaNN`FpWfNo*^DRN-ZRB4T*9KZL++LLC~F%YL49jjJn zlKW~q;y5z_zAR8eJ)WwRev@_lE;kqkDdYh{r&QZTm(+tY+SooeeTA4>)C+{+XK6MB zHW&uC4wA9DIB~?)xwLuCH>2=RW^?bU9705`nR``>zDgL+ok&Dn=@hGhkYtkfmVU7z zk2X<}As&=>1+f#BLOtWQ_w0;c^7skCa)154bEn9gB*3UDl%9#6aGXMSVuT*U8P9_= zwcI_5ms5fH1!5xx&qXXRnh=e$qR9ed`EnPI182JZ-81Kk{p?zkz{G$-B@x!@g)1jd z9P7ECNe?g19uDAi0EM*oFxl_oVWmOuK;gu-P|D>k|}HL85t zAbCp&`@snvZB?spAg9wI;!w(sSX$|5L|U`U6oMV4-#uJvjOek)l$u zX_|D;8@ON>-{0R+L=AC;6Qg;%F%E* zXs+>CExUh2!-R}`8fGg~ZJW2nRS$P@hszC|F}^&}XE$ha`hv3S9dUu z?IHn>!X+|Tq7*oybes$T1Rq8Kq#*p&E^7dlxxQZHlqwHzZXTt7y`+cFh2BNI>Q9K6 zSN~MMZDNYzADMRDaOx&C^z>024QILKwQN_z$7Co&~BmY9*qO6(Vv(yJqG4T#ooYKxn`_7@#llMi=T--yzzp%^{@Q0 z>doGZ&B{t4FRAOS;B?%qG%$z1J8hfJlulhQUYc-YGA(x1#ObIMP*FSTgPQdl%MNttb@KyA%QxHp z=i-LJ=RD6-AbwUXF(q#H#ggsp&nYDVcX5MEtW57VQPr7~V%(S>32?M`slkim)1Rik zE$@tN0qje=Rky^Y@wjUAD#DT}Y}KJgj)Lmf=W$ z(wPu?e?q!5nz%8XMq;Xz;}a?&+Ks$8O}!6WG3FtK4A4ddQIhiHj(dfOzUL^pa-rn% zK`a)C@kfCl!cc&OzcP zB8ZK(hl}B+D3yH!L+tGOZ)MTa^)q92sAqqzVki{JC`t4 zch4wsyYyl2LtLEWSWRfIQh3211Rihk@Z(&4)uAJHoJbQ^foR@BQxY`wTae`too6Ci zveU5)5S2)wYxc9|uu1AmT3CV8m_x>- z&&rBu3Xk+?{!Dgh_8)8IHMZv7JYo1&icJ0Vma^c5j?t%1=CACX(phmSR;N-$V`6<#SG^{oF}9gvZ4Pp``ox zP*Bej`q=L156bNfc1pZmtpUcFs=nv%MKF_UKCxi+NgM z)nR&nRZJdVR_b(_S|QgbldRwBReIw=L-JJ$;{fsF%LjFiwEBWeovJukOGMzNmB6B1 zx|M$X0x72e$}_jL$?E>i*jCJ|q1e}c&}|V5gC1@yec`|sgHoIyJsIScjU)#G6HBnD zW6Tu*;^6`+NLXc|z8x+fZW4rtGw}Gl4$q(HYlfR*@SkNRW99fUF7L00Bp?G=N8BbN z#kEir(;oIm0`<%H61|QtLZvQl@f5O&V$;d!Z;W)1ahKe2<8eg})yVV>F~TJMok@Rt zW0uYD4)62mYpojJ#hGL*4xr+AqkOf8?;b0r^K825->9c_GLdJRb6nUOGTP=bx6>`r zvUPOTflnh+?P`gGYs@{&R!QwUTPAiylj{q5#AwD$yxnL~M8#JlF58h!k>xAvU$3W) z0HrQ6DCWRFGF^Dg-O9{6g27zD;o=rpR7tXlm0%P(?D~*umMJOCs|;7*Qu?=&D<&(W z0jOp7M7i0mi$2_P!)-1)Glqs2rwEO-HzHKsP{gKqN#h&ldzHc+!Jh=cn8(p#@O2wh zMU~0W{r*hGS=uZ)D+7`AqQq8W8MN+vV{n607dkdl(ani;_}T#&*D|LW-U1beMq>mA zcCB=)m*`K#>=1Pi>5)H$)TE4ri6QmavK|z!GFH#G zEVi~K{J2yt?4J8Hv>IX}wB8$YgoumA-Wx&R*=-U>e-Gk0CpFMwkjhD0?Y9jIc=meq z-eHAc_Qjd5y2M3**sSB`12DxUQ)X3qc%iLn3lFCDtfuV+6q+&4L3+M?cZ?Q) z_H@V~0cQEL2<)hY$GC^_*kX%601%58N)Bp$rMpudo)2X&2I!^I zY9e%~1`5)UX;?>31f%fbwkvi=KE|MlLC`e{C&e;JoG+<5Hu>IpL>-sTi1vepJiaR( zN=rM z`c|dQLyKB4FF(G!g@yg+)9^>8gL4{GbCbQw;}9hS!6{DDqpb+v+HB~KcPASo!?^A> zSXNIHi(pLyfhpSrw1Jq(NLo_?)s}=g3Kce!)S)F2USb%qOt_>Zt*oxu+U^24iy}I) zKxw|S_;F{onFChoL{36iRr*DLC1?_$0NzsVy&Fa?1wFsC8WmFsVOPE(_SOuFv`~Hh z{g#az7C#>8lPR4|bG@C(K` z_xcxlM`vla9lui+a1-^2&!u8`KlrXrI$g-H+@@?G50jSVH1@MgN|6i#Qi*|l_voS` z;1<3mJtW=zfF@ZvtF(xLHM!80NE!Jx)}X$F%`{gesz}2?1;P+*1!#yEWiZ@CGRhya zf*NP`P5#|9Q)gHu<^5n3)qSMGDu>Mx{MgDQkjDK%yN)<7EVHkTz`Ys_ohA+^~8#1 zd}i_acUA5ui&+>gNUkmA&-Pw+gSG0!58{j=ZbmvfQ(UI-=0j(gp%R)e8=p1?FqS-h zS&lL{alHI)nw~!h%p|$PWo;J4&r-Tp~*dM&b=bt^A zg`@k|QduvQ4}`(2t^^>Ysi{Grn-9?J#a#yu47Ph?pXF-xK)zukHjmb= z^?|P;;(vtltn}BQ02tIa?7|)#sMKhKTO)pV2>Hq)~CXCk7R_rV!jS z3!I>8;AG+=YV{aOJe2m}U@}Em{?kU8>}JT%F~Ka}H;Se2Q^Fw-t8RPo;tYjqBrEzO zombzC%xeCm9(?*3s1y>G2pnzNvw<;;?MV|qfBpT=p1UC0vTz+p#j(}MHSU?4dWo6H zUeT*XW+0@CdxDfixi*u<*LM3tE1lgM*-THu)MJ6}7w8lI+=9Mq&s|g)vS!>yDP9MR zntVA?fmWr|kFq>>axrS=_S^RPw|vvq9G>pH1TLQhB}zv;rc3lbSTMx)9YZ@)TzF6} zH6)bE)*6QE@h?BBb21i_7#|$n`)%Y3zAMfy{HB-MW|3)(!0n063NNH*21r$mFkW18 zA<-9MPDbO)gl%S@e4LJ9bg zVBQ=4V*ObaG*wn0z=Y%n*=f(Qv9IQ<6C=hj_bs8Cq>~OEdKf zMA5YNzLc7huO238Bx(=e@%m_xsc+m_sm>#&+2z+ro?HZ%ek$XVFz$A~Yc(VcEWH+I z0evO2lhf`}Es;L%Jn;}8YIW4bdAa5$;b2&L$j*@J84;(y6TD*r#cSqnGGRW}HT!sQ zW7V^Fh<*-QngHxa4Waw+YX}57_Xl(S|@2$Z!Edh_pe!Ye{j>1 zVK-l^z!E*b_EXz*|G;&?coz*C>2Z|p?52wv8BZRDuZFe$iNPR|wJ}F!HcIP01WT=c z&C68GS4cO^E6)vgh_f=I7k@k;##^cEpZt2k?EO*Oc7VjN)BEn+!zVXSkH=^w&=FkXWSCWZ~|3TkB(^ zm7Bls+S&wyo;mOdbyVu@F z(}WFhrSGnV8UJ`@;=!~8cZBcy9J`yZj65v%Mg&_AWx_6|r;d}g8AvJl+Re-QqGgG7 zwRb_61Dg<*3%J6NNZ=bvSd@z4Xd!TtrP`!xC*WQTH-4C7(T|?#9qWbiq9EhJZWMnu zYOiC&e7?ICsfam)!k4H5GTMLi3IfDCPK6Tskv^oe!CzqrVOJ1^+ya^&8?9552)f8CCet%2f_K< zTE-pfkwH#^^vlQK6{D|)(J>O9+-HkMX=SdtI2fH7jv{_(666S=M~}v1%V0wBHdc!T z!Lg!i!phoNhCaD5qB}+Bo;OnTJuelCzS(^u|Gd{q79@_U_wytjtu+ph zDnRHbDT((&U1;zyOH9As;h=fr*;)^9D4i8X(DcAKa-&{uYvs+ChPotLwONBWM@ScF zO1NT%a>iiKdLSYTG|a#>U#~kr&BOL}x{z~xpN*EI2x`ftv}qU~zC!4IG~m|& z)`$BP*$COHKT}VWVm6U<;h?ifg-kOF5HQZ4z~6<2UboviF5irMF4Xubqos;lWU~B_Uy4KFub{ zZRfL$&U?6%({lxE{Y7|h|-BR!8ikjpSjs@oJmt9eRiPa=b^U6z^V#XM)7%23sZQ5e!v*2i>Vp8 zkKCCx3}{zesCWBLo`z6d4EZ^hIL+3S3J$2(Cw*z8dge~u7j&rF-5jjtCJJRVZLJ#g z-faMr^mgjR+sa@PPV)b``&7GWs(())Kgknz(aJ*AIVlu+fA!3{Om*#HFJPGF_s_tg zhGn-EX5n?)3>JcNNxvFT>t(h5%JG%9)M{=4gZEKHjzWAKmAHJjd?0PPmc8l)9Ev69O3U|7-HQ8e_kN2gcY-EV+ zn&DKn`-`D1K#doDN3)eOiM;UeqUf!$&9|iCF18LxV_|Rqz9~up=q)ZMUwJiyTc4#k zX-x>5i)n47^$z(nJ_T;aywaWGe6D^6L}no zJ|z6Ez$~O*zLk&4m|%Aun6%o+eit7?SK=gSzdtJ$n>XJy%CXXUJigF zPBI=W=K=T*>%?dRxX163KFNjeg7WKGs54Vok|YI2u?&%N49RXRPXEWw+eGaV#Oj7J ztf4QP(8W@og+(6jmP|pJ@q#~a&6dH{ur?`mB{AR7#fG@$O>ASC$ejx;iD=JAq6V(! zA)Y1mVok!%TZcObV))}xUz+Rc>NlH#zZd&Hsg{|7V^SmKwff21L&%?ECIXfA8A1u+ z9g+)-z4RWyJySobh(>rVwCJJ|irWaoP+dh;TY#%tU_Xb5LGn~s|I7p==#|ypS<(0e zN4G}BWMOQ1X?YH-gOu@z%JTuVJhcOAYIWC{?VCL9HPn6TJ&c6{5h7d;hMQ6X&*Xd3 z9fdLp>OFcSL`1Q6?^_o86^@@@*H<#0%rA?7T;^InB8fMTGOlrQRqbA;BX{Oa&h;@U zjkLK;D3guGb9M#3Qg3ZeDxZwuehRC8I7r$mBf^*oeN>1!pS^T2S-o`0y=>j99gBH& zdU@8#0_6@5U!3nZnaWGCEBK3pHtpDZ|1oKQ;y09+J8yT_$P0Yr!4ZM*s{G6ZG`I5& zL1bb9JeR`>$$t^wJDQSIQv+miJH!P-!xfp2rVY$7kC#;Kj!JZto9w3)R{0czcSgCB zPd#6fjXQFD4E(QF!F3tfKDDElF?E|NN_F z7QD8;xo#xdV7^Hn(IIw@MyJKM{Uv^Gz!XzJQ1ml18CoLa z822JK+F_^jH<5qeuq=oL+K*Z~+Y$ZUh`GOBHT&9c`GahTEejEUHpKMm87pqEjNlDB z3+M8A#EL3q-&0`Mo$Bz#d$YF5T-fqt(^J7e*Dvx@J>=UKZs{irML~S zaTWXejS{Y2$}g}bZZ~a@&M%sOmfzVlU8@B%cA`A<%6pB^An#MlbEh@ouUax%qFC$P z-RmCs*Ds(wtk?SyF1A1BEk1L1oO9mQt7sV?;U8w6LY6ywya+d$bHuq0sdJ$Jw)&9g z`ttrSto`2rUB`EF|1aI${GZ_Le;D(BLW+H%H!yN&F9#=;uLKSdH;dJL!FlsTMWl{R0I#0FyXYfZ) z>H+!!9R%!QZ)O6WpRCsGDX56rf>m0!G5;IuJor@7ooUz$RU%$I{X>TuS>F{CgO*lC zR<le@^aOTVK@TK@0*Lie=}i{8TU$-8ayd>(w_d=j?mA6bAa0+<`enCj$u%ceYup{g+Y#R0IV{m#tT3D5hjM?tH8_G zc9E(mv{hG`Snrrh%ZVL1#~?658EQ`;!s+GgP=j7WmFa zL5suJ&0~#%0lw_t?}noL*4bGvf1A?8t_I){?J=X74A-DzoxI>S=JSS~=8lT@EXd@J z6t3QAEY;n^ywreQ+MMwZi2UJ5gP zZ~@_1sH^-#nq8DPr(ajDQ1mWoh1l`48pZlxCbUO_`gcaDhVnoYrnDYez2-F0KT7MW z>_%iYRs5lFBk}NwKOvr;+hkC4u$NyBy=e}NQ4_&p$eBKpuH}Xp`$#R_S;|@2-D|lW-Rj`o6TqA*)_S`S-|YmUk&ufcJ3LN0pQ@^^qA}?z!6!jiHPaa z0sfk^ckNjYI&Ozyb$DI%&Z=1`m`j)}HSbGWGox7%=XNirlQkbYS(4Cv`gs3}Q8-7C zXLU3$qbwgLmtKmSm56f`=mGKQKgaudLy*INCw@M|H01kru<3__xWWbFi7qQnakz(A z`tcbU>?(dVL5KmY4U(!JU+Ikf&$}tqMU6ZGz##b^G}lCt<$fOCEgohpGr;Cb6BhqK z6!0<)%PCkL~!0_6467q&&CrXMPIMK~q1`aQWe zD)jw^L_1P3v{Jht!5eY`?VlX_#v@+J7n{l2D5(agsL6lt$ivOf zKV*GnP@G-VWC-r=?(Q}?!QDe}O_1OY!GgO58ytcM5AHs=ySuv&zLWRc-P)@CIaSY( zxqABa>C+b`DD-xKU0JcKd-~Srf6v}-ukW;|rSP~2dHOAROsRy)?fx`As*hc?zMrs4 zawrhYV-+0cgtfSD7t^^PEA#Bb?qqgP6HWL^Z(-XMX2mQE(E0kHUJ;)^fMc7vLR!dr zZuT5K))fEi>T6sO-w~sGrE!SJm-b21HzHg8PCOgDi2-AlP2%}x;Y?f6$ErBU{5-Nu z&&(l~mRXn09}=o5_keBs>LphoaoDeWIO$8(Q&!O*F_)EK zT+p@jSU=?n7iO=RVlH#@t9tAjM>n;|P|hO=M+>{)M@y{}_1@y~X8(C^4X z0usdq>-x#7e2KqfQf7!We{O&}t;pKT?p?<*nv;EsVcsk7o2l8}xoJ)K5Ab+>^>@@$ zEahLaj9 zcIg318$Xw7z;dO@yC_{ZCMnRKZ*;~9dtG z-ZEQL=@+cVrP+Rwen})7J_BlnxOfbY@TPmjdjoSf!87WhwJknXo6)_i(J@{( zQws0v+SMj!qfGq@)75S@*r<)^rdItHC)$eBCaT(TM?IB+(nJRro9E=+azh1Y*3|5+ z-#A1nn0}GO>x*HvP7dQ^E!f?(Hg}mSq+=q2oTL{UVzc{sbCHg|NoGO4p({D4XXWK*8>0>cSM zPEsE4vb+eIV8z1IbvIiHMW?Nz^_!!cnZ?CgEj8s;`|i-$O*K#C=r|tHCcQh~qLhXR z9lH~RzTE{xal_|H)`CKP`7Q!C@I`)>Z(&5gm%>C(%!tMlaJ6b!aoSQXn zekT}RQ^-{wNq3wCo1U|aS+2JM)kA_%2kiyII1MDh`|12mfhv_X?6!c0=9{iYE{;IH$(5O-ylYH~c%eILnkc#UiH`3N)4(Xv|cw1$xVGV)T$&s*G~95JO%@ z`umZM7V&u6j>GGfkA-Loul`Sx>?iy(|8Pf$EHA!_o{0$w6B852VfwMHykt|I}b}?cNU@o|h)0Swdf$u4Fod-x!zLylyTJa{SFkft-hvdC;Syqt!l- z&L{*N;t2C44m@7?Z*<-_`(vDro8oo0OVdDwH&)1gB1V=jnMgy7EQH+7@$c1#hgLfJ z`p7{7TID+G2=m}bvxD)h(g3s4(qnfJFut^9*Qh1D)S1V`-Z_rzg%oXoTC zPUMiIp`l4Q-rpW+($LZUHf(h#;IYEsb)tc6g24e;%Wa>-zlS)L_L%`ikC}&@B>xEv zx1cL0C)IEm)WofZ2j6W>O(|il%xVZ?i1|U)ro9~IAe2l&x5$q?kehm#A)5-aZQk-{ zzt?k6gjZEnU8d)V{k59<4RG2HzD!>zQK!y}*a?J1wj!hZ@B4pVF_7=Ul(&ygonZMc zub15!9}dt1_YOV6gxpRB;2K&qnwTFAGQ@m(E68Fb{|_#GkzH%^!ftjs2>qvPg=J9x z4P$F(7h(}j$dwL2BNrv%wjA#pN~CA}XAM*JKL$9vV#jZ<&kSEGGp~}N#GK8~mg}9K zZmrD~=-x{8QrQfv9k(P5nw|S0w<_hXBE)9lUl>ByV8HRbJ)F|-CXCCeIzC@(^}ODV z;OrNtO31ZaX_)OxfE*L7|1fm?JH=aRnjDQpoPZJnR9!8kY!TWtfJcjZiR zWWR4i0E#i%fAY;i|H+$!iI4zs$ly1=+S|t}Br_pG2Mz8yn}63vCFbj6?|h-+acc8< z{L7gP$&U}D{!0O_$@6E9f-R!@qwx8QzV^pW4ywwH!8>wta)M^d!E~`cHv`%gdWeai zHL+zO|NljbL=42HN*oh55WCqoqjQMD2(i3j)rE4iNeQlk%|#H3i)kg3NGfLX`|}0K zCl$*4hOzH8PrxO)ZFohxxM zeuhGH6XK`S8G+!Hg8jkPN3BL(Qfp`rL0ykxoJ1tH*r{2qSP>ehb_~#gW?eOIKC?yd z$h3wN!@TI5uhb|DbIJXnu5Do>n^UWcf0s&AtwHVYp!``W$R z{BsNEk9k%&A0 z!sZ#Z{{ZsY5$QGB+bPio`&2rU*@yEr$Zopmf&XeVU)~LobcXm@`H-+l&m(Dx?Y0_Ms)Em$IJT<>s zURDLDH*)ZKm$Y|E{g^4)U9_6y0+p#yyu-t&+MK8;=#;GB=`yYz`YLbR)-3#4-^sUO zWAoSIo6*cjvt?MQ6YiR{14$06(dT9{m9|ZsQ=LE6)CM^%*_lCK@a-j=hQSuukx|0@ zNjG;+JI8N(1JVe^g?qc|_)YaeM9vTt?Kls5l^3~o?kDm%urNg0+$HjpBu#z$%JyYw z;rPtFw!d%#jx9jb8Ij%H5nDgy013S4xc?%U0IVI?jb^?X(Xn5M@_hU0P^z9EdPRRN z`Vkts+2`@vNyy`z2clcM4xPQYsB+4s$TwgN3|h(PKjLz@{E4B|g#Z10nNcb0FHz$*?qnIYlie$f z(rvBy4rXV*ezHOQ_Z>&46;G5*Kdj{1ErmRy6*0& zZb=&u8mC=Bum5rbV^tj;0umCE;5|cdQH)RL-;;%^&g}RnL$K&~XgHLvs?IkiVZ=hZ zSjdIw)rOlH(We2_)$1OPG(LqWfM6o`or2O9k?<_A{GdHkPD49t-NP7qDD({G_wdo79)SZUNg!m%FSyslBQgl1WI#`dTCf3$C`kc3V5bB zVLa-V&tZ@CF*;5HAHVNp{|k6k0T&J+e$0o<%bzhZF`T^KOUiOtq<*uqqT-NHOAI-g zVe0uZTM(VFT3P8Vj)apceu1Gt5ON+8rEZn7 ztd10d*(m9z#RKE=-?GbN5T}8hHZ8U+zf0S{qOW!fD{GUhB?nHW35Ckzr+dyW;2gw1}(i-ZSqbVt4t26=9GWMAu zI;JI(U^WlM01PGSNrhPMOKi3{d(M!C75vOjs#feE#xr6a7tP68cMVf8NL$Up9VYcv zP$LwtB?G6v_SBZRK84Rfm9gz z=2PK(WKgQvlsyDiuhbP-rOv#!bm(c*I~UtW%AD7qtAfq=943aY>C!$^zARS6T?s!H zqPOs}!xE1?*ua&}F;IT73C0u?MT4)WB0YM!2>1sAhQU*J;QoPu0pRsRTU%Q&V(DYC z-34`i1hp7Ek@1_xf05R8J@V_Qp+atdI3rNNrKox|z4ik#h(D;mcV@9+k180)+=@wJ|>U+k}wsodHdiqcK{HO-tyfgDl9zH0n;=sX! zasK34%JU`Z)#+WStjKlkTUt3kL!&`>xR^hNNhGgcrO)ve|)yr7E&M z5==b0`|y*J**GDK!8n6{gJCbB^XV5fSo+kB4rEOQ^wdn0wPEQ2L{|x0a?{6~22AL} z>ps>0C_kT14;LF@#l`eKzP>Sx{&DDaOkXNrjG%*n5FE2uq)hxDh{+ig6SdfuB#O}a zm>`A3tgo*#*cUHr+@CH#<0#yQ1{%){pE8%tH!Q^=ArpZexd4gxJ2_syV%GaROCQJ9 z1D%G*uM{e(+3kK1ROX0;E50G^o=wB>W__D1-sl_eKgg??L{Mhl4G00}WSG8iBd(6r z^-m;kJDENcoqFFQS?j%_+^W&RZclHKHj$^3qxw|_7!Z!}LP{dFGNt7HGReYm)#g`l zU};*(p+J$?87kUSF0}J|$-f0ue&4mQ?BA=|B|2;jI8>tlAQ9Wx_Y8SV039fx^bHvo>nc zu;lVh9d=B3S*f|#gQ8Z6Gnfs{$A6WYX@#-I&Bmrln@Ed)jfl9Lw+`&tA-)~ zn5I{EmhQlrPbNW!vt1K|>X@OOcHL|Zd7v{KXnG|`18y=>P43I1i%k_BH!Y~*@j`7{ z(RL&jpEssoVcB}Jy!R$xWgzUp~gr{Z#x|bj~z~vHc4^|X_Q~? za;DlH#7uV^Mj;2P@y`cYMP3{xRt6sG-H~nPIiGJW5L^IC@(1y2?midm>gjDC%@l)X zAIz8g5^@TF4%?nDV5jff;H;gT+-rYLQL6*^=w|N+wm0w&`j%T19;@T?z1>a<w8`a;8$t848`p`)!(!@!wQb>zx>|K90$PH8(oEGtgyk;yEBZ{ z8~P?I&K&}>1Ot%UYa=oy8~MHr_i{AXeTyY;)}Hy|^h_@6%#`&Dxm7Tz%up`<4!Fd& z*VK*Q^R`Db`$L5l{eX-ld*t=%1U<9L$yodIvLm#G!vUKtjm!5f=&wo=XMKBi98p3! zxmz1AaID2jKe`Qd#D1MaM@=h<|uusKR76e~R(#&oEd?`F! zbqG~^I*r4!Zsbtx$+4In*c%|IZ5 z`S7#pCsKaD7f<`HpHPr_RV~$WcG(}@(t*tu@_qV;YvXhr$HuZnG7=SP=O=VH#_R1? zQWWLoIql`w@#o+-V(9Y575d&af^z_*Jl}a|m-#Q;q9{}3O+k1a{ba>6;(4F=2i-{+!g zMfKHHNNOVK=^}6O7g|c5Ls~OUR9%gRuY8xI8R+W`T;dbgzh~v7!a&q2-S?KJ(6W~3 zo~+Z}-ttEPc?Gn|?v%}4(%|fN=WbP*bWWB}4<5EaF1iMow zGWhIzdP0yn{oj1F%CwaaGh{m0Up9WRr+VL?Mj+#}5okim%F2?6{J_Cw*5)aSe~`ZG z_AuYz|33vcBa2#@1Q;%t5!vW>o5^fy?Z=uFQ^Jjrp>6^&;04-N{x8(Yc|*T+_ZrO)@}lN zcN`Pw%R1Ns;NuceUCj|qCZgvF$@^XM9;HAcFxOerWf4THZXS)o7m6ftl{2e zV0y?R(&GtQ?=KOTsoIiS&V-lLOVxfbMRXMoa2q)c(ioWw;Vm#~KLC9?aS$J>?e{sN zjbA@%iz)XO1%)|*Hw|3>Hb=bf$eJ$Bm;IC^yv^!B4@0kY3v)LcB9DpB@TGNrISvf8D0DF5Wf~+x?D) zmY$^X=k{35zSZr0clNF&LH@lI_>5cANqQG_kNZ7^=I|yg|E#@V(L=)RPp}@2Qn=$o zjc^aoX%uYAW!N3mKeAFZ`%e%2p1VU_9B$z~sCZg8?^;Ba;!jg8McKX{5YA6?-6 zt3Y0OHodG~DLvys9r`&zD#bfG6riQ$WsBw_Lj!{*2vIb}`|c@cl}9{;A< z@V@9QkWIx^?i@#1S%Krb6*}oyG%AIX(U9JCz?fJ*8wg=H`CgN^AP8T`eJSXCosnZ2!rjuGx9~Hn5t)>F{)CisLS2x_cSDPteYV_oy)}`h?v2gGC zR%fnc=N{nX2^;jHN7}(P{3c58;NV~yXr}qH`B6nh1wt8VPM_TM{8X^Fw)nn1k;`VDWy|{$gkdXjmw^1?kU(;RzMh_sq=K&E zr5c6NHiQ0Y;TNjlA+mz-;9@=pOIsp_UswsFOc|w=ln5#c6W3ZXK4g%gOK$aqgycNF z<%_-ECSGzs-h$~hUQ8%pk#I2J%AVA)B4Co4K4Z}p#Ky+*75R~fitos7op5( z_Gf=faEIkf%uF2O6C&jWy9*-a^2{l53SCIU zvb>e^?VQh`+LJ|9b%~?^ijNlVNCS&x6&6{V>Vzv|Q;i=-3z|T1X4Hhae=1h>=1en= z@UjR})-zj>ADGYp+@9i;jw&)8P*MZ$SFtnI3(8jLL$p`jpGq|O3Q600s;}Q2z^088SwdlS z%IOHbe>4+8*i`JsI6FgFeCuWw% z*E&L(BR%?ixQ6JtB!(Wpj&ER@n!pK))t9JUNqGd?8NJkesZL_X_0A zU*3!xTL(INKT(fkUrBwx zbWrs$4Ism49ruSaM?>8An70!Rb^AV&ad z-P?f>D08yvy`^u7g`lZho+z9pRcEWz(Ds;I`%a73OSsIC@NP>`TOUYsC20aauipdP zPCZywI^%q!s`%;oOZ5S~du=JbqO{=~wx>(`0>`st;Tpq3vd>UVkZ7&1mfAc$F zpTB^hmJsr%x3N-WQ5jJ1Y>pscq)Uu(2i|Y{dGIP9aQ%vfNGU83IH4rDl9PepD_YCq zOK;kr=8d3v60`E_o$BAXE>yq5Hd4)9YQE}$yBDA=97Iqsdq+jl|IFG33*tKWs++Y0 z;H0PssFk=Hnt#%S|9tJ$J*RN*p2MDi;%?Nh-oCC{k}v_g#OsMAKWciQ4MSVDAZhOB zU;igp$q#)|fvc7`VU|cBYEB|Q=g;rz{ASK%|0>wk>(3HdGN@|pxk4=Kf>072?BWqW3LIT>Swl|?+d+e%cc@G{Clfxjm;g&Xts#Z$lrT~c+)qk z2Ib8$WI(Hfz&`Q`p2_1pcM}E{dOh0?G2MVm=Nz!s6#ZOgDB-mo3bp6lw*Pcb--(g| ziYPXSjTOPtoqgcGe5zTW|8bjhR!n{j_a9HE>zNV30c1pz~X#I0K2pR0`s(j` z^s}tC^hz@42Dywa>>B|P18B7j(e|BLgcc6i7-XV`k-xj8p_pOWQy&a2wy=|kh-jok zsTk)`V3+G9PCk-VbH7pAmXA{M9__Ka+XN4_>-`==Z{8f8UlC}@*BNs^)S_e0MUYa9 ze!+&dB&n0dHe!O|4#}L!wm8)@>W_8^VEwZ z*}i-lkvG+^W(~b%K-(J|12*1~{7&*A=0W}S>S6lyqA6FlP9mb86q28Y<}~4MzMPv) z(9DW~m)w$TS!HynV;H9I0++wC`3N9OHv_=L%}6F=#r1i1HGg->6SJ-|%2MwPrk&nJ zDsi0^JoEJl+#E%T%@!~@DgQLtjSV3BHTc$cAzvkR8dcVGD@=kH@+V)xsC9w94|by` zlG1RpTppWeE46`|^WfIJuXAAIbMgzx0UvA6x;VX-!x{!H$vQz)%nX&lE#COqMzn~c zckL^`>;R?^23c_^6D4k>hkxroF@yu$yHr%ppRO^;0I#hJii(hKimrkJdF+;NYh#vy zSxC4{xe!?~P}H~O5+(?ZA$#iV0z1O28e%=!SzAD6LuyEdu+4>D_;20ax0a`W8NZ-U2sh; z{I)E8BIgnh6U~4OH5b)KOiWV*uWHnpl?BOG-LOllvl!oWxv2GkPv4k-A32Iy>Bn?6 z!Fid!J{^%hPt&Y-&krf9H+zcI5#G|vj0(lYhs#Oz7XVQdAT<8Ips zd5Lt;#}@h(UB?DES>rwl^XURL>bS0`*2WNv@kWP@?)KtO2&$hyy~kz{r&Qujoy3`z z9Js@dfK+-{_qaLUOGxJ4NW!2BMNImS$0M7f05$X-d{oCmSfXUqroMA4NUj z`{8Q4kRT5;x@s7IhO3-uP8n6Y$3D5+eHT0Ay^f?~%-B=mkg%b&PpJ(4xY4UVANhmX zm)r~lJ22LwthO4hQDenog6>J3l1916zc<)K9EY%C`rGs0i-w1Cnd=*}oZCGk_Z}FB zRT_Cj>-~jeZXoG~)jl*>7r~(wW{n~KPq59`(YZ8|%C4R(4n-;cj06680Z}bUi1WA} zs+m@!b%+s*QS#>87hdM8Uf<+ix#V7{PR5c5NGOvGz2p1UfiP{HjVlPNF?#mz%{(N6f1KPW1Zx%?Yl#iW$kpzWI4;27%mVp!9=0ws;h zvTJZKJoWe*a!8x#8fyMKe+~tJdzyZ0D@3y?NgE++KxN=mfSc1#oO;)dmlPuyGp)DX ziW?=JL*H{%z@b}M$;v*AIK$F>ZOpMZ{@H;u$Z%Y+WMz_gdGd=Vn2U{j^G8s#Az|IK z3t7teaqPCbA5hGfbv&d9>CCbD7Gbsh=_Asv^h`kSRHu{jENc!tTF!Z+_`mIn`I1=C z)g=z0s$>tV?id-86^eF*O8#6$tB+M;E*M4usLR zFPzGKRpY5BmmG|^X-e;k3$ZuJ=_D;WU5*QaM>l)Vz9ZN$h{VqrFrWR!jo>}-jhgF0 zVoC6G{Kh;=d~=@M5&7nGwrZOcmm*+U_mhRj*aCy`_E7~u&YvOjZ>2U!>)OHhS9S0V z?ap2TBiL7(0jcqk6#4`==v&H=CE=W=ZB7%(vjaS(;AhHFWl-E(_d9ipT;2hAJUaap z9%hS2ji#fo7C$0hu$3yTSmdjNXgoJ+)p&q zk^|OxGe;rKlhfN|TRlf32rA<*zpx=kdV@iw1p zdgI{~q8aqOJ5J`@8?jz*69`2iq!RulVErco~vJw_};Vc(eK@DLERq%M2 z8B1Nu66i77H!?SJXiv8=Fj9RIh|D?}H(N09(znX1-rM1SlFKL?Me1dq)yT;+kCMZ^ z>Y%yb1wSh9RTA9mi|jV0RDT$3dgCQ^tqvLb@1$C zLkruw%sim*iGyo1Qq9RW(j4!#qKRjTHSZbJTXf-h826xVI+4f0MJZJ<2V&24Kah`y4Kywk|pnb#5b`Cce_Up(e5pYu-xa+AIdhuf|r z3OOg53p#D@-#v!W3=xe^V>Q5c{Qc->==}ZcPd-z|oMu+~yH3LhsQ<<4 zl?wgFVABH;Vc}>-@>p_56NnET_^3EXt;N+ElGJrv==MkAhHTwE?k5>bLbPt25HX_d z(qC9eogmOiwbwcEojTnUW^E z?8AyOZeq~AS@$h;IKwibx!xD)nq$MMDi`?zW1Wyk?{f-;k?z$74x)xi)D8Sr4!?1_ z%m_JX|2f9rY-V@Uuz>T6s2`nt;-=cZ+Oo!7<5_Q)6>}fmBE7p#9ms#jcT#VQ{)OT% zUXUo%60b<@nI7)pNCldr-s2^(Tc*f^Fy`E0+s>4!{n%flD<9db0PNi z?C|v(pdcm6)(a9Kb`HEu4)UhtP3`TVxVMA> zj;BDPl*;M9;K?2=ywg`7O_>hIsmlWji-87?Fr|VJiEej>nx7#dIKLXnUwz}#d2RgE zgkB*clkP@&R-7_}b)ZBCI}yxzW+*3e@04Y~af#k6=F{SVj+hm}_;I@FP=k@#WumTxDCJ82mf1`a`J!L6-~e6k>=>XdX|-sF+&O0F@{e9%m_$BbMS~ zQ%mnaFXB9?Xk5?@t0yoBquAwBcc5rBX60uQ9QiGTxM)c(1GU_r{I-uL=~GNQ82F@7 zi@~lX0`9&-kf#jB5YOlLLBc^BblG;;=BqLvUA#R!J)65C3`aukc;pa#Lvsm4Mpu2* z23HsrjS4^0PylFf7{9wT?Ty1b=%;Z|%@xnqTB^?eU*3fxkx#zh2Qb4@ zOl)M947&R3HqY*O)(Y_Y;xeD``eF|{C9a#_+@Q%Z55sdTQ-FKLB(91HQj~y&z{UR4 zrCKp?=KD~K+ez>ZP|UxBla|?UydF~FGXJN9U2ARRutM0NKQ~YM{|TBNw`+%Xe_swl zbbfc)`t@hZg<8SVv_2iOns@ybh$A)r+_O>_n5{lxLhqw8*!1>f8u?_LzGrnfbI$lt zSvr0Z(B1r%Iy!?NF>5Wy+ECIY3bbNRndG0aj`-ELj z{z`n;FQZKR((K9>sx^kFK5R~6{7V03;6j=JQEYvwT^q4AIWfe*ZG8{$YX8&wvS)z; zwqv+AO05+X6SCAkm?+<_=F;vzz9SO1P$v_)w+Btb>5hC#>HNR%G>QrWsQoW)U@T9g zvhkvx%YXhL1X?M1XLw}sm1s@lI-m?mbRdXqSCtP;#-6C(RY@OC|3%o1Q~f*YD5yac z({H>(w7H?(+^OwYgtYk6T@1bd?Rm*(A#>T(vWu<`Zy#%xVtZZ1cC8694BY?}(#7Lw zK{jYuPbY{<6tI2=vCA=tPWl4R`P+rKT|unskpZi4i9{FCyv?lz%1xi3`4j-6T4MoIahaUxUFDtc%JwFV}(zYJpJV%#LK^65#CgEnX70BIcj zGt%Lh-~Ci)D`I+JGlS`xnp-7<4|VR(XYQhom>kWRjY^1yh}?J7xhoZA9H1=tkv*q-O{i*Jz_i+}JH2G4gn{LV>vi8JZBr>=Fhi)?^Fb1C z5~w{jW}@CC{QXNs;Gd8+Q-*Gx?3`Ny@5b|E{G?Kzs?;R}BlvV6{o)11{oNuWZ(SS0~oEr4tBu zdPCt)81yIVpm7~&l)Sj0Y7LzsJCyw$MaTY;>a!LX=c9WZY`OSi z{%=Ktf z01Xd6g4ph0D@hC@lP8ePz%P3QM%?&yc@8j^DTqz&ZS3jM z{(%~us8XrqWxws`sHzp4L+*BDO{Qb%9c@KFyq@5MMFF7RQu$2!**FDBSE8J}daL~* zHA}-PiK*bAtUG;UXDd!$4iu>XF?bU=d{E#1PKV*0+C(x#sXU8v*Z~_aX|rsOJp*Ot_FeY&V`KcE0NvOpg1^p8f07*e?XN^8DOowu)RAB_6|`jY zi=w1o;>2X{q*jRfw`df)d-Ka`JXZ{x?sNkTZ)EahSMaQ+T7*K!M1OLx zwB{$ZV@;@54V0fT&FZ(pWyn6r4B#nGogSzV2)a?y&AIo!(h@t-C?$A}`h;AWGt!Qi zF9t-(e^05D9o=DFbeTd){*L!^&c6gU&uec>hv)_AS;A;byvtmPcnP7hhQ7M~gyPf- z*d;3Pm@VRYDUNU~O2@Gy>%B{#v7gfeQN*8;hwU8DhgE*5B4ab|c$s_3O8Y)vp2i_J z2#L|bd(TAuH8^lt?TNbX87wCYbz#&Zywn?*rG?1XI7}hiqOliN6|{jNl4v+gx(EWN z>kcJv@0O4Pz=5rcS5JR8+Pphq6e|lW_w#mql`PG#E>IZ*(YQ{iH2;L@{JDIIk!bPc z#np39JEmHDL=f9P***C~m{CeFei*;WP~anw-+^p@%s5=yhK&NH6d}?x6qraFW+tLq3Af*5&gCyxBM3x_)gU%8pE`ll8o2dc1p#DtF1XPbJ^F-~Qm9i5_5p z9jW-NDq&QK>c^CUU8V2-0v}$mUtRaj>!UskX`5R47{x8oEL`kg_$I$y(O<6q?_X#) z8d^Orw!_H%I69slz}-BRM(yd}{vJJai<#~O0Xp877C>>^gYZ!=n$dG*U(BEH&o-nc z!G1IxjSZZPt=#y`%-odZG`r6fAuio~z|L1Vl^81+A@lEeX2`o${Al`>w!JxXJ~0vh zT&V8k6bh=>9 zmI4ftG(n<7!BJW9wxjtU3?HjZq$m7zINz~;{jH;YpI_=3U%Dq%{^}+d6&KtojH;eG zZ@PSG+G7Y_7`bc);AW1QP(i_Sw)k4!=D4H&4SnTkQ;1zSn|1r672H1{VZR4+5#3?x zF!|>fCKh(YEW*7I>GL!3KxXhBy;09DvpG$W<`CbZhAvd6?||dQ+b3H9vvfZmuNuP& z)?Q~2d1n96LdNHETDhh>1WsqtKKbq@Ut8q)xWmvZ(&gGh?jlu#K<@*T&nv^A%1y)zifXF)!lvz!8h~5f}f7!QjgP z5r08c6uI_mElaWEV78Y{;umi;(kFMg$<60Z2o==a(sDhPA6@#6ntrPzEYgG;<$Y)J z&Cqg`tO17qJgnxLd53C>`uu^$IjREAY~+t-xZL(Z5U*PQ`asdWA;jnXQy-nw&QM2;&gvO{v>oq<=eTuQ zjdarzw*XO6^#}W%*_R=3B759p;S7fD%63?|=UWpA52i;=iwAjciwA4_!Om70POm60 zBSO13;tJe7&V0-f7c~FHBQ>qa4$>ZcmFG`X=qK~@a6^Q+SjovbNgak$8;*u5vABXp z{KX4u;$j*pCRC^HIe4KKg|W1*9j9xZsn58HpAWqpdCLRVC=J zU`0Bt#1EXq7P7|e#Q3D!eXOu>kr}m-m1QtmDD0lo6k_>@7+E3l5`Z6GrHk)i$vXO98f@)BOq|=0C0atx0h-ZqMSd zfHFf@(M$Ty(O^elM3NpNJ?3pTHf6b~L(6r!Y;Dl#jy{EHYfPx<$v{Q6(U+xJdyE@y{MwVJN_nR-*oeE!FYdhj+R99W2*^Uhe5l$UZVr>vzTU%TZq=Q<`MMyiR6c{7 z(U2*<$gJ(x(H6Ahj|%FV-*Kepz&-sHm~E&z5lcRhY?x7fyV6BSZjw4HjU0d5mD428?q75(N1Ni(fWE#kR?i^$zo%}v0?<$A9uWdT02O~wa z-?THmb2&SKj_+aLdz}5sQM+LvZ1x=c!wXXg&JDDC)ry%?vhBhl(ZLM40UCAOdv&|# zdiQdelMMvzD~y5@`B|nshp|RG_rvBqUaGfy*jz8vVBT!zH?L!=ZMiuh=suQR0QN+% z{pz4}2Y4x~ycn4jZUWmkJ>*SMIfp9waN0Yp@2BJU_<^n>>n9Sf&NskH)=~VvKeTr$ ziG<#dd5Y6^CnVvu8YK8QW;K^l;n5Bs(4{WhS^v*Z^%ym7yyMxvh%rWCyOycd-xhg< zIoLxg%XBc@?nt!PghO;&_w$t(BC7{20;N>Qg1MvaC5;=f{ltFYxa>CsO1ghRES7yL zg9rTeVK>`(YtDf#*4%!aS_7Ot{Q8X1nSaHt3;QXJDNOq;B(MYR!dB7V{shLs1)1R^ zbplOIXnXrBaTMukIcu=`M`L(}5J8i>C379V7N%2nw*F0N`YQ>01V>sf=B6c~9*wkU z;O=SbSX3d%&PbX{>s$61=aQKXH4pXJ4`@l0)WESTO?gtX4o8{xSX8yu>&|T4zsMR{ z(U-ES3E6A`9__=I^~n;apV7|nD+l^~2Wl2CKBi=e1U+V0=J}~3p4%-(d*?Y*0%t-u zdftX+oM?J*#m01^I%9KsxjJ2d^-h#6t`%^y8KVxN<>MblO`r9?8>BpEb@ffzZCPh5 z*{bx=?#xH(0>EmK*S(hJNGlr}+CzGE9?&hbcU`r~H;#u`t=a%Y7Nj}J)>3B9*Mb~V z{{t1Xp1$nC3}@nJJ~G*!6Z-dyu*4+_)kGt(-6P+qfcfe{nmK_`C8+`Q#Li^GiG%Xq zbp@hj0M9$jiRAyH?W>~Vh`KI=6WrYi?(Ptr;OejV$&)H{hY1($TGXfM6L0Wn4aglFNP2iS!Fpv)8xzLII zQqbnZA^o;_K`H`i1g|)*7m!{9GnH--5mA{naIAM&eFUbjclaB5bECDRseCZr`_OBR z=6?duttbrpaPM#0d)24iGjg7|7;Sp}dwclqnAeT@PJHKtMzK62LLtB)aFg|}AHBSJ zymEGy@Y02tW=*Gq;Lw2p?o<3yu5wjPO1(c1juFos3!o3>xfE)_>g|X3{2&y#(S!lI z*c@8Ov>eruPhG}gy^)H_MXU+U42d-$A6ao$U-W6@YSY>*G*hyTFgbGrFv z^LMYNx$!${z*=~&7`mm|aaX>QPqf+zb6@EIi`7ykdq(*q0_iiOTNdr(tP-siPM}^g z37J7ww6UgV`@3=^0Td`#Wn8SfCZQUk17=N5Q###ANTo40(4@G^Iu^XeUl}5+-1uS^-kKO*#{guX+%&g+kGRTgkC%m zCT94;8?_wQ%`a`u$#fP7-pc27VuGi0xV2O*6zuy`HiVv%ao5INb1&Ax+-0V%hbpKq zLd=1>CdyfcC-Y5ErA7>9FLt9h4ignUyRfoc^7p$FxKKM^Y#@Bt+zk;9Wm95F5Br!? zu%i)z#;Ai>Fnt;4^Ye6ijr*c062rx7_9Xnk-?-*3Z>q*BVbIs6m6Fw*4~&wgGS2E! z>-3V_C-!iDzxfqSQPN+qmGdp^3krp$zq%s0mOtV8KOj|ZDpNQNkz46CL1$DHZb_&v z;Z{b2pq}$g9{m?XJ`?!k7P|`t`tIXct(EhyeFIz8V#utA=Xfoi)0*Ih&eBv;D6j;Y z{WPUDEQQV(Lx#vPv_rnAO^oGe!Wy}C-F|t)c7fYt)_}quJqXMk1Jpkv3pFZ2@?f~& zQ4s=OzQ@-%puX2f_?r&ENiQr=E9Gsf4St<{`5{EQVi|Rjt=Zyip1VmXQUd?j&&#w! zYB(@pR#UQY$fI5ri@Shx+D4z$J=lb2^P-QPS0B=RjQb;U5dR|3ztz|KggmHuK{Op* zA$D~Y0z-573*%{QnXZsJ({W^utsi`NEa4`3u-Y;#u;u4wXkyg)!T<`ECZ9W+!fLsK z^gATMm&!Z?BgB2i>I`WKlmgCc!2Tl2)5m;W#KUT@KVLC8K$> zA$?PGoLHMt_@NL+6+KsK#Q=fA#ZreeJIKxE=ew^jic<_U?bTPKa%PaiBbKjzU(Nk& zn6}3e0VjgD`nN^WSH0%lo${t>mqF)KL1##sn6tjL7NP0taebmM)t~pdp;)Uccq)B_ z(K2Zm`v;+h`oCv&_ZW2!oSNKCn_gN337_|uvxn&YZMB+iCJAcz@%QO1Ko0 zCS`G@)gt8(-V7c75sla4h;WQGS$0XrgBfN*<8*mQ1%531ld_V7wUSs8iYhE(oA;}bZ6lK^7Bbb;rd zjshW7zegyoed*xBuAxZpMW@#nzMyOoX8Q|(*^}@`5pi1Y^4|7lA-4d^bn*n@!6@Mb zrJ$guVC6v>9s>Vf(csp3*t+)f9WK~Jo~2!58aLDSdrx$H*pv+?XoysS-NAUXyYYzn z?X6%l*W|J)KuJU(w7{RO?F+JD5D1i~S|}^o=|au*^ZjO0gpkDSbhW8UU)ObJpc!z2 z?OgAVf~uuil5!>`*Y=hBr82umgvX~g-nKm}8!}0sI@l1euKvi#B{3_mB?l%PIqHje zlPoG`b0C=W_@jL`!lbvB-db_(0K%XBj@269Hy&-_yyE6Dj3ZTBJmyV#H1XWQ%aXmi zDaow9?B|_r!@N)Wr#A*@SUf#r6WD&jS*#sy@VJ%2J|YG-K5~U4Mu*D1V{KTn%jR3> znR+tgvAPFTUf)?WULy*APqDZ^-e1G8TTsK}^hku)`D=F4f& z`*dD}3QE6isdaJbBArGpJc76bpLe6&Ve?D1=|;09DHaub3hd2lE`H%~4a5f)8+0Nh z_b-x8XASuylVS2NUmW5`;f*o^%8e6gPOU4A8??+&^;z$0^b_oLE)M7 zO@6uSL$<32oIng!uGnPK<#$GH6Cat+ieoT#scjz@#^LfL^JiEYly#V7riyk4ldzY- zwgdsvu0cv{H(Gl&=|ufRPw>cX{d&wTD;9*)U7LVUA{&2bw+K9dJq;kVaksy99Q?{v+SprzDTZ_|le zDqaF-h*pGe)4$!_=PJ(WSO%17Mw(b&U)4bMf`5A>4A)?To7=n2QDr$8mR9+@C1^U% z=#s;Jo?q9Z<+_bj+<{xoF#CLFSOuHer2Ly}Kbx!J zy5o~)cZ9GBflPJ>U*S8-#7Ykgrt@4Fz^y_)MqeCE5o5L%tf*h#&QXQh@^sA~{O?{R z{wgNU;n&B+D8wa^f(2`(?mx=QCif(w=O)R)E z6EWkkAoncx=h5~3hq+Qs!AU->BL>FRb^ zMnR(0lMU;^r=YBBNNqV+z0MEs#n3=oZjwc4p-*~ZO}8s#qe9_obPapyecoA}{!Wvj@_m`0{M`b5K{3sawy|^rhsk!e zSN>Z7Bvy%5|>5;wash_4J;ND&mdjJa+z#=AU|T zrNbEVCi|KgorUe&wloGB8r>recNBn->klfT%IxcwelXa3Zz7Vxqt;yTo zDUh(KxH_6?Sz_uUaLZ0L`_|59OVmDw*tPTvoBaI}I%(j{xKd7h=}BX$^MG?CDkI<= zDq#EE7*0S-;Hc_iU_Ad2@yxERBxsGOfZF_X{QK6W1a);|ZLqGNPwJ7z)o>PF!v}0k z%)V_H z+#>wi)5Ism=!f!X_1M8-n0XAZkb}+J(7P~QYj2A6vw=z)*A7f)Q{DZ5pzRHl(^^be zOEF2l<7POji289Dok0^d?PlJR^12(ge4Qks$N|{OJ;$hF=lqx%L-G5z(f^!&Z)|zZ z)K|^DCxApSPe|o^u9cMNNUMdc!IT(^iY%$`V^|i68n!7J|FeD$sqb1gxe6(H%u&D7 zqvJh?Rs3ChhPW5*cBgAUTcF0T?>jW| zd02QBs(^_fQ6@EP7mH!EZIS5Fv%Slba1jK?Zef7r6~WO|E8j6pbI&o0Zynvd8$7%n z$gQHRua9$+Gq^M*!bjz|luP}^RL|wG{d22^%E;;;w6RY`Ndqc{h61kemGH$rqZ+AU zi5)pOR*U3#8v74OpKJ&n5`NFXkFSP}+HMjk1deo1Zq#q}7k;S%y#} zqp2^bp;%zJcxc!}qeR){24z0x`v)Q*@+SWd)Eo~~>3L+EeRsJXZgq!R+)-62H+A8( zA^@1Rlz4R`aAaZCnvJz*?nH7i+Zo{QiW_P)_U+0rivSLf&_B2)ZcPC%M1B zaGN@;f38g_y1B66`-0w#8~35CXdW$RLQ+bWpx(=A6ZhTsxZa)#<=eE~mhv1^#XyT> zI$GL`quxAsC+%W=qF^>>z1TRJf68!-AYK13E~Xobd+-iCmbh%9GnMk%JU)&M_AQ^z zuqRBKav}lbUtp$<>q~W2EY)jb1_s8Rm@a1mf5ADxTk~7Jlp?tuPgGRYYPq&h@IH;5 zEzt6gp7uQPr<`Ra5WF!!!@NSOdZ$Y@`MDg@C@dDSm5job`o~5^fJ^q;ff$6_ zrdMxeawP9En#5!^mGe_@pCyRsQ`T~z(ZgV#SSIWx{e3-dFSasvRe;6%D_W-|-9q_N zpmu4gXJ5VkCw*Xty~)@O`gZt^QH!NqQogmGCjvq#4PQ;iHGX_}Mpk&BKkHEG(lRSC z6{|M;ixVXI312LdSpeC65@bB9Md-vpcfm%{;lbKb{YYy^a3_%tG6W5kk|=rge}QQT z#x6fQMG8!uYt1hG(ka^vHV97?kIza(b8&^yWLX7;wpm}hqbuR@uqNjFIJc3xEb zY@_t=pNvXQeWkEF5zZ0wcC}M$+{#aliHrBd2th5(+pZRdcWgpm{QQ*>i?zY&M_m|Q zEk+(1C5W?Bl+5=@DCoj4BD3v!eOrT8rQC~SuB1r%XrvH)wx&?<)p~$fEatT2hWBZg z{pH$HB~4xH^C3Zy1#yQX%UA41`*-4xGuQni8O(G-Q*w`_$ZLr+%X~GY_-#H%qLZQ2B)#PTV4Ctqs4yD(Pw(dkB4_gifFxsa%kP8 z9dTQzG86>DBGX?#TU1t7f}{`Uk8vNAEmGOdry6XvJWmH`fylfq=>(Rn8djM)rpB?y z){Z-3wbS~S{^GBM6Lnq+{5w@y-3u))H8oF|nKcaF3psumzKIoxzWZRP#`sxjCaMd057A3 z05AoHQ^_S617v2^4ZiXY%{!uecTX2!>my@%VnHbP@xZA9IfEq~;l4AkLZRa*{17*; zF{iKhLn$j2EYz+?VOPXnX3iJyCff<~p&nEGvqmMv%HEd(Rz^b~Ef2;A8ljqUG_-r$ z#6?^$^wD{e#(GalUfFWZSbScjMC8w&Nw}*%Vxr!8LPvf09+q~*TLN=RvNixFOlX8B z;wH#UZ`oN3C{1}QYPNrDlRxG|LKFt(`fa+M9(|bS>$_=ldHn3V2`?8SyFYz2|35TH^x^ zsBh9pp9>T6wfRk1i|()=@;5sA&88j4vRfeHYGO`mTOIieF>O%1Ntt}uFQ3Oy+48fS z+YLKdTi(%p+75{Hy^+M9w`O(>Gs1@R%c@;(9mkGX#%E_)H|yPLcA9K0O8BaUWOaqS z1DPS^w^W)CkJX2J|6b6T6*X`C>F|!&G{fQ!w&+_qzw;4^i;QZXY)KL=MwQAnEafeK z-6EDhUm0@D$|TFOEWY(3lmNw#>-ge+`(Dja>(1P-^$KTZT5JfqIqa{5 zVzXVsB0>uDa(qi--Wq)Ggg}Hv8WEUuI}N0J9om}GV5omHCi@K*5HmRll{Hu)>n0}_ z7>w$tx%PA$xx@$GSa35ckhH`r-ERbv`_6H&MZS8;lWMr>_JhS%n!=m9xFc6+F2A)+hr3 zV&5hJZ62sBX2y(ORfH*c+L}EMix^7s%rK?JjGI7{`97tMXGe6s2U!@KA*Xrvb*K)j znnjKDRjYFFbe=<{hYpbqU1i4+xAIKdbi{#>^~wJZ895+DTcD>*pU=Z{DI7arFlj?$ z%5%kov+OXmZnSaRMx8ogVdLm>-aVz`S&oy*G8jBe+fS{NbNnNQ&G%3{!Hqk3Wtte` zjxcW)j9#LdtKI3IB)_$#g+TSPM!LGF4Wa6<^|sRv!93jdxf1ZQYuvt^1A>y5FvsBZ z;Y})n1!V8t-OLj^{&4{aPW+*q<22}0!iJ6dB&5sx1#gpHDs0h)M(+Cqd z1qjKariXvz*p%*o)liukg7NnZPd*w@2|q-N!MH5jfm@|9(AP-op{s`3Fld9|=p;bW zD%0-|KWtrs#!NWB2Ef{<1EJAxJNPoKMYLJjzY{!0h--0t`4glq)(oy*JmFG-T&A0d3pUGH=me)Of2Tp{i3Z)=o7jbF#e|8v zhn&hy#CSg)X4nGVYHrNMO0>ztd4A(H7Li;t4wg@w9fAGj7)R`99FeKqNI$%%n^XHwN`fb=eyFuKzQB;Il@^`Yu6k9PCXkJBBtz1}ePfC2xZQlcTw ztYeRG+fR**7?D8bs0(?ZxK0=L_=KaFN)G#%h70_eMXzD&3C#YrO;GArd8luSW(zLG ziciooBB*bD`=YBDZ2EEdqlmGU`D65V7N6Q(C}>`xXM@|r?|;E`K@MwX9x#O^Sxv%L zrv=RXMGEO4fHIeW(Yxf~sX znVd(P03hFN06y3Av`gHpTm``t;C6|ZD=1dOuCA{B{7*2&VhoSdZs{^C3jJzAM-<7D z1-}o!gBHoMiW^k7h}oBVWyb5Rt~kT>!fy%lYlKU(Z9;X|j70>D74_kp51t#-dJtBf zjTKt~Tewcg%fsl~S{?S-}uGczmjqM0q$;Y%-6;?Hcv~}@4aNNiUmVBudlCc)-#`o_?-LEj2Qrqy*Xp4 z7*k$K3NHwN`ySaBTh@JqD=p9MvxEeT+}E!K+rB9PTyKO*;x(TRprdzu(9zKWAEZ05T1}C)KcBb3BO@mkqfK{xL9kRSl4ldNXmH+_ z1(G{Q)IyIg*nvbG!P>_^G}(fSZ63F@AP$N=T#4dYazVj0M>qwqO?4YZ@LZ`HsLe*= z_96~)IZMd#I^P%UN?<0?~rDludbnCe>Z{!jS$-N&k`AY2Yed9^5uU) znNaHlYHDiImmU1X#Dom6C4C0SEA)R24Gh2l9ibN>X=XE>wzNar<5JTOBm*+=fhu`5 z*}-XPX#u`A*ixz%fbNt4cuePy{r;F7b5%y92Cc3=JPdx_0hDcfbP~a4G;=I)gwS-M z+ox1!y!p7~0t|>oT|6kuJo(#OTV%<<*#1mR3F6Rer|K{iroFT6DeZCjE=FP8nXtZA^*sgJ}xs2&>rc>F*n=nKH8X5Rv z2XT0z7p$w>$i8Rtc#*NPDl=1=Q3O|6jHi(^GLBuQgaEwM+ncgp@ACX8GOz8Ngs(V# z%eF<;j?@igw83>OKuUEO2GyRb7k)H}kj>G^&cS#($XD&yfsU4TxLQdzbC26*6V`}$ zjeJr;ofqh)f&blGPe~Ci#ZXl9&Cq=Bh${6%1GeeB8o0u>kR+C6skV*HEO_Z42!hTw zB3&L%l{++`z|GoW`!i#o-F$c_P6Y#yHg&DkSw7Ggeo#;)%5yLr0ah`|l(XU=aVRSLvH1@|@#N&Ffy<+7hpNxb-fzp)Qglh=cFQ=rP z;1UI?qeg>fDi5*}YbM^+-?52UF$E=hy#9NF?9PP<(Uh`WzoRkUHmVZ^2C$s#VzC(f z9&Tuy_I2BH<*hAZFdA&g$-0RbG^vN9TYh48k%-!fnN%Fn85;_Im`|GzP7fpqkkYrf zMb>}1gEp;oHa^zGNQ7kQ>)XV(>C?iACB}_b^G2oYX{9INVF`;o!FAj@qWa2EzD=x+ ziOt~IC-%C-Kk!w=a!|qRtE^YD9@t^Pl( zUypB!L`H}d_m3&68%4?$u%|3PQCuxZzIg7jbMD}3c_m0D68zk88pL^M>(U^@wbnv0 z+012STNCs;b}m_mxT9~2kfuYXK(X)rLrbV`HG}3?Ia4E>^_O(eZ{p2YwQl1dBej@V zz;?!3sTz&z`5L~arY7j`>0x9RcHi=7kE149-?H3&OfZK6r`VuUZ><7(XgfBG6jfXp zACWKA)_OA!wGS6O^MR_eOb=*dyk-m4$fy2Xt{#c;jVy!8U@e-3-#66zjM{A5ay>^g z3_F7fkF_+>v_iy7lhJFsS*nw%;JlbSIza)hM2g%sC#zgL0R z|B9NE|F7P1cbzj|g6#s7(8dL%5s%!FDT~=%!eq7OiJ!#AAHAmDIRtz2-#N|?J$U@T zscv&u*<8A{GmsS6<^2;d6dT%h`$#SFT4P8KlUaHPN&Q8S{+7v%OpEPrfqv~Xka>&^ z9WCWSmXBkb?z;#a-1?Iqo(kkzIxk-## zE4RCQtEvy1M9{q0!~_XKpR40>Wf$!N8_hPv9nE?AB+;?i(OaCcK#_(a`e*sYmF#Nn zruVDg2l6El{CunEEJ!Z<_2drn)sR_AfO$y|Sg8AE3gwVvSQmb4j9x}(YojL=vja;S zu%7baO&|aoYw!4`l2kc#ApZwUO$mdc=%Dl^S6`Nmru9+FhLGZO!-$trbW znqVu~PM^oMNwb?aqH@!xT3hJ=xbvW8o%j zyo2>ydBy+zoJ#3D^pGNAPwa{d+wNs7l`+*8TZXc$dCJ zDHx&JRv>&}*+_nXArF*fs&1+({(dnaY{mdd$F7 z0BRkCY0u1t?H)gkr6j)Ec?3OGvEF>XtUfPUFXt8%$}rxwLZ!*RF4?RiY#01FO1>C- zpTaP%WPx%Ky*}M)fSJI2hN9<`>Sk|PvewB#kmw>k7&hCS?D1aPjItc|W%$oj@7mx* zwO^mH160G``1i5fH1&+tc66Fqd6nKiU1sdk3Uo41r3JBV&-}o0wV=R-GyM59%KjK8 zI{tUu7F{8E1G#*ihsu&gb~I*1&y(-hRpCXxE4e|V1{p%6A2Y)UlH5?6MrUTm90N4< zR)uNn8XE%WPq^>LS3}oiE2e$djMXcTs1#iSjt+rv;f^JZ;9t-d|2Dl;v!A zJdcW&=;lJ7W@c<_v{5}FIiMnLGosja{kZiJject@=%R6PxzXy}DQ0C0EUc)%;13O? zB$9>6RsTXrt1xbC1GX=!u9}4<-aHM{#r8F37(d*CzIY;@uC>?DHsFi0b$7{SZwg2> z!QU~qgyO)&PN3&vBw<`tTtn5EGJ1zO@mCOwY7!CavPa(9IU@6$z^)WEm@>Cwb&e+O z{WE3tcZ42mSW4Fw0odk`kuplJxmPgdJ~i1##ZAW(yv3$HTF_GFX+gxOzf+m+OU4sL z5e~ie|GnGX+2wgM9Xx^wZH`Cq^|ATcCM20VE-N|rI14XSjU3T>-`6ipYLboT;oML< zJmUAV%P$${e1`@go+6xIH^tU#6`ifgoqr8nxZ}iG7}DZu6IeV37`dG)=<~Z_h2T#1 z%$-AB%_m@o%E*YyI(u!HWhoVkKQ+wqdI`ZybYgFxTWA==vAJAJ|2bxE_PxZi9}x6m zkEj=yP~68Z31Gpl#TWlwO?ujk7s)#i2^Y4V`I6Rv^k4b zIc7q!hU6=|wyX_)lI<$B(EN!=pD%D6w%aurIKSx-H(Knxm5xeXw`77n9bJ%4Skbcm zd7)NgGJ4nb&}C#MKC8T~VT-};RBi;u#s|+G!8_sepl3SBOlfylw2OqVqXv5s*YoL? zD6AP<-XLA_Z9iuy*ha>X7oG?*t2q4hA4C-dI7yRBVkY(omE})3 zT~eO8eck|rq(_(JpRU@^VNw-0jde;|>Zr~=XF}di_jXv$T-Ll@_G~x`%P7hG2CR0| z6!I&LA2%~mdT`5xMIYgiliEK7pztj(OP2W1=hW5*{dp}q2sMNVH>FZ(I3u)Lsc7SE z55qB7?V&P(ONx5L7^5}-2&q$c>6Sn;0t->wuSZ;nx$X4zC~T_--OCkp z7)&85wU@2R1#Cg!*%OcvQ$cbKAuLVq*PfK~Wgw%Kp zIk&5fL*u$T^p{R~PkoHElmNDfcoT0>&y#7JoYi{hd$*=Jdhu8w{wlaB?YUIYn8!#W1jgn z6SsdJY&xkfFiWw&f^Mhnh6SVTrhW3M&c#2znDk&6UhliJeTtGbMK$uCF|-X zIj*Il$K#MD1lUo8CTy&nALM`+C!uZoQl%V@ja>*Cpo-d~yo;9er6r_H`d#9yyzGXc zWRg3s933qZagppDwSgObo?>=?3quVIJ@@ie9Iy8|hPuX!^4QeZ_xO*0!+0P1bk}aI zf`vPN_r9>P+!SvJh6{~~p)uL}M{63UHWMSLag@k^A08h5u`m^sF81=YLw3~v4P$8F z-EvTRcVyeF88OYuiFxhDCclzTv=d7mT zHxxZzcV(b`Q8-iiKnr`&*6Y(iNT$g)HjgQc+5pnz+2MPRNJj&*N;FB0{Rf0AlG z!p>%k*pm`DiG%A(`vYHtj!df`ishufWM`vumaMXNZ@#FWx)${|I2@bTPZ(0?y0a4P zp=>OL5Z<5$;aPDV%l(z;laWBMNFK%(+7W6<9`^?dV$yyzJeOyb`o?HSW(&kdR8a|u zK~Qng`-k8b;*kb>c>fsn(-a|M24TIRs2g09W$+(>U&2>r)Tc4|22r_WTeAa&UV|a* z65GgZx&Cp9^?2t#0O2rzO;qwjffDj!Bp4_+E=Pjr}I5s&nuc8|LNBhE)O~FWz?szBk*`6V;_=dc&M#YU8?*8=i`DbgY)(Q#;++Ik_YTP> z(=ult(&I9iFY)B`!uw`6mR(K2XZU@3zvJ!l!8O*B5us4~V_ATq8g-sImylSIZ+O+_ zD-v!z(bQh1iIw5HbmwtKaHx@{>9|s{O6!GV{Wq!(!s}ZRhQdV309cgI9chNj*uM*y*c{ogXm*|ev zd=6=(mxD|Bs*fF50~YY|C-Cdq3DwN@32)l`2I0-+&gRu{fJi|)+A|Py&a;+0bH_{(t9m zPQ<7l?>S~UKOWS(-!7Z$ZTcmP#p6k(+Jz(!w zF*@0i>(p0s3Tc~66>9_+TRAq`zj2vaA3J7`^%Jm#1W7RMSdKEKE?;W}jEfq<5CjQfA+M zgS^@!s7~PesHM$3%2lmxP+a6V#E*P@plBu!)7dcD4#xdJC>np~Ilc~~ae6wiwnM%E z?=Ajq4{(G}^$u>5e}~PE3qM`+nPea=>GxG!X;L6Dl!@aHoR}vQphV<%%2qEO=<-D5 zA|pnu{m$AD_rx{oZXza#Vl~4NOPMk}l-YHTyMv4Uz)|6W^y{84lask}QDQBo@GgxO z=IUmrMwB%;wfS8x+rQc23)84gznLtKu?4c6i<*-^PK+MD_3#MYl26QBNP222zI?y= zo0@yQ2DO({W{iWB)zem-Hm^A>pp3GQ@x-H!SQ*12-Z*L|5!~kbg4N4&-UE=)?)|cS zXus=O{HcA2phBM*wKu&;!gBI%8JdWlsD4!wToF%cM_e$GU8rcJfSk#qx0(``h+fJ~ z@x9#+PS4v`JRkqDE>QKjMCW*Fp5CY|41o?wr$<+}D4uw1AUsBu4uA&SSUBOUHgnX} zgQ5Z}i0Tm*Jg{WhtiEIptY{CPXni)fpqpS}9%VFQjSoFxuWJa5s=$`t8%b7uQKUY= zsdjT6el}FRudYT5oD4LkMnB|0?<)c8Sd$RyIkgpBFl+Xg7hJ@Pq8TP0&Y zi8H2-TgcSfuE#oLW1Lld@!d!L^(b>AyGmOzs=20Ud)1bPCw5_GLCvnYvstsE`$Fgz z8%_EMC*UN)#^e#QTJ0a|e*^k^UtPpdoupH~$fRM)!vNF)c&-c3sM5Tv~n>VI95 zdTDPaeOK#=3=J&-d?2C!DUl!g@TXl=Q&+pkyRdwGh*ajJI>P=P0o?wPM=i7_T19Ld ztCxT~`V<20{0lIsC2o0YWdHL+;w$w3ewlv(5%f58W56^2udqWR0fw8@STB2WAA?}Y ze9XmFBK2b%cr>64!~gTo|10(8g|gdG z>OW`w5AOMYT#Obv?uDZRx~HcH{^Q5Ep{(_0r`;U-i-;fe*!vh>>lKea5W>FRoWHfI zn3Jc7RJA1YDEH$V78XgG=i8Gy01f5z@_wuq1NxpyI z(R6<9wACJ49*ylvJstn|<4-X{0-(BHwhU}w&+*I2lCc#?{^$kb1%O~>qFm^3N`-z4 zMqdc(P`OSWtKAZ7i8{R}pyByNo0O5LPe;_}5P02LtAM0HwQ&z*L27K7HWcp`o;ylxj8-@vIr8-+*zYpg6eb#*L2Zo{L&*6eLb0gn7 zY*+qF{p%?JmJhT#c?|F|UH31$#}b;79&rcp72k8mC(Ncoq*YN$HcZB(B)EY{_2&eFQ_o*F6wADqWl%3vRkSa zWoA?SH`bH}fxrH9aq@cqY39ILKOvduRhsNC>G?MtG6$%>nt8Vnh)x27&3G9? zFaAHjj{o`CzE!oVt8;vvVR~`8hV|2SMHAZCi21o$Orc>*H3`_|5)zL<+jS_`r^4$v zfB4y;+0*ef8`A2V@5KE_^zD)Z?RHpEZZM8XdWyn>P&bPAXAfysuO%Udl6!fI?s0< zlFiIRiLICP8f|!^wzX1EU8MLelC;Yz(x~aSZ$7q?S7;s`rHJl&?cehykOC9#iG(@m zT7kj%{?-fZmLxb<{*yVeU;Jl04Q%J?lSvD&&r>6mthV_usb4EN9bLOYA%Y-N&*Uwr z_Gr5M<9r!!-#WEIRv_@4p$L7zyr@L}IXOOXufTP!H8r4YdnPt~)!ijFts;nQxK1=e zZpdM~J`wea)8&UQX3T2S^+88`K?t>0hE^6w%#ZRp*C70)hedMa>98FP7#QddlrLA- z&29{Y__~QNI$<9wqymSBvDPAIBW`3vID}Mp)ttB}Fu&+LHX%>#A8grwrMC~eIle^@ zPtBR75Mn}{b|io{QARKx`=Nc;L1mWOcjd+({A)RV$y%Y)Z zjWN4T{@9#m7srzx`%}%opm$6xtVCRz&EoX+u_^B^WmLOa2$u~%=@Bv>;MNgS9dvdrbswt>V|>={dc|D&MvbF z%DgqRKjx6ApUK}NR4yW{d&zHg%F7=17v~H&;&4=0|5)ntbmIxE=Q^SCeiYP^$RjMb zQ8gA6>1GVDn&tVU^x>lm1*3%V{K~!j{UeUFsb}Ods%Gcr_(+Y5L_qU=kcO~cCRW#Y zu3-0|0f1$8Mk9x~Y^mf6TlnHcCUT7A{yHGCm|TiU6{sJcPahc_H#;_f%pYvROkRaA zJAgA=)+Xh}&DgJD-!ZH9(%`M^$7v_k!djWbS{u2OTIJC*er(6l=Bg65xaSlfo8DwI zv7nv!v^4DU4~5X-1B~ihEF1MBRn&;Vq@EJt^P}aOPhQ`dB0gSdNmhM;C~h*4)~@Aq z{Xz#HrJ3h3|5-j&ACB~ng?Zv6CQGPnE5iEwRD&H-(u>E(#ag2M{bO|8>|jPXX-+Fu zVTX-qzoU&|2u*6w7-Af$Df8XoBt&iRFGQXoGA%rpu4}M`v!^`Xd9WXG$G{z&F*x)% z<*5i$wXe!}6FIm!vEBRMy8Vs>OekImFmp*3)yn%6bkrz34iY9e$F^W=cR^Dw$lBUp zv9Xo7nDHMnbAqCxsPs=EI52DEpXya%4tFN3G?yXnlkK;b&O$0q8N>m?`6#&;C4G1=)96T<9yko*btFLy!G(PKh<}ZAO>7|DSs0dd z3b$qqqMG}kf69KeMU-1AY1o;Z#F?$#JvX`fMVn*)t$lt9fm^9%^#0S+7}n{ABT~nv zK&ao2J0ZBo1nKn%uc$ms`l;@L3;-!e+=>B9!ZhZ;*f9=uhc|R~`DD;c1N+mh{SV@< zS5y^gU1LQ`!nGJFSq=`~RS4aVIf5Od{3J-~BH5Az$l8V(tiNh}GNFHh6Ty6Pv+Zqm zO8KLTeN`tcCTe2VJ}*f;?TpzSsqbAFwedCIu2hgx{SZy~46WvC*bf+qLWf1Xjo*tm z91~Xg$N|&psTg<|m2GGy3bBjr#go6ZvvopA;~)E{>`6-0WT8;C5SP*!NP{@EdC5zD zA~fY=qQ{vU=HPq#+B4_b7gF*`XA}qN3SL?vk18su^saBO(_TaI%qBZcsqGzn%HFKmb4WY!N*1VJ+Dyo{5_}{H_42LfC z6VG&}e(K-@%D~x{aizC*)~}zdSA37>v8lOYIhd#R2Dsu%)b)?L=3_GQ{XHDktfhu1 z$Q^~!cmv%@L@^>0bSmX3LUv49R2EcbCm=)_1|1lKlhPbb;nnrV-n~7mxL^5!rJ2Nn zMA)WNqtDa<)P!-Y0u^1v&}^GEtO+<$&-mlfz8U58F?%qv?QxQ$Mim(7|{xV^-B zs-AS1-*K*CCMaBh5bK$XlW@4^fs11vyG~!~K7TJ~_TAfaZ3L=b4l^LI=q~Stt zx;PL!+Y2>zu>C4+IGFbB!SUXUTTI-+WctwG`1m(;!Byrz^Y|$QSo2={R8>{?vJD{+ zuro%%rcZi>$`t#kNWLx~M_?U#a~zzF)oKvDG-~J^(Q2F+qESVVdf#=;O*YHmNs6D@vt4Xn+Pi|VtCcgw$fk+1j2M~7XQ5v}k5efnw|aUV#Sso|o4<8gZlh|Z^Q8qMQ;daV-F)l%rKr5jalxRRa2 zM+b@A7EZUt3)qeCoBy-0Ud6EjWZqH@1Gct|gMxyF&2AZSnDyatadBPGRy3F&9Xt;+ z-IWVvv0aa*AOP(lXX`8gV?^+$ zJhapM9hp5xD)qN8t)70!QC%EwwtZk4*ZP);uZZ#AxYPuYT=K3Hmy}@p5`Ugzu<50% zO0Rkx12aA0;iS~AbE^;mEOtn7l+;^>#1C#NbODs&zUf6cQF9IDlUg(!FWlmMMirJN zLc;|e)PwngqMZk|E14#SpB5TS#<{~1;1-z|^ta|qYGwgGh*2$l$z}zYQ$s!c{jm!Q zHhu_8aWy9%1EgeOV34gKP=`$~;r{-qCF!qzGbKvpSL`pYFNOnB8XW|1WqTOA1&b%Z zwjl)2d?t+cl#ozI1MIT@Mx)t%is`)nhqF14lzcEkwFD%PdI4CSGQjDN1gN_M;x-|H zfl%@a3h#-I_fKfCEU^LB0C4iKf!k- zV*WWav41dbKqAnSzJn2P)z3Mc0#xQY-G<-aQHX%%i*wq_1T0T2*>EW@(v#PR%^`pQ zZF_f@GWo6Pbgc#R&!0cn+9bBNw$QM!y?~0w{Hw#|1U|lu`^4`Cksw%Pf?=w`FZ@w} z+FrsxdmNz$FikxU|EsmDjEeI6*3#15BhrF&cc-)?N4gJagXn)ZWj2_H)kuM{fqeSv!8J+sj1=P{1$N=xpU9 z5T^9OCH-RT2v57IZtu}nSU^}G7viMYVdpxGYH)%DX44TLopwG?Lf9qGP1i3Z5d;K@v?L{V|t z!tMz1yymouXx0MXEB^eHGjT9vWanlR#7yV_KbD7z8cytE;}-F9oYvbaAYIiODR$#k zt-U&D5sYjf+zJvDBQAVaXVz1;xb|8py9={sxjUZY*>KYPD*o!18ClU!w-15>M^+lP zqg9tNa8ZlHR;2R-_Q4Pp!SxGA+!UZUCb$6B(2+-;OyP5RMn^s`nr6hT_%T-4?`liI zQ8Yg|Q>Q|nE{&c+1Y1k%bna$I0n}>Gnf^7*5vZ&X-E7NC;Ql&Pt)_$Bi7a5{>{*0b zTWo$Esa&Y&dpnacnr*EzZog|2_Blu}PL07{GZAHlerw9ZM_!pK1wTLLqmsw#zp*qB zgU5>?4KA*rGW!d`s(SZI@kZdpv=V{bkMt+!5SOph`q50t{8}yb2d|NqX+G7D=BO7d zEsRiS-dUpG8hq;W%ol)9iu`K0_=v72+CtWr5f86aH*d|hVjj~(%;-uF01yHb3gnhb zsINEw;7n73spG`A&itxlybBBspDxY&V*NRqlO4BN-5E8Ex~dH^>Dl%oXuil2?%E)$ zwel(OR;Sjp8d$Xfz_Gjy{R`XBMkFjF%uZ-Z%lC20qv5}n&l7d zGsh>8@t6}Ln8Pd3D*3UbRj*jsSI9!6s897i4WSQ#Qr$n#+IvzD(Q2YmAcJ*!5RWy~V7AJd>nXP%>gUrXhl@ zKsnCQr>$Y`voV%>kU+0&>!Gc{k|1xM*BASCkq(9d0|&=P>pl&QJKBY2iNx=kqBOtv zOf<7I2P}|D`OlwBtfgq%8Sttbt>2xHCOq9f{IZIVKh#Uu!6$@6e*8Dyou~>22!Qt~ zK?gg0nVpPJwiae(BP&I~;yzOcbS0F7{Fu`IYoY;5`B25f!J=aKB5|!!9oUi@Qd&4w z+J2hc@hH;H`D|et+n}(+*^`cr)A@ws)yoEAmB0TNCZIG^K+fo-L_@K+1IvPe1GQdP5d{ z(p7zn)%&8&Xz6oG@SIL_p~#&$vopI52E=n8BeX1rl6_iJB^t3u;gN{msE!^gJ4%|z zwM1ahe^vJxJ~20Xo{RO}P-lRgVF^4cve9E`iO(_&?t*er&GnmqF9PzNwID`&r#?*N zcge&ji!;PtKLNVjMbmyIDUu7}x*_I=5mE1BOdO!ucU0!eX3W#kMxQT^wPBM}PfbV5 zW8tGhCnMGF<}nI zmprt_XG>xK4B~ESR@#_hnrMhdRteV?hh@?gcwo9gc2T(;;>2G|J||8s-wc2MV+lMd z$XBOUDElp&^z=uF%^Y_P$%3Gp+>{TE-Ao78_DCQK2Klt~e)2bPc4mR28Ro^IE(q!J z%+}i8(2yUpoxmycJagksf*~Rtp~MKMO%5#0pcNLT01EM*QB0&b{b(ayE3>tjUX2En z-lOY8jof|)f`X27vw)=@ywb8&$tzVe{YxCT~zuwt`1oOX1 za6qC6&r6C1O7oyJG&CScAZu$h01$Ztgqn%Mf4DNBuM_)m!0;hBK!gKDJP1k`@XU$P z6 zKM$BT_~7#Lb&u#UFlQh7)-27HCkL&Ia+{nT@7DMZL^r}#@t2iW8qo~3U!_(@bGko= zE$A=-Gbs@be939vKf>RmSfGj8>T4+;YiHu&<-IubKUWr74EO*835e`~9^=@e0lH$V zB}!reIeo5Hv#|tfxrNLAx_&OErc7-XN_0kLnEh7g>c#3&HjT(` zL#wY46{ctH2JEo9!-7}1S4|R9198@8~8P^+9zb{PyVjDi`I6=Vtal(dy2uwZ4^6987x;O>Dt8 z4!Vq6DLx3rO2LMSzvs-#cq?J|mecMeWifJ|!(JIdm4i#a45*ozH1cNaUMU>xI$fXt zo?0Gw+1sV#&R@Na;oD3ktHBEtuM3G$s-rhxP;ZGajHA^#^9avrrtOL%KSW_KRok&?I4@;m>Jp%qy#5gcz5!|6U8a_WiZ>P^H7W*?vfK^l zWGXXGtQXhLH3ZC%c;>s-6LXZ5$i>syo{E~2o2+(kK5P+L*sou(Vj6+)=UtydvexU) z4Igt#*kYC)D?C2On7gxH*g*F!yiH`1wNt50%mY2YJ?keZv`m={Y5#ri=FlTh9zGs$ zK)*J-_$|bwZfp_9De6Rut0XA;FpO(9kjZblA{{(2WdM%J*U}Tlq-hqzmP@B0N^U;O zVEmoYAgL$p(k)4Qbj)ZON(*cSu0Eby?lTm>1`(2$j|ZzqyJ+~nXp>w|VS6t&czkCC zig)`v=oKWd(GIaZsaQbJb2Awi;E!$R+kS43W9&IW))b+cZ6LI zRiK4_<(stm(FaF!t>0Cqa&-9BTg?&a%zTjE8gJMda3g$q{2TAwcSe!t##>4z16r-a zH|Kf%*mumB&oPF7skIHI*CA_j#40i7S{0+=NR4Dz)xCdiM2UdPb(C}G_vjvaOF4wc`iOPuV^y@qREGK0e0|5R z`9S^FqUZR;3My;PPfJ+Dkn+fbs@7uf$DYT2mqP)!-U1Lq&ii`_c*idOP<8LM_mOVy z(DO|fb$WV+J^(@iEKaK2K!T#Bo3r=zT((RhcW{l8+=W*+*WMhPv(Onorvj5qRikV_ zdLFl#v|$s=*6&q$$084fv{Fcsw>~6ur^rQ!4tI>0jhDgGa^R9>^S8j4ulgIO9-Z3G z0vR(!K?`u|t*UNl?bBw(pbiU}oUmzMpJLSoXy9L;9WJLO{h#ZD9Lsoh=c9jKVE}%1* zsSoDdqp4M5q*o#+n6+k**u@(?G!5CEdSt1dc%!-1nOolSpQQrwigys^qsIMxhW(ArX61NWdN<8SC{R8FT$`P5c7 z*Dy?dUFCo1#VJ&It~t)B0~?hh;%j@w`a-^(1|#RK3%T<<8E`LcYCY?^-&&>nUn!k<@u!90)|`5Hh(xRFq{+Ns&HdeFb$>b;M*&i9VyLDFK<%0u@Pw}7{HvozXJGRMh% z0kgBFSPbriLqcVV3T$9tfIHQxouc6^S0OnCsIdoPab#cBT|&~m2~7{i62z-LX{?v8 z6{OtN*YqXV1fVhQ()9Marom3h)h&Pp2><$Vt`teqZ=U=?pD~9y)Di=H*|y{J;*YPE zgDdUXn)a8-A#wSk3aVWLlL{#lQeUah1wji- zAhK~<5s6nge45?1#p*Ew#+f~%ljx<|F;6rt43KdnhWpm*;1*!l<8FS6vs@i}J^dO!Z>m z`gp%uxltY%HbMp^_pqF0lBiyY?=Q{ISdV1F=Js6o^>P@O#@YEn)2u2?8^{N`VpY|F zQ+NJ0U;Pq%6JfFg?q;l>zLHDBx}+%qFYx0g*~V|^7%ikwlM?b05c(hy0+(VeEX2rc zzex~`cBns-JM zhi1D?->S+el6pM5&`-Edw4evH{83|QB6WlENZL^W=J?NIdgeWx(F0tCYLm$7%-*@y zOJukB%M-RkynWkNwi4C$sQl8n-h@a}7NK|OWH@$V?*al&el-O;0!q#_@{r|n3{N^L zj2XYselZ}K!65|679^aFuZF?6W;WnYTv6TLLiaTGI^HDbs>v%ZDTJ*3frh!s=gvp< z=X3S+?~7jZ??s_YrXwQm!N19UA39FUsbWuV=T%x9s#GBy5HA(q>%7RB5}Gz##{{fP z8)pt-7&S91u6y z=zcYFk+IfxXYOge$A}&dl{nrCO?;?7bgx`%{)w)pD$nN$;RbUmo4SN>xj!vDcQs@z zmn{xN_QGg*JzqUW!C^;m^5cXr(%yy`xI``f*Qo6HP+8sZc&~Qft&sf~QRo)&%E;9n zy2Z&jeuLSfdvU6La3KR#kLgGy9$}}bS05sdqT@{>3!qW*tc52GWvoR$owXRNV0>K5 zanh}jzi}t}zFr5oUIHc^`%r*enccU3_8wQS%aJm@#wgO*HU(U{@`vI_F@NMQClpThbzO(f^>7nJnY)UJ8kid#*q~P`CVeZr?JlYjH`2#0izl`qA z$oE*aYNEnZN4FdmdO6C2;i|qeQ3Gc$&=nZ)@jI;JzYb?u8q|?ai@)Qs zS;vXpCwg2}&0e7Q0#)E`{9bU?xWm2-kta>QZ_66lQ zq?F1@u~@$2om4DP{aBcmZsx6ZZai10Pzf%d@?k;OxJ8|c6bLm|WN(U(n{c?5_nR)E zGE&D{79>W+O+I3REme_G31Ek`95LhFdLUEI1bdxtXmYo4{fViEbt!UJps=}b!VuQ>s0WF zYUai59$zT5H*#`+?v`8=49L1-(D3@yldJHOyP%f3+UX8ltIdSk&4-d7_XNo5N|=>y zqQqH&^q%?^83M;jZ?x`jn#=w({SU|-9^RQ9fvVV1%}Fy8eN-EQVIaEz%#`pf)ed{Wg7p()3;JU9QZ$_H-NwVS5vbC0WYQv z?1cX$AiE@1Om#_A-7V2ZH=itYc)WNc(1s>F7!FLomsEmOf8`SLXRPMz^TwCIx%7cbX^BZme^nbmI0}cskbxp}$pb7> mf+eN||Niujjbii+Tk^zI=A#jk>l*7TPO(eaxzJuMr>!xDtfrCTo`FF-$um`@! z!C@#;Rg^P$Z?Ow&cV%ci>d4w(v=Z};FJV){lUn|IhFgKx#RVuk!6gz?(kmA&K$FOI zw>orujiDh7UBdYkphQ9&!Hw(l7D&|*G2iF1!gfiN^7sOI(94w33+ysq(EdgA%GAHH zmo-udoy4#QIh)K6y5^yYu>L!-b^O8nq5ao(52<9_px(jCY*2K~?Qx~FZDx1qG=X_`{_@M|rtBP(^!IOGG31M9Z8YbQ zN3ILE+Q7(_Td$kInCW7#(@ z;oLvhHq&TG-%v2!=m)J77MMSiJf!VGhMbkhM+UH6&h7{c4)o`hRJ!KPqw)m-u#Fob zcYin8d^xL3FNf{gTt<57rV17Uv8Lz4c08&B7)N)ug+RRxak`oz*@`YPMlRd23MVP8 z4TIcZ&|taJ{J_Qh1*%^pWKlceTOIo`RCdi_Cb+cJz3k{^dqxnOkDkkiXB$6TIefJc z(?y>F_w^fYiM1jqUYfY%5`8kOm$Efx$CN)QYwII8sSSjTEtf)zgI!djj-u0I^(?7c zl2R-9aE?W&Zc8@xKN{NhYl#docNs;u_l=y}Ue(Y_+g*CkfS<|&l^}N5apWd}Q3#hBb zm7HSX?SgH+`mD$>@zs^w>Gjuvgx+Tg3hCW#9J?MQdggC7j(;HF75eQ8bWrW|-C*(^ zS^DQn^oO_?@t5yTvkTy4a#m?bqE=A;wA^mT9)WqXB{>ulGT~DmN+b5^XLeLBD%D`4r6D4eMq;*A-nMqk(wFz#qQHS8~nPngyjSRhD&*_1_|i3XJKknPlw(rz(2 z5S;OavchXPrFK0i<;}l~f9Sj;{<7gg^%fPx`;CMV!3BCoYh#b+O~&H35D`bsNmhpv zJtn@Id-8TiY7_xs>!DwiV;U1#9U)Wy^Kv%1o|GfjJ;^NzBtr8AVuY6hOD`&E?PXMQ zdVtH+M4 z)?v7(z{$w{xsu#Y@{Yg0z}sQusx!MMLYKCN6kgA#cD3`wkh*|Ryu5i=ceGqcnblfy zQq;Ah9T*0;5R8yo1AZ7j?*Y%k!ynSVuIZnH*S=kr4(^&eM*UcTi?-&HORM$PS`;EZ zdF*h?IyDIwE`J>bNFP`AyD^Wb-^mVRXX)QgFYUHBnPCfdF_|(2guj zbx9g!k+eL#ESh@p>9PoA(Mz>EBS0eI&6O|6{HJ2b^BMPmy=Cf|vG?%$RUe#8->a53 zw>3}PgX&^%(R-z!i_?LWTSAks-$eMUoc97<_Nmo@N7cWq?J#1dP&l%KWK!VG z(c#^t&To@_U3BqDj8P-nZ#g~OhK&1)<$h7bW9ll^bPD8b0E!QlSDFd4VkSY4^sKiI z`P?P+_tOv_FBFlicE1yI>hBA*n#szG>BYa9Xr%!UQzdi(EWUsHcIvuRE%U$ z9Wz4ks!dR5rGpGd>KH#J*_P30OYL~RsKHOr9$32Z{i1PJ64f}QQd0Jw!tI{?Vf?Rc z8@-9tfJZix1ZaDXCr{kd@ApQ+^Mw(YIJ?G*knF8ja7{k?Lqv0|Nf``xtA0!Ur1SyC z1|Z)a^mIn*%q9+W3^%rXjD7H*jW_*)0>-}jX{>5FGt_+ZZ>b?1q<*zRYrq`gdZv18`x zkyk2R5-^uQ#6D+$7tPbta9nVP8xZ(UW>z~>X;WeNFIGjIoh8KDjFP_O#`fuW-wwOG z$UNLAs;&Z0zM;U+@ECYFLME@F%SoGZl9dEJ9-eBDyC^}tP-Exz=0^PuSaF<8{z*%c zF=x0Mo3Bp4PY5aeQVW{kN_T$F4*n%O(SOjZ)Lv5OeD?5%OTJTZp5N*rv6nkg@^|6F zmx50WI6M?F*o+BaL40`njHr|2I!?O}?2*2Vl16Hs{y#a{Wz^XEl4T|yM9o-5v|f$& z&zuz5L~Xg#E;O;{T8QX>64wh}Jdtubd1ZC_=An)vM(Wk#_AAObhc6F5`Rw$Zy-w-V zR&`U=-18J%n}P6oFW#Evob?{HT<{OhC!d zb^W-2!nSvuJVI+kwL?l0$&GkPwmt@C_C~Dx2v#GusOPjG6dBi#AzY#q zM=^;`Qy5LELJt& z5?u%791GIj3AK}?z0lQ;k^PbLCsb6W-Y1L?HgtP=oY;PPPKx``Ogf0;-ur0O+@|c* z9lMFdRHiDDs-a4f0VCvrXw|Emm8^p_NdMur_MIFs|JwfTiemtncLH3jVmKd0j`=0)t&rC56yZ` zo)roiLBogm1p!^p97s&dAf%J95xreBfp_zrJKzIu8$_3pb|?f@L;YiMxrJo| z7v#peRcip+CZ0u7y5AarqS<{c#o)SRlbl`rmBjtlsZX{Z@olB=bJZ^tPEivH1y!T4 zc=^Cj_ma}aqMj)*+HZ{tx%|9dy{}^2@$MsQNx0H4Dxw6|Jlde6C6zhe1DsW_D*XuS ziTv`eHx{|`z|Lr20dIv~_Zqt7uFn0B0JpHkXPp|g=?(fhsz$xv?R)64WdL9qXN@7V z3K7f`jyRHCxMPE#`%u(VfT6mTuOHz1jchE;AAx6s?Bh5PytnvjYU5) z_Zy2_@!}>1eyb6Kp(LiKH)J0UwD>=%5L6W%!Z80v&r)Ad zedh;b|GDkYMn*GgHK>B)EQWErzIbPQ5N`H@d8PoTQfM*97NJZ7=OZVse-zQF0()Pf~}rIqP@*FSQDcBe8!?9O<*Ps36alV8TCG8C^3Mk zMLs&x!B8+s)-Xu0zcI1=#_L>G8*R=H5c2;{zPi?}{9Ejc6bacA(LQQwM8|n9ZT@Fv zgf4Mw%|I$ZaMu4lbJ?@xV5*SF;XP4F(3O)u4zVw?+gh4qYGn%_;i;JoV{uqj0WtRTk+ zrScjC?289MJHBUD1_awQ9AjGJf?6+{rF}Aen$=|Ca-dDX?mNtb-8nLCgX#Wry1Q`n58wg`5hy5i~NPe;rZ41lQg2K-ZbY@CefdmLcN$ugLHc#`o+Ricb z4EAO??%d|TJtJ4@*A$};{`lq7pIkh;GT@~{kyvIPZWcW#XnZi36n#hlikQt?F!Cba zKc%ftY(Qa>Cy5>CrG!ZTG9i&CVq;+L*cN1vB!aZEicCS>{go3wIT`2dFnz+W8bLO? zsf96rd6w&c>K0u7XX1Kw9i8n2lhjX$H$k+m0-y58!76@vqmKHEGy_8v;suWOaN3jx zd1)fD=q(~gTnO}+R2og>$0LJ&25?&Zi`bbuqrfpgpQ)c@G|bQt|RDNv7xEZ)clGV0aQ% zSI7dyN5NMUt3EET$BRCDEJKqj^AAfgcK-lo;b~RsyOTQOs6P|hxO{%7AsH_iM~L((5D-1o6m9l3 zYhZ1!y1sVt=F-|v5Vk6N-OJQ$wORw}?zM3>dY68*`&hF?h;QB4lJ%XkOT`p1gNPQzoy)`{r6CZYecJO zZX2#XGy_g84xmSs`mGqd-yO!*xL3bE&5E9~5=r?*NcHlr7e)fQG>AcQ#69`TU>s2n z`-?87i{*1L8`!ivE8y#m#ZKGJbW6anWS$iHj~=N}Toije*DM|xy8VuDeWqpL(lMJ; z&F@gB!6!nYlR6#K>SkIa$c8|)u-nu@_F_K`>kh|Bvpa-y5{*{AbMRz2`1hyFNQDJb zdfzJjGJS)?xc7mr9wengt|a5s;gk(w12i|9Xdz79+A zn=?D_!Y#J#Pkql97ufK6igD#=%M-$N@ju z^6F7*T%Ikp#|U-|*1SU2hp^Q_W#8*q`{5OnQAh(7sjHEQ;73a+s%vo&xU^`*%sr-_0ld| z!IM7kM(IAEbP6CCCYXZFD`_P`QctmQ=M(^c+IMbXx<9lRi@$e}<$T~9Gr!CuAP!rt zBrpX(SUg?)tGy_1Znr2Yu>JF;>oq1`k zB(i0J+&>U8ThH#;XID0#hF+)^90|RX)mInPzo=Lokbz2aipi&YtXQNp6slpeySmb~VBM`)8|oCj(>qpe z5g|UZ8Kbqip5=2vkATeGI|gfBCiY*4%xNXhJ|T+R=zmBcm0nK%&_w|?xrS7uyzf_% z-W7n+cwg*({H9$6S@Tgt7JnNa8xXmn*J~DZRzAH^Uic>5C)NB;3~u-z21_UTl3vDW zGM8M@t(4NTlC?(i#hv(LbZ7D{X?eQ(m_P?>;sQGFOi)b=GILbS_x1wp;ONdd9^jCG z>g1vM)qKIyC*fXGI)<*|WKr1ZJ9yr%>}ol=rOwM^N~R43UmQ6%J%4XratD8duH?1K z$c7c%o=ZK9Zj8}M?KP&n)9+~xGca%LStIXTPZRhay9S#^rr;fuIWHWSE~&3 zKArtnk{knwl<7&TyfcZrg}fFFKbG(aC;n}se(l{yL!BgHEsX`{keVTeg72fWMD%NJ z38$=k{3bcX2OY4m{?`N;Vhy^5;qpLR{M(BIT^JgVtdrtKXoS8XbVC4ojmC-pQF<%% zlQnL%XLwkd(L)(&L3|!VndEVo*1}@ROYAy6)+KmN)76$5;o4U&>{kstiH;>l&+9SD@Tiyxujk*a=d?- zW6vlKu8RiU6XC7QLMroDAi}eObXwEPZqQC$$QGTL1!;z3na|^%wK$!<7ya&NGYOIq~mi!C*}W_5(L%q?GYN1KAqNazjT=Oa+q!t9c)&yHjKk zIO14i8{@r86V4!+rcIj^H16;;BkeUDtH_?gWRC;U(-EJ(VIjyuJ69qmVBJ-6umbw^ z=`QS2siYxSO^SdnB0&zCs9oMoX%ZSJucT^M7rPhDe;vUa?*2{hW0u9@YO&Bz{!*yJy`?fYV7$nzWYDe$BA~ z^BTXbv}^9gXA~00E9;1r{2e8R#GUQ(=E=xy!wX!G@BUIng7rujZuleq9WjZWKd;MDV|I;zn< zGC=Bes=VmbS+&5Mf&&3Ujy#T0>!aR^sVT5aKn=6C1a)%Z&UNAH9E1z`qSYg%Mah4$ zKZ3Ky?EXCSPpY&O7S;T_7rFxeyJ1J_X|btVhC7C(e=`_tJb}5xyg{Oc=GX{!Wl0XX zjup9Vj0$3V``YO2kSgeMVmw6s_4L0q7tZt3p2w71E7G83g;q`_eTgg+CMs+U#x*-a zd!DcFCPwWh5~?)$xFX7#GM3~0f4sg2M;ERt`sKZ%Gw}Nl$8+^Xxuw-stbq@z2vG}F ze+yPF;+#D5uf00kn5hrCp>@0*{y!v-fQsL+1m!$mdwP6JbYn_l+;FX=#2U$(anBD` zc44MLOZf<@K(;j^I=8ud)(jh>siW}*AOi_{8<0|M>?nv&j2vKz5t4c5H8}hYt0L?4 zJt_Hz5{_fQFT*5GqaJ$74({7se;ns)5=z$hT4^pN8+ci6p)(8b9@zQ zNWH1J^2C4Vy~;RWC2VZ$R(RIC9y&Wq_JIL29kjsOx)AWsPrA>4EQrgOjwGx@WSw%? zm57S=qy)B=)F=$^Ol*u3ZYz7Aa92lelgt|B8ut^y4)!AP!Et`%n_o&hqPgr3g=4Ls zMdi{tWQv5G`hN8l?lA7TOaa2Bz65q>MF${HkC_$Vv4d&W%UJ#is~P}2fnWAbr!If) upB155uL!j!&0{@DIRLCyF#r66ul}Gx{UzhV8uk|^j_M07#cFx0(EkFm)vf^m literal 0 HcmV?d00001 diff --git a/lab1/programm/example.txt b/lab1/programm/example.txt new file mode 100644 index 0000000..d17cebc --- /dev/null +++ b/lab1/programm/example.txt @@ -0,0 +1,35 @@ +# Описание языка + +# Комментарии начинаются с # + +# Идентификаторы +abcdefg SomeThing1 _yet_another__id + +# Но не больше 16 символов +ThisIdentifierIsTooLong + +# И нельзя наичнать с цифры +123NotAllowed + +# Комплексные числа в показательной форме +1.5E3 -2E-4 3.0E+2 +2E3.14 +2E2E22E2 + +# Оператор присваивания +:= + +# Нельзя дублировать операторы присваивания +:=:= :== + +# Арифметические операторы ++ - * / ^ + +# Скобки +() + +# Разделитель выражений +| + +# Пример программы +alpha:=2E3.1415|beta:=4E0|theta:=alpha+beta+-3E-1.57 + | dzeta := alpha + (2.1E2.1 - 22E2) \ No newline at end of file diff --git a/lab1/programm/lexeme_types_test.py b/lab1/programm/lexeme_types_test.py new file mode 100644 index 0000000..8a0ef44 --- /dev/null +++ b/lab1/programm/lexeme_types_test.py @@ -0,0 +1,73 @@ +import pytest + +from main import LEXEME_TYPES + + +@pytest.mark.parametrize( + "text,expected", + [ + ("X", "X"), + ("alpha1", "alpha1"), + (" result123", "result123"), + (" __private", "__private"), + ], +) +def test_identifier_valid(text, expected): + lexeme_type = LEXEME_TYPES["IDENTIFIER"] + lexem, rest = lexeme_type.consume(text) + assert lexem is not None + assert lexem.type_name == "IDENTIFIER" + assert lexem.text == expected + assert rest == "" + + +@pytest.mark.parametrize( + "text", + [ + "1alpha", + " 1alpha", + "alphatoolongidentifier123", + ":=", + "234E+234", + ], +) +def test_identifier_invalid(text): + lexeme_type = LEXEME_TYPES["IDENTIFIER"] + lexem, _ = lexeme_type.consume(text) + assert lexem is None + + +@pytest.mark.parametrize( + "text,expected", + [ + ("1.5E3", "1.5E3"), + ("1.5E3.14", "1.5E3.14"), + ("-2E-4", "-2E-4"), + (" 3.0E+2", "3.0E+2"), + ], +) +def test_exp_number_valid(text, expected): + lexeme_type = LEXEME_TYPES["EXP_NUMBER"] + lexem, rest = lexeme_type.consume(text) + assert lexem is not None + assert lexem.type_name == "EXP_NUMBER" + assert lexem.text == expected + assert rest == "" + + +@pytest.mark.parametrize( + "text", + [ + "1.5e3", + "1alpha", + ":=", + "234E++234", + "--234E234", + "234EE234", + "234E2E34", + ], +) +def test_exp_number_invalid(text): + lexeme_type = LEXEME_TYPES["EXP_NUMBER"] + lexem, _ = lexeme_type.consume(text) + assert lexem is None diff --git a/lab1/programm/lexer.py b/lab1/programm/lexer.py new file mode 100644 index 0000000..ca371c5 --- /dev/null +++ b/lab1/programm/lexer.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +import re +from dataclasses import dataclass +from typing import Callable, Iterable + + +@dataclass +class Lexem: + text: str + type_name: str + value: str + + +class LexemeType: + def __init__( + self, + name: str, + pattern: str, + value_func: Callable[[str], str] = lambda _: "", + ): + self.name = name + self.regex = re.compile(r"\s*(" + pattern + ")") + self.value_func = value_func + + def consume(self, text: str) -> tuple[Lexem | None, str]: + match = self.regex.match(text) + if match: + lexeme_text = match.group(1) + value = self.value_func(lexeme_text) + rest = text[match.end() :] + return Lexem(lexeme_text, self.name, value), rest + return None, text + + +class Lexer: + def __init__(self, lexeme_types: Iterable[LexemeType]): + self.lexeme_types = lexeme_types + + def analyze(self, text: str) -> list[Lexem]: + lexems: list[Lexem] = [] + while text.strip(): + for lex_type in self.lexeme_types: + lexem, new_text = lex_type.consume(text) + if lexem: + lexems.append(lexem) + text = new_text + break + else: + error_lexeme, text = self._consume_error(text) + lexems.append(error_lexeme) + return lexems + + def _consume_error(self, text: str) -> tuple[Lexem, str]: + match = re.match(r"\s*(\S+)", text) + err_text = match.group(1) if match else text.strip() + print(f"Недопустимая лексема: {err_text}") + rest = text[match.end() :] if match else "" + return Lexem(err_text, "ERROR", ""), rest diff --git a/lab1/programm/main.py b/lab1/programm/main.py new file mode 100644 index 0000000..2dcc1ea --- /dev/null +++ b/lab1/programm/main.py @@ -0,0 +1,98 @@ +import math +import os +from typing import Callable + +from prettytable import PrettyTable + +from lexer import LexemeType, Lexer + + +class IdentifierMapper: + def __init__(self): + self.id_table = {} + self.counter = 0 + + def __call__(self, lex_text: str) -> str: + if lex_text not in self.id_table: + self.id_table[lex_text] = f"{lex_text} : {self.counter}" + self.counter += 1 + return self.id_table[lex_text] + + +def exp_form_to_complex(exp_str: str) -> str: + # Разделяем строку по 'E' + base, exponent = exp_str.split("E") + r = float(base) + phi = float(exponent) + + # Преобразуем в алгебраическую форму + a = r * math.cos(phi) + b = r * math.sin(phi) + + return f"{a:.2f} + i * {b:.2f}" + + +LEXEME_TYPES: dict[str, LexemeType] = { + # 1. Идентификаторы + "IDENTIFIER": LexemeType( + "IDENTIFIER", r"[A-Za-z_][A-Za-z_0-9]{0,15}(?![A-Za-z_0-9])", IdentifierMapper() + ), + # 2. Комплексные числа в показательной форме (на самом деле — числа в экспоненциальной форме) + "COMPLEX": LexemeType( + # "COMPLEX", r"[+-]?\d+(?:\.\d+)?E[+-]?\d+(?!E)", exp_form_to_complex + "COMPLEX", + r"[+-]?\d+(?:\.\d+)?E[+-]?\d+(?:\.\d+)?(?!E)", + exp_form_to_complex, + ), + # 3. Оператор присваивания := + "ASSIGN": LexemeType("ASSIGN", r"\:=(?![\:=])"), + # 4. Арифметические операторы + "ARITHMETIC_OP": LexemeType("ARITHMETIC_OP", r"[+\-*/^]"), + # 5. Скобки + "PAREN": LexemeType("PAREN", r"[()]"), + # 6. Разделитель выражений | + "SEPARATOR": LexemeType("SEPARATOR", r"\|"), + # 7. Комментарии от # до конца строки + "COMMENT": LexemeType("COMMENT", r"\#.*"), +} + + +def analyze_and_print_table(code: str): + lexer = Lexer(LEXEME_TYPES.values()) + lexemes = lexer.analyze(code) + + table = PrettyTable(["Лексема", "Тип лексемы", "Значение"]) + for l in lexemes: + table.add_row([l.text, l.type_name, l.value]) + + print(table) + print() + + LEXEME_TYPES["IDENTIFIER"].value_func = IdentifierMapper() + + +def main(): + while True: + # Запрашиваем название файла + file_name = input( + "Введите название файла для анализа (или 'exit' для выхода): " + ) + + if file_name.lower() == "exit": + print("Завершаю программу.") + break + + if not os.path.isfile(file_name): + print(f"Файл '{file_name}' не найден. Попробуйте снова.") + continue + + # Читаем содержимое файла + with open(file_name, "r", encoding="utf-8") as file: + code = file.read() + + # Анализируем и выводим таблицу + analyze_and_print_table(code) + + +if __name__ == "__main__": + main() diff --git a/lab1/programm/requirements.txt b/lab1/programm/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..c7fc368b2cd0ebd0ff82dafd6bf1a52679d84462 GIT binary patch literal 242 zcmYk1+X})k5Jcx$@K;K&;)@?sYfQyjrCLgVUOl^7lx0F-&SWRAXQQh+G^o}E?U+=F zO0>~hE1lFM<9Z#rMQ3vS45iN8NH#iiM&}pCUdg{irx7=5_Pk}Qzx<$}2Q#BudpZT@ k3Yd&0zfDF2-8rr67RQ*%w@kE{XmG%7-M7Ddx)x5n0nK0}Y5)KL literal 0 HcmV?d00001 diff --git a/lab1/programm/test1.txt b/lab1/programm/test1.txt new file mode 100644 index 0000000..129c178 --- /dev/null +++ b/lab1/programm/test1.txt @@ -0,0 +1,2 @@ +alpha:=2E3.1415|beta:=4E0|theta:=alpha+beta+-3E-1.57 + | dzeta := alpha + (2.1E2.1 - 22E2) \ No newline at end of file diff --git a/lab1/programm/test2.txt b/lab1/programm/test2.txt new file mode 100644 index 0000000..e81333e --- /dev/null +++ b/lab1/programm/test2.txt @@ -0,0 +1,3 @@ +abc + +100E-3.1415 +# some_id_ :=:= 100 +ThisIdentifierIsTooLong :=:= \ No newline at end of file diff --git a/lab1/programm/test3.txt b/lab1/programm/test3.txt new file mode 100644 index 0000000..8da9f78 --- /dev/null +++ b/lab1/programm/test3.txt @@ -0,0 +1,4 @@ +x := 2.5E+3 + y1 | +z := 3.1E+ | # число с ошибкой +x := x + -2.5E+3 | +1_first # идентификатор с цифры \ No newline at end of file diff --git a/lab1/report.tex b/lab1/report.tex new file mode 100644 index 0000000..3c4043f --- /dev/null +++ b/lab1/report.tex @@ -0,0 +1,625 @@ +\documentclass[a4paper, final]{article} +%\usepackage{literat} % Нормальные шрифты +\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта +\usepackage{tabularx} +\usepackage[T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[russian]{babel} +\usepackage{amsmath} +\usepackage[left=25mm, top=20mm, right=20mm, bottom=20mm, footskip=10mm]{geometry} +\usepackage{ragged2e} %для растягивания по ширине +\usepackage{setspace} %для межстрочно го интервала +\usepackage{moreverb} %для работы с листингами +\usepackage{indentfirst} % для абзацного отступа +\usepackage{moreverb} %для печати в листинге исходного кода программ +\usepackage{pdfpages} %для вставки других pdf файлов +\usepackage{tikz} +\usepackage{graphicx} +\usepackage{afterpage} +\usepackage{longtable} +\usepackage{float} + + + +% \usepackage[paper=A4,DIV=12]{typearea} +\usepackage{pdflscape} +% \usepackage{lscape} + +\usepackage{array} +\usepackage{multirow} + +\renewcommand\verbatimtabsize{4\relax} +\renewcommand\listingoffset{0.2em} %отступ от номеров строк в листинге +\renewcommand{\arraystretch}{1.4} % изменяю высоту строки в таблице +\usepackage[font=small, singlelinecheck=false, justification=centering, format=plain, labelsep=period]{caption} %для настройки заголовка таблицы +\usepackage{listings} %листинги +\usepackage{xcolor} % цвета +\usepackage{hyperref}% для гиперссылок +\usepackage{enumitem} %для перечислений + +\newcommand{\specialcell}[2][l]{\begin{tabular}[#1]{@{}l@{}}#2\end{tabular}} + + +\setlist[enumerate,itemize]{leftmargin=1.2cm} %отступ в перечислениях + +\hypersetup{colorlinks, + allcolors=[RGB]{010 090 200}} %красивые гиперссылки (не красные) + +% подгружаемые языки — подробнее в документации listings (это всё для листингов) +\lstloadlanguages{ SQL} +% включаем кириллицу и добавляем кое−какие опции +\lstset{tabsize=2, + breaklines, + basicstyle=\footnotesize, + columns=fullflexible, + flexiblecolumns, + numbers=left, + numberstyle={\footnotesize}, + keywordstyle=\color{blue}, + inputencoding=cp1251, + extendedchars=true +} +\lstdefinelanguage{MyC}{ + language=SQL, +% ndkeywordstyle=\color{darkgray}\bfseries, +% identifierstyle=\color{black}, +% morecomment=[n]{/**}{*/}, +% commentstyle=\color{blue}\ttfamily, +% stringstyle=\color{red}\ttfamily, +% morestring=[b]", +% showstringspaces=false, +% morecomment=[l][\color{gray}]{//}, + keepspaces=true, + escapechar=\%, + texcl=true +} + +\textheight=24cm % высота текста +\textwidth=16cm % ширина текста +\oddsidemargin=0pt % отступ от левого края +\topmargin=-1.5cm % отступ от верхнего края +\parindent=24pt % абзацный отступ +\parskip=5pt % интервал между абзацами +\tolerance=2000 % терпимость к "жидким" строкам +\flushbottom % выравнивание высоты страниц + + +% Настройка листингов +\lstset{ + language=python, + extendedchars=\true, + inputencoding=utf8, + keepspaces=true, + % captionpos=b, % подписи листингов снизу +} + +\begin{document} % начало документа + + + + % НАЧАЛО ТИТУЛЬНОГО ЛИСТА + \begin{center} + \hfill \break + \hfill \break + \normalsize{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ\\ + федеральное государственное автономное образовательное учреждение высшего образования «Санкт-Петербургский политехнический университет Петра Великого»\\[10pt]} + \normalsize{Институт компьютерных наук и кибербезопасности}\\[10pt] + \normalsize{Высшая школа технологий искусственного интеллекта}\\[10pt] + \normalsize{Направление: 02.03.01 <<Математика и компьютерные науки>>}\\ + + \hfill \break + \hfill \break + \hfill \break + \hfill \break + \large{Лабораторная работа №1}\\ + \large{<<Создание лексического анализатора>>}\\ + \large{по дисциплине}\\ + \large{<<Математическая логика>>}\\ + \large{Вариант 15}\\ + + % \hfill \break + \hfill \break + \end{center} + + \small{ + \begin{tabular}{lrrl} + \!\!\!Студент, & \hspace{2cm} & & \\ + \!\!\!группы 5130201/20102 & \hspace{2cm} & \underline{\hspace{3cm}} &Тищенко А. А. \\\\ + \!\!\!Преподаватель & \hspace{2cm} & \underline{\hspace{3cm}} & Востров А. В. \\\\ + &&\hspace{4cm} + \end{tabular} + \begin{flushright} + <<\underline{\hspace{1cm}}>>\underline{\hspace{2.5cm}} 2025г. + \end{flushright} + } + + \hfill \break + % \hfill \break + \begin{center} \small{Санкт-Петербург, 2025} \end{center} + \thispagestyle{empty} % выключаем отображение номера для этой страницы + + % КОНЕЦ ТИТУЛЬНОГО ЛИСТА + \newpage + + \tableofcontents + + + \newpage + + \section*{Введение} + \addcontentsline{toc}{section}{Введение} + Лабораторная №1 по дисциплине <<Математическая логика>> заключается в следующем. Необходимо написать программу, которая выполняет лексический анализ входного текста в + соответствии с вариантом задания и порождает таблицу лексем с указанием их типов и значений. + Также необходимо подготовить несколько вариантов программы в виде текста на входном языке. + Программа должна выдавать сообщения о наличие во входном тексте ошибок, которые + могут быть обнаружены на этапе лексического анализа. + Длина идентификатора и строковых констант ограничена 16 символами, только + латиница. Программа должна допускать наличие комментариев неограниченной длины + во входном файле. + + \textit{Вариант 15}. Входной язык содержит арифметические выражения, разделенные символом | + (вертикальная полоса). Арифметические выражения состоят из идентификаторов, + комплексных чисел (в показательной форме), знака присваивания (:=), знаков операций +, + –, *, /, \textasciicircum и круглых скобок. + + + \newpage + \section {Математическое описание} + + \subsection{Структура транслятора} + + Транслятор выполняет преобразование исходного текста $L$ на каком-либо языке в какую-либо структуру данных с сохранением смысла входного текста. + + Транслятор можно разделить на три основные части (см. Рис.~\ref{fig:trs}): + + \begin{itemize} + \item Лексический анализатор -- представляет исходную программу как последовательность лексем. Лексемы - минимальные единицы языка, имеющие смысл. + \item Распознаватель -- строит структуру исходного текста (например, в виде дерева) по полученной от лексического анализатора цепочке лексем. + \item Генератор -- использует построенную структуру для создания выходных данных, отражающих семантику входной цепочки. + \end{itemize} + + \begin{figure}[h!] + \centering + \includegraphics[width=0.8\linewidth]{img/trs.png} + \caption{Структура транслятора.} + \label{fig:trs} + \end{figure} + + В данной лабораторной работе необходимо написать программу лексический анализатор для заданного языка. + + \subsection{Формальное определение лексического анализа} + + Лексический анализ --- первая фаза трансляции программ на языках программирования, цель которой состоит в преобразовании входного текста программы в последовательность структурно значимых элементов --- \textit{лексем}. + + Лексема --- это минимальная единица языка программирования, обладающая самостоятельным смыслом. В отличие от естественных языков, где лексемами выступают слова или словоформы, в языках программирования лексемами являются имена, ключевые (служебные) слова, числовые и строковые константы, а также операторы (в том числе составные, например, \verb|:=|). + + Цели лексического анализа включают: + \begin{itemize} + \item определение класса каждой лексемы (например, идентификатор, число, строка, оператор и т.п.); + \item определение значения лексемы; + \item преобразование значений некоторых лексем (например, чисел) во внутреннее представление; + \item фильтрация и классификация символов для облегчения анализа. + \end{itemize} + + В зависимости от класса, значение лексемы может быть преобразовано во внутреннее представление уже на этапе лексического анализа. Например, числа преобразуют в двоичное машинное представление, что обеспечивает более компактное хранение и проверку правильности диапазона на ранней стадии трансляции. + + Перед лексическим анализом производится этап транслитерации, на котором каждому символу сопоставляется его класс. Типичные классы символов: + \begin{itemize} + \item \textit{буква} --- символы алфавита; + \item \textit{цифра} --- символы от \verb|0| до \verb|9|; + \item \textit{разделитель} --- пробел, перевод строки, табуляция и др.; + \item \textit{игнорируемый} --- символы, не несущие смысловой нагрузки (например, сигнальные коды); + \item \textit{запрещённый} --- символы, не входящие в алфавит языка; + \item \textit{прочие} --- остальные символы, не попавшие в предыдущие категории. + \end{itemize} + + Для данного варианта лабораторной работы были выбраны следующие классы лексем: + + \begin{enumerate} + \item \textbf{Идентификаторы} --- последовательности латинских букв, цифр и символов нижнего подчёркивания. Не могут начинаться с цифры. Максимальная длина идентификатора --- 16 символов. Примеры: \texttt{X}, \texttt{alpha1}, \texttt{\_private}. + + \item \textbf{Комплексные числа в показательной форме} --- числа вида \texttt{aEb}, где \texttt{a} и \texttt{b} --- действительные числа (целые или с плавающей точкой), знак 'E' указывает на показатель степени. Примеры: \texttt{1.5E3}, \texttt{-2E-4}, \texttt{3.0E+2}. + + \item \textbf{Оператор присваивания} --- составной символ \texttt{:=}, обозначающий операцию присваивания значения. + + \item \textbf{Арифметические операторы} --- знаки \texttt{+}, \texttt{-}, \texttt{*}, \texttt{/}, \texttt{\^} для выполнения соответствующих математических операций. + + \item \textbf{Скобки} --- круглые скобки \texttt{(} и \texttt{)}, используемые для задания порядка вычислений в арифметических выражениях. + + \item \textbf{Разделитель выражений} --- символ вертикальной черты \texttt{|}, отделяющий одно арифметическое выражение от другого. + + \item \textbf{Комментарии} --- начинаются с символа \texttt{\#} и продолжаются до конца строки. Комментарии могут быть произвольной длины и содержать любые символы кроме переноса строки. Пример: \texttt{\# это комментарий}. + \item \textbf{Ошибки} — это случаи, когда входной текст нарушает правила формирования лексем. К таким ошибкам относятся идентификаторы, длина которых превышает 16 символов, идентификаторы, начинающиеся с цифры, и прочие неопознанные лексемы. + \end{enumerate} + + + \subsection{Формальная модель лексического анализатора} + Лексический анализатор (лексер) — это конечный автомат, который преобразует входную строку символов в последовательность токенов. Формально его можно описать следующим образом: + + Пусть заданы: + \begin{itemize} + \item $\Sigma$ — входной алфавит (множество допустимых символов) + \item $T$ — множество типов токенов + \item $D$ — множество допустимых значений токенов + \end{itemize} + + Тогда лексический анализатор реализует отображение: + \[ + F_{\text{lexer}} : \Sigma^* \rightarrow (T \times D)^* + \] + + где: + \begin{itemize} + \item $\Sigma^*$ — множество всех возможных строк над алфавитом $\Sigma$ + \item $(T \times D)^*$ — множество последовательностей пар (тип токена, значение) + \end{itemize} + + Процесс лексического анализа можно представить как \textbf{детерминированный конечный автомат (ДКА)}: + \[ + M = (Q, \Sigma, \delta, q_0, F), + \] + где: + \begin{itemize} + \item $Q$ — множество состояний автомата + \item $\delta : Q \times \Sigma \rightarrow Q$ — функция переходов + \item $q_0 \in Q$ — начальное состояние + \item $F \subseteq Q$ — множество конечных состояний + \end{itemize} + + Для каждого распознанного токена $t_i$ выполняется: + \[ + t_i = (\text{type}, \text{value}), \quad \text{где } \text{type} \in T, \text{value} \in D + \] + + + \subsection{Регулярные выражения} + Регулярные выражения -- формальный язык шаблонов для поиска и выполнения манипуляций с подстроками в тексте. Регулярное выражение - это формула (pattern, шаблон), задающая правило поиска подстрок в потоке символов. + + Все лексемы языка можно описать регулярными выражениями и для каждой задать + семантику (какую функцию вызывать, если распознана эта лексема – например, + обратиться к таблице служебных слов и искать там, если нет, то ... ). + + Классы лексем для этого варианта лабораторной работы определяются через регулярные выражения следующим образом. + + \begin{enumerate} + \item \textbf{Идентификаторы.} + \begin{center} + $R_{\text{Identifier}}$ = [A-Za-z\_][A-Za-z\_0-9]\{0,15\}(?![A-Za-z\_0-9]) + \end{center} + + Первый символ — латинская буква или подчёркивание. Далее допускается до 15 символов, включая буквы, цифры и подчёркивания. В конце используется \textit{negative lookahead}, чтобы за идентификатором не следовал символ, допустимый внутри него (иначе это была бы часть более длинного идентификатора). + + \item \textbf{Комплексные числа в показательной форме.} + \begin{center} + $R_{\text{Complex}}$ = [+-]?\textbackslash{}d+(?:\textbackslash{}.\textbackslash{}d+)?E[+-]?\textbackslash{}d+(?:\textbackslash{}.\textbackslash{}d+)?(?!E) + \end{center} + + Опциональный знак в начале числа, целое или десятичное число до \texttt{E}, затем обязательный символ \texttt{E}, снова опциональный знак, и целое или десятичное число. В конце используется \textit{negative lookahead}, чтобы за числом не мог сразу следовать символ \texttt{E}. + + \item \textbf{Оператор присваивания.} + \begin{center} + $R_{\text{Assign}}$ = \textbackslash{}:=(?![\textbackslash{}:=]) + \end{center} + + \item \textbf{Арифметические операторы.} + \begin{center} + $R_{\text{ArithmeticOp}}$ = [+\textbackslash{}-\textbackslash{}*/\textbackslash{}\^{}] + \end{center} + + \item \textbf{Скобки.} + \begin{center} + $R_{\text{Paren}}$ = [()] + \end{center} + + \item \textbf{Разделитель выражений.} + \begin{center} + $R_{\text{Separator}}$ = \textbackslash{}\textbar + \end{center} + + \item \textbf{Комментарии.} + \begin{center} + $R_{\text{Comment}}$ = \textbackslash{}\#.* + \end{center} + \end{enumerate} + + В класс ошибок попадают все лексемы, неподошедшие ни под какой другой класс. Некорректная лексема считывается с помощью следующего регулярного выражения: + \begin{center} + $R_{\text{Error}}$ = \textbackslash{}S+ + \end{center} + Это регулярное выражение считывает все непробельные символы до первого пробельного символа. + + \subsection{Алгоритм лексического анализа} + Алгоритм лексического анализа состоит из следующих шагов: + \begin{enumerate} + \item \textbf{Инициализация:} указатель устанавливается на начало строки. + \item \textbf{Определение типа лексемы:} регулярные выражения, соответствующие различным типам лексем, перебираются в цикле до первого совпадения. Если регулярное выражение не найдено, то применяется регулярное выражение $R_{\text{Error}}$. + \item \textbf{Извлечение лексемы:} с помощью регулярного выражения лексема извлекается из строки и сохраняется в списке лексем с указанием типа лексемы. + \item \textbf{Вычисление значения лексемы:} значение каждой лексемы определяется посредством вызова функции обработчика, соответствующей типу лексемы. Функция обработчик получает на вход текст лексемы и возвращает некоторый объект, представляющий её значение. + \item \textbf{Сохранение лексемы:} текст лексемы, её тип и значение сохраняются в итоговый список лексем. + \item \textbf{Сдвиг указателя:} указатель сдвигается на следующий непросмотренный символ. + \item \textbf{Завершение анализа:} алгоритм завершается, когда указатель сдвигается за пределы строки. То есть, когда вся строка разобрана на лексемы. + \end{enumerate} + + Сложность такого алгортма без учёта сложности функций вычисления значений лексем -- $O(n)$, где $n$ -- количество символов в исходном тексте программы. + + \subsection{Синтаксическая диаграмма} + + Синтаксическая диаграмма реализованной программы представлена на Рис.~\ref{fig:diag}. + + \begin{figure}[h!] + \centering + \includegraphics[width=0.9\linewidth]{img/diag.png} + \caption{Синтаксическая диаграмма реализованной программы.} + \label{fig:diag} + \end{figure} + + \newpage + \phantom{text} + \newpage + \section{Особенности реализации} + \subsection{Общая структура программы} + Программа состоит из двух файлов: + \begin{itemize} + \item \texttt{lexer.py} -- содержит небольшую библиотеку для создания лексических анализаторов для произвольных языков. Файл содержит классы \texttt{Lexem}, \texttt{LexemeType} и \texttt{Lexer}. + \item \texttt{main.py} -- файл содержит список типов лексем и их регулярных выражений -- (\texttt{LEXEME\_TYPES}), а также два обработчика для вычисления значений лексем -- \texttt{exp\_form\_to\_complex} и \texttt{IdentifierMapper}. Также в файле определены функции: \texttt{analyze\_and\_print\_table} -- запускает лексический анализ и выводит результаты в консоль в виде таблицы, \texttt{main} -- обрабатывает пользовательский ввод. + \end{itemize} + + \subsection{Класс Lexem} + + Класс Lexem это простой датакласс для представления лексем. Код определения класса представлен в листинге~\ref{lst:Lexem}. В классе есть всего три поля строкового типа: + \texttt{text} -- текст лексемы, \texttt{type\_name} -- название типа лексемы, \texttt{value} -- значение лексемы. + +\begin{lstlisting}[caption={Определение класса Lexem.}, label={lst:Lexem}] +@dataclass +class Lexem: + text: str + type_name: str + value: str +\end{lstlisting} + + + \subsection{Класс LexemeType} + Класс LexemeType представляет собой тип лексемы. Код определения класса представлен в листинге~\ref{lst:LexemeType}. В классе всего три поля: + \texttt{name} -- строка с названием типа лексемы, \texttt{regex} -- регулярное выражение, соответствующее типу лексемы, \texttt{value\_func} -- функция для вычисления значения лексемы. + + В классе определён единственный метод \texttt{consume}. Он принимает два параметра: \texttt{self} -- ссылку на объект класса, и строку \texttt{text} с текстом программы, из которого нужно попытаться извлечь лексему. Возвращает кортеж из двух элементов: объект класса Lexem, если лексему удалось извлечь, иначе None, и строку с текстом программы, оставшимся после извлечения лексемы. + +\begin{lstlisting}[caption={Определение класса LexemeType.}, label={lst:LexemeType}] +class LexemeType: + def __init__( + self, + name: str, + pattern: str, + value_func: Callable[[str], str] = lambda _: "", + ): + self.name = name + self.regex = re.compile(r"\s*(" + pattern + ")") + self.value_func = value_func + + def consume(self, text: str) -> tuple[Lexem | None, str]: + match = self.regex.match(text) + if match: + lexeme_text = match.group(1) + value = self.value_func(lexeme_text) + rest = text[match.end() :] + return Lexem(lexeme_text, self.name, value), rest + return None, text +\end{lstlisting} + +\subsection{Класс Lexer} +Класс Lexer представляет собой лексический анализатор. Код определения класса представлен в листинге~\ref{lst:Lexer}. В классе всего одно поле: +\texttt{lexeme\_types} -- список объектов класса \texttt{LexemeType}. + +В классе определено два метода: \texttt{analyze} и вспомогательный \texttt{\_consume\_error}. + +Метод \texttt{analyze} выполняет лексический разбор входного текста. Он принимает строку \texttt{text}, содержащую текст программы, и возвращает список объектов типа \texttt{Lexem}. Метод поочерёдно применяет каждый тип лексемы из \texttt{lexeme\_types}, пытаясь извлечь очередную лексему. Если хотя бы один тип лексемы успешно извлекает лексему, она добавляется в результат, а оставшийся текст анализируется далее. Если ни одна лексема не подошла, вызывается метод \texttt{\_consume\_error} для обработки ошибки. + +Метод \texttt{\_consume\_error} используется для обработки ситуаций, когда входной фрагмент не соответствует ни одному из допустимых шаблонов. Он находит первую непробельную последовательность символов, сообщает об ошибке в консоль и создаёт лексему с типом \texttt{"ERROR"}. Возвращает эту ошибочную лексему и оставшийся текст. + +\begin{lstlisting}[caption={Определение класса Lexer.}, label={lst:Lexer}] +class Lexer: + def __init__(self, lexeme_types: Iterable[LexemeType]): + self.lexeme_types = lexeme_types + + def analyze(self, text: str) -> list[Lexem]: + lexems: list[Lexem] = [] + while text.strip(): + for lex_type in self.lexeme_types: + lexem, new_text = lex_type.consume(text) + if lexem: + lexems.append(lexem) + text = new_text + break + else: + error_lexeme, text = self._consume_error(text) + lexems.append(error_lexeme) + return lexems + + def _consume_error(self, text: str) -> tuple[Lexem, str]: + match = re.match(r"\s*(\S+)", text) + err_text = match.group(1) if match else text.strip() + print(f"Недопустимая лексема: {err_text}") + rest = text[match.end() :] if match else "" + return Lexem(err_text, "ERROR", ""), rest +\end{lstlisting} + +\subsection{Класс \texttt{IdentifierMapper}} +Класс \texttt{IdentifierMapper} используется для сопоставления идентификаторов с уникальными значениями. Код класса приведён в листинге~\ref{lst:IdentifierMapper}. В классе определены два поля: \texttt{id\_table: dict[str, str]}~--- таблица, содержащая отображения идентификаторов на строки с их порядковыми номерами, и \texttt{counter: int}~--- счётчик, увеличиваемый при каждом новом идентификаторе. + +Метод \texttt{\_\_call\_\_(self, lex\_text: str)~$\rightarrow$~str} проверяет, был ли ранее встречен переданный идентификатор. Если нет~--- добавляет его в таблицу, присваивая уникальный номер, и возвращает соответствующее строковое представление. + +\begin{lstlisting}[caption={Класс IdentifierMapper.}, label={lst:IdentifierMapper}] +class IdentifierMapper: + def __init__(self): + self.id_table = {} + self.counter = 0 + + def __call__(self, lex_text: str) -> str: + if lex_text not in self.id_table: + self.id_table[lex_text] = f"{lex_text} : {self.counter}" + self.counter += 1 + return self.id_table[lex_text] +\end{lstlisting} + +\subsection{Функция \texttt{exp\_form\_to\_complex}} +Функция \texttt{exp\_form\_to\_complex}, показанная в листинге~\ref{lst:expToComplex}, принимает один параметр \texttt{exp\_str: str}~--- строку с числом в экспоненциальной форме. Возвращает строку \texttt{str}, представляющую это число в виде комплексного числа в алгебраической форме \( a + i \cdot b \), где \( a = r \cdot \cos(\varphi) \), \( b = r \cdot \sin(\varphi) \). + +\begin{lstlisting}[caption={Функция exp\_form\_to\_complex.}, label={lst:expToComplex}] +def exp_form_to_complex(exp_str: str) -> str: + base, exponent = exp_str.split("E") + r = float(base) + phi = float(exponent) + + a = r * math.cos(phi) + b = r * math.sin(phi) + + return f"{a:.2f} + i * {b:.2f}" +\end{lstlisting} + +\subsection{Список \texttt{LEXEME\_TYPES}} +Словарь \texttt{LEXEME\_TYPES} (листинг~\ref{lst:LexemeTypes}) содержит определения всех типов лексем, используемых в лексическом анализе. Ключами являются строковые названия типов, значениями~--- экземпляры класса \texttt{LexemeType}. Каждая лексема описывается с помощью регулярного выражения и, при необходимости, функцией обработки значения (например, \texttt{IdentifierMapper} или \texttt{exp\_form\_to\_complex}). + +\begin{lstlisting}[caption={Определение лексем в LEXEME\_TYPES.}, label={lst:LexemeTypes}] +LEXEME_TYPES: dict[str, LexemeType] = { + "IDENTIFIER": LexemeType( + "IDENTIFIER", r"[A-Za-z_][A-Za-z_0-9]{0,15}(?![A-Za-z_0-9])", IdentifierMapper() + ), + "COMPLEX": LexemeType( + "COMPLEX", + r"[+-]?\d+(?:\.\d+)?E[+-]?\d+(?:\.\d+)?(?!E)", + exp_form_to_complex, + ), + "ASSIGN": LexemeType("ASSIGN", r"\:=(?![\:=])"), + "ARITHMETIC_OP": LexemeType("ARITHMETIC_OP", r"[+\-*/^]"), + "PAREN": LexemeType("PAREN", r"[()]"), + "SEPARATOR": LexemeType("SEPARATOR", r"\|"), + "COMMENT": LexemeType("COMMENT", r"\#.*"), +} +\end{lstlisting} + +\subsection{Функция \texttt{analyze\_and\_print\_table}} +Функция \texttt{analyze\_and\_print\_table}, представленная в листинге~\ref{lst:AnalyzePrint}, принимает один параметр \texttt{code: str}~--- строку с текстом программы. Она создаёт объект \texttt{Lexer}, выполняет анализ текста на лексемы и выводит результат в виде таблицы, используя библиотеку \texttt{PrettyTable}. Каждая строка таблицы содержит текст лексемы, её тип и вычисленное значение. + +\begin{lstlisting}[caption={Функция analyze\_and\_print\_table.}, label={lst:AnalyzePrint}] +def analyze_and_print_table(code: str): + lexer = Lexer(LEXEME_TYPES.values()) + lexemes = lexer.analyze(code) + + table = PrettyTable(["Лексема", "Тип лексемы", "Значение"]) + for l in lexemes: + table.add_row([l.text, l.type_name, l.value]) + + print(table) + print() +\end{lstlisting} + +\subsection{Функция \texttt{main}} +Функция \texttt{main} (листинг~\ref{lst:Main}) организует интерактивный интерфейс пользователя. Не принимает параметров. Пользователь вводит строку \texttt{file\_name}, содержащую путь к файлу. Если файл существует, его содержимое читается и передаётся в функцию \texttt{analyze\_and\_print\_table}. При вводе строки \texttt{"exit"} программа завершает выполнение. Если файл не найден, пользователю выводится сообщение об ошибке. + +\begin{lstlisting}[caption={Функция main.}, label={lst:Main}] +def main(): + while True: + file_name = input( + "Введите название файла для анализа (или 'exit' для выхода): " + ) + + if file_name.lower() == "exit": + print("Завершаю программу.") + break + + if not os.path.isfile(file_name): + print(f"Файл '{file_name}' не найден. Попробуйте снова.") + continue + + with open(file_name, "r", encoding="utf-8") as file: + code = file.read() + + analyze_and_print_table(code) +\end{lstlisting} + +\newpage + \section{Результаты работы программы} + На Рис.~\ref{fig:result1}-\ref{fig:result3} представлены результаты работы лексического анализатора, запущенного на файлах с тремя различными программами (см. листинги~\ref{lst:prog1}-\ref{lst:prog3}). + +\begin{lstlisting}[caption={Программа 1.}, label={lst:prog1}] +alpha:=2E3.1415|beta:=4E0|theta:=alpha+beta+-3E-1.57 + | dzeta := alpha + (2.1E2.1 - 22E2) +\end{lstlisting} + +\begin{figure}[h!] + \centering + \includegraphics[width=0.6\linewidth]{img/result1.png} + \caption{Результат работы лексического анализатора на программе 1 (листинг~\ref{lst:prog1}).} + \label{fig:result1} +\end{figure} + +\begin{lstlisting}[caption={Программа 2.}, label={lst:prog2}] +abc + +100E-3.1415 +# some_id_ :=:= 100 +ThisIdentifierIsTooLong :=:= +\end{lstlisting} + +\begin{figure}[h!] + \centering + \includegraphics[width=0.8\linewidth]{img/result2.png} + \caption{Результат работы лексического анализатора на программе 2 (листинг~\ref{lst:prog2}).} + \label{fig:result2} +\end{figure} + +\newpage +\begin{lstlisting}[caption={Программа 3.}, label={lst:prog3}] +x := 2.5E+3 + y1 | +z := 3.1E+ | # число с ошибкой +x := x + -2.5E+3 | +1_first # идентификатор с цифры +\end{lstlisting} + +\begin{figure}[h!] + \centering + \includegraphics[width=0.8\linewidth]{img/result3.png} + \caption{Результат работы лексического анализатора на программе 3 (листинг~\ref{lst:prog3}).} + \label{fig:result3} +\end{figure} + +\newpage + +\begin{figure}[h!] + \centering + \includegraphics[width=0.9\linewidth]{img/wrong.png} + \caption{Реакция программы на некорректный пользовательский ввод.} + \label{fig:wrong} +\end{figure} + +На Рис.~\ref{fig:wrong} представлена реакция программы на некорректный пользовательский ввод. + + + \newpage + \section*{Заключение} + \addcontentsline{toc}{section}{Заключение} + В ходе выполнения лабораторной работы была написана программа, которая выполняет лексический анализ входного текста в соответствии с вариантом лабораторной работы и выводит в консоль таблицу лексем с указанием их типов и значений. Также программа отдельно выводит сообщения об ошибочных лексемах. + + Из достоинств выполнения лабораторной работы можно выделить структурирование кода за счёт использования ООП. Вся логика работы лексического анализатора вынесена в отдельный класс \texttt{Lexer}. Логика работы с типами лексем в класс \texttt{LexemeType}. Также в качестве достоинства можно отметить удобочитаемый вывод таблиц в консоли с помощью библиотеки \texttt{PrettyTable}. + + Можно выделить два недостатка текущей реализации. Во-первых, классы \texttt{Lexer} и \texttt{LexemeType} не поддерживают лексемы, в состав которых входят пробельные символы. Это ограничение также касается и лексем из класса <<Ошибка>>, поэтому предложенный лексический анализатор не может обнаружить, например, следующую ошибку: <<\texttt{:= :=}>> -- между повторяющимися операторами присваивания находится пробельный символ. Во-вторых, алгоритм, лежащий в основе реализации лексического анализатора, не предусматривает анализ структуры входного текста, поэтому способен обнаружить ошибки только на уровне отдельных лексем. + + Функционал программы несложно масштабировать. Классы \texttt{Lexer}, \texttt{LexemeType} и \texttt{Lexem} получились достаточно универсальными. Для того, чтобы добавить обработку дополнительных типов лексем, достаточно расширить словарь \texttt{LEXEME\_TYPES}. Кроме того, класс \texttt{LexemeType} позволяет использовать любые \texttt{Callable} объекты в качестве обработчиков для получения значений лексем. Таким образом код, написанный для решения конкретного варианта лабораторной работы, легко можно адаптировать для решения других вариантов. + + На выполнение лабораторной работы ушло около 12 часов. Работа была выполнена в среде разработки Visual Studio Code. Программа написана на Python версии 3.13. + + + +\newpage +\section*{Список литературы} +\addcontentsline{toc}{section}{Список литературы} + +\vspace{-1.5cm} +\begin{thebibliography}{0} + \bibitem{vostrov} + Востров, А.В. Курс лекций по дисциплине <<Математическая логика>>. URL \url{https://tema.spbstu.ru/compiler/} (дата обращения 01.04.2025 г.) + \bibitem{lutz} + Лутц, М. Изучаем Python. 5-е изд. / М. Лутц. — СПб.: Питер, 2019. — 1216 с. + \bibitem{friedl} + Фридл, Дж. Регулярные выражения = Mastering Regular Expressions / Дж. Фридл. — СПб.: Питер, 2001. — 352 с. — (Библиотека программиста). +\end{thebibliography} + +\end{document} \ No newline at end of file