From 6483b91026dc6714841309231936c18b1664cf11 Mon Sep 17 00:00:00 2001 From: SaraikinaVK Date: Mon, 24 Nov 2025 13:25:21 +0300 Subject: [PATCH] dona --- TEMA7/Figure_1.png | Bin 0 -> 18344 bytes TEMA7/Figure_2.png | Bin 0 -> 34995 bytes TEMA7/Figure_3.png | Bin 0 -> 13709 bytes TEMA7/report.md | 599 +++++++++++++++++++++++++++++++++++++++++++++ TEMA7/task.md | 83 +++++++ 5 files changed, 682 insertions(+) create mode 100644 TEMA7/Figure_1.png create mode 100644 TEMA7/Figure_2.png create mode 100644 TEMA7/Figure_3.png create mode 100644 TEMA7/report.md create mode 100644 TEMA7/task.md diff --git a/TEMA7/Figure_1.png b/TEMA7/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..027545ea73bb022f964b7bc248b2df19a0804ae1 GIT binary patch literal 18344 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∨w;uD&-FVzI( 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 Yiq65xMfS5JEDE`$pmrnkx~bp)0Rj#p00000 literal 0 HcmV?d00001 diff --git a/TEMA7/Figure_2.png b/TEMA7/Figure_2.png new file mode 100644 index 0000000000000000000000000000000000000000..62390d3d50540cb00ad2f638596a27616c200cb3 GIT binary patch literal 34995 zcmeFZ^;=b6^e$>32ns0OAR!1yh$y{9x<$IBySp|D(z!vpq`Rd{aud?s9n#GPHgG3? zzRx-L{&4?*^E`(i+&tU0=2~;iG3FfOecwUgCs{E}3=)ic_wHdzhzozdckkimy?gf~ z9;1S9_+=z@!3U3nh^m8vwUL9fuASjM8C?e(3u^}pQ#~ptLpys@Yby>Gb~cuG%v2^0 z4mS2YtgM#*>k1ZYJ7d;@Lf}Ions04#|tKSQw0P$bPCHL^#W0sUVKpuk<<=tkblOBBlUKO(7jEVh8=wz z-J6;!;44+*`Mi7L4ganEEQhn-tLmik0q)y{W6kw`n~ix6=kcV92^MoWJ{}(43&HpYKJJaGHs0 zY9`J23;kPSmRAf65ehl75+m6%bOI^*)jVIkDcHpO6+VBS6?pp3F^1cVwdylnkJqgz zQP~BtDMFG8Agu|U=5=n&+}zx6?AN7<`CLkA>F8?Rm{<8jD1#oY`0KSG(oEQ$#H$h9 zu1A^dE;)86c9ggdiGLE`%cZ!k6RXuZNQLp|O6( zd)0~E;e9An_67Or7ZGo!Inw5Dfk4gR@0Z5?N$fZ#w4+OtRhEgG_I;dor(-I;M{B)n zO;>wSI=7b-M;(MZcmhV#zf46RKx~(V)v7Gw50OHCPhmc2*wcupXaAxFhRfw`6{Xwe zM_g^wc+|r*T<2(hah!T<;gOP(!g9PZ5WA7;H80+}RJ)N9HIyON+XbU}(!6mz0Ew-h zcax%U+kBA-#rZGR>>h{>a+cXFeI(|x`BGN$f*n5bf|qwDj)n4)NKw6gV~hR209@4~ z6P!R9|MA{zGpG)@7 zY$M*YLm3GETZ$f^Gj%Jg;xbPq351)TUV4&%=QKhbFHn31ZM)~N=KJ^WZz$W2a z-2(&f&$!`5Z;c01Di1chFr)`LFZFqC7C)4gEZHlX7JkkO8anpXFb!`xk1<3d4n=iq zBQ;)qaYrT3ugS3GFd3v$ev=jO|9XzkJK||IOp>>3sDhFOL80=FcsRw%MI;4A3hmUP zlzbHEh%_PpOd)?P!awbp$y!pEU%ZP0=NsLnjEs!HGnd0lgt8=~Gl9z=jj8D1TTS>; zuzLtN?M%K&eb3E3RTKRk)t4m{BRR~s!T&$6VJ3p$@f4BM{1E@THCCXqzB1?}gocf( z(?e=VU(N`P__INb#}1S_Jr~_ zaRJ#GSA4YSgH2-IqvQ6M?qUOS`|5nb%WFxW4d>=^yQFtCPr-1m&e3io*_ou#BtM_` z&d0dridM!9FR0`h@MATt_b|x>tGmHn);p%fxu)yY3()$8<9^<9>xHIP1M<=ik}7GT zk2e#|H%bZbty!!a4n>y;%xy+w-V-Y*zLbvpf)~9#UX=JJjy+@aFQa1JT)oIUOB~Y$ z?MzqutLAW|@Bc)LUf})C@Ct{ds+8o{b~g>;YdvwWzq99&0uCWkjHDoHPqrsYMz@kN zB2R{!HvB1}4Ck)w$&C%Kb``7MFW?b#ppN*IiX?Xhv!=IYF7GGuD6OWr2Q}?iP6&&J z+ARl2(EsO&Nnzw)kb`ML)Vxl3p7ZIx;@lhu!Q6JjvQ#8AgTF8JY15aNF?xEb zyPZEhPFF5cw_9#Ue;w4WJLf4X>bJYC!{+_<$rF-SWv#=>yEEK4OYb_dU0*>58LF1e zdJ*W#NLAN8Fd5JORERaRaeGKt50Mp%F(&)8o{7&?BPw~u0+WjRRgzYni#cthT&lp) zUj04^hl2d*;aaRtjBGMbpo$17WUV7dw)TE}4Qld(`y*F{W{az9ffn-?efF^TY*2=A zL|Hyl(jhLha*F#`@DZ0l5hg}S{vuYJM8$=at2AZSe&Ey8ufMH30!&hTk1Awg5h^9x zT3Zt(tb|$)uo-`0#TT-+IUjyc^D;N1Thi*&>h7w;jQVv3Oo=z#pj zCQOVX=4$^o(Bo{XAE*9dU=H#qw)w3Ss6E07K-y2bfrVgr^lr*#=(3eRDKfyY~^LKs15dxiZ zHjB=l$9*t3)(ZTpv|(wxq%VA^RnejSBLj2%hvhKU&+pqs*Lu2#3)S>j#v9$=Uo6~u zier&Y(!s;x=}QM7UMj_P`E@&!WqAj+dv)6^5>iqeXH$Oq@GxRtysfC(ZyE+@!uqLM2b6`po5^{XR4xWJ{!P_6%?s{f`Im*M@()sOyBbY<8NXS# z?V`xUMDrcK?{j|h?)#0cuNy=|h;(=KPP*w+yIOspgz9zYj(nOP*A_1>%Xn@z^gB$< z>*hFhZOS+`I+{s^q@F^{eYY~p>GAKqx%$v{vMc{sH1knlcq?KKqmV-N${vK;fxr(` z4RV^l@RN%psKD$?*(9PNw?l9}>HZTC7w3Cp0>T5`skJY_RDZ!cY%o-awg z;Hz=mF}ZjViMG5kZQjQfpeX7mp3Fm(+)9u_9jj#o{wLeczE4)LW+iM>wAs2r9;Noa z-o`994C4s5yvBa5brw@!zp@RA#VlWQWpzwYJd)D~vo91BvkG}`_h*l#Bzw|0)l)gn zg!-_(i@iy?+NvRm&-CR@Nz-M%!{1>M=+(?Z53muX{#&9zS}JzYH}zjy9%QhQQn|`W zNU)10c^wAp;58|O!+5kvLxtqM74y(Xy_>6rTWzbGGWqjS1-WjJ>R8e)DP&96E*^Rz z+9*SIgPIljvkhIA1L;GALH54?8abU6tF6AJp9;M+{X1EfF{CU1Ih2Gm{pNzru2^(- zDaCyc#@dAVcylq}B^ge^kI@_!7A_ghh~Fe@O8#h7hDMy_fNwO{_; z_>iqy1}@B#i(~y@N@>9kaS}GDw_!JqqUt+d6P8-qx(#s|PF#1q^UHP8g763jzsYYT zoIP^=OIrmc@3MVX{9x)K;`%|CW%}zULbRKlW~1!c4*EZ8EoZ8Z28FQkp|^F8+qCTL z@@}VFN{CAEuY{Rd{-IY|7zMw&ZskF&wp+J2*Vry_y{8wovOVCGUOVb#Wj*6ZG_0Dp zlpFRMT%PldE7l#^LfeOC|BL~r>R z&)5=$WVmT>g+6{?aFz_JeaWT1vxxrk^h&hpnfent93p;0WX(g4X7&VfH(u8_I!^ln zRvye3UNyQBiroez&F&tJzu>V>SGJw5y51E1{c7STY|*6eLx}V*c|?bEWIY>8C&^N* z=NnujBO<;?=XKtSVJP%fR8)lSHud=Ao#eOOt6o5^zsGqU5}+?kQt_ZiVd&&MlIAE5 zf3VVgA|M4p{kmT0@`E3ASD& z@fh}%$+Pjq3N@!ruoy2{H>K-A@$qv)GueLDEjhA}$R#tSPfe3Nf|m}Q)!J`hG<)?Y zS%>DW0$0pq&nH#qd(F>37q``DGL+t0k~TR7j*}46#h%$(`%qynhkPf~Qr7A%w%?dE z-58<^usA&)PX-T)OZBg&=cFJQ-WfJ9$Hjy_u-5TBRjLgaYDJcKUH8UeQDRCglbX!)>89ChhWjfM{AeK}wHwe`9IP8!ofA}{Po#!G&-Dx&jwl}a1tNPF2HamOTEYO)9z$*=#AHnhgzAQFYF8TMf-$qZ_MkX9LRMyf(*ZRZ2P_d zEB8mu6f_E#-&wcX5p|`SVNt2yd z7TUMX5T*9V)}Q;)g|E_n=7BJ8>9E_^u7FvHWF(%1roPtrgR$dsnIR@s&`BDvRWGdm zi%o2#tg6uo;p@@ub9j7nr7HHy+tSnv@#1Ww?E^l>3w_j$1WskL7k|khM2|g|9#yzq zF_pC6cwqB=g+c5IBdh1jmmlY?j;qd8S#pdkt0)IoNqxJnA0iMUeX7v4>#c4|Bw{_* zld!8hQSyGGT7Rb6rpk;7Gdo;=z}kZu9i8C}N9?1do-6VPVJgoWs=@MOo(q!f;}_gw zdWIe2!kfP9Z_gJ$HLuJ!>dW=t_igXcax7AU z?t^#$^`!dy^pCbl**iK;f9BCW1zv967>Rj@O_4DW5MCmM4X{DvXiQRYF!j#X^YG72 zZz$8`CmC(&Y&i%2&6>>aWHey|rx=p6%d4>Ph7#lSS*gY|#`Y3z%U$~@ioruY6=bgY zL=rcHgE9D`dw06m8YfH-4)SHnx;(9AE z>Qv}Nw;A;^UW)e9&|GJ-Q`e(lf_U_2Rqt8}%$?c?LWtM7t!BBlQ&UfBoU|OHr(WpO zC7GAHM2hj*)Ozkvsu*4KSrn~QM%l@!s%$r!e5R0`*9a<% zHgIt~F7O_eHew+S7e^ypo&Td8e(+l;n_bu{nQb6~xgbd3uP@lKhtq^auCO%J7MXsj zVg!Zi{dgKm1{URwb;{Je7Ud$#8TDHvzk32E>5gw0*Y5n>%Cx@n7*^FBI zzPv(ZdfU~7e#6rSMnSI=d3SA^T#^j&P;uQzZRJ*ny;<(O&smar=pKdWZ}U$wRtTjk zMwQK#KW@+Y1 z8h$V2gQjO?7kz46Ne9ZD&dwx1wPKE}QCZLRRbMi_)>zq*H^Y=t1Ve*)VHVlsa*N2I++nKGSHxOkzQtHpO zseA-T46n5PlPaA{x)L~zaK69lagxu_Ki;sHQ-fSwnpe2s;820pfnz`ExCoxBaK`Hl zhj0&_30h*}k)rGgfBY9=yhQjP_E~~z^332)A2ztE79VJ5B87G>!?B1Id8?$%^2LwW zsi&rlB4uyBOq{72(y2dZo+2BZF3@<~${Ly3paBhcr+yV0@tCQ6$EfTq zORrZF(YJdcVPMyS=OIkTr8D)#>^md!YX#^1(qWr6W%k##-iFT^zSQXYbQNozH4$*H zBwGK$TKIuy?^%;vGsX;S1XkbY8vB6d8S49_uP1xe(!_-8E=)mgSvwN9#hA_`7;ql_i^U4740Q9=P zZ0UIFBK68QLEI->V^RbKTY_1e6D6tg_kXSKCYTq$^7s?*oQ4H)3$QDmlaWpAj_Fd= z(ZJ`AO-4E!mK@90p1YEcr)0Ez^Fyl|sz_8{Y0~rU`u6awnSy)dgXr>#u%QJA9X;pM z+ejkF&9VV|lk;@7RiW2~nPhdm-D>QpLR(#{JSQ8Rq>s+hxDdz#*gi&nlk`-Ye5+ z^P`@t!`HczonKqsA+OnDv?tB7oDr_FuwCcup6QV3RTm5Ktmv*EY^k@)a$V?O&Q6;= zdr^*!>p;qXK5PHR?Zkwb+b+{#XHs6A|R|s9^qLta5oqr?lUXdh%XVy26gIb4a_=N;(jS?`XO5qdM{sdD>c;&enHZ=*(bC zxo7>+GW7htzLI~I4q^V6sC z=6IBp)*emIp2V~rtS4Ic^u1qT9?Mr^Iy>dIUl(ul!=&TnRN8AemgV;Dd9$kS?OU0x zx?gFP+?B%L-^il&1oLU7bW1lvKIiesc5^yWDXT6F<$O{nbFL%N(7xX*sGueh^~@BnBoJ`^&Z zuOGx4c@jA?b61f|0SM3VF1c*Jy=r~~5D`#sJ0K#<%gaL&?Qo8pMQG{i;Wf1qjZI4M zZ`76xp8gSGQPAsy<3Jj-(Pw|>`30M91+WTxO>9yUL%lP+duxn4GG_hHHfr+NA%{NdWj*d{4->lz*FYJf_R>tzNAky1#gkR! zg(lnx>k+u-xPuVU(IItv6F|PPo_M}b$(rhwLd9Xc-s^e3#(h>NXymvP*Gu!KYG6!d zWqM7MG}G%ACH@_zWh&p_xx{VS1|o$fiaB*>Cj!!=*Gl?9>}V+<$|mpm5dI6OFm*OE}&w2QBX#n!w^IST>%1 z`-jt-K_;;n_UBL0@{fiFt~_Tq#k@0_L_e*u#2&nDK zkXH-znJOjLWbRt!EYQWBsfrl>e^!tI7@>8D2_=Jk0&%MToQo@fqi85S4!-f7P3nUJ zKk=Pq$i#Gmt9>5&CE{=;^rK@M&E~6Duim&Ee92R*$gV->cj9V!O7d1bl5K)TR0nEW zJc;-#S0E0sQ!trIu8WCg;qek{mNq}mD$iitaslWKLd<^iP^H;y*#%jshHH(7n5r&` zGBC*Gy_^;_G(;xx(%X&5tgnISefxKEXv*}N4=P<3oN|ThQc@HZm${^4V7bHAZe2Qk zG+&8IAAS}ijHY2kizbCGJR@r>YV#y$-Esm;z8%7yII1fK3-2t!{0}2qs8MNau{R9 z;KsYFIRA}YbwQhpc%etTSz%1y^&LHFWv>z;ui0Ibzyt(MUyw_^=n^CBLxMKcNPIr7spYn8xZG{wTFE@P7N#<_waRLT%@|Im!}gt zu^>h70WeC4w-ph&n36M*fJY5`tJd_16Yc5g))?5BMsnnOA7b-SEqIhn04g6w4j52_+s?Drt-Uk&c-$wu1`FOp*S%7gLto*pV>aVVg z3Ht3Ig*tY3QGCD4GYw7pBrne+ZQGGgvl6ZKr4B^o-+v=s9DzjnUESa8#ML`U5FPiW zc(v7>!Nt+q8~x6Z)>d0y=e@UQ?AVpMZK&}OuciQ z^h}!P0SxSp$5VxdKo`#*3!BiOX*lZEng70$<`aoU#J}s~ixH!A+~;C=06gH5OmU&|lIQ*))uaBxK)nFD~tGJV$ILnO{bTjRXrR{K1 zm!<=GN~KF)*LAjQ#EdI%!R0NR;(znBTCDV^0{!#RTcH*PX-+!p$toFxUV@5m-~9YE z6nFH5SKHCg!+g>UJipc9(m9Pe;N`@-Ma}fmfaK}@-@)1tx3)=^w z2tk=4DHis9``5Yecjkg$6ZC~ee|C~^9F11dJ0~9Pd_MK7drm*?px`z`h>*N~bI~!1 z=T=wrd01e8UK>g>pIj`eoeArksvRD?_T7xMpr0?&vKh9YL8J#84Oc{ATJ?Y0QPIO@ zz|+!sJ`a|C)*B&!>!MDt#U`E;L*{=f%;Xr$*`rPmWr%Qc2QavS>5ufMz7O8nw1c$@ zbP;M9gcasBT1x1ch=0L$C`=Q2*k-AsV@Yr+xa<#OJ`(lz{Wtu_f>-tlb>mbSyX4<|I|$LmKle0as*IJ>0uAv*`4H! zJSI5#OY^z5ycX4SSG_viui?||uV3a9J5$uPwN{jv(P-o~n_VKd3eiOMp&TxE30Ja* z!WVcSMopRv>`Re$Orzsqv; z4LDz!L2Vt?16a-jw5%GAa8gyWQ z+4rR1RKW(R%7$JGrt(gNSPw^qRXBeo=erbw7s+Bm{fwuxE9Zbp1Bf& zC}2*;Eu`T8)A|}7PAJnx@A-4-E2^-G&qsR3?6NRy4fIIuh?<`(n1N4mNak$tdU?0~ zhtkqXJHzK4D3U(pC{$amdvao?22kfLWqr%lV`%cDw%FuXRtk3X=FGdkN<5$H8mhKO z!wf{l6y`NGT`$L^-N+4)avLi9pupg$ncMEU6E`C!q#a7BU4P})&ELQ2S%c<;TPV-vS3!Y8?}@Y>qWD?&nedgxT6BE3Ul@ziF3!ac zMU^zI1 zG8wr6S%(XFo-kUGU}&Jdqz~SiqIu)U2m%aLP2Kj|URnm7Pmgcx2Lc-|vQ5x2OWjWY z=nTy8Zg-&Ak<^d*XDm?bQN(vrFhVM{rGtKInLiir4gs3CbCtUwN8 zxU>17*$43F4b6@P^Ub)GCmVlrh#_^q_ZOp8{#@POR5vw8F)9g9|6<<{C+kMM2tozx zig(hUkBaq$7NDgkJ82^OheH|jT;o)~uLO)jF5Exu)ru`Fh{?(x4iH1!+T}KX$Y^;{ za%IPAGhQZ@tu#d*`h?fr$l6HXURw`sgiv}eiw*HZ*?PrwkiNH?ML*R4=+F>6vDt`XS}-*(mxqGTmE|K#%5c{xiT6NB|y7Hqpg9xn5RkKecHYK2`O(x9`6BOD9<$%|;U&vXi`W%GU=LfG;eHM>;`@)q9f-GjTZ}(Ty{Db!N&0o%iPwam}Jg;+}xSjRUPkh(c zuuvF358j>AERNE;zK`^f1KQwvOAi?WBP=6bk5{7P+-RVFSe*Niqkwt1WF`&Rfoflu z_a{Aix2q?Res=(3Z-j! znb`>vb%dG@@`w8L=eY~tfQ|33h*4?>r(T|lki2`lU!t*bHiSYNWaRo9I%-SJF6=G7 z*HY!7rnXLCG|4#n#ATN{hyoaE^|3HKY?*jVb*wDP9kB3EI3KE4fnOc|a&mNmHRew=^Y3+Ed%5oXJz+(GaAZ7ge8am3&)o`%S{Q3(Ft~er z58LD)J16s*vXmXFd-o%TeB5s3yX))>4^e2n8OMnsdq>NaPdLb*3vI?tR}b9n-~_;a zue8ZpT1l2AqlNoZ@B!?%n}N;}@*uCVqY)26c7Mz#fqFhO5U`@l#37XYE{D^P?mpO| zkx{`_%KE^U{r)#Z5!n;XBvqo_XmGgPVJL8x>^u*vsj1O>@1c|H?foF0P1pOa>9BCV zVjlHFG^`&ojN1p?(y-6;uB@lj^e=-lv*ORWF_tKh@n6X47+<-k{SNbf6*{^8xSlYV z{Argfc+Ur6KexaAQ{C^JhN8vlX#$#37Dj!=!RV^z7WqDPrkyuKUpusCmwvkO$Kuc*G#7bpy1b z!5x8Pw<>DwCpRy2ZjK1=q-bk(+r?2VT6JCZ z`%O%DD!OoiOL3$u=d({=;7s_lQfJf^uoVi{{w9!B?H!vT-`%y4!_?sPT!fyzXFmhOz}UEVI7{kI3+1a593K8YJCjwjru5G~ujl2jUlvoJ zLA|pUDa8V#PxbiBa(Vc)+H&UIRI^v}A(z7A&cQ-EU-@*GrRe|MhmFHnvDzMIhd?j?zR0A`!l+{(2 z0(BiTvj&edHSa?8wMPAODNqRd^cp5PY(_9~bI&tMB&DQK`D1nT2I1F&s=PXE4*SsO zff_uFPQt_E+b>fe#Pb1@X*>W7uI)^5O_jcYbKq}YJM5{IwOT+jvkAnZ(Bhn+zAEc* zuPB4Qga_UI{imZloXzcWv;z`Awq+I7=8r9NSzKIq9Bei;HzJG4| zNF!^rF*GuOvK=8p;{Dcs%OmKc+1ZXRI>=R@>MftYLJi+0JYduue8ID#6)W9 z*e>LS7#+v4Mm09Q&7u97Mf%RPW2mjyKuSEQ-itb=E6ucoGb=rAF5cy-gbS(3!Uuxz zPeoSkOlJ`xe^RcaU1XwOs&vP^u3X#qx)o%p4_T{8ZgTQGd0svn_PJo(s{4=TOYO*H za@NB`2y6wuvf6mw6j|pOj2hAvk3fg3DYCyTViTMY-=A*`P4r&nAtawMq4z^}K~gaTE5yH^#lRfvF-=(OA|WNl6y7 zlI~UoH>LXc{bgS;Q>WJf86!MUBnUs$lN(ejut}3#ekE@Pw1zUqZFP1Y6g-mJ6w)xAN;4(hH}gO%N+W^oDSP6Umf&79@K>qcDIR~e%rJg} zv4&~Zs-0iEXt7waKv|J2pu;I?W9)U9WWj2Gd`SPX6xg`dtR6X+bYjm42*dQft!SiQ z14LxPaBDQL+-i=e7Dxiu04yf@4>fQpqqYm@KZ`4S=K+wz&MJ%QIj6+3zG*pUeRhT8pnOr?m4wh#Wt3@XeRd(@A}p%Z248Ljyciya}H5tJPzXj z^oO=>Z%=?;2#>&Zrq(`3eoBkmX(z7iH7SKgjx4!8%FT>*GiQ~F0)@wcAWb(V5EhX^ zpqiIwyXJhxhDnW{f3|6!{nj=(N4$XAkRXuuo#CWN9LVu{JfxQ{w#M^q%Qqz}c$h9B zp?!Q5;S2V50-cTicnzp+V9fDG%83IEWxvm=`RA?=787f~9*rFdz?DMDdBeg$u@S1_$`%v`bDH&T-=vDnWG@^Iybay@J#&*!2eiFVu$GG>R)F8P}ivfX_kT2SN^?a)B}=K}J-Gd8*& z?8Ytzo1APeJG@@*NtF8%Kv%O|yF2zVD=VH7n*xv9V-g(ySdb+5uiGEyfZkdauqEDs z=sc#@=T`O!uW)A1b~{G6FqZgARBTiRTYgLK^&huAR^B|+$7E-!<%L@xwwcFP;Lnad zr2tPYWfP>|&BNu1v@cP%QK``iJ#NqzNErcdWgf05>0pB_e8=F<*K zDq5Vct8^hL(GtGnJf{^he6{xlQ3)>XD1iQZDHhSP^Bl-ZOUc$Ya>FS)qEuABzJ*Bc8964WM!S+I_8dbfjW4o($F@4Q_a7-BfBImMEB!vkmhS*}k0U>~Xn}H_u@)TR7LU#e zUbi2Y60(0mS?+pX9o~71eCz#)Owc(-2Qb+&97qDl&f*JosFFSmdNPYfn@tD6XZY%;O=^-F!rE<_eML?QWXf zTevE#DDZMKle0PW!v~Xx@r1A3FW8}6-g}yloI~^gR-%`;s9l+l_-I1s+!@}8blLs5 z^Ro>@16%LON9sEv@NhzEm8!yYB}Z__i~C>boUc~bgDfT&oA1&rj!`@t=_ltxkDPrE zSDrTa-K9eP2l~j;NM3maurobl%~c*Dad$1F3tay36;q8$!Fo8x9$3Zw1?w>32!15j zKSQJ5InM-QiN_)R0Jx-_qKz1g3!+N{hi)~Bd?ek^;Lr*s5h2G4p}a!ap2?a#bnPWj zwyTa>Sn;R%dDcB}t^?k{k}~}Okvk;`%^A#tR}zH11XlTUZ~H*^ zxKUYT3`zYfvYs(reEhRlZ0=2J979v9YxSRev=9*&&H`(CcT-G4Rd|Xmm`*eBVN!0g`<1ckw}BXY zr`y5%Y|x#xi3d7#EB@qsX9xDkpKX#dGaDEFxfarc5>ikQOzL#b@9YZwAE*LiRsXjf z$V=ZvsCCa#Kxda3@Wcjp@qZw6y$!LO;n=(`0gRo%|9%0IHxPH-fhW4_5)=60pQZza zN9Ti*d#_%tdxEhxHl7y_qQ2oNFO7*S1h+5M!smelhu%3b<9b^*)5W*CgKG1Q=6`N{ zc6jyAjRm0Lshy!BTchkz_rY9J7QlHN$*UJoSfTIVHB~_!&3N%YC&pa>#vmJRG<8|a zJ&^+5k2J+BD8c(N)y|;#me{npC#A47eQ$qGzA=dr5C3z06cK6j>8$7mIi zRI-CON*bJ7fgsnxpPeYdmPNxR?Ha#x`9i^m$LlH~l1C}49pxLY0(4lK9%$Tzsl=ivE?%*1oYk9>6}-$OPXVRpAbs^mtU%$?Mx}$5ya=a zGb%1uaLCOIXgUi53O30}A)ul{M-KYDf-oC;M%2okVS zt$|b}V zR+88|&F$n$WK>iZptF77hg4ljd=jPl+SoPzKxTw!E$M*6Nk_)nc__jvj0YrTWy63} z_uLzH2BeH6fv&eV*K2|FDG}hLjlLvPQ&a1dxoclKd_EAIm^iu}%NM3pfD_V`F*?fE z-F@gh;o*;kcrP(t{5oQ1M>Atcx~yYhYmBR?1IS;CS631Bd{A|g2QTH7OZoxB%2$mI zKR)ysDzKdSg8=o|hWKIS$qCBE*^G-??Hjq9h1=uv+VMbyTJ12>-D0lp1EW&wg_y@{ zPEL8{qM)c~CVM)%j)e_%`eH366}>;qg2N-%UIOr^-8D7B+zt$~XM25zj)Jl|%kZEL z+PmZ$)IR?ocDa#}UF#c=i=PkwGF70-!%m(D^zyBydbQPSjVcS+?e)TK^j&w8gx7;J zfmgamtKDx*hcllv34jhS{kJ-36-IrGXBX8AXZSF;$mDAu10#ae`F+q#V;dQ9fXnUr zM*HThdg^nt0HIGO4#d^fwj6rRDN3{P`&$X9stOTPhbwXX_F2dSp%??Beupa?K1zs2 z)o7%*H}rFbQ4F)%8zE##Xn;cuw>_4)(K=2wcIWXS(6?9Nz=}VYP|OdAEIU`4I}^gz z-*{f41_saUoGrP?c2^A)su2c@Kamihq>7Ix?bs)IN5+7Lr5IJcpiP_1LvH);L1n+c zQUN(qUG~jM4x}56(&I}=OvdjdyW_t1g!B8ewH0>~@98Q_b3QAeJtpMC7Ck7#5^zA# zDzYpIWK>}J7)~zB2Gn$snVFfb7<)9Lak{R(ueCxQub>l6{E?Ed&QP?j#TGK(06OS9 ztM&=pOv&g6#O&#*CBf}2Yq1$La;uv|jKeu{er4Hl>EWr(w{uCY!$lgA1_lNJ3rhKT z^wv$U03Z?d0jOW#1B5zp^hpK9X3ql7?Jtg8F4jp41?6Hxp6c@ui4gN1AXe6?dQT^+ zLCNN{>^xUbFK+Y_Bjqe68nBNTKz-tnn0{52JKA_$@-%A@wi3$k&Nn3v&K&T@`a zZ2N~_o;;2?G=dAIFNnNYl`G20OQZxoh`5MWO8ietR|iHzp0{zUFb9SJ8!_+&nLEtBb-%oGTuJ-#n`gB&?x#xrXkD5M~krX?66F_P# zM)Sd@sf@0U%(VxH4%})(7N7zV4Ds6)K3_o+Q4Tik=h-p(*2n)t&#w0K?*9O-ibP6t zx`>0Nj-W37(@}+^yFL@8`7-Cro9nC4nZF}Bp|@~25dVGv9frJ9O`i3z9UbR6$Khfv zUj3_gkjLr|(Nra-c((XYt_Z}^R52%b1cNE@vJ8-_D+jvID}Bt=6Hp%T49j+9R==3C>C zfCAE#hirz>wVr6Z-O33`e=Kr?(OmgXhU@nW9tvA;omer{AJ!VMz8POsIPsosX_F6_ zr0Slm8v{p5nn{UPk$RwF3Cp*y!Z_%3Y~4XJ&q}n+m_9mKr1=B~1fgW6_Va^w9Zst( zLEY+4MEI<7paxzA#rreJlVy>7Pj`o=pW^;NF|(ea7o-W~pd?K{oen;oJmcM@0`$D# z^pQU(MNV%X{hiHNHXdU<-Y~|D-h9Lk1#lnlufda!0k1J7E6V3E0YI`&e^}uPpxKN= zex)Vn!g$Uf0yQ#Bqv>tfM6<;Eh_9NtncK`yOBQ!Yjt7oiPb3QZ3Yhk;%MstTG>Bbir>$V+oub`xP+UMyjwczV9O5TfgJ2Vc-!A z2NX@Z{{weHvZQ+;*^sAWc zSJuVjK6Uo@b{CupOW2@D9|pXTC5j_T`s!l_rdl!jTm_VGG@E7I&c(Ujyet0HS@YE~ zuYD9+8h=UdNtdVNuA0ZH_uu6>9sh20MQId5v!6QF2o4Qldsf5z*=g`unU=p4wK zY=|Ib=vzBad`Euh#s_U4!hn%ACqx0M zaXL?BsSG8LE5qgULMkO26)tazM5^$w51x2-_#Ns)S3!RC7?}IP_`sdpbZ|A z+ZKP@OIR%bZKur-7dK|^aUA5>ADwa=|1%neur>~fSizEG_Y2N z)ShyiN{`j<#9QFO{gBknNBq!InbiE%Fxq5l+!F*k|9NSo`zrpdTq>3k$oVH&(w~5N zzeZ{N_HaieOnVTdgNL|{V9@MS`vg0OFbe#sW=I^!iVIf5zDKp@+{}OSe`x{&OS}G` z-1yhC6Vx|g$dk#IHq-1O47a;d1~=Jp`%n6#*XjYIxi7wbZwE<6Mw_{cJe(kgN3ZuI zwVtNl2t*PF; z3I_%Q5`k{F@x|mJvB+|H1pu%1f!V?0aVy)f-a$9EAgN7!&a7xtqOSBHw6Uu!^eZa4 zSQ#}O!Om%IRh-rt2@56t?>5c2FJ*p`2KckMxIP-7mYMO-jtQ=vYl8fD70Y7?w?v3KhvSV1#uMw((&RIypmzD58N2f zDF{p%Tc4kF85qL}l|dfQ2Boevk5#MU?*cQU-4K8K?GTqjyPl0){<5}gpJbRa?>(@WSzuXu5KvQ8X=h!_E&N04^RtxNh2xJl5sD-y90-qXV z69}Ra^3;7j6atq2#SqyV{KH#vwQ!Z9$p@{V=i=B_^pVFX+hd;7_upS-)63O)zP+5O ztq|4S_!0q3OC}i3B53??Er|Omn8OZ*6u+bM)NZv08gRS4?KdIIz<6(qN1cFbHwdnt z?5(%eKNeuBRk1j?3j6A(M|a+3gVM;QT~AG#wD{P~HiR;r8Z1FDD%M#E)}7-ub}h|R z7Gxj7Xr74>L6&A}qYiNy=|nQ!9AUGX91=N4?9d>6y7L2a0Zld8`gL4Q+k{ zVQ@E6;;U=}5IYDiZ^sv%atIxilG0RnmCtSGI$Rg<9#Y_?7K&T z9S7Xmtz)?+v)u+8~j$o)y9_Oeo(m2R1;ek7S|d~$p{wNB8V4_J_rzA@gN7X z==t$#7)U$wG;7QMiE>%BHTPB^APv21Ii$y!JY=H^8C>hi&$9e=%1>N!7af8$fwY z5hO*+=$BXl}l_9<|0$?&ibzsx!S zcv41Kt4G$tNE*DW7;>m!OLyLv2!hnpHn=cofWI*9a~)_X23pU^_IB@9&MO1GnY(Rf zPIQ3(JShb9=81-py&~szdKZVcn>-wF3SeLURvj(q8+9MiFsx;&7K*{o|p4 z{PdQIjQ-r`Q?6gE7%R) zE^pj9pb4D%$RGHS+iTX99A+lvxWkd3_g8WXCHF?M*`bp5$eOPCMk6Fh#}Meg`K##Y zMs(+NQnLai{C$bWowB_#g^SwbmF81#QrsCP!J^Xg@@mAeXqib1sw}Upgbon0XsT|V zFK(xWqlJVOz^!MhWX|>%bavP)&Boqj_s5qtgMqyW7dDV@wS7Pns9a55|f>MdGso5in(nz1_2+QV5@pJG74 zgyIkq8cXM~zG7nPt$9T+m-6Gs4}kt6N=F?`t%**8s?1|e6hA5B;9wYxWNQLIAX;b` zVlk87I3sRF{Gbt|DW#O`=84A{~vD{AtcJkamvWdOfpZhDSIWGRQBGEBH46Esm$yV zDKms*WlOSmA$zZb@8hc1>;1WX-{0@|ANZbMbUU4MuIqYU&+GYojQikuH|-M3u6FG# zJ_btW4{w!u)aUAKvSE(a%uQNb!(+Ec@3JO}qj4!y`&$2g68Uqk217{b>;Dag!WKWo z_3tD?Psh0CB}n@8eVAdkaU>XN%9`BHx_u$SZsmY8wCF!)M$HtJLVQx8%PwH<&q$@m-x>qIbSDT`NI^fyHfJm_ zXJzN8ivZ>S#5xS=oglS`MhoqLC=A!Fmo?C2QSs}Tp0=F&FThlLzK^-E`m%Eqico%; zL$$W>GXwj(yOk~ypEQ;`XS=P=8PeEI?rY%>c6U4F4i6mGT^iNqR@diE-Xu3Q31O8# zV`xom&tE#x*cr4;**6y!*h#QUz>0R4XZ^2UMmK>#rm zKj!{|HX{bE*Xo}5=sVv>-yT!BerSS(R{dE*g5e6}Cp7s+m8GVj`alSnTi$-8Wqee# z_oI*$6i8CPH1X-bPq`={P&5v>&MW$5_C|F;7a)s?i6I5K1)ZIE%)y*mql+&*_JrJe z1w7?I&L@Q$fsy0VaK-zmIrwnAfSIrBP~W=&!f4E4V`<_`j{Axmv9GN^iH)@ zS;LQRmnTMo;h!%@WS0z8H22znuT-s%laQE0%gCIF80d|};lwtVi%-i#h2r=VRb zA1aqi%1$$N+aGM!1kn~W-v%P?(-9vs{M#=Xst{g$Gufda%CZdPuwGhz|N zSG{p@DvQQ$P;ugL^pD}~hOub(#V8^7Z;n5JkI5vg6~yrX8fRAV9majnw}5_NxKd(* zpQLSk$CKT6h)5fVtd$jCb@3K2y&&qTKHY>(tgY`YgRpe}ia~<&zGLy2+6(gONnov% zJ^pg|!)-pv1Kw=d;lxNU_v5NF&oy*HM6@q#88W1hW`d9ZSwLiuj(PzLBeCQA%cy0& zWGN)eT8AtvJ%>xD4R^|vrJ^|sm3=)-jFPaYe3ib8QsFL2{Cu@ZmRco*LF)c0b9039 z#B_0JjKubH6h`|R%BLkofm39!69* z(`qggX2t8?Vxx*kW{yZ+G4(0ga7EZ7Po}Lqnbx63H zZXSA@Dot~BP)-^$KSc}1pz<>cH|m=-Lddww9R@8&@8gjzSC`Pkh0m4iuJeai=_jX} zzS`(blZc6Z)o)1zI*=HyQB$j3c}XEEgi&l7u2ZKjktOBa6o;%6G$rb)t#0EoZ^M3l zfW&eK0nPl_u&IT_X0D1fmecw&LH~XsSN9&q zi9Fd3IycPSNVV}{DwwNrhck+07H5W6e+G$A52M1Ru-R(>pNY4RwhjKoD~Q?3XVrI zDs(TcE9&&wNn$t^T(N_qEg<#5TQ1)gpzgUcv;W~l5QYKY(9BCOy~K)xDs&J3)u07svr}e^ zt2M`e9j##ORbJZPrqyv&n2;bv6SM#4^VB?1H@*g-BqGq7Khx;2^jS-xE5kZ)Om&X=2RORAzh?P5y{PvC2JFIU%oB-r`Ku! zK^3&Jy%xiQygT1FToU^h5)c62QQ)dLnOja=6eFG~|DjnG@@vw^(~R?3Hoa#cdVu+r z1WEIKldnidZ;6+UiW}zqdqFo!tmWc{13htHHhR8i-Kmr8(+F7{3cS;jcy8E&dV|U} z>QUo=zQaDdDpLn}RWnOK6@}438^`;4(j}Ztzj`{>&*k#XGu#y}1l-sD_{l5~z-dge zUz28%zE8N_PbiAzC`SfQ_Sw%=7Xql7Fa??7zh>%i<6vbf!QU-Y9)}_d^|bO5F+~V$ z9_PQw)JcRHJ}We$F@)tpg1Nc6nelN5YASe@`rSo6XQan7qq;6dz0uEA!J^Ud!b1A( zq48kpJ;Ln=gu8=sb;yln2^bE~=WVmSsKA%K8mKWAd7*tDDL4pYdpn29ixfvb*`p&x zE(yp5FnnbV|5<=kk4hdO5BcBW%%;i@B$lHm{KL%2319Sp z-|<{3l2?EEKmcnV{Eob+!EE+Luq+l9mS&l_;iB_bA4D?h)JY29&JDk#3j*%I^uisI z=~L&q%i)ArW}yuzuO6Nth|QYdCQ1Q%j zSIqoUGUbO4f2DHObu3do1Bp~5$tQA9TLAlHA<- zf7>t~yu=wX;@stT*+T-UX`mx%_h{O;{k5>5O&`zh!pBZvM|lZawZ#jfYdn^Xr?%j& zZy*u#3xOR1K!h&TPsyR?pcEwG3Rm0#jxvP*{!BH%6E}HYp^pS0J&n=AXV1#^^njL0 z{Lko9%jg5fo*QM)TAcVShgh4ay-4eqFm0-##8z64Ig#tSri6>Aa z`F4^(;HjnN=wSIvCs6je{qa-iU!_C#vBSfLN?#|3&}Ooq1-`XtUL;&)Zh(;_up^LU z&-%L_xqDLj@6<&kU)&(i3($sBFk*wYTAPdanb!hU?svwvq=V_jI;?vg_d`M!8mL^u zuNanhDZbTlra;h>J3F3tiXUk7cLvTa#xtW|C)AI4j9ozj?IcMbB=2G)lzzo6-vIq! z1a?58P3RG2+Q9pOWj1>ps$DQEsEU!^tAX^qsTE$I7-gBO1-&-TQy@rJbg;jzBBO0V z`k1v60^`P`pefKGL&Q`}_^%umH8I6POom2T7P&s@3c0`iUStulFot$0_T&BBKW3M_ z)=!0rkUQX)ru;5LDaooPxv3rWeaIq+U=KL8IHauz;h@375tG+6?#n)C1QsQTy2yjh z;45e9jsKwzikF3*a2Js?KDL`L2<8v-V`jM~=k2+Lg(PHp4$z9%N5wq1_s*Y(kprN9d8K=(T0q5mT>Eyrp76Q zkce+fTh)qTYk%miIIhH^wfw-LLn8*bbtH%R14Z$(T8Iu;d|V{x!rI z4RiT|h2KtHAaS@KYQ9+`r}}NlRF-OD46uroK`RJR(}{WhTzhHCXYN;67({8 z8FUzI71SXL^oei$2SXTtbNRm*!W2?}T`oZf<0>AbumJHyR+joPml+5t^(HnJ?zCr5 zoe6`YV}TL1<)JT5%ni7IPiqt|9UgiJ1u{yMzp}Kv%DLqayN{Vq$^J6mv-KHjXy?id zmeHD2ZX16Lb)AZ&RT}%;&{+bXNhRo9@3hD?lcc}KQ{R8*OX2&|Ryt>Nvu z<_of*BIvn`cfqaC3@OXYbCYn1Pb&O_3{q+#k`{O6ytkKt!-0O8q4H80+C7nl?Mae% z5sKiGPgR(xOEORCLbm`p%N(bnk#Pc=BrnC>{ycw`aPqLQ_^1h8!b?k(7}Y=~=ApY! z#STEfn&9`n*pWmrXj*B4;1=9{={jcC*$X0=!x=D>&vu$ zy_mwEedhOjQQ~d;MxUM^lz~K=38)3IZKo+rL9dV1gf>j8fpe%hH1@TyN;GAos;gac ziA}3LB|&K1YW?+IN|s^sxw*MUj-A==w0nTU{s3}P^y2RM!@le75Y>U+3d_TX4;zp2 zrWsiV<3Ah%PnjXvqFT(}i|)f298`z2k#@Poh0^vnBCV}_H9TrkyXi&#VuUKsNQHBl z#q$Gf5>sq{G?4--KpCIiktiPtC@utwbUdxO-^x^)p z2v^yZ6H-;`rn*sArI@3=ZE#ip}!N3=yLqNcw#8la<{9ruIo~TYpH@TJip@!>L1Quu>L&S?uBGioQTq z8eu)qlYkACUpuE4!nZgOIKb9VD6NBL=gy`|ymD8zBT-191kX|ILj2vjg+ZELdgfHN z<#d<4?&a z_jk-r4jBA7ko5~e>zVGJooZr|o*l2Nh+DOYzW9}r3S!W;l#7Px*Q-aEvJ)7eh!Fu` zq}cvS07K?Xrv=H2o%8UG)R`pG%M{*ysWQLUgc5ADv>obEk_187=JtyBy|0)%cwTMNpV*M+XpF5Dd?Bu3rcWzN7} zj=Irbzl=l}TVEK=T@%ckfWPl-(LN*b-wtni< z-mB{{s+d9+D|~-zCjjsg%m_WQ;AFW4ZIynr|5-jhM1{;wyze5jCNhwKj^aFzMFm0p zc7I10t38o}ARd1L+YV0>%6(QJ(+J7Ome%qWu^x!}@JQg@1i-bwaGxEbObKU#UMzNT zTzaB%!B&Xm!9WiL(R?+Hl%0|tEAt#2Q%%^}>-FbDQtvXK-6coPGWU)aD_etqB%`(? z#_3Cf{7`Bjz=lk6kI$7UFQu~RLxh2@xvbB#^6PYsJLF^u0ExS#+3$O4jUS^bq(gq_ zzNlX}vZTCJVzXZuBVKmh`Kh)uMrrmMXyQzpVXG9K2wFw47o;H{)43Y5YJsU~ zpfo3zeQ;ybPT23o0y?O_>JBTY zZK|<_=^wSginl&=N=)HK;;%9`0|fke1sig+h(u=E3HwPAX6nb+SE+JzS}}3Mq5;2n zYW@yJILj;z8Jw^N2dG~&&18ksC|raSP)07g#Ex4tCkDZ;iMxl)2w)R_Wp&)6sTB9@ zs_GR8djpNT`VohiI4P7`wyzBrZT_7ypBPK>x1y}BbQfFX69DMympTD9?M0X`+x z_UPOEJ9C3_+GmmZu>KupE&cU?UyL;oDQN+fuQNM$oT5x76(C1k&3Q^bBK6wz26G-) zg^wiGbJ01;yRb-@8AfCbS%s7WKHrZnOc?btUbD?9c^)%D@ z9cSWyXx>X)q3v|c=#_eoCt~iyr082esmf(Z=|=XT$3cfe{b2mt;3xlKWZe6H?0F7gZ4o+Drj zXASz$6P=Vnudkn&07&y4jh2zT)xZwIUjAb+iF#jHDmvn3y>Veay`QsaOnL;dYG*!pHA_Z-#{Wt*{SAq$dVkDUR6>rJfYc9|t|l=#-BEm6cUYnA902 zp52T0z5HmN|K!~^Rgtxg1eCzE$gQp`r656VVc_#uNAen|BZNjrzl01hZoe7{2YL%l zOdxJzoob4H`SH@oW6#l!L~#|!8%b-fSvH^fEA4HdR;OE8dS{_EFLL@Mv1}AdD9<5p z?!&Y%acAc3(fsKGbEbI=_1R&m*W;^u$TK_?EpsA}S~W zPnevYog)y0UZo!+wi`(vMlSH>>HY$JOu|VvZe7!UE{(xr&Sy`a7?QBF(qa1QIPtyQ%(G;rCT6t;u4UaHKU@cYOFt250J`=E9Nozcl9pbxl@re^xOUi*T$c( zDh38XnR=oZmb7Y-*sHycukm)<@vjlP^O5NG+;yef4JCP#HhdOM26J<(5KRZ<8`2++ z6}}w!f6HIe&V7UU~d~Bu!#s3?eF1lk6e&jA`d+@iZ@TbgGt8w)zU_2S$g=oAAP zl>PUg0d#c0!I4=mVn1y1lzhG8bdt-A;}zkl`_s)yn&xi}ULo`2vIvO$?QzCs-0wVX zal1&bE!pAxl?MYKZrGQbDZ=#VFVg*y>$J8v-!Glx)W1l~_mKtL`&YVTgJ1YTS8cgY zI`Zt|cbpKxA=l;6k)1)%d11p~YWU|Unm~L$GMY|FuM+{*b}JtKpz+2(W^P&1@A#7S z-xiZw1^=uok8xi{_^#99Adr;S`WUr@chg;F2$Yn=Y^em`o?9F2?``6aD25BhqoN3B zd)PFX$qAuWqJEK#WbY|?D4@P3>GSm75N7`AJNK}UhjWtIDI&T5M@}FCElXE+AdVGt z%|}8y(MQZZBK$f9op@iVU#Wd$Y(fHSx21FTVtxd=F%?_&BW(K-w1VlyT(gVrG00cZ z^5}!qOH>^24+r#3D15dSaK**NU#OgJSt!VXV98LK!%Ij;WS>%^d4a^4;kvup7D(m5 zI*GKQEE~ekAwnI^^^_PMk1;=w9FpsV(SNcAsxMThPSWR(7Z4ZfPBw0d&2)xq7x45j z2%%ce8Aqbss*qI;c8ZFV7P|e+RCXjk%x+G*A*Ckk1;yH;r;Ok2-v1c1DXiAD^(G~) z%@IZ;oGbvu^(cN>^@~^aN0OSX_(FWzlP3fgYHq$?AM7DoqpYh4Uy2(8!b*8@!vNK% z%zYfHyktCBq2acao&}5Oo2pMb=f#OPYXKFPYSEqto7#C*r?TT*r8P%~`}Yq0!Gs|F zn2{gYBCJ4XS9hl>doAhJtA_(lF&KsJ?ImIAjaFW2HT6UiyTSN<{aEqW!ZK_gE?a~# zu7y{xS2W~WGf+U<{4 z_}Nq=@q7y!C~`n?bM-XxEzdQF(N?x7fjT<*_`Ho|mB;o3~TYM%*1ECXN;{!C*f4}g0X z5?S<@)(1JhLdRmffVvQo_#rFIf3+>d*F;%i(t<+S0WSqx2WNYKzh&|!p;<4=b)+uv zx0sZ0z)kOnoB1XtS2y+Ub2Vz1LN{PDG#ND87Ma|FrwD|dRlL6fRMwLP`+`>(!P;v(Ta@2SIVf>`NC?a{AmdY=A_nszp?5e`)PC^Tk!FI66dGn7nw(^dnks+M-OWj zhvpCVYl{x{e#)`j5kuRkXa6Fa9hdIOTVEz<+VVfTKiZVZjl9n&Ws6Oa8o99g(e$y` zQ62H7R9{N1?z@%g*uAFC=bToH0fz^h7+q&jFJex(3MAi24=lS-X?p@@4$IPf*1G`b4K_-yn%-CPuOZ?wj0yWfsB?)pQCo%vi zgv5y?x0H0Xs%Y|C8xFsUec338ag{QzS=Yq>(;ldyX0&N}>-dSuMjfV$;;L3mL6hDCNWAc-Vt3CLOQ_WuP=cWr^cj}(sLm^rU$p`tfE{#!AtJH&v z*xh@Q{_NK??MK3-?&D{vF{z=21vRm-?N#17jisJ4-0u57m^L3>4m=yd;cjN zYU}*?LH6!Pt5;}1!Q@+pO*O8@?ytJEu>GD%jZ`0D#Mom&j;kn*3{RncP-7sxzRqhT zt5Q)RS4oqiPYn;v4$5~k&Z|a~4F{6%#aEtsPCij|{%}V>b~TL{Pm$!;S2b3W2l^3w zHCHijW1rcfxqz9@oGi_kpKBjUCf!ov{E2Ng``TC`+9%rW@mT$Bk#k3=x!)inzPsMO z?=jNQ-%Y}GmXiLh2j2In`jzRA0=x6~&GEA*f1Zd?zki?hAaY*5VKYt-7`kmc-Jze{ z-x+cOBjf=J^V6`tlrj#q3~`j3OLkG_X00VZ^5n$J9pBro$Nx}G&{`KI5;XXBVhvZuZPOjt#%*)RU}LfpV&FOSlf8dWFmdX|p(`q=cD8=)*Kfbe`g>|xeOIu*JA}n4 zx*m6xz5}(CjEBA1*|jNL3|VC7I%j1$D&En~9iRV1O)XbyOEpk>yBGkBLE%}n%*mf- znQ@nIw*?r)Tj!E#t2L6-sv9aQspTFo@+`Weu0oqz7eyq&u$InlMD5BOy+XwIm2xge zo*dW8`<)NVum0AGMgW@)7`RYh(nvK_mUqqx&hkf-Ha(bnw6mxewL9H!qJoG7)B{*iC)rWr02@pfN7kUsDGmaK zi&ZjZJJK?Vt5f8ge?ncC3-nm%QG~PnH=2%%ol!K=Gc+sc9w||=oRaT8A;zTyL6eF zW>>`InTkqY4RvWelI(Jt_)7SE<0-@Oes+e?)sDoytB$-i!?v}tquR`Y1S-J~zukIY zB?lQc{5dIXU+~!=d8h6e$sh)}l|dj4gzKEUdixIQByU3bqnJ_aA7|$Vv}%y5+J!D0 z_`x)P_WRxIERq`dXuh*r?jVW3L_*}}h{ZsWjOF*sAM0ZpZdXfZl~P(!OfvT7#ELrJ z)TTlPGE1unbyd zlm?zqvcK~|cDk4IBQl^~fxIXQ>kUQ}(d_k$2WG_#`;qfBm@0QKh5fDH_N)T~%wxW3 z3Qk(84q1-K9#~=hLw0Y&sRkEF#>)G=+;sAb(&!^97TaKto%hXazm`zJVMbT`yB*mb z)JfWhE12)xSwayjysuIUreJctl{=Y<3~OAETL}7eglQ-NkutyOO&SUqg5xPN!oPr) zS4Ou=ah0q0wTjVXa8(+p={+TH=gb`Qo9Pfpu{eez0P)H5oBKBxOmizQbP0q~D7$LE zt&gda2_`VAzV<&qckR0OMmAy?0VJH;IRG63DK}-+WGSQHQ)LcgywCy67?r}W)PHG; z+d4wT2xTzmyk7m;RABQc+amZy!?)~Q`C5?SHx!2Oo@8QE!%@f%O>x4NCPk6jOCe8} z*>33d&nrJ#Ca<0=o6VLDX7f@wI{e)f$1O*}=r}{yUvaA&L?BMG&e-(j;{Yhv0yYen zfs+y|VA1$|cL%_317!{-MMGdrln%@+(7=3e9_ zJ|B&O0-jT*PF~x-_3cYu!Pfewuf9~cbkrOsh+3UQk#F|BO9Z{UEe_oWGo})EC6m%r zfHJq1L_{8D{i0mp?`*47#b4eT%J#@q)wEm<@G09HpNja4t}LEzPa(t@JioE4!ODXypw#oa$H| zlvJo6_O&H&N%((WFYF}xP?j@xL5w&W<#Mx{QWWBlS|( z2`2xWg4#dLv&q+2R!Es$ibQ& zu1gj-aFX4{z_Cx z4}0h`v*jZjT)RE?X7zg^y1=JT0`gT+J;TSZD6R0eLoZm`--vGyy8QmCq^tY(s)O-G zyTNfh^}dUsdxG2M52v+_@1bkIUJ}M6CeA+~PoNj#r+95@D73!5&ND#L5Vd2*^Cy_( zQv={V`N+E&NO1A-9B%V{!iRi}i1uK5R+b7{$9rD^3Gz1p6N*%ffWh;;a_Lj6{?H-x zx=Y(;5G@e_qtC3qm?Q;aebO6SDvGtsKF^AnfPZ#)GgrIC#Woz*i9z!)>!e$?%f-C% zYVMhV3Tm2hwUs{4rSDnEG2Df&_5!mL^>O#=pI$nPHn}J&YNBXmRglpMr962M?Y2DF zD_z?fs!VtO6&F>#1VZ|_fPkc)s$EX75h%^qH(Oj6!X|VVjGX)6WMSlWxcfuUv{tpr zcstQU%)Fj=uFLEte!B*vzc(C#x(^6>l?-M25BJpqs;1yIcesr_OeYJtM6~y+ZUqN^*B8~n}r?CH& zSYH(-h>dWV&-}Mhcu~px*Et1=1J}p4L+AN)a!v` zb)a&5Cq8K#zs@{VYW7t9sQ}lXCplW}6M#Y>oo>9)-EBb*MLAN^NhrC=UbC}iqo?m6 ze~dk>sEAqKo6m!`-_v`YtuW!<%B>1|eQ2%=G-6|^uTb`=lPMNfYl0IQ8r z>jhPU9s1TUW525j3MRZd{&cVlG(J{cma9=2c6VL3X6Z53?pNjlNxb8++m&N2z^(n} zcRDlC!suTMRZ>LcCsLNkYpyxm0b3I{K^1 z&6`y$4ToLNwS;(|Qrs@C3J|ww8gQFc?7H8n`fPu>>`+4eH3V_tUsK;dGOhObo|ECrq5iCVdCDZvT+Xk$^-7R}9;(FRNoM)|Iw7Oj~of5@0NcA1rirNudu>fh+gai9b733VZ~fY} zngauJEVEULyWG+WcE>BtikZlrueNpHV0Uo&6sS;5Ax6|CePdJyiuF2r71YS?j264Y zzZCRv2KL1^8|bs0hl;@pIPK7r>^wStGD6s)-x>zPn7b5f3A)d;H1|BA0FBrkHtwzT zWG1KNip$Sdy3JokILQ)-o;4T*Dqt_K1$%FXmF_v3)7W$)QbKKHEWFRA53IjE;8-3E zDskJYNea`r+P3;>+AcRW45zeU;~>)Ud4-l8ng+*nCW%$*n}^=Bo@ljAu-*q}jlQwE zMlTUD-!Ati?fxv(`HDcL*51YyQ&U7R;zOZF8(>?^w z0Dls7+>k)^0T_jFY!=CWy6W6(GybJneN)O7-&Iz)j>t}+d8@V4b+5S0f4tYa;CIFK zST^Uk2(-U?O_SF;u)E5(OS+DSMk%_Uerpj^)!9-S{fD47s?}|N@W^`_V=G8axWODm z7Bcev`76`iXst-btF_%{DE)4)UCSq|*|WYsNsKx+d#cuoZI`O38awtL}hfxS*BzIZU!}lkqL-sd;!pW88;N%1d!aH%IXP_&Zh zCm;I@1*FV@{4SB)QDIfjVTpeEvA3imydmZMF&IPNBGG%xy_`5Ul?3|7H|i7c(!%;h zgj9dD`h!Sb9Nm93K!}RwdTfE;38xmSG|CJHIdZ7@rKSd3~aNXO&hsAd2m@LR9}cL;P+Kg`%tMTbUSqeM>1N z(amx)LAh`eF^xxjnl3Y8miGqM84@OcnYfEMQ=rf9P7tq4y;RsCvy$mYVHEKKq+wCV zTu(joH*HbLQvH3^T!)~mz=k&b%^sz-P+F|l_sbxRvfxGT&KrBq^Uo#Hl#WC>2H~@H zs{UlO;HFT%GI1h=%q+B>w3%4D{^Wj3lElM<_0A-_Yk!9`0pGAhAX)sl?HASIlqLRI zjVW!YarMI8%a4y!p7sUWjX4x!I36wVmZl|9)7~^Z(_&&!a`xfR4xUn>`%#;n5VO>n zS)QFqfe_0)4s_)R*rm(7+0VLOe>)|x;nr-jurMxd7wIz7cKnPhKlR_szA@m1Ge0?S zv=D~AT27BS)UCmG4;tqw6g^vEStZutevBuy@rjLTdu8xOwY#X!eJPCpXH@4gcPy>&SbH1}a_oZXbLrN;=zjF6BXGgftsU6FuMC zsZ{cJOGv|fQa|zXKC*sCyQ_9|Xmvbeb6(DUx%BhnK%(mmlhbPMx3#QJiqb8-uA}}` z&9X}^=C5PN$UQYPtKm|65@5^RNQiEwz@iZOU>xqlrCqJXLFSjn)+R`pS@zjaj!W3WxG6I&}P`XpuwjF>N6i$_JzK4Jw;={O;NZKv;1sP^M$-s&Ug z$uEA^HOiDQ7|dFpmcDMU+gTN1oq?>;4u7#*;Y;+4Jn^wzz3n9=Vg&f!Rcm_gxct;9 zD%7)SlRtX_SLii*+evNrpT$ACN7%2U7s`4$%yz_j)I5l61i$;+&p16mnAA)Tp1b1i zarycSlarQz^NhVio_3&vLA?S&{0Na*i{F6`|!*`o+5Mnzh9*53*BC_ zGh!jG?k*pn_!3NZad+t6%UAPXDN$!Z;$Uk=OCaQ_2*dcaL++*UZvz7ZMHuvj<~s9x z#FS!m6%x$X)y+n}?F@X7vmCnSQXANCy9I1SLr-*kJLr-jTW}1gI?B^-NeD7iz&|^3 zn`7=tdEER;NX|!1fs91zte+{KAaGBT&yd6UkG5@R5QV(!)wlIjsOV{b-BLg8844l^ z{uSweH;2~1mUzFWF@WVvorO+OA{fCvb)R*KsY#`KIhZHWw{xes`PK$*#beRBWdiqm zu=L!+k->Z;0S9B-&WuS)RMf0z`Z()szcqQHP|^4T>H`Q%y?rDjonTPXR^9dTO8B7{ z1ryJp)^is9x>N>Mq|kvrSZ_mB6Qe=3xE(W5!#5wyQmh znpdZ~F_cs6@%f5fPD`3BE8zT8#EjHLiLdi_b*Ba23zk0)VABwu3dJJ$Qns*Zg8^7L z@@J&S6S8Tf&(9a8`B1QKDXsv$l81vM)TL{%gxP0HcAIflUp6KxO5XLlCjXFBf4xNC zWG3Cp#SbT-YQ|Nin3@{kmVo;b6iK4%*f3ZZ_*9so|G|U2cd;DT%_Gss58`H7CbGt} z@0LC26&w^J;<0Bi?2i!;y<_>47kb8U)Kb4@3b@INgC*1e>}O?Hm~Nnjr!C6&fd4Z) zrxKJbDx+dtGf4eXpVld$<(M!>_^jO`m-`>sF`)_L?onph9AaN3${~N*X zhklLKz^|uA{a&t8%a$)?i*bOm;>XUgd}BK-rb8woc^s%b_>j6##X_UGIl0O))0BW_ zE+<05?t)Jj`NTk31T^zi0BCy&y3ekg`VeTc3JGZm3JS84$P`X9Y%s7$mrdF}dv*~_ zF2FFwoVzhv3KkfZg%phl&Of>^9fH9asu>18iY1bQwu7o?~ zMxkk;Z{CzU4G@I7FFTi@R!}6PYhEqQ9J969UL7dIr#(w9KT!bwqkKz2oW^W5ls1E$ z*Xc0Rt_!diz~RV@D;4#SAGT2LvnhNPFy(@y@UP1Dg7jioxor`#>H8_SG_X|2xJYbs5>uhM}LbQhMo+Tz;so81ZLppA2 zR`G1oh;^bDIICHLKptY!45&~AOOP7<;J#>pus~PoSZBb-Ef#7G^m5Dy2@)jjap1E% z_B%Nw;6!yz_r@`WeZOfw*ywe61V9Y`KbHi>>IHGb@WV7*QK z!v$Kh{X3rHwa3%KDg!zp=+@nd2M6x+`=0@!o%W$}@305lPA-(itSG!|4U*0Ry?Y?L z{NK)(a!MVf=j(e@q)$#+5o_Bi#2g^@&zGlX+rJF1i7!`u2ZO$eXy6*EyyT5Tyh=^p zNcxmc&&*t~`4Jj|yqbr~DL;|BFAZ}d;u=!F0rau$L^kq~QEMVgE!loJIy^iU?zCEx z=OoGQbgY^sOm0En9mh1meK2xxkhl!GolhxHT%bkrq9L5NHGq)J5`1puj|17B{qHSb z1BS_vDI(y3{rwGEp|-wwC}d@r)LOZgW(I!A~_8(QfmFz0o_Tq?miviaVghkeW2oTLC zSKB{sZXBl`-=xiE47HfpqYa}$9wJyBkgz!d)pG@_t*S04atV4xl<|-i(xWw66910K zDbbrCISYR9Uuq%eQaM2=_iJlugd0S1`Q;Z!(o21ZfTcfw_cIRYZ~wI&|2GSXb1ufX z^cH_PYv7Dl=sHQ{?+IX4+Qe~!`fwUK=vyFe?a2MR(nv7}62_uG$tsop9x^24YAx(o ze_x6xftD@|P;w;onqtvN|2IJqxA$)I1?2m6waiZc20@l#{FE4CrA;!4A92}{w+J&Z$qQ#NFlKmal(kbd>iC_xC8+( zGf@06)}~2iFCGd=hTd}-nrZUn5BuMzBAz85KuyU!TGaor3gNP978*~N8{Z-87nGaIR*t{|x!^Akb8{XPWVrDRQ^DWXU{zsQJ?pKa zqQZ^$Z;U#ENLcUIKT+lTw&#j$2L$H^OY%7A{fmO zJyz*ahzALHkIix=O1On0XY&Ag{S7|E2mFJV^97Zvec<$r$5;e^DY9%i>$UkqFR~*^ z9XfoSag{B z>WSyVetR2VI-$fz20prmD{VrZG}uM3ydi{HKzOtRJG7W`&ksPrN7B6(_pmq1hqdOM zFDNw!Mc*m2Ph5=$C9_YS>FId@U!p;Zw-G4PR?zSv9fSvo9}3L@d0;<14rKu0&mB9d zYqt`v7p2(zEXX)STd>ms6Edo`qvM)9EC0DW0ErTjGAVaV&1;e${qRqO*}q61M({6+@SH z;f6^9I*c|I&yV_^&q!(ZUD+rX;-~Vtqo3rdY#HUFfEnO$$XjG-q{%mYj_UkbXtF%$ zgxkI-8r);9bbzKpmaBOTKpULrpf$28{8bSVMgqWG15@kHrF*a-$={4(6VjhYz;lSk zHIK>Xgd&+=H-jl&teA!QC`oLqd+|3TY+*&P>J_N=>q%EaH0YXvltV9m91_5gkP`wi zL5;U(#iZVbr96(XWc-(}_M1RVqLM_m@SHc2_dtHBEBEL~4@3E8vv zWuRV-*b_4}IJO*JZ%Aa+tHJsyDJqtyOtMNj43`(#G|7#oO$HUo{zCBXU{rp84OY$z zK{YgAPrVpsgz97e6g?*0G(Fd-(!HnJ$HPMJ7)?HY-sI?8f2y+?gJ9UGv2zPsOnm%< z;jW^M+ERV$s!MlkQ{t7ApUYlG(<&$9SR}r3vPY@w5N+qXyvVJTdZe)8HvV>##@K2x54y| z(0>gnI@smXMxeN8J4AB(f&#AGC~_#-6GK)I%+We#?R)ZJZ+u_WmEQMk0#-?*pgtk7 zO+Y~H>fCT!WP}wYqGDi)ql^3vWFjPZ;pNzpdvXvA)vrHaI-N95xUQsxd<&$Mdf>VQ z|JxY9_5+?MmKWtq(Z) zZzxmDqr4Hze{$S<}`vJWJ-#+G!X

6W~$?ZQ>xArA{@_X03>Bt@2%9YvO`ExbEgx-X{1LSYm2 zG@tRu;T4fGB9w!dw(|%cf^aDygb0#<7VkWKL*Rejh5Wx~+M;K=KPtE`4(7^<63GQ! zK=2q9$E$s`zP_QpZqXJMnV-+s5+|H}iBnfq7h^;{pNU73f4$cx>Fw8PgFms^jKu|SR9NzOD&*iZT(3*NB{m`jg183 zw-CG!67Mw5O|87S!hiEL6;FbxU#a~telLBxf7;!!C~m{jZ|gH{8M?U!j~&kiU3!L) zl*>(jeVd_~q5Rm9*yv{Su38MA{QlPB-CcqyDl_CU;{wMyQquQuvv1jWE!wd41G`!2 z;&N@k@t&2>O2r(rRcAuD4BD6de(ICzwXauaOCL5qi)|iTDD>U3#nxWtF|w|_83az>vS0-!Gej7$>quI@~*>GW2dh2Luw<%p7{E+eUUO+yVKr)Ku%l10r1 zCEVvt{~9RjlHqKN;*J1g#vdH+FXk1Rw_GejRW)siXK5rm26rAG9k2)p2z1H_yUzy{ zqv#pXoA1-r;&m}5bxBiON{JFBhr82ZnMdHuJB~wU1L&r#hk5P`y}i{wZX5b&IuoB6 zN{V{F&3UH4+X@@IYttPk8c9+%Bg5%R6oR#VJ6kHR&QS5h@@U!7N|k9tu=?|JbQkUGT&ABz zaO&~Qtu-@v9UpFJV7K#X_gkgr>W;T~u_9=H2wklA*?p<~@-Eqvu_|s3j@FiV(LAkM ze;=%fbm{l+-^IcPrq7)@<96rGl^^4!wgVhRbs`QUV#7sNUXLCBw--1Hmk-uB3@&fC;zWEDdb2{jflT%OUK5G&BPON&Wq`+biDHNppSE+rnmF z&-P(*4a>gzIK+uK#LWjtHGeTd=gob4-zXkn)XF4ih(&9To+IbI~! zZFlt{wzMxxBfjfJfbP%0uN=BL))RhV{AOQcmQDQEo=$ePZ!Yw8EJv_u9Jh519$@R7 zCYnb|?AW|fh?KrN9)Y|fr?df4Z|m#4$-t9w_a8Nzy(*e1a*xHzSafTY+R0@P8Rt3^ z1qXO0TlM=g)iTUm!q>NkOxP;M4QlKLzC`X+X1%_j?E=rarF&5;WB(-3z3J=MxaodJ zmF2G!1!i}H(IR$(?X;s1Pc|64oiDm0#l10C(CFFDL_5n~j$B4t3+<}=(|s7Huuq?E z;2!n!9or1eyc5dYOTW!FQ&9s9frkaZI^u^6Ew)g-x3Ou>er1chHXgcFw$jBkpCXlW zKmE4LqFQ!!8ZOMZ#IE_bpDg+q{G=5^gGE9@qEn{iVvf$uu$A$u_|`emN&kqcy}I3> zXEye{mrI6JXI9mZcc;k(hn28YCq<-F4c8HT`8x{DqfT|)=!5OZu?n~53N?k7zF;@( zflu+MhRy0L4T6-p?euQU+^&3opUwjHry@wCUPDp+=AKqn}aIMeqK2 z&Jee_zXdj{m=?G}^GLYgI;g^PInIB3*y<%ubK3a$*6)FcH`Ic0nEMWGCx=}pF{3N2 zh^=0p%pKm5nVj*p7AMkNK{qFJkQF(M6!SA_H9H(fx=eqKb+qlWJH_a80g&J5Sb@{r zz=QNolCxpj9kM+@X@@BBy_G6#yOdX;g{tQknAar`;j_>hxP*s_RJTZ(9$|?2NS# zy~8i&Df8*Hbl4sEfw=8`_2U;BCUssDK6i=FUa9ZBQ?KwB^LfS>2{Pyr)ob0P)DjJU z2~yWL_I1oTv07_Va_M*b58R`arCku|T2}g)#okx4fX)uWg~Z zCD?ehGbHloG_(qCJYdM9pk2A8kd`E`z-cPM)MP?cp}yPAm^t27J06v-n_IbPHfWoq zdtSQuwXQ<9AGXGd)y#XoU~fVrJ4525Le=K9SFG>goBkapnM6FyfO3~zhTs#5s^nv) z_p*VRyIJY(?Lm^{T)W-lS;B`yhw+nt~xiWQafOOfvxYY zFE5_w+RvtmMTuk8=D!yTxqQ}t@sGOiMeRBa1YHPRpbmVjPVmBNA+j!&@-}MXj@9L6 zlP`ZOjHddJrj6Gch*#^0I*##~9r~MS1xgLv*0}n!u515z-rj1G#i01n=Z8Ac{yohL zx4SN)clB62(ALyB&+et@YzC@!D1K zC6YR9((~TDT>^Xtxf|{wtWQIC7RM@z9%SAM$syJm&vHuXEm;y$oZkQvGvFTioBu%l z(Q1}TG>_%Nl|TydiyKEflktpE`eo_Q*wDEisV^~avj*~G1+C&tb94%-K2EO{bB5TCENFl~+Gq_PsHLeaAv3-H+jeNYEiOMr|nw$Pj5ru^Z? z4AO-Tz#o+Ugm949X3OlM7Q-{En+(rqZX#_pCceMOIoyk;6LDeP-vcD zVIb93zqvTn#YLW`Qly=&+c8{h6QNaPspht}%JuZ($(mQ?QQpV`cAK~Eu(w#xr1|F4 z)8fGFJY^178^zkz$7}+9WxH6kGF8=|o~BIDklAByu$%UiMNMSLhY)wpcElg?5KI@i z&M0r}&o5r0r*|}-tnu4nwQdfjlWgx5-an)kFz0K_w;wC-!CKjO#0jepVNi)V4~pUr z77uVaukNsY{vZ=;HPafIXjtahB#vo%O$C`opO{$Dm}$Q&rklmm@d{uB-O@cv7=;LQ5&ASLTjua@3|I2U%d9||ePRodqF zoO&2VbMtg@)W^3ZK|At|CWjOm1PJ0K=JNB&ueN9n`&&pgxxwCsf6&ilJ~{+RSMBNP z$qbs_lXkq0KZRa(Kd{{e{70sEm@bn~78Xrkg%ah_|80q)Plr4wyK1RUFzv?zYuB%5 zD89eei$O_>2ON5*?!0~Z^8Nh$yciYKQ)Q$sw9OY(aA<)suHj%&{_sxFs`K0GkH(q) z&sv2}lQJy{;zg7EA->7Gsi~>VQc{OZB{Ya;(oKT8bM6%9pM-|m#&I3I4GoQY@q#2f zFwl?=nXdBRE4;*|fA8ztt89sqUfYIv{jag7ZUi15>IMcOau<;Iv?M_-&HMa8wZJ*A zfr+CPo}b&Rk>=uRH-b%#wc{=oOYXup!bP1Xph5!c48vg@>|lBA26J%bMk}nIp_8q9 zk%oo?QWU9sAKV%Kb^uimM<$IH~V15E2A2rN(E3Q?wunf=f|MU_nG5s-ORV;s5cGoOA*9F*7sY+TUEDn9qd6 zX6D3Cd0{_Vs+Osd%mZje>aGQ!h9_>}t^OX!#<^{*xLc+IC z^+=A$&zpM_QTjyp6il_XKRkK+gW*Al&h7cu32cVM9pU^7rdJF*I$3NgG<+UgT9GA`a)G*e#&mytmRXYHf0lm+Uqilr{YqR(3MR$;s6@PfeY;@Om-*Hm zJAvXsRWf(Pi$;Ugfl~*ThKty`J8;%oGonIF0`@HS7P6AfA^YKq^a`lH{MVYOG{0!G zFF?7H5)Y^J?q|m3=;1<(*Exn|>ZdPr-GKKI4x^Ue);0XJDe~Q#r2@w^XN+%I2GeJjv!mOnH8A;4Fd!ho5~PglUmw&OSo7b%t>Gh zCE(9Dq?;t9q@?#=!^4avh3jk(4w)=F;$ma#e0xd|4@*AyIG7JP zKA1d-^4pbh<&BBx*AXN-#)xrw!jL%Aq%Od6Y!ZX2O1B;OVmbPZ z>?+6_;sP!||Nhr$AxjfARliyy?tTrW<4i_x$9fq}1rwb~2T|sqo1UvgJ{gqQTJYe` z!1Sysl%l@?bU`M9U$Lv;K_E!AADNjEjGu*X47s8ZZ6+orh?GB`9(U9S@idS84f{aT^rh zkmCktbv`wugLsh1bC z%_NP$>o!BD8kSfAi*N`iHmx=|MEouf z%6bqolt9(^1>(y^3X1Dni$l@vv4U;$J!u_V5QgJ@0cK`q7C^jQmq&#AD3`)kOnB)5 z!FK#(sX4*r4EMT-m59UzP(ofP8*$$wuyGciJ%}AS&FPd zId1_KccK5@y1AV!gl`IX-R}{!1fDs>8k`Zm))B5CDYhF@2hAoq9Ss~veWc8Z7o<@B z*NTg&-89GUmi%yMJ}xLeYh{U8;Z>M0_^&n)*Z^1s#h3FS0U#E5Riik4VTUBC$al~| zT4MOq(v>2{l#T{W5g`RjWdU9tq@La?-+Gwi@;V>VKB!du}SgAA9n-?mWJ^LQyA*FR)) z>NMsm!F<8PMq;pDj^BL(o*8#{gf>xfyjSx zkh^ayJ3?C1LM6dVh0bIoF^hJd#t7xYz*}a-6C>Jq7x>Iat(^`ijXv zoscL8g}e9zE`sjIA|fKvu>HruOyOg~2Z%i=>krP3C`3Q$X<-1siG&)J@ZT2Xnfj;y zWN3fZbOlurC*sip_jdjDjcH@HEcrOto;2VzG<=yT2<89+S)pJ)cqz2t`Wlc4L@Zc z#3E)rjL|`bzHl0>C5^rH#-vzh_c-rg-bt6Z7_%`?#_ITv)T%( z;G|vuCnnjG!=f?hM5Lyr%|NP}t**!QBl7BwM+k4?ws;=_{P75Ocuvj`1(B#y7jUG1 zmIi+R`&VRtV?Hgc_3xJyxa#2#GlS%I3GW_QLun9$x;k$OE2Mj47V&jK?~B}-3^egv z8M9G8(FM5lnTgb6HY~M&>d$%5_m7NsCTMXeFWPauvT6A8<;$!gr^ut! z;zj;tapaQ~UduZsh2Z7N8}4yJHu$})uuD-F6w)sk@TYbN1hN_~>E*a_0tE+-T;PvM zfRlgd@+b=~J?{Y9b-q62fvY*D zj{loJ7ABrB6++Oy6It)mkd0jgKnZe zA!FF!L^u3#$QnVHaIpWF;8ZKFMF7yRoR6*#!h={j3M#=_naoHJuitU9Gf|T5`*E)d zZwnkT!M`3Dl0(+gNC{_y=XexU!a>Er+v?SfhKR;8RHzn4O0sc%0?iUzogxQ7O99_a z>xI!Wr+){VbJPO21gtu_An!y1c*i=tfB#;<{yX2oK(^k$f9u(kCoxKlz7?)BuZA-p zpqgg0CyK|sT*rkAOBjs30vd1OTOZPC2(MM1#T2`ky*TbN(KJ&e775JmaJ zvE*CO$t4n|M#zFF-}R?ftd9g=26uLnAeVW2_vC){uz%O7+%l=eM180&WossU7tGm1E58~fV>FCWgN5EN9x(K7qt zM~<)qxpzeMkQ$UrYzHpd2d=lUSpfM{8X5Zb{(1%wpV<$tl^9bn@C?|KJii3iVGpw# z!h6HZ!J!PiDxx?K_M{j_FKrGGvp()M85`R~MkDkNT1?XQm*EG}xxl3~L7LU7fJaPv z^6Xih1I?kkAxlB1)pvl1?M`~*ncl_k2*`r78O$x~rIDU1L7Ns+6;rug3tfx@Y>~0ZEvH|?MxNG;B4?BS| zz}C#8SSL|u3qxybln9-wVEXDx8hx;OAw)) z{oDk-6`6yo66yI5WfpjYM}bu$Y0gh7UJpM_OZ>&@lfACMR`3s8D%UJ`{&8vo(oxWd zuaMBJ_J8{Z5}Z2s0i40NajK@9#S~f%oVaGlgEOl@JT0rDo_g3bfd%0t_{2t_+$`_X4G>C54j1Clr7SOiL#Q&ap z`;6NWbb^&8!aVT~s+^U@0o2-!s1Y3?kr^7vGOW7`-)l}&a>Oix1CSK*2Lb+VNv>!_ zTg6KG6spGXF)=QKk2;@$uRg^*+_@B?!^liE_8ds zrI?Yo12M~_RDe0DkN5=;|R69IUKgjiey!6O7>8$WNY#kMvF`Ej!q4LIom@V4N8~X1>&H~Us^zipyCB`T&UZ6mx4@X+V28NGj_V2r zl|mL`tN<-9aQDZl�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[<Список аргументов >]): +[<отступы>"""<Комментарий по назначению функции>"""] +<отступы><Блок инструкций – тело функции> +[<отступы>return <Значение или вычисляемое выражение>] + +# 2.1 Функция без аргументов +```py +ef uspeh(): + """Подтверждение успеха операции""" + print('Выполнено успешно!') + +uspeh() +Выполнено успешно! +dir(uspeh) +['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__'] +type(uspeh) + +help(uspeh) +Help on function uspeh in module __main__: + +uspeh() + Подтверждение успеха операции +``` + +## 2.2 Функция с аргументами +```py +def sravnenie(a,b): + """Сравнение a и b""" + if a>b: + print(a,' больше ',b) + elif a, <, == (числа, строки, списки, кортежи и др.)Сравнение строк происходит по алфавиту, так же значение имеет регистр букв (заглавные меньше строчных), более короткая строка считается меньшей. + + +## 2.3 Пример функции, содержащей return. + +```py +def logistfun(b,a): + """Вычисление логистической функции""" + import math + return a/(1+math.exp(-b)) + + +v,w=1,0.7;z=logistfun(w,v) +z +0.6681877721681662 +``` + +## 2.4 Сложение для разных типов аргументов + +```py +def slozh(a1,a2,a3,a4): + """ Сложение значений четырех аргументов""" + return a1+a2+a3+a4 +slozh(1,2,3,4) +10 +slozh('1','2','3','4') +'1234' +b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1] +q=slozh(b1,b2,b3,b4) +q +[1, 2, -1, -2, 0, 2, -1, -1] +t1 = (1, 2); t2 = (3, 4); t3 = (5,); t4 = (6, 7, 8) +slozh(t1, t2, t3, t4) +(1, 2, 3, 4, 5, 6, 7, 8) +d1 = {'a': 1}; d2 = {'b': 2} +slozh(d1, d2, {}, {}) +TypeError: unsupported operand type(s) for +: 'dict' and 'dict' +s1 = {1, 2}; s2 = {2, 3} +slozh(s1, s2, set(), set()) +TypeError: unsupported operand type(s) for +: 'set' and 'set' +``` +Как видно сложение для множеств и словарей не применимо. ункция slozh работает только для тех типов данных, которые поддерживают оператор +. + +## 2.5 Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y: + +```py +def inerz(x,T,ypred): + """ Модель устройства с памятью: +x- текущее значение вх.сигнала, + T -постоянная времени, + ypred - предыдущее значение выхода устройства""" + y=(x+T*ypred)/(T+1) + return y + +sps=[0]+[1]*100 +spsy=[] #Заготовили список для значений выхода +TT=20 #Постоянная времени +yy=0 #Нулевое начальное условие +for xx in sps: + yy=inerz(xx,TT,yy) + spsy.append(yy) + +import matplotlib.pyplot as plt +plt.plot(sps, 'r-', label='Вход') +[] +plt.plot(spsy, 'b-', label='Выход') +[] +plt.grid(True) +plt.legend() + +plt.show() +``` + +![График](Figure_1.png) + + +# 3. Функции как объекты + +## 3.1 Получение списка атрибутов объекта-функции + +```py +dir(inerz) +['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__'] +inerz.__doc__ +'Модель устройства с памятью:\nx- текущее значение вх.сигнала,\n T -постоянная времени,\n ypred - предыдущее значение выхода устройства' +help(inerz) +Help on function inerz in module __main__: + +inerz(x, T, ypred) + Модель устройства с памятью: + x- текущее значение вх.сигнала, + T -постоянная времени, + ypred - предыдущее значение выхода устройства +``` +Атрибут __doc__ содержит значение docstring, если при инициализации функции он был задан. Если не был, то inerz.__doc__ будет иметь значение None. + +## 3.2 Сохранение ссылки на объект-функции в другой переменной + +```py +fnkt=sravnenie +v=16 +fnkt(v,23) +16 меньше 23 +``` + +Функции можно передавать в переменные, как и любые другие объекты. После этого переменная fnkt ссылается на ту же самую функцию, что и sravnenie. + +## 3.3 Возможность альтернативного определения функции в программе + +```py +typ_fun=8 +if typ_fun==1: + def func(): + print('Функция 1') +else: + def func(): + print('Функция 2') + +func() +Функция 2 +``` + +Программа выводит сообщение "Функция 2", потому что переменная typ_fun не равна 1, и +выполняется блок else, в котором функция func определена как выводящая "Функция 2". + +# 4. Аргументы функции + +## 4.1 Возможность использования функции в качестве аргумента другой функции + +```py +def fun_arg(fff,a,b,c): + """fff-имя функции, используемой + в качестве аргумента функции fun_arg""" + return a+fff(c,b) + +zz=fun_arg(logistfun,-3,1,0.7) +zz +-2.3318122278318336 +``` + +Python передаёт ссылку на объект функции logistfun в переменную fff. + +## 4.2 Обязательные и необязательные аргументы + +```py +def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1 + """Вычисление логистической функции""" + import math + return b/(1+math.exp(-a)) + +logistfun(0.7) #Вычисление со значением b по умолчанию +0.6681877721681662 +logistfun(0.7,2) #Вычисление с заданным значением b +1.3363755443363323 +``` + +## 4.3 Возможность обращения к функции с произвольным (непозиционным) расположением аргументов. +При этом надо в обращении к функции указывать имена аргументов. + +```py +logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами +0.34498724056380625 +``` + +## 4.4 Пример со значениями аргументов функции, содержащимися в списке или кортеже + +```py +b1234=[b1,b2,b3,b4] # Список списков из п.2.4 +qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку +qq +[1, 2, -1, -2, 0, 2, -1, -1] +``` +Количество элементов в списке должно совпадать с количеством параметров функции. Оператор * выполняет распаковку списка в аргументы функции. + +## 4.5 Пример со значениями аргументов функции, содержащимися в словаре + +```py +dic4={"a1":1,"a2":2,"a3":3,"a4":4} +qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки +qqq +10 +slozh(*dic4) +'a1a2a3a4' +``` +Для ** распаковки имена ключей должны точно совпадать с именами параметров функции + +## 4.6 Смешанные ссылки + +```py +e1=(-1,6);dd2={'a3':3,'a4':9} +qqqq=slozh(*e1,**dd2) +qqqq +17 +``` + +## 4.7 Переменное число аргументов у функции + +```py +def func4(*kort7): + """Произвольное число аргументов в составе кортежа""" + smm=0 + for elt in kort7: + smm+=elt + return smm + +func4(-1,2) #Обращение к функции с 2 аргументами +1 +func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами +10 +``` +Функция принимает любое количество аргументов + +## 4.8 Комбинация аргументов + +```py +def func4(a,b=7,*kort7): #Аргументы: a-позиционный, b- по умолчанию + кортеж + """Кортеж - сборка аргументов - должен быть последним!""" + smm=0 + for elt in kort7: + smm+=elt + return a*smm+b + +func4(-1,2,0,3,6) +-7 +``` +a = -1 (первый позиционный) +b = 2 (второй позиционный, переопределил значение по умолчанию 7) +*kort7 = (0, 3, 6) (все остальные аргументы в кортеж) +Если мы не хотим передавать b, придется переопределить функцию так, чтобы именованный параметр b был в конце, а позиционный кортеж - перед ним. + +Подобным же образом в списке аргументов функции также можно использовать словарь. + +```py +def func5(a, b=7, *args, **kwargs): + """a-позиционный, b-по умолчанию, *args-кортеж, **kwargs-словарь""" + print("a=" + str(a) + ", b=" + str(b)) + print("args=" + str(args)) + print("kwargs=" + str(kwargs)) + + total = a + b + sum(args) + for value in kwargs.values(): + total += value + return total + +result = func5(1, 2, 3, 4, x=5, y=6) +a=1, b=2 +args=(3, 4) +kwargs={'x': 5, 'y': 6} +result +21 +``` +*args и **kwargs - способы передать не уточненное заранее число элементов: +*args — переменное количество позиционных аргументов. Переданные с одной звездочкой аргументы собираются в кортеж. +**kwargs — переменное количество именованных аргументов. Все переданные аргументы, которые указываются по имени, собираются в словарь. +*args всегда должно идти перед **kwargs. + +## 4.9 Изменение значений объектов, используемых в качестве аргументов функции. +Такое изменение возможно только у объектов изменяемого типа + +```py +a=90 # Числовой объект – не изменяемый тип +def func3(b): + b=5*b+67 + +func3(a) +a +90 +``` +Локальная b меняется, но внешняя a нет + +Пример со списком: + +```py +sps1=[1,2,3,4] #Список – изменяемый тип объекта +def func2(sps): + sps[1]=99 + +func2(sps1) +sps1 +[1, 99, 3, 4] +``` +Изменяемые типы (списки, словари, множества) передаются по ссылке + +Пример с кортежем: + +```py +kort=(1,2,3,4) #Кортеж – неизменяемый тип объекта +func2(kort) +Traceback (most recent call last): + File "", line 1, in + func2(kort) + File "", line 2, in func2 + sps[1]=99 +TypeError: 'tuple' object does not support item assignment +``` + +Кортеж - неизменяемый тип данных, так что переназначение в таком виде не работает. + +# 5. Специальные типы пользовательских функций + +## 5.1 Анонимные функции + +Анонимные функции или по-другому их называют лямбда-функциями – это функции без имени, определяемые по следующей схеме: +lambda [<Аргумент1>[,<Аргумент2>,…]]:<Возвращаемое значение или выражение> +Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту. + +```py +mport math +anfun1=lambda: 1.5+math.log10(17.23) #Анонимная функция без аргументов +anfun1() # Обращение к объекту-функции +2.7362852774480286 +anfun2=lambda a,b : a+math.log10(b) #Анонимная функция с 2 аргументами +anfun2(17,234) +19.369215857410143 +anfun3=lambda a,b=234: a+math.log10(b) #Функция с необязательным вторым аргументом +anfun3(100) +102.36921585741014 +``` +Вызов лямбда-функции создает объект класса "функция". Внутри лямбда-функции не могут использоваться многострочные выражения, нельзя использовать if-else. + +## 5.2 Функции-генераторы + +Это – такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений. Для этого в функцию включают инструкцию yield приостанавливающую её выполнение и возвращающую очередное значение. +Данный оператор в отличие от return не останавливает полностью выполнение программы. Когда выполнение функции возобновляется после yield, оно продолжается с того места, где было +приостановлено, до следующего оператора yield (или до конца функции). + +```py +def func5(diap,shag): + """ Итератор, возвращающий значения + из диапазона от 1 до diap с шагом shag""" + for j in range(1,diap+1,shag): + yield j + +for mm in func5(7,3): + print(mm) + +1 +4 +7 +alp=func5(7,3) +print(alp.__next__()) +1 +print(alp.__next__()) +4 +print(alp.__next__()) +7 +print(alp.__next__()) +Traceback (most recent call last): + File "", line 1, in + print(alp.__next__()) +StopIteration +``` + +Здесь при каждом обращении к функции будет генерироваться только одно очередное значение. +При программировании задач у таких функций часто используют метод __next__, активирующий очередную итерацию выполнения функции. +__next__ помогает вывести значение, которое yield передает на каждой итерации цикла. Если функция отработала последнюю итерацию, но мы попытаемся сделать вызов, вернется ошибка. +В отличии от функций, которые возвращают список со значениями итераций, функции - генераторы генерируют значения по одному, не храня всё в памяти; а функция, возвращающая список создаёт весь список в памяти. Также генератор можно использовать только один раз - после прохождения всех значений он "опустошается" и больше не производит элементов. + +# 6. Локализация объектов в функциях + +По отношению к функции все объекты подразделяются на локальные и глобальные. Локальными являются объекты, которые создаются в функциях присваиванием им некоторых значений. Глобальные – это те объекты, значения которых заданы вне функции. +Локализация может быть переопределена путем прямого объявления объектов как глобальных с помощью дескриптора global. + +## 6.1 Примеры на локализацию объектов + +Пример 1. Одноименные локальный и глобальный объекты: + +```py +glb=10 +def func7(arg): + loc1=15 + glb=8 + return loc1*arg + +res=func7(glb) +res +150 +glb +10 +``` +Если внутри функции есть присваивание glb = ..., то создается локальная переменная, даже если есть глобальная с таким же именем. +Для изменения глобальной переменной нужно использовать global glb + +Пример 2. Ошибка в использовании локального объекта. + +```py +def func8(arg): + loc1=15 + print(glb) + glb=8 + return loc1*arg + +res=func8(glb) +Traceback (most recent call last): + File "", line 1, in + res=func8(glb) + File "", line 3, in func8 + print(glb) +UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value +``` +Нельзя обращаться к переменной до ее присваивания, если она считается локальной в функции. + +Пример 3. Переопределение локализации объекта. + +```py +glb=11 +def func7(arg): + loc1=15 + global glb + print(glb) + glb=8 + return loc1*arg + +res=func7(glb) +11 +``` + +Здесь мы явно указали, что в функции используем глобальную переменную, поэтому она изменилась. + +## 6.2 Выявление локализации объекта с помощью функций locals() и globals() из builtins + +Эти функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций. + +```py +globals().keys() #Перечень глобальных объектов +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'result', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +locals().keys() #Перечень локальных объектов +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'result', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +``` +Различий нет, потому что команды выполнены в глобальной области видимости, где globals() и locals() ссылаются на один и тот же словарь. Различия появляются только при вызове locals() внутри функций или методов. + +```py +def func8(arg): + loc1=15 + glb=8 + print(globals().keys()) #Перечень глобальных объектов «изнутри» функции + print(locals().keys()) #Перечень локальных объектов «изнутри» функции + return loc1*arg + +hh=func8(glb) +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'result', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +dict_keys(['arg', 'loc1', 'glb']) +'glb' in globals().keys() +True +``` +locals() внутри функции показывает только её внутренние переменные, а globals() показывает все объекты модуля. + +## 6.3 Локализация объектов при использовании вложенных функций + +```py +def func9(arg2,arg3): + def func9_1(arg1): + loc1=15 + glb1=8 + print('glob_func9_1:',globals().keys()) + print('locl_func9_1:',locals().keys()) + return loc1*arg1 + loc1=5 + glb=func9_1(loc1) + print('loc_func9:',locals().keys()) + print('glob_func9:',globals().keys()) + return arg2+arg3*glb + +kk=func9(10,1) +glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'result', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) +locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1']) +loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb']) +glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'result', 'a', 'func3', 'sps1', 'func2', 'kort', 'math', 'anfun1', 'anfun2', 'anfun3', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) +``` +аждая функция имеет свою локальную область видимости, причем вложенные функции не видят локальные переменные внешних функций +## 6.4 Моделирование системы + +Моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала. +Реальный двигатель: последовательное соединение усилителя с коэффициентом усиления k1,интегратора: y(t)=x(t)+y(t-1), и инерционного звена: y(t)=(x(t)+T*y(t-1)) / (T+1) с постоянной времени Т. +Тахогенератор: последовательное соединение усилителя с коэффициентом усиления k2 и интегратора: y(t)=x(t)+y(t-1). +Нелинейное звено типа «зона нечувствительности»: y=0 при -xm≤ x ≤xm, y=x-xm при x>xm, y=x+xm при x<-xm. +Таким образом, система характеризуется параметрами: k1, T, k2, xm. Входной сигнал характеризуется параметрами: A (амплитуда синусоиды) и F (период синусоиды). +Еще один параметр задачи : N – время (число тактов) подачи сигнала. + +```py +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1,T,k2,Xm,A,F,N=2,5,0.5,0.3,1,10,50 +k1=float(znach[0]) +k1 +2.0 +T=float(znach[1]) +k2=float(znach[2]) +Xm=float(znach[3]) +A=float(znach[4]) +F=float(znach[5]) +N=int(znach[6]) +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) + +import matplotlib.pyplot as plt +plt.figure(figsize=(10, 4)) +

+plt.plot(vhod, 'b-', marker='o', markersize=3, label='Входной сигнал') +[] +plt.grid(True) +plt.legend() + +plt.show() +``` +![График2](Figure_2.png) + +Создание функций реализующие компоненты системы + +```py +def realdvig(xtt,kk1,TT,yti1,ytin1): + #Модель реального двигателя + yp=kk1*xtt #усилитель + yti1=yp+yti1 #Интегратор + ytin1=(yti1+TT*ytin1)/(TT+1) + return [yti1,ytin1] + +def tahogen(xtt,kk2,yti2): + #Модель тахогенератора + yp=kk2*xtt #усилитель + yti2=yp+yti2 #интегратор + return yti2 + +def nechus(xtt,gran): + if xtt(-gran): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt +``` +Реализуем соединение компонент в соответствии с заданием + +```py +yi1=0;yin1=0;yi2=0 +vyhod=[] +for xt in vhod: + xt1=xt-yi2 #отрицательная обратная связь + [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1) + yi2=tahogen(yin1,k2,yi2) + yt=nechus(yin1,Xm) + vyhod.append(yt) + +print('y=',vyhod) +y= [0, 0, 0.3435662011497584, 0.8937007565838242, 1.2092087410156356, 0.8817313753454714, 0, -1.9132355035817665, -4.418649831257506, -6.322056754188363, -6.424186296702933, -3.708625221989286, 1.5442059920803182, 9.704061323599833, 17.99800277772674, 23.15808712030786, 21.60101426578536, 10.675050948044715, -9.28749624705183, -36.1615235441021, -62.02226858466596, -76.45563856328266, -68.45249914172874, -30.293518696411148, 37.373158630110446, 124.2547951685195, 205.6938367713173, 248.14398604455204, 216.69606070239215, 87.62148681833895, -136.666280236251, -418.37473314281556, -677.5335449808889, -804.9287317650713, -688.4371994648337, -254.1131297675378, 486.67764763779877, 1402.6733164388684, 2230.344175329904, 2612.7580871622617, 2188.8107903361088, 728.2399496559426, -1716.8860787572244, -4697.377083821688, -7340.680479213284, -8479.693381759376, -6951.99457172508, -2043.4413296742846, 6022.5141606693105, 15717.056921566687] +``` + # 7. Завершение сеанса работы с IDLE \ No newline at end of file diff --git a/TEMA7/task.md b/TEMA7/task.md new file mode 100644 index 0000000..90d017f --- /dev/null +++ b/TEMA7/task.md @@ -0,0 +1,83 @@ +# Общее контрольное задание по теме 7 + +Сарайкина Вера, А-02-23 + +# Задание: + +1. Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т. + +2. Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения. + +3. Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X. + +# Решение + +## 1. + +```py +>>> def delay_signal (signal, T): +... """"Расчёт выхода y(t) для устройства задержки""" +... output=[] +... for i in range(len(signal)): + if i < T: + output.append(0) + else: + output.append(signal[i-T]) + return output + +>>> x=[1,0.5,3.6,4.5,1,2,0.5] # Входной сигнал +>>> y= delay_signal (x, 2) +>>> y +[0, 0, 1, 0.5, 3.6, 4.5, 1] +``` + +## 2. +```py +>>> import random +>>> import matplotlib.pyplot as plt +>>> def histogram (sample, number): +... min_1=min(sample) +... max_1=max(sample) +... bins=(max_1-min_1)/number # Ширина одного интервала +... rows = [0]*number # Создание списка для подсчёта элементов в каждом интервале +... intervals = [] # Список для хранения границ интервалов +... for i in range(number): +... lower = min_1 + i * bins +... upper = min_1 + (i+1) * bins +... intervals.append((lower, upper)) +... +... for x in sample: +... i = int((x-min_1)/bins) # Вычисление номера интервала для текущего элемента +... if i == number: +... i=number-1 +... rows [i] +=1 +... print("Границы интервала | Число элементов") +... for i in range(number): +... lower, upper = intervals[i] +... print(lower, "-", upper, " |", rows[i]) +... plt.hist(sample, number) +... plt.xlabel('Значения выборки') +... plt.ylabel('Число элементов') +... plt.title('Гистограмма выборки') +... plt.show() +... return rows +... +>>> data = [random.gauss(1, 20) for _ in range(10)] +>>> histogram (data, 3) +Границы интервала | Число элементов +-23.534334630492655 - -11.561019750784087 | 3 +-11.561019750784087 - 0.4122951289244803 | 2 +0.4122951289244803 - 12.385610008633048 | 5 +[3, 2, 5] +``` +![График](Figure_3.png) + +## 3. +```py +>>> linear_regression = lambda b1, b2, x: b1+b2 * x +>>> result = linear_regression (2,3,5) +>>> result +17 +``` + +