From 73c4d7b422acb96c3463b5f1d736e7a82184ea66 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 01:20:09 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 01:20:09. --- .../20260501/20260501012002-Binary.backup | Bin 0 -> 352467 bytes .../20260501/20260501012002-Config.rsc | 5546 +++++++++++++++++ .../20260501/20260501012002-Diff-Config.rsc | 11 + 3 files changed, 5557 insertions(+) create mode 100644 MikroMaster/20260501/20260501012002-Binary.backup create mode 100644 MikroMaster/20260501/20260501012002-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501012002-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501012002-Binary.backup b/MikroMaster/20260501/20260501012002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..58a6242f29494f5c2815c85350ce69b4f1bc9a45 GIT binary patch literal 352467 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%0Da#%eo6L#8da~RuP6{6M{ zFi=FRPRS(|2Ey!#88TTK$!%E2*0Lld9++fY*59}XW?7gl`W*JxM?%cW)FwY~gY&_+*Adx^i`|ki0dN=>`6#X~7 z_%%BaUHoW3>>1pPjL5U+3Zq%JZ@S}J20thE5Vudv>s63^lbIemV4SVA4(TuAPLZF^K#M5B7MwOitHAE%kHx+?CGKvk z$S{D5kc)$+aXev~rSBUE1^=JTMaDX%*2qLeL|cBMnH~F3lceB0lXJ@x5xT#!5e9K9 zn7mz^FY8LRQ7BOxopdyu(7(vk;3vWJAt#5{OdLkgC>$j577-)MJBbL7sV>+nv@&|i zIt^nVeIRUIgtry?nwjh)5 zh!pRdFA4Z3q>=GeOm2a43J~>um-%X!Y_@#KhSWa|ZSQ;5nk+kh@G<%(0w zO-&%7hD-JB`*moHiU|mrcT5z(^5pbb$3MZjW6lrlY!MRz1;$mD=T-C9C|q}bD8n*m zllV^3amW_^k_Y9%+03?!g$=xq6vky>Q2N9SE#A}zB{n-`vtvtPFoDELn6()Z-VA$G zhsSvNR?%H=XS-c$`cE1i01 z**z1ZBji-<5lx@oV4inejwsMo&JMq(C+WE>lI@nuBx7Aduhk(_1mTgf^g{MPtr2nc zP>LW78Ik%^Q4&i(&y?JWF54$|fOvkSA!D|mtB40&tu@0@7umE(4VNPu1R#k!zsRUJ2JuLRq;_iGE?u`eW0 zNUbZtHpo@5er5H&Gz0xIiH*hFdXntd?uDnN$Q&g`r^T$r8E-%tBEk3KT4qArQpV2D zDUWU&KD|ygZTgW^f>Gs>jwI+A7596me~32rBh#81w2zdN=& z`jZ0&irF|%3@1I>X zEpj%+Y#gDzp>XBke11pgR$Qe0*(ymUNzzBtU_86Oa@?P=XnWF zzYV;p5GU(uojnFhWaYEIPyG=L9yn(oe@e!5&adq^vrIQs`9`|W#+^P49#3Rv21@@v zs2{FCggQ#D_hZISCUYx6n6|M$__3%dD^_$ZfJ`U4P3>cD3nkci`-0m|BO#|x*L1E` z6S3Dse+7leV7^8nj>qcZoCVLwV2)NM_{w;8xH?cUhQQnlP1+5mL|=+HwPK=zOMV*Q z#Qgpr%+*vm@rHR`2dPP{$`(?N!W=v4!qfQ+X$<*zL`7;q!M10pf5JJG;r114_RLtl zA)~s)F@S6o$iFAqQ{`sTB#S=6Exu?k8%h%{A2{O9Y$3RW3af(6P+4K%0=$6~CCd+0 zAj7K&h4o3-^Hfcedegw9KQX*hy*%P6vbp4m!ImiC|?zlh-~R-tcc>Z&B>nb>xG+9LFWhf z{Tie@km()Jb(03NRs?0W8v1wWra|FsxS8WYH1M#pXfF9hhsBUxQ=X3=n3kL)hmVB)`7E7ad$} z6$={mOB)G7HzbrI2&M?M-b6$$CFw1@r@O*gZ2zh&TmhFe)NXPtDIk|u(dR+lMt^{? zt1g=`H{?}9?YOZ?okD`3yZ~XfgSxJi+Dm6P4JPyGLAO)q8HM_IB1fCnMBgR(C*1>M zS#-d8sowgsF{l9xEje=)zTLbPQP{pm6{ny2v3%SWDz!`4RY0Cj$qK3j2$;|vi{V;d_~K!B z>A=?puS0?fry$beDp(vl;h+D~3bG4Bc;M8ISnqj@bcCC_qG~Qb&Qt%$g7QVs4plH9bmI&eAk)po3EC zipGNsNb@z1#Z;FNw zU?oKy@~zhy*vV7mABLkH`&Lg8beDXTq1Jt#QC6dTTcll#i{fAv&y2SEm0eYsy433T z)q)=(RSv|ms9h4%BXB}@l<$NJW>GiUQnb1OywcpSg5KtpPcuQG0S?TWw(Wog!)Zr- zfp*5k*0!cMgFRX86Oj`HS;Y?;W^4&|V@1`)HfA<2?$f4ytN(b>C(*NOp`}wrbOD_a zw32qryp%>alc|i`k{0_;?@pY-Vboa0PHj3T#guiRuhH8-%y7+H9Gb)v_=<0*1`$U0 z*u45M01#l1gKcf$Zs0Voke@;f0-7i{_qF@&e)Ve#{`OMJ=IsHWu6I?idR`HmH$g|U z2GKMn!`(Nn4TaHyjkzL;WzFE1gJICFn=N){CL6Gp8z=2waAPeo(Vf$X7J7!LM}Ue} zzv5iakIn(JB4OH_qdnw*h*&-tcVo@*bSz?(U4fs#f-VB>bHwL5v-S z>=(;RTUxk<=87B|u7LS*g@kG;swR`2co}YbGypxii?B-(*AFz?H`E)2pn10?C~+Er zzCCfc!7RVDgA3wCpZYpgj(3hBB19$spn)EDe7M+Pm?z-9zI#b-wi+ED*9<|5W5jT5SgL@c6KUmfs zIS$({WHfs0gsf?0hs+3X)x?C%M;hO6 ztA}tde(mA^iIa&Rz3CY*(fO69Rf6jextprrW=$(gvt-QXBF=F9T(t(4 z6nY_grI{7l*Y_xF?Gkth#P194U0CN1U&7D}&!@HUxTevk%}snDI<}@8HLr1!n6St3 zbLyZ$?XlBsgn@Y$h6dw6Ha}=f4jfJMv<%qaTvNJ1&9dfx#cl9$#LxU;*} z6*yNDVqFMUQ_w#Z+k9dpmolOJ!2nD9lxcCHgQvWDs*0-Cnq8&~h*h4jh#h|rMq zcjzno_9oQ1_z5d5%=-`vwF1sdwr(vFR^q1ytF7PN*GAs}MOaI?e<^;D7EsV1Clj2I z;HG)DXAZ3#M=0YhY|>L9&mTu3mB+xuexo=?ahI0j3kRZbsdcag@K^QXx8y?= z(<2UWSEa<0!fKkHnS=}8=q`dD1-kCsF(vaPezv7BsrDm4A#Cnw*y0lAQJRQK$I=;k z8x9Ih@2u)CO>r_-IC#)3qGUNr>)r^HgJ6}Rl~z45DvPiA!~L>+R@_>*W&mZB-SFYC z?x#T;bOW;^Wwm;GdX=_s4zhCTg^GhMyWimw(#{#M?w_^`e5uawxI&b)A5o}h%G7+w z;K;}=O8-k8zWD?7mE(4iF|9n>AZVo(U|L8#kkMvo2dK^~Lu?C2q1c}fBv*UppsoB- z9`e+QIN&+Bvyi{m`xHY=B=qo_@@V1+2i1}U=|rP)$!%Gr*FF_!d{lmf(Zx`x-QDud zSiNPsy%M62s^E~TC{gH}q*D?91S1tho{>Cd{_sUxG$m?`{#nD`ya*9D-!`PN*|Xn& zeEM>@S#3erx|Nebu80PS+?&#A9|7+jph!$~qb;88)j}+({lOfJF3-z`UdZHS;4T?N z4Cv?q{?oM(Q-$^Y$(3~~tPT>AiE^pyOs*Al?KUwckLfN6Xi0(Hv`iYRiajukzs_J&$gd@}9)m zGZyH)i@S+L>JV=^W(=|KYRpNCVlc%X%8~ND8U{$@8j*$dmhVzcA)C%(O}tE(PQ?P_ zJGE*8JWF>fO8gR4;EWV<-$ET^gV0;Wo?Nn_FQv?AKv!r&dupF@=>Hx%P^cqI=qS^u zO$C(P`OU|!?~IyUXnIrT{_Al5ZdD!)zkxW6qor}?6A&irc)=hFCW&4CH(&vhYoq=9 z`WYweX~XLo8DDwI?dNKDkorUB%+{1HpcOSpk0v84MRLNEr4?f*GM(|E%zzPtB}|0D zaw`#u`aqEKajK)d9;FH=P04X(Hhb8_fndOg8q!sTpU+>sRqsPJH1c{SE!k|X%$I(x z&DiqeReYo}@<;>q@jOTZEc4Ohaj70yg3f}POgoSe*UD5;R;>X-ErtO8OgS+5aYCFv zvUHkaPNKuoLpX&Ma*xi__$FD`GbXC8lEZ?smbeogr1w07b3Rf-7+@=DXZZB`J92EB zFP9{4qVX9YFvbe{uq}>w{PljucEKveSK_==-+E=K89K!14|{GJlY_;E^Ip9TfRF>t z!d%Wi*|H<(jn1^4tlI8{f;>G{0J+u~B4oWVY@93Xkf9LH&5z-~`WiWn3rQYjxi()1 zz&($U_|q0%%0STV-BAMC)!RMChWNkwEGcYS@~0n2DX46Lo+|h0ZO5^s;?6bO4ssbA zfbRu#I=!QNP~cqB?|M9vUjRQ$XnT(BiLHXU;HF|C-ed31yJnVqcvCj(f2nyQ2rqpC zinuov{l6P4?~Hm^tg~=-RxEu4j=VS1V9J((rl%St6j_Su#(l2qKZh$0=8{tEFUlV6 zKM+YXdDnh~A>&qjkO6q;!n$`&?QCWEVRxb;^|gk+GIf5(Hi~3WqmVzhzNLaD#;{JZN)dQZcM-TDfbddH)l4f1$H0{xe(*j zxd4M5C2R6;&IOVR7)nE`f1+8NNc+oxJb?O+6nPM@RrKaGA2#Pl3n*y@H0>3BRq4NN zcr;`hWb=9=>gFI@<$PI|)e4*K#p|NSWRRdL_%6hFsAV?4%J8CLE38Y{tX`pS);?($ zx(h3}%+4)CmGR=FhSXq98AoF0Mnm0p3)LS~4*K!YC_XVn8+2>(2ndIl0Vh`S!)G6J z_uRr6(V`1svW);u(wC&HD&A|6l*QDXaGRI0Jyrda?*sNCQmFrUVYrEl8ng)<*3u>h zyi|nCeM|-3)+v|erbzM30g)V~`hnw_0pnl_4FvuwC8&ju!k-?fsl`17@bJtIRcQ>h z=%Fvi;>c#-htDC!ES8?~?(=+kPBV#Rty(J?A$p+4xH;UYO)gCU(qoyln`YIm8R23m zWNiS`=?L;ceao^-jEy{nkt=a<9j{&^O*1RDQ=2_%Cn)i$$eWlDvY>NXOw{#|}Uawi_k{ zMR@Dyk-d+^`CEMl=U7?QHmERU{uOOU3vW4@8=-Z$LBhtGWZSM|fK9xjR5esf(j)G# zFTEe5dsX;^^q*NnY-M-`Pm)IV;J_CC;_X2Z_Zdc8i6^+<@(-vIk0~if=oWyrCYmzb zNL(->SI7i}V0!aP^i##^eftmx9*sgm$dWGlG8#n=vAqbKO!PQZQ|A=V3BAhIljLzf z6hbovkRmK8fPtIM@l~Vav%h5z{r^>yiqBGUkb+Sp;SJ5CtOK3IlEddy8F81mHA5BV;OcY5LkF>Nb$OPtI)e$6*8jv1ykhB? zsr$s%!YYtH#LUu2b^|5oMJ+E6fA8tCJ6O?-h#1XzN+Q8?P9JM1K z6e1y!NSZ7X9VHUX@Y7gW^xwudN@p(taUx{#h7wF*t*{gsmgK~00Bii>F7R`9D#C|? z%km_FT6|n60~*ab81Dh)W(&01S(lwLSE~UfOaWOX4ckoW*`L_M88Khne!9&{;P{C* zv&1=SK46_xq1tRL;Oe3oNkPeJ^X-gzQDFH=TYM;lk_g?UHy++mA@Zz>a2hO|fXO>S zBdQtI=(MTTz zEUuFIv(f%soMF)5mGAnHe6lBqkQ4RUAU#Pge1J%oO-GFRRS37M+?8+N`3MLVBk`Js zf{HaeuqFOZrDv;6RZyRoCP4ue4At`k|BJz=Z4*ULuj{wYvm-}Pt}>S)=@3Pve806~T6Vv_u02|VbLq-Y zbZ$!ySO~GT$LI&h?6w1D&q(Js6@C6o>m3i;?#-|+rtFjc?Ebx~q;lz((vA7|8m_Pt zanza)RXoZg%`IX=0s-_~@EuUGjcl+8)1%Gm44n_8!25fx+zpmFT&B09l`>geX_ynE zcXg*BkEWq%*l0b7tM;atlOJ`7?w(5R;WM2TYj3>~Fq-S=>ow84(7uj^P%#QQOfU>X z5=IU$@jVzc6~JlVKowIoSgf~Gxcvs;0(%M1S+nVM4oEZjFGckd`8hrES=h)Iouf-C7=2u^#IH8z6I@$WiV^p|n;lR1+ z-X=j)qw3S0o+mB+$3z(`wO}*@M`=O>^5}m?mtb!W(jUs+74Y-Y&V_3SPnt(;Gid)^ zsE5;ZI0c{-`fIT3uIR#vJ;#S&fBd zj*)x9>O3WF$SD%(i&cYzN@96S!#=Q2<_$eCPcGZVx-P5oD76%8*Yt3h5}3a-xPXmd zJOczR*2EPz!LV&)$PLAw1%;369OsTepu!QzbEUO-?R&ANdQnIwtoiV;#TN40+VbjT zjRy;-1@JYeC{K&TI0p8gxNa};ut3Nz63jr(+RC&wU39^@3&>Mpib3lvD$VRNRNPr_ zBoBlkTjIDIY=+}~F!c%}5bF}Zq!J)GZuopItaz~7Shh> zv4Aj%4TiTU)IVd%D&JIJi(5=o{a+Ei->Cy+V|V|6jP8%YVj}$j;mGg%+ZxqO){?_Y6klf$5j>?M5TP?H6nCegW$(Qko?>|&LH%NH` z(7uZCnUU9%_*t^lSCQSYxp18Mh$yIfi53bXaqnl+jElhtFBCQtMBMa<_mhI>l1)Gq zrTA2tZlW|t9u>vSI-}$HPOMqFy9XtUSOyc3d;a&FwN*`Kw*A_uS?Km@ zf?0Zrv}wjsDV%f=9VC6+PLeFuQUh@AE)B`VKALC z7;?_bdRq~|467$~*()Kp96Zz-tyy(J$oU2RFLO9Di-5tbcXz0~;!ue%@NHb|0dnQ3 z=<6jta`>IsFR$u&-{P$$vsxrnu6rmmR#)?*ZllG}Ro}Bme{?A64EVVMkM{+*cN(g; zOjc0+S&sF#^4%B&|F)4=jFfT`on}Ub6zxMI>19b5P5jL_Q%ez(sgBRGUdp4ZYsE99 z;zk@VJH{;R*eapt`sX?UT-Hp4bA`Z4@6<(lM{TzU(fi>Km)_-Xpx*sqEF>J?C&pBp z`tdgIam!0eyr3Dkk3&!eO0?pgU=`M4TlmW}#<}7!=N$K<^c02tJ}yS1cl@rfEoj8a zMvbS;Aoh3`^Q$}#$o-1-_**mZTpod|TRtySas&CHO1(p7)M0giDLxN>Q4vST%<*@zQTrB7xODe25*(T05259fXcwW5Za@z_@U znt6~=+~C?nXW+9-7ngLd>}(X^1LQ&2&DT~SGpm@4RhR(3ys*qJ(h5Ws>M3)%xc(+M z&P&WL5IwMB%-A-eu^EOen?*?!2Vd7CCk3j3;J_AO{uN_#sF#4?RVf44AdJRORTZl> ztJLf-tEc&f3L>wTHr;-Rfr^e1JO*#s9R9Oib`ofhS%BQnJ1TL<4j29yO}7$8JKQg> z{>H1{t2gLotNjKHZCGHz>AB#(9+6O8i1w+irr%S&&9&dHVk;~^=+b&y))Fq3jn=Tc zrcqA70}@j8)-89VIvGY>j6`FQ`|Mib-$x=JE|apj za3K3O>yv{R+}N542#V6*5$XnD{rV|yCqkp<1eL?F$LTtS)f2~k6l2IcxocGIg6Q4B z9qVR^-@W~YcA3;24{G~M=kxU6g$q&Q`u`)qQS#m@^tDH6)yh9ZaWr3b$uDwuQ3ZRO zzDyPn2LQeWwi{BsmIC7})JTGiRW|BJfd6%FQ=F=4ZKIA#Acw0Axh6=TsM6ms=P)e3 zLY*gw&tZw3%lZ4cShOyHtAneYU##d(cxw zX-d$0B$uT@Fu;Ga7nqJk~I;*1bVigTEURHauimj+7x-$HypaU z{T`^^ggbyT$J$Tb38d3fNyber+r)^w_qiV;4a)^_;x6z`+P=;6Ip-9M99e%5uId2( zA&<Je^81rjll0^O@uxSF=7XFWVX!14>i#hE3ALA5*^jy`^XzU1|rY=7p&v->^CSo z9BijOj;02e<@j)<+ZXOe0~s&J(B5k0!Yh$93C-hjM*xk@K~nMwZwO~8UW?-L=Na~i zS%6|=t5?s<8Qc-byy63YK1zO(YLYxaCcH<4?}LAAY59bIDN;&&HFU3& zy!l`pE$=h0AM5|M&9kJO$GwJKZt@v@RPuZ@=CHi}S$ho%?fVkAM}&`a%XZa=L-BbU zK6|cRI{nZd{G$v4VvX{sPaq z96{C7x^0seKx-1-#8DbxWJ@3HIR3NPr*3CZ9t}QB2^+ySIzSLuqO<{}j)6gWJaDsY z|BA8IH4iJgh1+3*88bi`x7}3LkxX`mO$Jtz_P7dODM`+0c}j3&=9;C>h(Lkul5|!1erK@D~+ct&TC6BxO+62Ha*$lM};id zlqe)5-z;kZxHxGNExO8#g`dv-jC}ArXn~2_GLh0lw%H2f1e|f|y4ryvz}243E#d(b zhayxsb$B(`rH%zoB{v#2n?ra(pu)Q;oL02}=52MqXk8@HQWQvgqwQt_CC;jWY5_Aa zf8lKG(J@YS#pwJ%Pbckgee)CF%NAWre$7O96$sG-GS5?_8KVn4QO~3w+F0o#PdrX~ zas2TaCFzl~W+IR$45E1*dmNg;zsg`#3bCAOmpQp@_4a{c{FaMG)<$%-UPY#*=F*h(XYUi)P%n8>D^LnulY2UF?N9~tzPG9(u2}zLeXRJ3?iPAZ0W2uaPKX$ zihRNROd2@EzN7eSF+dp&J;%Im^Slp3;KaS8kOAb0Kf{@dri#G%XAHt56kz*I16w71 z(6W%lK_<=4 z@12SJ;YeoQnM+cP@({fceM;{;e6h$2*E;_vgp0BpFL^cr0xMDMr^grIB2Y$0%@2C= zSF&%>gYr_mGjQU{Jz`72>YG|_Eg#ad6Mr=<7=5cA9qo_FrZKM-LVHm|+;bfpu`9T1 zN9_*JA>aYE7bZy+G{ zh2fh~zj2XL*a_@r!rUDe5-*tPj+Cs3_pJm!3q5PW!yQ=}0(HZD(m9fIA=<*Z|0a(V_4WcPkVR9;nD+3($ zuC#q)0X^(&tf|!Y!TB;&Od>r2#cH6?uky!cZKYDmNPH3{3EdH2qsak4l{YxH8{zk0 zOIy96M5~}wXh)Pt;B`|- zGz;Omb^=KTqH_UY;Ncn`u-n6Q63V$r`DR|he~hhK{%I%-s9vhW1Qc_6=QouGYBU~0 zm{w?%y-n+f5zC-mmD$s_LvYWGfoJpDUo+wyBpjP8bEa3Rj@oHtJC0Zmrj(Nwte2vb zdhNyS`)iT`+E60 zH#=8ky(>Tb8xnLViNnVc(uX&Xu^0QbZ#ZFW>D5+mH<7mW=64Fg2 zZIlShgqnWW95@bJ*9-&TP{!Aht){gf{DKS*D!=e6%INH{%;Wrt{#lX5M_hDmvs=XE zi_BGcVGU{h{D&=TCVcI-4NOA$({mlnn0Q-1IY96Ol*pz!H4EUFv4ZAP6sg^7l;`jw zZ0RT0#9=*|AGU9y(yLxEZzaD87}^~8^)$Mtpe%Qy7TV!qh6#98wtQZ> z^d;sc_GYKRs8B@%3uwsp0wtQ2!LQyc=5r)NAmn62F~5A zLhT#+tW5{~)JQCE6BA4XMPblZb}lo4>l}Q*(KP?gh1Dm=Iu7E1w^2OHdc|}Lej8P5 zT3WA+EEzPaXEoVC>wN}2188>6lDdW(vZh3vGPf2UE*{Z@N6B#;nWN2GX8paXwo~vy zcv~6qwC9fi$%M&0U{d`&FN6DZI}pf=$ntKcllu}OK;wo}voZG`q5tI_kf}dc6Qd|F zQ+Z$HiC9+n&7dNoepwt!@St{w9*e~Zz6%cy@RxoFp9ugTnQcjxYU7-=KTSZB6ehH880sS8Z*xN__m z8$U~6l$^>nV5*aZ`HMeM&{u~!4sF(QDEPv4BV!%bD`Qh%T2K@K74!5(sGAt5X6r@5 zHh)LH9uCd0F6tTc49DdC>QARyF%e`_D;gY%d|+6@nfUmN*X**8HhLw9K4=6sHG2NOJm=k zOJ@hh@0?cN!{!P!atr&eNFl~ue@vA&KPw{U5wmmBdUV(2E#M^+n@>LXA5y@HDO*|8 zT+JNJ;jSvTMX+cG>_NXwsrvh0ZpY+qb=;yVPhx*nt($YKzx`;7!f!=H^LBc>skc3^ zK}E8^$HssaCdQC~z*&k|Ne>G8F0SjsBtO6Qh26pKVC_{N@z|mGld#xxM!?7p!SZS* z*2Dq0Pl%s7bphLR|KQ7%=QSuKB73bz{2Y8PieLiO*o~rcnIoI+qGzKP5RCXzV|-q2 z1BOgp{HTJj8X3_(*6Dz3KFOS?E6w*($Y1mav#wT5^@o^FZ2$dM)@aD>7f8CPm#mEi z7R0?VSuGBWRndY0mE&mX|P!s5IJ>0PUI>%?}u z9AH|I_=QSy&%-?UE<$X%#ae_aw ze6&C?ukcr^YT|5kwEI(ZGKsd`=@>sH4U&m7rXH?TvW_C3Q7bXk=Q{g%P z;xx8g?$hWKJ<7C>LEG&k7oCm)d_D%cb#6E(5D%a7G^1@0Jr^10@&K?Fo&#@Hp$MR& zaNM>)=d&@bb5N~!5VF?eoF1-bltL~+LD6HO(RtZv8KTz6)745Ru*7Yi8KYv` z55|KlM|^nabHP&QWOMmay#SIObh~F;7lg7!Jmy9o|M|P4IP3S&dploP4KTAgF9*T7 z!cg21N?bUIv}rBIOMGsEuqxcInB5-64s1IU;GAd2O-pj^j8r4wXe3EeI;8bVqqg7B zw7RIV#C`c~Z};35Qnj(mO<0}qz@zK6$3ZnV$Fiy!$YJkRKk4@VmYb{$pvRTki7d1d z1M3XJ(N5K8$>Gxt($DF;3y5j2mbmb_^{>avhDz!i&xtWu?C!2b5R=Y@ZSe}b_xPTZ zzcjU-(LCG0Tu;|7F~PTh zb5wS;SWmO? zUKdk9KvBMd)v7(PxoEv#qay?q1!=cQ9D>3jh;PRo=3H8wr*BE0GwL{UnSz?@^OAL_O;sM@okeS&(w|)}q zI*IvC#j$Z^wK#Rj7`zQ|!XT3zK`6a-P>)0{h&Xg_^LdgmulQ8zNzwP5r&>a|*r_-g z;_}T`O{B@kccUZT9R+)T>M%zt;rtxUw-*XYqblnPaz@Q9?IC;*=sC+YXzf$pUjyEU ztf{ZnNw@#W0h~3xO=~#CDWx-<0a!syATTBcs`&VJ$Nz}P1-_)GDKbBK4sbS~y}s#* z>$zZx0%3#XJooI9Qm4UM8t$&FX9Am|Na0n2IhKszkwimoL;}5{z3Be^> z$oGP4%^tKE7KaRI9@CHy|7^-IpI?AmYZKIEb-9k-11)ll`m)gYp&NR(PZBgLlUM$IO`=I(sFTB>MeQE2=T6 z)CT`gsjE%g>!o4y(#O@ia;F2Gpcpp5Fin?1Ec-XKiO)e4hzJTsQj2+=4zqHf4I>3o zNP(bkgzxMaL_tkOMlNNZ?$@qR8@B1x6zAKbrz$#!^T@yC3v)f2oZ+~*u%P|P_hVGJE1t*NXv;V@@v3{{d+jBKQb7tVG4l+baDj;H=>Ge!aXG8$7FwK zlX@~k;$aCL`K|GEK&vxOpUg4k#n=Pg=)s<2Y1y6hOdY(D6EwzXTIwc|r36PDrp3Mn zc@@?q-SF%TWp_JS1CtCq5=reHrb`^mt>{JgCTXYiuPxVhS+o@?-7KS=6|4DCANZwzz9H_am7$nK}rJ0B#3X4C3><*6tV(hxhdq1^7h^(+X)3WdERjq%# z_PEWKt(k$$CvuZ_f+~|VURUD`>JxRD`V20IpJ+Cz_&BD7f~b6XUiJ59>d(tdDaNH= z)fV5IroIl}X+_A&sGbfrfxgIX$;4h?sX5l8o|D3Rj|E48CYQU<$jI+2r;99PaVA=q zB7PnEJ<|z}q=+KDF2lYhWF!wZG1)Ne#Nebr#|iHxH+D)xulss3O3_ST z?geC#3COY2PN^(IqI0NHtscbpUA}s+fb2;(k4oQCsS6;i(oPTNRBM?AhM|81`u{im zFaaH@JUg;;Vb|aSHe)!++yE(l4fviNjZ*T&?@TE5-Z{-=fOKjq0xD; zi71gF(N;)bq47;sQ;w;9fjt4loTtwMgO!HQNk94uebxP6U`F!1KCBiO+IOX{R8{AC zFf_hw*D@>lAsIFYTEvb4A_GPb4nkjdqec-1IR6A_%JzhZOHAB*;ik0((Qk8S9#NZ9 z*j5H)ZDop8Y9~(pp4mBe)3T03Yb6epJ#&LnIh6_NZ`BPMLe(xW*KP=sA^9=b>BqEp z_o)KX3EXq2d!;ZSiZZ_a6ymcGshgN-%IfG6cq78!qzHNc=S4uE!RgBg%2dFh=itrVCJ($Uow57|HE|FX7iLSydh6|{P2F~*w3Shy*w=SW1zPNBXt`v$;5%NYMsZ2Wqu zf6?aY{m8rrp1KLV7_y7-;Ozh&t%wDm(mWYOQ0ssMU25Qv!lAiaQcaZkr`uY6WB{z+ zrBn~S+5Vb1Xr>W~?) zoeq!}Hsp4GNy17N%h7H&<697e&-?|b23#V)*ecLg-(Qge^0F6OzFtKDh&6r=J6JI8 z+zfC_TS@pT-cJ1>RnKY8fOYbTc($RHNE=X=k?2vRS}UDCRM8AqekwknbT1VpXh9{J zoU6e)UPKpOt9&^J)vq^hR$Ztx6AF~g-7srulH9PecLGzZlAh2?evfu&OtAQ+3sowj zWYTMs)azG^2CBx>b&P?e9-sUG#2~iKCg}ww*4(58~K&O~kn#Yrj zDfOAj`E%8VAuCMjiD(me=N)gTql*Q7~dw`t$T0)ehkq!P(oIt^~LlL+Khi4gE23oJ7(_-{>_D$f{$y28|S zn|?q=Tiszed(q9}8%gfSFtXXjjY_uW%&$%(0UJj6(X*G+yygH(;Nl$o(^S zU5|+q#cc?k(F2uZy;zRLBZpJ^Yn~0Z!1nF(_Pv1Euf2#gfIu!s{5$`rD6V`(q!T>* z4~H?Uf|Ez(F+QScp)x9tKhw&hD`@N;4YNG`8Ku1?NbJoN!pZM)kk!BfF8HZ`AzTBA zg-9{!pRwY)W*Pzyo$X~JXr=(|?y%#{FZ`D|ij81Q*s0|eeVM#h(i28je9=9?A|_`; zGjg{a^*1q7GWsD0$77bIShW}~4-!D`+Gk(p3+$6D{8wcRsu{qTQJ9-%^y)w|aKX|&ajepB14z1a{o&n_xgZy?pYXc%CO4x-%Cv?`w_xkd47X}V1L&Y$x60B*h z6qYj(!q)D<*elK-*4$*fQ&KTU7)5;$u4Wm#HJ%)8L9{{Qn}e+a(x7$VT5fvg4qS^} zTG{~1(7=jk+9@(#Ql$#?q5BFUz=gM!u{-^3^^IPXguELZR+2Tb<-U~@^&uc zCfF+asC1YJxMYnKkrIwogd|hRjg>JKW5a>azz&16%hU;`S>}O!ZBg>vvQ*>&hyr%e zC$pWTRypMzIt|&RGmQHfefT1a9~Uh{Bhl)^Ml+_z?%`SJyuq_vs|O zt@G$ix}0JxDKU*bxoeDYWx{6fLOi?LW(g3);RUFV-fx$ZE6n^&zU5vLNN_Oc!r4CG z{DGkYUAL?8jbIH?897qqt1#mSAbBKKg|v*Gq$oHEdOp=S$MM6G>T5%FXZl7|b-|DaC}2U2oRJ1@dzERvlM4Cry1 z^E6nX|0}P}+{rt5B*Ld!iwn+obX`APnBfW`* z-`^uo#Z}@ql9^fAicEJ#%hHb6j|%)-aA!B_~i$?+?#I?&JqDZ3jLcB($7 z$66EMRV*CZV4+S#PxAjY=q#XVSv}rgnbFH2UXZ)4>D;bxLeILQi5;opX}>J@EZVDL zXj#OkzSa@?5_?ADA9mK`!ZuQNTeb{59>AvCW?^)5~iAa++JZA_zapjXT_l4l<9p6e#zoYp#yF zWFF4{cub)s$ubJ2t5e96Mgun^uL{LD?BtApz_jj{58eNiAUaxtf7k_-F@HVfU1gk7OZ86jU)BA&C;Th zL|74i{+K-zLRm!UtuTE6u?iO-uj%`q)A`u`*5=V9P|Yg>ySJnLaXNEqH+Bba=jDqr zl*bh{tUbH#`s=R8dmjk(P||w{YG9s@ri2FyR-=<1t-E^xTr@17k;P-^t^w@}wV3#5 z#YO3ej}-tC8NG80dn)54iBAzEsaLJQ&^(=IFrX3T`?-y;3>2xdI^Z<}NSr#GMYyn+tzkUKg57fKwKAE4UBsX!cz%@a385+u(;1V-Tu~Z8W>LuT_bEU zwAyNEC(QQnX{Hf)JDeXs(y8zmSG_?SiV(lBO4+iEBrw#DHe`be(MCc z58pg$6mI{FAd_*=G1={nRX6_z`q&Pm5BLu%A#292qEqwOewLsj3$S<)Q35X$tu(kM zYD1-)yo$`zrOEN&8Tgh&H~4DYTWEwPUILBC|Lv7zr#nrGVF(2a3T59 zi`)ZJ4nwm2Eu5&$V~2;J@9=j1qeSoF*Kc9)2RL%L5WWOY0tmS?{JKL=I*3sI_XuTw z9c-)$AKl|BH2GI~bU(@yD87Og#2@$|M7iI&zN2{+X zXkvG47YWArvEGwxm%C)F^ol7-kp}5igRxQv(_r_%o(z=d8MO4JFZ8h=2AF#1yxe_e z{H;*56+_@YaJJOPmQSix;Z9}#Vl$=9C$<63G(^_iIC(V6wv#=Ts#->=U^Fx^jyO0yZb;T% zr>rx`<2`2_JlQ34q4w<0f){*m-IXzOj%X^DqvskHN4_;uc!iDzLplo(%*8wM#fOj_PnL#%PU79(*B2_H>rNa zOreys=cUL^72;u%Q|iI7UNXy}@6S&am*`No2*gM43R<`FrfU!utZpD5_aq&7)J|+5 z!P=ZOe~;TaeU_Qn%ZCEP=0UKsMXKL9e>E^;8Gv<_ks!`y01kusw!YN zxI29BHl3*Gvj6Nd@5Kl72HI2$G^e#G0V%{jNF{6+`Je;B^YpRC>#@GT4l@m6yVqe; zORd^QN{YpvD8E0ksS*CR2Sbm87HY`7J#rKoMCFh;q8G4=`=}y)uz#JV!kHSa=Vp-~ zmkGU-@K=Q4W<9=gOOHit86l5XkM#^W?(L9&OD~Y;d>~N8S}U6@hYP|sm5SpQ#F~Q6 z)E+9Ls>PM*8N-rRpUPLs%{C&M?Ac!(q&IUk$WvMV z7Y@&-B=lW;Ij$aki0fEk=9#%QC>lFuF}W?ELHK)R^Siu$O=U=>M^W$DC+F#8Q^t$4P2mKHVj zw)Bywk8_E>eo~h{q>u;06T? zo4)p#tQ_|^5%Rta4v{M+P2Yc|2cg_*1TP2$^g&cXyWN6K-!|oq$`5S2EA?#g&# zTkldkzVDxVwky5v4ldUdp2!w?rat8TD*Dn8ZN|#8ylY3C)I{)pjjNit#_|V#A^A*r z%^*$bAQ@nRW-I`~(35AsbEBzy>oUjzktSDYrjenlmV?SZZHr36~kg4b_LZuMP;K*{lq+MBO5FI)#RH zrAK3RKz)D3AxrVCbpuht{Nz^dQ2oo(0|e z-=Vc09aM|PkoxebLm3A1|3VKi3@XO3-s1#JF}auGFg%K5aa6?NW!7+6`b!~ce}f@@ zBE`?W{Hc3sN?bS+2T+0_H^CpS1SwMH*O+q?>&*{kcu6dFtgSZdG}!JWX|q() z^oT_J? zY^>I=C|>xlHC|hij2iv39TWlA_gY*TU{r~4CmJ9%CS46IhQ+;&v`4WND_QB2+9x6T zpL7*6YqL@QTY(%R2^Ty&^(Ao7oqZ3)gg{anI`npjD5cB3d@HKH4DlcO`s7iDhWx7> zn`at;A3667m@sP;IE@C`Z`u({?UP^a!k~hPLoC+ZWwQ%D0-PG>7``?a+%!rUu%$zj$C3%>iO1O$yE2-kjBHE7W7Nn-6V)P18x?N z4FPe10q%=xva6|1usZM*lO;8hibJT`>+I}|*QCZ{b?ix0e3CW~dw!GE)-3+PxZ0EP zL3pngYwEfxp*(}?Z~v#d7k_+s)R)u0X|5k(1!09P%z8u+pkbD9$0IsZBB8uUgFT0A z#6B`mk`%g8%F34`OpuA)PCA2QFq(X;;kOXvj^^tLwj1lAzF2(91d1aE4nf`FQ@6&%lWCR?ISof%L+8g4qASKr1+>2^lhADw zghJK2dP0Ie%|E!oC0TIW3dHIy?^;TT@POE7NUZ8RV@qMos8hZFRT4gK>5z^CQ&@?s zam(<4yrvsS@*~9V*tTHwR+g4Vb6GaoiO763mQXAKiFD;4E!S2J!^FNrsKp({QT#J+ z8y}^m)8hseROHyXl68S=NOFobeQmzbSlPGbw>us9G;|#vVFSy;>mQ|%`345Ry(UrG zh`YpCJG^MOsh;_RBEXpnJewi*9V(ZF-jZzhdUckV@=sxP8K)Rg&*edV>YSa8_akP= zcCG=EZGFKzfq4W13q!80R<;yAU*Yh8Pg*Y3MJ;@~{_Tj*rfL1wP!eqWsZbBkVM(?p&HR`Wyotjm$w7F2`(6Ju4O>55VddqKp$(ia^~(b}$Ni&lndYfm zA+HEgp(+$>)NFenE%3f2!{f~He8Vs6sdAL(3SAk{Q#yI4wyQ_YVy4y)i0(b@M==b7 zoJXU-U0z##{py?Zh6dl1s?%wZ5mNPr$8%hu6!QuEeYNqKs^4K)4z1acOibm(SzzJvRbBK~m@v;x) zU%g5Zls@||lXBYlBC)POiseUfG~52~ZBb9GyEeDm@icPhZB1gSg63*D>!IAM8e%*k??ovVw<)5QLMb+{Y#fkF8kEN}qB1sdTrve}ac*iu8eJrB#F zmU~88;BXj5O!b5~EAI_v5)vuQ7SllquKZjV6tSsehpwee4KUsL$DQFdr{v1sD)0u9YkEX*_R**GA5}n)Qeby>)BQB99 zJwFvUa0+yyELd&IKTR+njH_t;rFB(BwQ&qegyK?u!{!ZU7*3Vtf;^>ysYf2%cBOf8PK5`f#>#1Dzh!T^@KI=uolcKvDks6+f!ocs?Y4o*X~#a>%{NOwXtb$XBKl2Z1Hsh05bRQT+Thlkvlc=be$rt&mSE8{Z!m65og@2s}THMF#7oL~qyWNwCBf2o~>?}x}*MoZ;S|6D@WE45L zS0C~a3o&kpJsBH0p$f_xe}V16mkrq#_%(ZTBN`AU4$Y;f4e^r07r#aW)ZgdMtzn&r zudOLyRk;LF9AUD_+l7>Xtig!% zogfu95%lfZc5ve0@1o;7S;v)tsnBHlG}#Ak5W+Sfwh3}6xW9Vu%V)FL@|=ROm^J@s z4E@aTki+vZ64DfT>*eR##m*CC7`d0Qu9J*BJ~x4tVUVBe7Yp{&K8ZPfK6wT5v0j^? zEF5c0@z;>&n8<19Vj&Z=6m*tQ{`Af?>vTVgqc_EMdq9bF(TZJF{Ir)_RNr@HkvJ9_ zPO|bUoR)}hxQl?+b_D)*2yh>6HpSNUcCL$Pa)bHRBtGTVU=TN*e}4qx{hHMXN%RO-*#N0G%dfo4Z!O=*l=-f*-#w02H=Ny!K;;Xz}L3XK#YMd zqh&aCfHRIZyQ_`K7yt0Lk_x0IaC285Kse|Swl%$n$x(1U)LvlViXuwqNO4u@y|m6$ z!gcYxmc=JUrU1h3X41>};k^a~KNPnVj;v6|&*~%*us{HW)yhH=K2scrtOyv(UTTmS z_{10M?$)YtS_<6UzWHA45PZ}f1l0G&ZCOr+v_ILpMSrDO(i0ndVWhb(9~Q5E)(5;& zHIBT95?+MrjUu`hj7m|^CxNxYZr;$=T1u)Lr&qJY9&pK_@GIzJ5SspIw_r37yhhaIqZ8>%2t3~+coYi_oEbmKX(c8b>Jfk_Y>kX**61s+j2^?iCPNHN_I z=0F-r2_5N3UA6a)Sc_H^T{T3DOIWHL9M`{R_X zY0OD3+xVjzAq`O;iti6|F>JEHFf`kSPoUD2-sK!#b|)Pm@H*@N^BihCx<(9(@LK;q zeRZv|*t!LV$UK0o--C`~oxO-a&5?M7x$om~AB;wUG>=Ay2MnrIFNQvdZK)rFw+c$BS+r`@ z&>`$5W(8F&$YVQP%%$hDxAog^ShyduiU%}FL^JwQc@|lg?R#V@GCntXsD8d;=8-q# zp)$d5|6@CMal>u-$CF9raY}Phl)~J*)RC(b$4gxuF{*nyM=0deV>>K@+OFHymU@qg z6WdQCabsuY0qvM00AJ)=ZX756L#i6ng=kAsuEH{v)c1P94ha@pbXk4U&oaT(xhF64 z%`<<>5#4nO;Cf#22UvSh&}Hxpk$V;t#Z>nm(u4dhx}z7;Rk>C07ST$H#;^vQAzi7_ zRQd0Hr)8_+nW9W4q4*dQ*tu{(`78#IR?b5_ow=X7>Uhv*&zll@o)3_oN)cHd==p<# zIwX0oX|+F@%;#0BAFB9)f`X=3G>{L3LMKDR3+-zsJ7`7AJ^nf&rmN1JNxeMs6xx?>}|m!kp7Y58TyjKoU_8CRGLQus6*-Ru#k zKOLA2nJA(O#JW2i*b2I`W`6|_VJW%TT1^&_!U{*o7Ed0Nt2(KjX8>m zcVg2e^0;}t+*mr5NEVIGgqs&bw0?@if6TIh<582M;)GYyfs?D_>*80$%3ljDb;S6I zZK{koiplSw8NFJ#`-@vf27ci_R3MHIW+N$HKNwEvbt7yvJfvwX)bzlJf`a+?=ncSR zA51`j9auQ!-12}f7WYsc9^}OUL@dUt2!U*MXcL2Y`pxz+w!~U1++xAS)*VD&gWh!~ z#71IEIjv(TDD3pS#Iai$NRZ|%GSqTu-)OKYp?TVmM&|0(&D;1WPd%rT&RcT#4oGmiI-aZVPkf@u&Z890k7{z zk0Wm9yhpG4aDMh~2W?PPZ+ulFk-$9OHjgcuP()mZq;Q&RKH>}MX#t$3`Av2mM zhG(2?I_FLn(cNJshcs;@DMe;50)}}nrxhYOExrxbD{ADi$I>7v>Zq3O+Xko&-%ILw ze7lZB)DXE!#=P-J(rGp;-^u0^9(S9RfC6GF_G7|x!?vgWO!VyHv#t~{wB-~8lG|4p zxJf=Ihc@L9j`_cNy&I#Mjxc^~>nq&F6zWmUuCH?8x}{9|l>71F2Yg0=$eY{0Bjh={ zTjo$XI?}}Huf`AuP_kA4j;;avXaPK6Zq;&{`3bOkNvzJ@W*>eR{pGBxdM{Xd2j=Wa zAQ~Wx*7VJOh^_?3gyvED$?b|?77kR6v2#_Tv^r!ExaU>LE|G1Aob2YA1*hOH#XAhI zz%ZweAc8>O6zTrL16t?oT}+GjYt>!M4FWNjkAxw})2@N_%c}$%9|gp*~E0Jjk7t zQ*bqAU)b<^!^swU1Zn5#Hy^Vo8{Opth-gAi^e{z!g&D8}PnWUW;Ad1_oeOirJ#t6h^CtSBtl8VULU@sU z`6bX3CclcGyrusC*j>8ZFviR;y%!cET)6S7U{Qc=dejY4=StCAL^_do@)=HFpfBaf zT2KDoNs`g$JcUox6~V0i23e?%dg48tC`*qCFVzT`vP>aqN?|hXOQlPQEq56VXn3Ze z#K8Hhc(7n%PK}HKyeYX2B6S}dR4c_?ThZR$j@SOFOL-AqcSlFz*h6JG_Nv+m655t5 z#JdtQ4e*A}*J$872YVEN&HPrpHIqQE;0nK5sK%5P1Aa|BrYhtokI#S)=w_BZ%tNhZ z-b9nT;NHyppZfe#!J7d;DAyUIu1}-|JAr@Gv-t_N4(!qxPHh?0*x7|r@Y0BQIGK^z zU!=QM@dGg;L?1pGEVdlE%bv8px;*ffLRIAwEux{dFzvqu+}}7dZ_)>&xQ;$$>vR2= z`icU;IA&IPDCjGy2#GZ==`i!ugo7-qgJJsE;DkmUI2aBkOX88c@n_o`7Wh&_o8BXx z0I?Fs`FwIJ-12(?RlZ293g}Rp%P_#B@qnT@s};fdANV&3z$Oq&MLAd266mKqI4TRx z`akk5rU3&%sk*;_^Dbk&%zckO#;;2xpxG-NL?K3d!rAl?X%;Pth6;^_^MGyG-zyMd zEO-o`1vZ`l+0A*fMQRaE8+d?)I&miF)i`;5C-6j9@}%Lqj;BMT#Ih9UEPJL}LN?-+ zG$sP%L1k;WuX-WvK!4EM5#>^;Z0D8QF6|>TAX2bgnK|}clFTKMcJp$ddPLn>U7gO| zm5T!eOc}j(`VrT!zn7`+6*6z~>vHGK;I0Z{_7R{H&YVwOToEH3dv2W=fA+;?9Uwfu zv|vOsAF|HXY^{WCRY269nHQmP!se@UHsAHl4r*8w4F0Ii)cs85CsGEpWul0 zU`+~0I37h=@LmFxyoWt4OYy2mQy&Ry6>P}_K!?43FSM+idx(jx&{N0_{lE;GWl6H7 z_(h;sC^SXeQF9JOSuo+%boVG8zLqzG-wEyPl4B#PYyMm6GPpa~Eq;#|n}^IFFXTXs`Wiwg>2;*NTv~VprlA<_(fMte=|9Zv5&<45uSwTht47 zwL%o(Txm3&>$(U)RFH@ssEtUYAO zxf){oZ470n*YNr|u;OG3czSQ`x76>hb;qXaT(rs(ipd8W%j#-kIv}{W!|OQl#ze1p zBYK5=XdYmLAFmjhKM3zmzECYEm{;E^(Q4opy&Ws0D{he!bXhz%BnvRv#cN)D@=@~Y z0OTDLY9Qkoh@OpktfA?J>9qT--QMVvhv}G3Jjqin#RL7+%_+fYIi?+fjRC81##X%xdYZwS7bylQuiL_GXaJOar!DB$2_w|IEr+`q6b;34 z_5PP1Xegk9d$7Q&F)+pZoaHlYziYt-kHLeeb zu`K^0jno!un@A(ct#ybU6_(vFY2K&^VIZw=MYJZc#M_V$q;-1X>r-fHN!y?crX{60 zFf>H%XXS0CB5lSO$U{ds`?=V9IbNKnR#_ZCI(A|i+3JkXB#5aI2M&KJkbaDGMc$yR z`qlz@psqVYI=H9)nB)C8D+dQ;9Erd&td!QSK+m7hYwg#0Z11)nf-tUdvi}BZfFrZ7 zqHM5uKAawW&7YY>9KM32M79Mkr0&XRdUPV8s=gt#;(X!1YTKMw4q=3AAmVfwI4xHPFna%ZO){a+BgH#r9Ts3d7aMQZJ#EY!{(vyq3SS4$0-+3!mRQ+hhxt zV#>J1PX=t?1Q0fasEVrVJY08+_7af#c%b)zAd;4IS?^q8K{dm(A(#L_mv(m7;+FgXswG)v_$*6i3%%PF21W9?=my(5!_c$9lQooTIV1!?yOjma;?2O6^8!-)T|vG_zWNN? zaTix#-Cc|0xupwW6oJ!Bat(E;`f^hhKYOVsC9&fBD8`R8zdZlw8z8{2TWWxK@%byC zQ(1_=ce(DWA>iyUYM-tXuEq4@iUD|z(90zGSd&jk8nJz?PJpWwr=pzG0_Z<&_Na}& zES|(BtzMoOM-S<}I?jPEApqkOh{$pgQP%GB+>ew&j8(w|bhJS#FH3*kQ{J_p|Md?S zTmex02hOW3Z{&&q-Un<;)#l+Y0lN>HCkVna2iH^o5YwJb0J znwUE(s}DYIcudkDl>4cluVPiFSik`Y>8WAfqD`-3&KQQMvpshewe1#$;PR*Q9x^J# zwobM&GA%Bh8fCNmc=qKDX%oz`mbw&yB-sXk6U^M_!xLga9JBSD)7F`1gygkzfB&Mj zBUKkDVF?c1EhCYu`i$a^i+gYD~-_d`t;)e!p$>cg41hLqLPS?B@7|`cM z>rzm;^T-5)@rck$B`bIoMsx>m0*(p^)@<=m!rOXnBMAVBQbc#*#;6MoXf_X{Wy^cl zRqK8F&^#W==>U$B86E&s=Ne64zOxTaVyqt@u?w%2-0&6nhsLbK-y%`uZ$;$ zROm+T{<5~aI0k=ed&&6@>7&)Wdx#7&nrwzMny7RGSgqFn9fDbX9SYqV5c~+O4Tz#U zSqXQxT7r-U)iR0blx3t7_ED^774-!n_!VYpXd#_1WZ}$8HMC8QM0MYxeOOGez*W+? zM68kLXf}em*&!^Y{wbFLg((Rt31`bTVAdY)`MpYq@loo&J4C4iKJ| z9#I@xkB6F>E2OPu_Qq6Uz)G+Lg@yp}b(dZO=K|3k6kF< zmRQfX<#+SPo{MXW9tpiR5^BRm@zVZU+PXNH#kufuY3Qf8Xs~G*C5xY5vqQ0KaTx8C zQD8(ZF=V9dI{$TDTMACR%=Z$i(kS1vrtJjU3>aOg#_7$E53N*o;`<< zw@@o$R+stizEevi1=&$jci=f}Oac1;zD|B&9>(6X5SKK3;CuR&pnM2VaTdr}+*9i4 z2#Bw`hVHQ>B65jCx)MxfhkBO>*}(Fq!L~LYmpqF6JYHuuST=n|QE}_O$(FvOjnat$5R`LgdzBnMu}KE4xnLN5m#(zxyXf(ozZQult8WfPCCmaJ&$?*^jlu*(uI#)s`tq*>~5hYcjj*O zYnb(*xxokE=T9sx(a15|7fTvTASDLDIV(W`- z-CUH7ezCZvf$4ISEDNFYHMFT;iE7PyL4=+PCKwIJl^6iYITp6}fJegy2(lSWMkGer zr-pr`&-3=t7QBtLe6AIcN`iBhwPO(3Tk?n=LL5?mr(CyCO%ZqFUY_7SfyeNCfc4V} zozI`b4RT|eEV-XDwFIp{_PzNA?0`4#CkRiiVA*;=JnxCEQso@v9?nytss9Yk))v$G z$8QQoBT?FO6GwwH?#`$x)Ua%=61inI<$O1U>rc)d#>Ek7)K;3fzVHb)j%jtrbSFrl z=Xt^qX%kbMk=dZn41-5sOmkvU=u(&daSfWS!906V16J-_4Uq|^&sSwykASeJRfG~o zq^@=R-xS@q#8T~mox+QQ32SP+kM>>e5iaksUHeAUwAdfe?^Pz+hr0OKPkPfwg2}F` zyP+_$uxFQCrzJYlq0Q6Uaq3B^Z1!M11-_FkVxhT(!6w4-Zch_`0AJZzbY@)zSzMdc z<3ewp{n59EzB6!aoR+@6XxvN}jJ4`IyQ061-H;Vn z(GiT8Y^2@T!GNp&gdPY^dzRZSA!fb+axi+uBWgs368fC(PcQgk!emw68?790R)4#< zYc7}b!fp4Vwov|yhmo2)C2g5fk4K9Y?6SEsl}DI9nq2J30J+g!D;OU0S%DI;X05HeIoKUbOpEhkG~bNkMP9sn z5Y#H0in>32SSh_1MqIc-T{Q^Yv{h7|TfdHPIqg7>t~*UdcToNDH^@}orLKU07y4kJ z%Q0-0oV>wi)4kV0p`@b3@y`z%u!5yIK9DYY$w9U^TD0wgbMhzvTSCU1M&E`32lhLk zr9RRJe;M{$NKN3?lO{K>wWZym$sX5WMK<91kDOQX6KGC}y^3CzBBR!_KCIANGbmGE zWRgi|H^sVm=xmnpa9ROX*oNzWUggb5mVHQ}$QfW*cfM0;(@c48GvJlWxup%o7^3Xf z1d9T*&9WRD{~HX_H^%Al&bjvi?mo$ZODC@Gss@S-ANSnWV&}le45#l(A_h4=RuiPK zs2{SIN|*16@}oU#j%?X>;$bUBXO=yGpmhh}QBs zD3)YF)Tzcin{pHh_1Fn@aK6jDivAKkIW{B)3VfcJ;uvUf+yi62OtU;K3m?}%l^t4Y z?zM*CZ87KbP>8*5I7Hm>w{CX9oS0q3}3EDHSw-?q$uXxw1lVX|Jub4_ln&Fh);WbC7o^Toe$SbDmHIn}9KkYwS) z4tYIKtrnSusDgNwu)s#FFubTFFBH)}L5L%21@vP=1PQfp!WpP*yT1H*FHg)iTC1dQ z-c5KHh)*h3JMe{TrR^x7_`{2E>7mE2hY~n2mkE0Qi#ATRw;unl(wz0ml}7ipP}_Kk zK}-K$e1R73SR@e}R)na=pKQ>Yf1+w-ZV?$`L?~QQyl6$WdVc0DO3K8~?S*AO_M0VA z)STh1%$*XTiK%%hT`(-*=epppHW$Yr(I~aE#?y!++fn&PDHAyad!3xfM7J0TgV}ehHn@@GWjQ(@sX9@E+z3sQE*HCk|6+EB90*SLXT#5pd z6%2a=Ja+f#$^DW;pQeG!nwuuBuHTUx=*sw|p?bH0IzRbq(T}avn|i(%gJY|zm!|{j zgpaU8^Hdy~dw2wPLk+g?8R>c&X4AWF5Mx+pK`+!6h+XoaEWW-x8)D7=TAx%+mKH&6sZ6oIXD8f_9JU())~yY58l0 zXDhe6@d#YbF_U;MEgZ#2_;2*)j<_240XAQJ64Q?q z?^{;m$Oq{;;3%cUhV0WW*odIRUT^`HCYWC^jM1B=pr^eXq+4)^DO+w`_NCq)SBr=`IXHfwV z_D&1S>^Sxgm^&JiMOLW%3lqVTug|NT#DJ{70MLMQ$9f6SkxsE4YN<}Y!=_%m#M+L< zqS&o^T6;a4Fn4NQ-ugk z6o^a%^R4(`!0Tn7%A`u}dwzG(fe*`|91G%nx;Wp3$KW62vXbtBAg5S>&fR5=FX`|u z_#Vu=9VX|V9WngyF``?{@6y@9RI0SqS_fD(MyY?E;JvE|Fg49EtUSRNg8WpN3X=b}_5GJk z0a}3l$peIMREu9y}3q??dUNyoTAqfKpy`$UNCYpAw(kB_)#% z^7koZ9V`o{!RqH|qH7Gr>3pzEQ{vP7`jiD`2c~`?-5d9|_dB72OjHRjJUj`dF8-LC z1J3T*-qo$PQ}?Ee7=H*2zpbP%Nw?0C10DHv*`9(6ZkYt^J9kZ+hK^kJlbqV&-HJSJsBW2C)uw@*P3m!>re1t`tu8F}L zt8ZtG^z7-llUGN}R9|73^UPq=SUvl)M&;dhuw$doO{1if(;WxZiPHyh>5A}wzd?=*lG%#ShOQGWWd#=BT6VTJE}8tqn^1XX zPl(yKuhnr1hfu3~C;(5VcE73AF5K&e=#+sXQYDp)#S{aEz9e6dQhP2p`cdSH4zsjk zQ6X@z4Buo*H1`VA7DbAK11NkuRI|V|RNhlCYk`M-EDPdGNz0`xiyI}Z)dpG(9)N$J zWp#)93hpI7qBnst&{_mDpBSqoCaruq7#<8Lf03Yof}cN&b{PT%giHqqVj04(DTs@N@_&yJ<(`3`#EoPLYem8nI;tU;#d;B;hq$mD%MESgDHTg59Mo_ z)ks=hv7F?ylo6LbyOWRv7b0wfDPhS6njTP)vtN<4z%_ueW8HJ^QXPgnOIFwPtbqpZ znIZD=kgq-WK?WQ~3kp5buJyO?s?c^U&_0A8AV(58S!L!GC1p-?p!v=fm{eHun;V!- z{p~0rSN3>xmlM&x&rg=AKnLfk33u23F6x!3U!GL<&Tx$vuxqx?bi1n%=*q z?$X{#yY#)Qfc}BB5?9$AWK(pCmr_Kd+e-SnWT;U3l*%dHgi6UZ6&+FxCpbK5`@WhU zjC&@$wh@r8%tdK2gPuW)DB?~m!c(!%px-J6uoVW<7mk>rqX#Tj>C%CzUGPUwcAdHF zH}(teVOi+Ams1Jh7o?E1SL&blqG;GtI|e1(oTuV*$y2cn3*|khMk-~%e@eVPp?U&jqgt~ znP$_qvIF95%byiLqXShGP2AX`(>K3&ANZXsC1jy;wcmCaeTmMFM#Iw(m3wg@=yAnW z=_H^<;6oq-;{Sy|Q|0Yf4ZCF5*QFnQbZEm*QGfYSm70A&RLUt*J!^Ykx0Y@Gy>FwV z(Brq&evRe#Xjs1yfN%L=yB3bW2LUi}@O*CXKleP(kivG{@20bfO#6nJNqP?`q-$R* zU6%8D()_#aCyxZIePmXFMYsWYzegVHLSI5NR@!W<{n8xzYW@91qV#l+Pq~nr)&kYo zN2KwHYVO%*zx&d(;$h^J6r0q9HN`{5(?;*+++;Fwx6qGPw7&I+5M&rTAy|`|XN3>! zf0e$&Pu}sEx)6+SpEpihHHX4Cy6kVCm{hUm@yQmt94s)5CpmRdxNPNHlBHB6SDg`- zOHvpXAI-uqbtLfv~LjuE)*nCAFH0d4OKJ(mmi3zpT6yE@t_siVf6a$j)0 zy&>v|$56?Jxwy97)uSZE3MQ`aW?>^U&#dO>@tLB+@KJ_hvo#(>`g2`m=&+~j4x)*` zLpR{ViDx=73h+Y#>Qe7hj-G-7=0=HQvlD1fk+f0htG6XcwD%gx92IS*Qp3z#8D58b z3RAiTVRTmBk%Ky-_ls%ia_-#{76%&8J2Ft=I|c8VFF>gJb4%|yvXpL72)-)y$O(@i|qFC-^r@?xqm|9$W% zXqkaiBYpAeT2W2$L2HKl%rUlx-COaD@)JoB-358F8Y=g%^Plo7!0RM~*MAI1zn&H;a*=>J=G>d#&MJhgEdDch>0_;Jpeg`dtJq#^-`q z@lU0StO@ZT$}9C-tX7Evz3wxl9E3@VMUV-#_0K(}iKsM#+WB@Z6;z8}tBYjI>CVosXqjlfNL2+W2e#AezV%;x2MzjRS z+eFvLcMO!2Gwxw`i-hN&WwKcg!(}o}!B~GV;N;O2y_QJ*5^`Huxa=Weo?%l)Wq4}K z0w1?1~OztM`=>P)uc*JC@NV*M{yM%6WsBE(nK8rPslA)GBC~e z5Hlz;9JA6%Hl0*Aze;5^zr+J%&P=_~J*GgTq4Td9<}aBu=C*`%)8Tz7MDD%>bMFOO z>V8EgQHmB+@Dg(O?e{1gfX?3o^>Jc^kI6?Mq~=a&NnSm}Mz;Sa+Vj8nrBc~}1CGqf zdsYdrdf1f~D{+$uShBb(6j4b26)^lo9DI@Sn9=C*JZovgEz&Hf7#rKlP`PQq=2N^s zk}S(2m2N}p;gpVP8m&3mWy#R!d(j50UIE;5a)Z41(Nh>;>hSz+OJIJY=|EZQMZs^8 zpfrxB)+^NS@u#R4;>G#%f_LDkNe_firP*IbnJEF{hwoh#;^I(lh= z)9^_k)gT{MC5K!{;YP6>@|YyVB1^cS4tIK~Uk<2<^+)BP2)BK-0JADf3;@UGs*ZCgHgImA$OR;92DH;+%avMM-W~Sx?e5!gAlc3;II@ z1H2}i{=5JKW-P^ZG`?hX_9Cn}*Jyi4XBJ2-@!yD|@^z*C&j@zsg0$l6Km%fj)_a| zodGVZsiH}HPWSSo5??r96=B(nsFosut&Wq!;InsAz46tjTJ5RQ>?NB~=z+Xh=Gfa0 z_HJY?cF~|9m=S>uzyOZS6tKCuJ?0cXG&$(uI1U~V){k5 zuok#>tx1M6nUl|35L`X|UfzDBE**_fTaZ>wh2)t6%cOqbMcz%W=U2!dVw_rz$xg}M zkfi+=??kVnU&YqQrWX>N6RN+RbE9P3hpa-IWEg$Gwm-?_89DbjHPAgJwmk-B%ItuE<35Jbe_3C%p_wwKSqX zxC9Fod@>_+lk&(2gR>4~CXGz&&N2uu2CLRG{7C-zF(3Z}^%z1L&OwRP$7@xy)+tla z29DeYIYkWIklvE3zXHp;HcnnW(bPaSWZ;80MZ?zAiA1hnO76FwYw#Xs+fi%6_^h04 zclLwx4gA#Bz3$n63E)TU-2s$r^YQkRoEhm_`R9Qwgi8=^0i4qHrnfj!zgajq;Vtpc zBhqq4wz$82&M-^NBB!O~pkM7JMaGb_JjqQYSo@?_e-%AtzGtc{OVzN%n>ZD#bR)E0ZQfcbf?B zrW`F(W2+zn?=bn@{uwBcfdBGeSLE|Mtnk55s(8e?W&I|%#luP5!3aY58Pz&8rXWjz zx#wfH!OD68HL61ze`QW{&Z@*kAF2Irzn}=2ltC^)x)DOQ`dXWTxd6Zj-GT~BN`0KUMTOC-=cwqbChu38ME{0NU>2|TE)hy3QR>mJHMI)xk#ewD!@wxj ze8Dtw+C)kzOUsIMAs9}Qd@oe8o=mp>W}WWG-262=a75F|sJiEHkQ@Bx%Hv=ETHd1S zh+1LpGQ`KL^;!*tiZ#o8(~fHP(|y*2_$ zany%mB;SCXnZ>b!-?yVK@-u7a;Ufs%&;MAPe|MVgE@&E`Kd-3#<0KgBdH`-1j|6}O zms8ZkYOGpe27W{*COLZfiDLlUnhNlC%J3_=Slv{0s$RcW`LIVhmMm|oJ{nvo@{sbL zP|mu*9CFn$NV1xr{37dzM=Ap~`dJXnfY{5NruV`qC0eJOQl#2ilEqk@^Cc;g+XeyV*z>6|~F}v07yUeL@Z$IfZC4s&`5|Gf}TCUNjDlphu*CO+h zU&tV5VHx3vK*g-wHIJ%T-z!(Wo&=^F9hz=W4lXf!AR%k+NWZM}7UNCrzM8frVl707 zXodjKA~468rU#I;68OF9N-E#2fED+_GQ!H3z1}kEbZr1D_*VZC33-?$PXZBN3gYZ? z+K&AbIVfskvK?h};p>j;aLoB+aR!NuXhK<)&$VHAlm=!C^ySl$YgI*Gb(Q9L1Gjo4 ze6BremE4gVK}+K1P15*L8<^r(=&|6dY}-bxo+i&{Tnl?Gu#S#(!O%IADiFsiL0; zmL%SGWIFmhQLoJZLIOK7E%^NKsuRdlWJVelVy*=|;HgR=!&$}`yT06pzSV0PCQ&Wl z_0%fk65e=ur&Slk@-*4n=t+ZOy4%@NhOLempxsBD9b~t3Bf#*?W)1#m&?3h}E}BVz za3>}(D59^)ZAL|d!SF7f24Wt~@lL(Thx)?Gy(c;?`TVA^0f()=H7a~?Mb>rOG+23= zju4TQ&Sus+F7qDXrJRIFF)b*ArC?eHPdJb4UZAc@9L73B)B$DwI`^1~^%S)y*frWm z-bj@kY^&(<%nw+X8`}q=d*s)~*KZS1oo-`vaW~$o+w!16;ebJrA$XjxjGv=G+{dI6 zm9${(qRQzov=^TLGuei+Y5vw2HR4UxWUuF)g+nCOL#jU$-P{VQY9#9tUgK~ku;5J{N-XwBYh?us;;w(@h*G%*sHGsihi-XwCEjC+h%ysf zfMI8h`-K?yil|Mk!|k&l#Tdl?Od`MbnSvl#!`B)&elNg(4p~(0dmy*}bKx3L6r)F5 z(}!;X&=rjA+c_WU-XUycsniv;b={O~>2MD()bNx@SVHxu-xP!Ce65CsY-UNvE(%1~ zPmmI|)ColT_$$Z!E)`Bb@jcj&P*una;726QI}&)ojg5AJ8)REkuufyk7ZHyx{Tja! z2vT2!zT}|N;tV$GcmjBNf<1Mn(i;hs^#amDW&)L%#2TqZYjsXAbP+zD0?~Ot6#ViP z`)5baLzK?;QNWbI?DLcm;px4N^y)3i;X~6*zrBM2dpo=ag}}P4;WJ`8i>Z@o%x!`JUS^ev)_B3>zI!25S(f7^hvj^Cf$YV=-#{VS z+3mUw=J}zkB#Vj9Ltyxps<Ly~JV9wzR6}YCh%CWPVAkC?EzV-$GJ5rsN%=%6w zx8~n2u3QqQ41npsLndt$iwWuO9`-1@e(5vHJY1VfxskG->*}Eb?+RO_G#}7D8d)rL z{*1l3wkt%pt()wbJ6)s=sJeyJ4is$GBIq7_%Hg54iL>F%f^~OWk*zWVBvqT04xbXa zH`X}uauNUH%gLoPNB}jS<5{DM=$d83OpKNp*M)oyg}RqBQ5yitTP98@k+MtysBBi37z(dzgiN4ZWGW!eLCLq^c8`N5=ptS zfxAt4-)bwj)aD|VyLQ~!6hV?_p9l?t19A~7z6x|-4K-XVVZ_%ZEA|w;)v6ovyQY^% zC@zk}rRYd}y!Pn2kyszY8Sc+4Te_q}ATMi4bo?v*$465ou*OpgGPUk}T#D#VXiu|9 zJi|{DR8{mCwOR*M-+I(j#&7{`ozcNLgvNx&Fs zNnMDCT;1khrQ|GPDgprCt@-?~GqeH}-zzwxRa51RU>uo240@=#g_kYe8B&xO&zsGc zw;fu_zF7)e+uxiL8LWt1jdQb0%O3QygU!jFVJ}zViItDENvCo>A1{`G9wZ-*D0<{l zjO!?ESRO5gG!N%Ek;R*i$OI;IF-Yc;GZ&Sj&7m+w#8g-tCce?E@meZYlLE`{z!vDp zeA_0})f&f?mT^4ZguW2O;^>yu9V=Tz1-KEOL7 zufs|7bLk<1coK*|%wSN|Y0q$x)i^1v_z8IgDu;py z$dS+JXFnoN_~a(7so?`rB9ie%QI2XtKR}*Ij%SO8e$sp#dk%IG?Ne zegn>7@5iPSc7>cYc9ss$@q>mZW>&zFRRkRmb>s;y(zw)er0t%+Ua`p+l*Z(69(Q7G zh*l;~d@A_c_C>}JQ-|s9b|ZjcUJ~NR2k!pQn{eq=--XRERj>nFcMZ*C!#k~GNprXF zGpsgOgj{nv{H}|Q?hZAcmlmGvq|X$pwx?gY?T1s8Zra&wulLZ)8Ba(-gnG3boLEdT zKFr~owX9>$)webnQbl@O7YS*Pm#{*D^-9#mFU764vxYKW%AzRNykmo!newcJb30yH zNu}Gca#G(s%sc{s*bkDp6v&yO6i_A1vp^-&$w}{V=2#?$6{J6Qyf&x5REfA}cBAB^ z+0%}9po0q8y1r&q5L^6%zBTz4{#)!&^a$_#!I3o<5RUTrt)FzB%A~ox{)QGHmY}0pW#%{FtwJI0h9@1r~(BR9tf|K8zT!C3YaN@-kM%4x)29f z|7=sP7tqRx(*%`N^WjqIeXN-lBz2rLokPMbO|N<`9LwO>Exr3KE;a0b^QOpV>V^kJ z9iTiRT=4EED=iC5#X;h9!JrE0hN#8u{8tq~ELCvufr?K}3s$ruS8Ng3^ zaA0MEX44N4Pm<5ktXhtFNypX~%^extz_m?o&X{HuL)waCCJT~)y3T8O$k3SWLY*%( zuwTem>R&*av=VQOy<#daQ%W*p=N(}$A6KXTFhy|k~>vV1hX%q9nRDlgn` z@MM2lJn7E^J$zx60<{8E1dIv79tt+{R=|^PxTiHw?u00=QvtKRA}j%42`$O8N1_EV za&0)d<)c=vqC9YXjyS~TL+@P1Fsn?`0!~x$Pmq92Pqzf_BHRrZ`+M;qr{-r@EE~%m z_Lbt$?u$0M>7Sja4_Rrn`W+2Ij~VxEgU80on(v2v^FcBrTvj9KKmn>&Aklsd?R3^7 zxvZBib)Dk)61#KBnh{*BE37;Osz2XQb!@oS?v<=fsn;L_%knDAfe{S#Yzs=)reDtUtH7>1J{)&|5sG!*hAVt&Kat;0VhA z)d}x#Jyuz7H4*i0zHbNni}9nXVh=M+M~sX_EF-|UN?neZrAcE0KE@E&m5FkOoBG(q zM`rd-%2;$t=F%`*;YR_Pl%3t%Z$qbEXbC7nbp2yJsg$(9&5Zku8|t87bLRLeK@Mp+ z{s&inGDf!Asx?#dPti+U@rk^0oYgHF%ch7qnA#W-nehQbdDBPc6=EvbNa2A0s(#gZ zM^YQEY_eT1UZ2eul4NamRNkISx+hhVHoJcO4+bg0J(0}NI@VRVN<37Yu97Y%@}@|1 z!~becNO#iVoG+;p3~@3mDyBu*)CsL{%CGJfWcj?@aUpo9>{|`fw+Toe#yd~E!>6H! zdC#6AsU`aKe5q)ay3!~;|8_F^FM3)4Z-cWL#2IB2)&=-tNN14)@*KrILYBvF2e*JC zJg{cl=;HVDN;@0uCyl3j>ZK{+Nm;mu&Btw)1AeO1XUBYYx}_rRq;qsHQ8+6VUz4F< zLG#;IS&%IXX7vuv&E1aNR{9T0K-wd5Q&+0>^_YnzSqx>2mEh@-(*^W3N2c(b($>~w z>_i(rmpyp!D6P+n%Q|&CGk`dDXi3eLRoi!6G*D-0txYT7E@-~zg$Sa?*G)1 z9BFnVLomuF={|011duIeGh#XG%h}QFZ*Up{JI}w)>0Sv~8!b=}CmT8-Eu6D{ky?^4 z8~%VuO}3PyQ_Y_q}SNC!$gHE}~ZIM?N4bTiCMz`k6b9Z;` zs+?3HGC73PLoizMxp_TaDF8)nY1 z-@jpMMZ8>tj2`TCWBQ>v7XV^6x2tc?7EFN~pJTRm<1lu})+?)#HxhzkhqNBH*y{N` zReYuFwO=Iviv>2-@c_vW7X4Hq+nh4-&DwK?bhh|R4B#=;29@OYxhPsxkiLt+Bz?#l&94@Clc?0da(2foH1n?UFOoO6Zc`L=xvx;`C~aOiO;xk zQf>6_SvhfXOP~NE^-|Vmr|^w*ujdsF%+f%P5bT8_r`Sr1<$L&K$x6)7fbT*D=`XlJft`2 zGiAyxVU?z{dGe{S6MF9`iZ?|$%qKpA`2v0=H4 zA$ogZuAk_-wciEIU|-=>4SFxs2dwZK0WPt))l(JKuIy2$saD31BQ_LcMa0b#s4>!} z?>Lw+EQAne&C@sM1IUvZe-`ZD`UPHePmA*oo=+aT5JFw>D5`fJ}*Otf5=rNeRz*=5)ze4S)8qF1g`bWs$z2-|*@^zR{hi z*pghKWDQiZnfNZdSE69UNCK22e;$fLgO{GZlFrS$)iy%%SmZm5lRLo?9z)iCnaXJ9 zX^+?ueiWitC&s%7{DVS*{ha83o44eO(7$6E3SrTIx=f z&o1Hp8c~o_ox}AB78rjh=-rKjxiS}W57}mBC%8f7hIFACDCzPU5V}OsaL^-f=GB{{7@v3D>AuECiwMhrz1#_8RFdShfKbu>un`mbPK5w@^R~pwD z@k+E$QlQ?cefr^XMk$=%8yOkHN9kj^aqd@AoKPqCFX~3gU|DDAPO!hg7&$TIg^HB5 zP${iXfNrHgjBweVI;hq2&pE-_@|VIs{>SBn*%TxDU6n*BxhIb3MhFi6F>8EZdICY5 zQMwXk6=R2WcmJh?ipPv4FougiRCIh9ond$WGZ0}8VO?6%*G=&X)uS2l)F+RBPH z4Ug+YRJFLk0iSe0mn9S#f1$&NK3=Bx&F4zniD9-B$UWeo-_=UGQm8v0#FGzS_?cjr zVB@rcsoD^>vJlnG0BSo;i!Jgjy)anGX1fmPjex%h`e&ZkrMh+#rnZju*C5(K8@{r` z8l6R*A;s$wd`APhK+9wQFB}djJ8nJ?={Y6mwFCL1F-9Ri;bup$iU*Ts`>w8XuGD{N zQ)yL+!H|MF$x`wGF^`NYx*bEeoG zbdTa4@YA1_>Rip^Ggc~4&3#WVSv;KF%#!wbQ5gQ0#3(&G!*bS+jnjm7Ri;X55#oQb zSllAK+_5?;;^q~_Ds5k|-D@3j!DCNRfk`lfgNpbt@R6hd9)o>(hkllHiT72i0tO*+yl&AFvV>Mpnvv|f z3q&^8OPOA|d=Fc1UgFD#*Q^~a*Z0_Fk*1gf2;LZ^-EEw8;_n(EyHLf-BQ&xDeMQ5i zNzPVBe!ZfROwAuu=w^1Uc*aoWLddj*J{{%E9&!XIXyzzLjgDH3&Bet(7W6z$sr?}G z^df-SziML9yt)yDq`bG~`5C_9vU>R{XAy~HQj6Naw*o>0iZg^C(TV1sL`IPhW5+*^ zdn(kfg90jwq_o&=2nUi0nh^hiN+)f_DJewHQ*~oY$8@XLGWzxvZgbdRHYbk^fndjO zoGRB;C%N2NaUfB?osK_f#}<(9R$KJJahKI54A&6Ti*;fKj5STo_5--fG_GGW?qbsf zjCI@0M;H)w5a&>OQNyE4l!3OA`L62r?1-ANTn^~V`OGRkH)}Foa8&svK&>3Adl85+ zxH>-&xbrH3!|Ii&UyDzzpKyKrM>s=!5%tm1#v&ttVP6-QEUCzf{og?#O%l2ClkoE0 znqzQbB0+)rfpE|Qj&C-qpJ5#+?S++CS_bgkR%yhW;|mCO4k^(uE?;pOt)+_{mJdTw zx!}dvizcmELAFYtb>Fy_^fYL zgo%?FgrPmIUMfAZpzsI7oe7An`1(knR>3TKwlsTWB6EDc`MkqHTk}(y>qINi;l_BA zphMN)c3Ja=x$z!#EvMVtJ&GIs5_F0h~C2J-!dbo#8ldDqcITKe!%M zL1l`SX%`c5{*N2+9C*+Rrip6ewKchVGlv%-dge*}x&>iHm4xC@KokyEN^*7L)+F1r zPJ8XL9JI&XuK&8P5Erxmp^Ygse)mp7!l=$YptJXAxbsX1wiJkg288A7|H==?8BrV2R6&+UQWZmlE^ccL+^z1W_3f@drCM%p6s^K+#1V^( zE#EI9vvmH4`eTt=+%5EB+#8Oe{ll#ayrji6IF84>n)L4XTe43+$SKwnx3ypq1DTkl zIa1_SSQKclA_#|7ZR^^7f}ka*Rm+ZPf!1yeu{#O9M<6rgA)PdyG$E0+H`hGv1sm1# z=5DjeHtyWg@y%^tnLb0t-BPD=kjR?9MvxEOyw(do`~uHAgy=b8N&!^Eaq0nH?{ zuV0YP_oAOnz347ON%d=}-$HgFF08Au3j)J4>%r~e6m8MSX2zr{SC=_|yti=&@cOH zWM%7tl?4_6gQ&~8>is{V3XA@49;kn~BR-G)F${}7cp9*qi4Sfb{k~Jcy<_tH*e2)xAXl*H}hk5xz7(a5BzUWLgvP%SSCz@NpFebB%TY(Hp2!=UibA zulGcs_WMWLeQ-=d?}ifE9B<&@-xU)Um@X9e?fmRl=dh;E)+ zbbaq?1rn_i^z^D$0RRusSa;xX1hq+aR<=GH&1c3$ei+T-MPO{ua~iJ}iH;P5Tzu-F zICKfExND`raHYy;4Db|gD5%1a^vm(HPlQC$ebX?rn4geT2<9N4vNTj6J*n$MqEr|3 z*x?6l|F!|=&I6pk9)W33usvd&s~XvNPC^-*BnF^QQ$1<>@<5^(|D*MD^yZ-jHN=Bc z%B!Gp51oRv{Yn0mtFZ8K$J;jE_Z5F279ON|Zi$p4+y?Lm1ltcOenC*yf!VOaup^I?_&U`3REc7%iP968*DuPyq!~gesjFxG`1u^v@8QCuv+hANz~?W~ zk1|Z~yMS!nay;(|hPLq>POP!_XC;MKlpoaR#Aj5cc?L^qe{fI52ZS9f+4$e3H%kpuGnWYjR+=hL3Nr zYCcAco&MazdoukUH5r);O^mUY=4q@ZW|`WrE05u0G*IFTg7{&ev0<%S%nQx?`HZZm zm`{&!1#pmfQI&N)8j2%IH#OPo39sF>=h9dc>t;Bd^6#t}qI3FoO#Ddz4IO#KO)eC_ zh&$*&B74>jE!T}>U{H3ky)y{~$>y;C-#WVNrXMtvo17|i$N$Nlkove=Sf|O^BC`=7 zjQn}fwm&_!KkZig5m)2*2&HYbvMDXT5RE2x?Z`Xp#8o<&xvBcWCYRWK$qs}^HG83{ zukESQF7&bKC0sQ%kYTdJw&(67g-78_L7yNr{^61tL2k1xvae)LIQZqPU|oZruon0= z%YC!^AI9B9oXr{}z9B^3N>|$upDGe$tvgav868nmMLe49r35_Z)*J&^t>iqy9G zRw~GBN$!~sA27bL@G0Vey4GQBsrj6IP7NrUhn(|uHbxL+;FI$43%IB>#Ydey${uoK zHG%;iH=+F*k0k2smB8qziY4Kx}q1_ea0zs#Sxfb$$C!Ax=={2 z)@qj)&QI5yn>`7x^b3F=5?7GN`{JlZdq}@{Pr;^Dp88qmEvgw4)#Y4ffo^M-g1TmJ zPGpC4X~O2a&JKE>h4RxKRDo8{0^8Mi0voPPf|*Mqv&bBh+2Ie*R%rMC?qF*@G~lup#pZ zu;{NR`kNNf`T2a2wPSI52L7sogAM#Rn=v|9h>i}z-5~jyJIR=>BRQ=~UiLJfNj04JZNP3Dp*(9NZDPdc^7}{A9Gt7W%P<* zK%-_${9Uu2xtIE`N*s2p(0`GYi!+cnj`i(gd45V`NoQCqtM}@1Y9odqGYi%6L(9x0 zh#^}cCk`0;neV-VNW70GRaT!VN~qbQHRxx)yQoF!B`oay4}UjSb67@g*EHDW3zS^E zHabo0UVZcZx?uM8lL^1E!7R8gbIfISI{g1yft4?=Shq*MND4A@fq&;kI6vnXSMsk| z5jP6ThJ#|L!nr-seN0+M-xpZpkqon;53rV~k}E#SPEF`Fp;$3FC}+eQ zmGIz7gpZ{ub_29-EG?R2FsW6qRZz))h9^SWOQ;Gh?1U_ihA zY8s;Q)f^NQ#UyNHUe!s;wl1IHly%_k+W%o>_fwQ=FRo&5h5#GJQ#gBPowaT~!n40Pla} zGbwA`?nr!otfSN<9b~yh?M?vhKNTCD0H1dr)40) zX-mh?+sd(YZwpY!^N$-Q?uuGYEl*tP8Isl+2z;!3?9zGfm_GfN6(#2jB&ZwB81(Qp z1q;HZBrvqNE3myiuK^Q7@Ty&yKP;=MEBvGlTPt zv1$TujfQBbFxvlJZT*o$bT4_5pAvXaShd&wQr;MHUL_~Cy$~Z}zvEU^a>;_-7qQh| z+Tx9@4CZ69TDC2fb@*EI*K5*u)IGYHS&tEG?{^v3AWbBIy_3Q$pj-KUNg=|xVL=T0 zguu)-$XR&ntuVWxQcFj^-5Gws_yWH=ih9T|^3AzAV{jS>)l!O|szzl>bn$J-;e2*Y z8?Z~rZ~N$8Ee*llCT?zm*zeH(Aa%sygY|P?qf-!)>Q-p*eOg{Sx#DnNnJ!OA1T9WE zWX-rNgEEtMY2YMbNz%V!*xbPubiV_Sbbq&Bbg|O*pK8}!8<8k z{7k4Mll6w&Zio_k>S_H&6DlbOWkulHxzr9BsL2?Hx&#|M1Ez4ltW~BRdN4VF)96+s z3`;+Q)X8bF%PcGaO(!K4q-6n(V_qE7+50d_aJmRi<&T?lfEG5{#I2x@UX$k_{3LrF z6f$pU`7Z5Au<-*`)8^)kvwy-W^9JMj^o~PY0ct)`Z+A1!u`4NYE>&r_r7BNM%o&02 zsUZLdm zs^ZNB+sQmw@L;oK+w~}Jn|pRj#74PSSC7piulx^tkO!{A-w}6a2&dHdN{Rbp0;!a; z%v{hyt?ndAY@f502!bD@g?9L0p zhiKceeMYvj1YwTOqJ^nv>o^q-R2>JKwQ&toixn#4>Nv{Pka60!a|(S~Pp8mGt&EVN zmcndjHZH9Fnx$8fhMaejyL>CgODg0}Qq$4seTv9j)~Re>5;HaxK3!s3&4~JpTwPOr z#KL&A30*!pYkOEp4&alFu!SBRF{KP^+YflS7tD(VvTxx1XnV7|)!KmU>kt_T9fV*A&XFE?8O#6PpP;dVMGMPmiMpK<> zPMj#cWodxan@c-n!Ff}7v*+fSP{YTYMuR6Px-j09!ui<}=KS3=w!zO2bK*-=+y1@7 zdL4gQ#kOf#6I}UM`R;5{EHJPZU`yl9&@Oz1dCn%)k*$w0vjcQLbqqC^KYr1%BeZuV zybfL!qWj~4tpFm-jseQ~N%z_MEMQK!Ta8(J8jxZJ6=b-@(mkUyvh=dxx+LA_KrXh3 zKaUWr>Ydtx`&TgEk)*=6GM}hw)$LNOG|cN@S>pEP;m{c4Zx0h##9c@LuK)_Q_}&BR z03lTjsq|F$*nA-+u8&&6wr#B`*F9q=<|xpV0AApwF*z?%B5&vV-#x@rGCcFoh*ovys zOE~u?cqzIIj}g(yv}S!`1a`fUrJxK+J>I-I+Tq+hJHx)K?#+cCTiVhmV@5Rl%Ms?m za^Qp(VX+`Zon_G5*ng0gmMy}46;|#SE78JSy5+x8DXM3Bqe6KVcb+q3TM*lWf-MVq z9*H$5teM2r&cQVR9*-X?^6?o0&dGRfQ!&_7%ww_#ULPW3(~BY82m}&yurEXZ)tpcJ zRUofy96%$3OnWjMun|*&B!ouKD@LxL4i)nZtG2Do-%xMH56{Ql6q{lkZ}_3csD4o) z+$!C;mdctJt}aI7jesA8EotD}zdcOozQN!rt$l_aNP#D zlbvzEBgp5pD;zh??UMHUQkL1|lVlhma7h{k&cGd=Yxv7tc`>XK1|U`&;=g@*0ZX}+ z`4ojf>BoiV*pb#LS<1v=S1Z=CBis6@If_%L!8HLR5@azm0Ad`uzEo-?tT))?$L*Gy z22-2A^1u;>5;d%8T;tgQ|1OPb>5z8(ToI-l&-6x`i{<}g$GTRTW8y`mNY-i@$ZwFr zGxYSP$tC}sy@K(}Og&mF1=-O3Nr?B70rsmV+!nAHE|LeO0g{kl@8gwi| zs7ztPm-5e9AAGEhI?Hs|Ea{t~XRDjczz?oNM$-WZqPf+%(~VPIn;*_0ks-INHe5Ey z)rTWj*p$xh0+Ee_bYaBJc?RW{a}!R}1b@&*Seya%t|tr+313A``}QP2R{B-^{G9dp zIOItwQ%nx)2tJ2?4BxGH-G5za;%^w`WMtaxHB1@kRC+Ztn<2oJayAtcEwd5O=ol$SN}^~e z-OjX^B0&U^>+5oR8HcOmZ%0JLiP{`Qv4gUP)f6lXZ0V8rq2tc5~-4qjIxis98%RnE@V8m!k9OUAiCzq$#3Br=_4 zmrzIMb|vtYJ}bI(H;YK5ZHGhPjsuRZyK0{~d-n8L&)7VF0V*s0lE1KH@=}I zdsCURc)RK|g4j!UG(naB$+$gzeIi5)uyAtpU~A%~*QZ73nWh)GyhfA-PH{lTdZLk* z4@}+7NdWypp=)v6cN;`@kE()AGu95!LFZ?ughYugAqOsnsI1*+bkFhzdTskvIQSW$ zMXyD1R1!Zohp?E}gX?~vnZ7?gD11ZUw7oEPXomq6)yo8LU?@ldA87R& zHSqt`+Z4nk<0_GdH0%T-N1vjmPP#EKl6sh|rzFJMBqSmOoqwO9Z-CfCV zp+mK-5-hBQ^U2q+KFyG~+d&SKt~w91MREq_U)>SmVSGoLKgonZxKN*5sXafGDAa@c zKg_;$-kSe*`?%o%vGfoC*9f>AoF@#ynLYc~rK1fdU%%#T0+>^%ztiA0l(AwYGHdMwM1J&v)hj{G=oihgHJB>=8X^cwp+*wJM#be4ta-mJIz4BbQUO;buJB7#~b|rFafW``t6Qp$DJR2WsC;%XPH z>x$#TVDk{G=7Bq5O5?2j=nG-AHFBY{$<6(w`paRO*$`h>rt6V?pP`r=tIF@hP9)mS zck>N`@XDd;EBzmFq>5RRnheY@1a=;%p?W?Ru5`WQ3MtO|`u+UIaJ0P%uda!IZZ?-0 zQkF)+L1!J&dcqG``$wn##1L3*vLZ%(YUP5Bg~|97)qI6 z;poGpPi*0ze;&nIk!7JGy^AbJ@^V|+5=nrQibG#TjGVeC!Dh+UYMf4rqSOtyEaxE# zeQAJ!GgrCa-J9Z(wW1Du(4vXEB1W08LP@!iLN{M9HN~X(PXKW&5(`c0XMsKAgP>v4 zcmpJNoJZ~npoEB&(*$%y4xO)E4n@JVtt%Y$#)}^qj-}SP!)5xP(D|UMSU@#vuzdU#h$#9NB5XX@#UaK>CUDJem^>6u7l8Is)D%q!_&QUN6>}D$%GRtFl9{0jEdT5 z-owMzVBxl?df-A{K&gYR8CCL{L56L*(lLdYOXNp2sg}7YX*M(#>#9Ct zPji6=HStJ@o>S#5XmmnD8H5kp8D!%8*wZ8S3L*8Co=`X)$p?e(SHToNxr=XL4En&b zFbdE6b*f(cS&g>U7RG@Z;TQV z2Xq9ho>h?m7};?e5Me4E(lIuqpn3k2NJ0{#BrbgBq`hpIanBOSwg=`s4#~mWrTI*9 zH^_QlYygm^<61x>RJjC+ZN0GF7%b`rhkQAH#qR~ii+q2=vnyXtffo!86L@?2P=qcVENYEQ4L5CT^(gB$jV;eo6?dnz=QLm!2!03YO$=p1~vvD~RoH z53w> zYd|#X&mck(!gM*648h`ftaC-f{P6Wb#e3> z-Zfp58FrgtH5R*wO2Z$Ylnd0Br1|hn9!fbv!v*7Wx*SE4t281p7qd;KScsNBe0QrF zhvwzRsxy<`$4dLZk?@Kg+?xX@?RQ1p#+>DxwA3L1?K%fUNQY0gxW97SQB)#9DQ-M* zLQ2@Hqu?>u`YN`0y?;poslkaZ=D>Yh1Zah}CK>x2we|Su zPEPkZkuw>uQhnxV-#~e@qSHcKhtUV61MC(_?2JFILXo@+Pat8%(qG-gW4QvZ@2 z1WAvu_;WUH%PAR!s#KI223BAFu0CoAUq*b9AhAGhC>+(w$qr~cewbkTvyF+FcFas6 zTv++(3!yt5Kv5yFvNo@cw6r8>@yps zZrkh=`iWy{s=?Na!oa-T2dy%vh}iUl8xOQ38@TM7V);tjOkcdwmpak%0)}6`kq_d# zPajQL0Ed%0`o-A;;rS(}_|EA)o^OWDXUt>L#yitBRXmt9Uyw(4klfVb(&51LsR z(%d3bdT6x|>Yb-tXEZ?AssqD8ucKxu3MMOk69h{xd*gv#2Qp}X41*;G4vfS^#}H2k zvZwyzg^m26m#h}eb8+}0z)zAf7~$!ozQGh|J$O31!!TIS_^0_~dI{ii<#+{OZQc#- zvsZ4+%*@?_0xF?8rIJggu9e_OU6R!`p}fH=1}xVLhEyymx%f$DYoe#}MXc4KhoYGj&>zU@y&3_O@tm*w7qy1z@D z9wQK)m+Xk@susq6cnCHH?!F;G!tABW;N&bnN=o?c0Vs(42ggTRR^T{L9hW`LCom9x zZzG@Gk8+ppa)9&*j*VF0o1oH4jkK0ql#&>!Ks?lSKE!6vRD@T0tDj{STJ8pF|HNN^ zZzZO6{(0;aTA0|DGpeyATqx-s?n5~r7jUBtButF0c(YH$tWE8vljV%S6{0*)<^bW_T_XW}czCcS@zVLqZrhH2MUp606XcB?b;WC} zXdnDoa0c?~Y$@xj_E^mU0%wP_xbiWEgRJwnGXdnrB=S8a`+Ew%klPzIqbifk(Z_wd z-GN<}?0JPhir^6Jgq$ zY%OK@0Sm;CRMk%qar9t~mw#d;*w_4~j+bD!WLV)yCk}mp+y+0CO33meHFbkq=M-|o!5T%fv*+HOWu3rU@tI8i}N{| zcO9aI`R*P;Q72}gs4aD?6KW`gM_W~Im`~Cq;+mO%j*7V_H3%y!7jlcc$vFP)k_hD} z|D*7%;!4QlT6~!7(7DNAa;&b0jox(31k+r7`tLT^^*yP>Os^vW;?KAoUjP{4bQEZ- z=a|6o-1_~A*~)9{2D_FOyd?%*-g1btljSnnXrJqmlds`-opWx_e`>x<1IWYSxp28{ zFY-|=9-aZZcynM%b$^==8EHl)T1dm#q=vyOiGWWot}(rKK-=uXKeGTCZ~oHQKf)TLhy8($sD0=|o6EDP$hjV!GlCbMDP1#N#}KWgm9 z4JoP%SbD?Q$bb*8&Qr?TE}xM$4gf-h5rTqdc{knQLg4<&x;KL#37OzO19@BreiB=o zD|;G({)63R9(>n9CS=bQ# z;}>~cS1996U@VhFb;P=_MI6%r0b?0IhD4}$=2otb>k-AO6OH82U+WK1wJe3^P+N1V zeX*&IQQNh%jfW(-4S*6Q9L1?>G!Bw+M-zG&AVy`l5zHsiVke9UU^`HqegJfk4d7r&vlq7zJS?N4Go)n4`C;B)UVN?~7Ci2EDx zQhr~X@!=abG7>xr$N#>BCo3S`W8%K*Q3l(@rs%15Mivz|r$xq=@ooOD6QiU?TYwF% zJBs1FC;EA-r!JYW2Jc2adx#sYltznkMX#_E8g%vs6?Fy4VEuV)9Un7FXVD|ML%^rdC4K zDN?~t#j06f#Es}@phDO@_#-gDepGiNc~$zeVA2r>Fg+y|^Z2bALx!TQYLF=p9 z0$VZiD*_Mp$*F4V<3qro3{jj1hp=Ktg(&12eZv{(vx-Kt)wjT(hBNLi^<55hcoygI z`fg&Cyc*@c&O|=m#VsXjCYqA2HF#qf)dy z)2Yg9v976={tFx0AST`l`Q!s3Icca6`;xa`wPV<(e`)^AH8(DUvn-5)Dzl&oSA7-s z2DP&6ek0^_2}QDw1-4}y&_a*@nW5xdGci7x<4Ank0cIu0MW5u@Ss3C|&bJ~J?--Ch z6&Fxjm0~S%yOjTXcHZgDL(6kX862W5mwL9vE)Lp3KWIo-w0EDV}$ zD>uvPYb&b4SLO55ayx?JxD2@a=-!SzE-@f6DB@CIl-W9afi{?mM z7lt6f?e7Y|4Z9U^)2)zdk|CR|Y=a><2_IR7sqEr+;Q=_=>zD?@xk}OZOoIUMHqBPz z53B;nydYSgOTGAe`I?W9YJ+Ag<8a5%5>sdZalAOQ>5wphQ~38- z1?)z?Xkr}>ECI)7Jd$nNons+ysZegAoxDVp7>=R%>YTjMbmW#|50B-k_&O35#I8JZxKk zp)x|Y;5{&g$MM1cA-S*5`TMHe`ELCpZgg=?L<=hFEx%gW{T~zPz&phHx~UVw`~|IT zUDl?BK0i|V4T9Jno{W>wpF431i*O5l&|cw!O-FLTbme=WNTeO8ubokE{m|FygG~ESey78aW{OHMqkMs((=p-1~fBEbCmG z%)cD_WwF5Y0dQk%Q4k_94~^HsS;e+?Fz)kX(dUWSuf;%)ZGw{a3qaM-`JrC4Jt6b2 zd~OfK7s!?mj#|~WCR)HlYvKfUxvN){jO$iX+FLAiK%bKCgIhyor)oD~A)H4k5PK0a zAl*^8IJp!4n9?o$nMS$z5DR1z?3z5=!s5GON6Iu6!dz{)!RsXc#zvbOZk|w0_&RZk z=~Vo#)*C9AO1YAdGsEV%I_-(3fzDVKg35TQ_H5COlEbjgSFE;w;T3{HT@R z%a-|?gq!D+E3UyN(~`R3uS-1$4k(IwvLsrY2B@UXOnY7+TD#E9yrMH zxgtlQUe4BLR(J!vKc-qV7x=BP;blC@H=yt$Dfs z@3$vJY@mO+g~OeoIe<2ey4(p97nLNzUcTZ4Fq~7B+3Ig2gLZ{@3I50vIFg&j16 zboyyi!Pz>hur5*mp6`71FB0v^m%$;Jw66bO4V?Vt?txmy0pKDGHK(^nWPQ^LPg1H2F!F9NB%6HKiC%cU>=Z=dt3gCB6RZRzQ&K48fxl>?$LkuO zqzQ`Wc@PEIfLJ%`2$oIqWSdxJGlT~Ic6Fk1gl(N< zYs0OIw7T>6SnoICo21YgM=UVPUU#TusIpYN^mnHuX=A86;9OSC7D>()6H2x7Mc$58 zQ4l4JP4@Y%z2D{PsSyMpA@kF!QDC$D23%WN!UNv1O!oVfUF<0k0d15XBz$+p z>Bmj}9@-96$pEUIhJ~`HFe#G``?Q!W8M@83#Gd)GBLxBPUg@0+_Hhyhq5w#&enYq zA-Z`A(GvFi1Xc*YNYTFOlR(ppw;f;SSsH`75i*AzGlXZhD$mYo5Vs;kdC${@1QSlq zk1!5F*3;ggQsOCmDij+aCMc!s5Z5Z$3xO8M#>QwmC3SPB*81eS>X9VGHx?;u zeQ&X$_4%<07u4RQ?y)b!4y+Wj!YH;7?p9GB25}p&TXHeB+6$9POZWzo%SbCBlzL&8 zWIT<~8frD;mO@msxhR<5UCyW&NA;smqF#NBCP>G0y7_?7flU5q@z;&TwjzWtEv3?b z-N&aY8TC64iSnH=8f&iOLYD`>4_5O3HTtuTZkGbFJjOhn0aEk?u4D92Gpny+5}5na z+xnA8wG^&7?J;L424$JC7!=RTcXJnZK=w5yIz4%y(n)*ywxK@V+}WU`q8OoN8W%SViN+9?`H3srHHWRJ=^*Y`Q;4NR88!IMtr>>>v&4gK-$#PEs zUe+j_Z6<3CjKW{-z{WoMByb0j#n9U@_1dV96pBI<%__$ve1NfV)U9rba{Cd9lNM-F zV`7?=7d_|>XyJUR%FE;=dFOcyeR4xJ7jF!l-#>iD7{qN})+2+M&C`PT@3rU!iFA%T7!lMdBH5blRAjJ#EWXQz6-()p z1&}r3g;$tv0$MzvsIPQf?NvE}tFyq-<81!AUmG3(iz}CY*e8P9KhmI|H9)XYF8qnO zJ#SwexZ|nS0!8w_G-{!)DMu-tq7e9sMXl#dkr|I2B~=gOM>?FCnuBXw@UN3R8(#~O zex(dJ;>bj?_dbF#PQDIIbGPL#t+fTnp7(c)DZ2C{S)5f%u76Q&#(TBXWl$Au_c~dR zwrn%p!LK`w2XZW*!h0P?zQtXJ5-!UE_E1W=%&?`PD!Qx-$}lPl8Q1oY&@)J(eX)8! z5~JIps-bUR{wc>a(kLy8hMi!+?4rZzAz`hg_(vlB4M9%pm+5Py@Glik$=K z7lZr*hFgpm@Sm+$YDlOYf(28CSXB9nc?4+s8JvQC51;f6aab%PaXdijW5lfjUQi;5 z&i5JLuH-~yNl$ne5F3iWj(!mY`DFn$W>=@^gtr_ozCC>XL-zKLO%2sl&u|P`lmSP8 zcZb#x2KZfB84$FIe@+|DdpEt^bT=SV3S8T!v^(w4L05VW(g2cb2J->|HrL zUuHV~;N*rT1%vH@>}a_l#|R9^=>@0(;pOY_7AO2~oM|s%`clL4=vPPP)&ld@<4HfC z7m}j5Kc@;(_Mw807>>oFro6_LTWmeYA+#GW0!cQr4>4l5LzS&xH_kDhDtY`6bp`i~ zPDH=`KJHIYGG;RmE~N0O=EPTX0=WbEQ?G|s37cXcMWdZ!r|6={tJe*C)$Q#1n-A@W z*EvH*a*kaZZ85oDeJ)&u^XXFYI=ZW{BE>x-%+!}RKhdT~qiy-PDojwY zujSN;;nkd6(@jD0wqX^!ZNMDmKsn0j)TX9f4SQ@!^j`^{1Upd-$1|{x_A#vg#_Brg ztH&)PKAqhOBFa@*c;YO%LT3=^oxxcII4Q`HXk9%Pv@dg}TBX)cyEG+-PA_QWOAcoW z7>QVXD$6l`AFVOdZ9rzUm6{CW)={4FpbLhv#ak&1QmreRgOXX?JrG_H? zgU;bFs=Kw(H)j@|lv!?E-y#rz4Jn~Ln4pI)u;e)G^S5Q~oBDAEyfTKyYWxB#dxhw9+2|T46=aEP>wvVmj?1$staBW zQbQ=Umt6_lt#nWg_72*P=pQxZf~>lnM}=AoR)~4+Bj0^}-#9zV*Z6m~PJrQDCLvb>rpIy2y8k4;;kO zw=nn>E+c0-Z_KNia*0mE;Sy7Cb@&cz)aLlI7aV!{70_LdkbOgA3*zYWuHPt5NPLJl ziL32n+3}N`gpNt23(@NR1JBZcusm-UdqE!@`NjexWi*P3ORNXsCol=W9~aX)8bY1l zJ}?hO<^^m#WNWN=E#pwozJaPx`=?ox$W%Owdx-vzYEif{-p*Ld3!|Z(8ovO*Vh0g- z<|U(M6-@PlZ9wm2hR)sh;jHD3`%s{wnW7NwW55)|5WypLsiD(6zkUXAGo`|7T{+im z<7P4(O4~4g;0Q>g-_2#c+x!cxO6>dG5H%qO_W2eb)` zCUr`rM2K^OF;#gE-1m1gBWCsB=v~v{(`OHpv+3jjM-3g3H_xMjy)t@u*s*iN-X(G9 zKJ|xPks)hX%U@LhSOQp%1C+hT3~7=TQWbt_AU9A1SsZ)U-5oWyOH%d!+RVSO3XSO2 zqr>6Q}2MwwDd_o4s|WyuYPNO{7>=A?qI>*+`A zgMHrrBo7liY!1&i_ndQ^`gA351{dT}6&?G5jgnnn|4BX?{eAj%X**0&`*h$HWm(uX zmJJmWXD0%QcsZD6n*csvzIVvDL%)sGx0{>#Gk5yMlrKQipH=Mm9-S#27C&D-z)KY% zHovv$<}lUG%k?ZZ+s5Xv=S_|xS997LDSt5XqZ@PpbiS8!rO$L>;faPzUjFo9bBMya zrG%ddym1?owKn{DuPM2rPIbe5b>-#;T*w$dG#>+msK2$Ar|ytUaQi`rd9_CGe;_Ky zBItlYxnV(3DesL5-pps=C-txj$EEJjf?is@D?guub{6q4%zn4b#Zj~Re%ZD;(Nssz z!Ux%zCT3wRDvLO(y^_{o%d>HnY-!Ieb|#o(kv*$Zz+S(WL>Wpa9Wkh#a?0uU#c>^( zSsCiI+GmixXn6hBkoCDY)y6OVWEw^P$%dNu`HT^1Yb7S653faJ+|uq@#i#N2B-dJF znbWE4cYxb62;ig_?>1rW4xVEXMJzyWf5U~)o6J1c^pl6COQOr|@ofk#107$QH-9RV zO84EEtl$4gl^FPr)lF$`hy~^$4SJfOP~pCj7^F%1G&?Kv7b@qlV6l;|Cl0Hwngj+UH27(kr$uyg(%*+OaJA*CHJD;Xk+T8 zlb(pQtonDd92sNCO4Bb=NPte16bQy$AB8Eqmf?th1Gt4U=USK1zxw!gEujBkaix3J z&m$d&PW*^uoc_54EwQhC^rjfJB2pl}ImZV<Z8%@-w7(pb z(h4IX{hMwmTF!xDw~I4XbSD5}1X##?<+=8$UUndUXnc{FFt6y63oLM9^wK&N*;9wO#IV$M z%@Xe(d0Gb(P;X{`s__@Fl%UMtiy>|huRTJy4BLZ(cwbo)j(ZK&I>q6O5k~_{8nykC z4k^iYctdHm!@wVW0II7m$n?OsNkNcR3@9W0z(ICv$)_xAz;H`FNzCJWkOCM@k<~Uj_FtgW7@4Uhje9p zJ1OZ793l_?L!AgwD6EwprSj8Hn!S0(0au2m zkn6nLxtYb6&oUGxif((~t^p~{%fP@|+Qk|nxLytm>JEji9v6-9n)uQZOJijXJV-}+- zM55$IT;HuSj(AD0KJp))2S{^mMRr-in~e=OJur-~(yl>i;5AZ?4;R%KQ1T9XLm4Mk zx*g6wISR#3V+ma6+Oz+7%KA%F>k0p@%2b;!DPZhT-*8s_59Nt@r#{ck>CX1L(lVDR zw$Y$D2FiSeYME1rpH{n$hbQhb3z0K2C)b5rHdh2VvO%`D!`dM4y9b(I)U^vy z6{#gO`IL~%juh<59h+HRTxHT0+%HY=rRSbZaiRQqSmO}z5B{j=)}B?Gtdk9yfZM48 z0pYU^-Kdxt!QSW`{&_5&pOw975Y<)b3>`w~10+Hvbmm+s*UQa)O@E$z!CMaCH&B}V zto+`1sh>kk&EXV$PW%L_5o~BJJ>!fYR*QRNkvN?S znP`$-+tP11ha8pS1kL}VWq|tvXy4=8AK&MKM3$QS+dbD5E##I-Zs6)HTjJk+Aw&%I z0S8ep7x)Dylacu>Pz5=Li=wf^HjU7OaWE6YO}6%2$ll_8kvqz519`TO;Bh^e(Kc9B z_L)?@Kg0R$uWhw)ru+eJNasi6DXxelg*UzE!}B6+j`U2)+Pnd4JPoAV(6v|v2DcXh z7;dn`7A%=>`-5v(z0b<#Hc$Y`O(fI=tI6z=b<6#0c+PTp=H6Cin?-86s!ssfx91~O8=Sc;1X zV5Yd>8|jV~U%apDq|tSWeGdAwtx#qG*?hSk5MVHX9B5oHZ&0b-6@M?Y zVk-C4lF~=`0nyQ^ek^RP!NPJf)u<)9KgbFk2?dZq;P%lMvv%ACZ z#e!Z^o%dPbNcMQKbB0@^`qRUK&xhSG>?ispoK0{9w%zRG5d}r-oW&V$8&q z!=Bea?2L3niFpgCI@uPEpwQy*-70s5;Ld#Qe{>up^j)VhFNZhm@NKh5T zPzzlz)A2_TpXkOH`knT|Ge3_kpv0a337?C%=Hb6fCBnu7;vpf5`5-M+SOo*q|IpFc zU)Zx@;*q__gaJQu3Xt*HtOiFl@=i&vG!td1=KSg~FR-TBF+A+mehpdlRbCOJbu26c zI}(6jBhb8cyTY_KE*`IjBD;2N>FmdE7!Z(gzTaKw``aT)WOb33AautBi3rn7q2xV3?5qWHOdm&8aa0}cWJdL}f=#M=2GOt@`gWhwJ{T;sBuRa5DI^jLo2vS0 zcpF^=Cr_6(#*90Z(YPaNK>x4!#6S|Hr2@p;w*VuKo;+Hn57mVX?}Xm!(X=`@Qm2cE5) z7$?((G8dqf07DDgkd5eBCJ@y3I#*;uSp8_&D$k9LGaFEaMp|)W9}b>?D@#ME?Gvbj z=z%vZHwc^>lxyyn?Nj8Z@9LLZ$mYRF649f`;6$l?Spt1g~M$aY%C#Q_1X5AL8XM+ixqc$u+7MC7}rQ3LqO3Q zN5Mrv;skOY#WC^)?tz2Etzc_H28Q!~94I6LE|c#eoF8c=xB%gpwT*HdpEpIB7PPY( z1o#PSa`Nn6K90(g9OL10I><*JBv+4klZmKUHoVz@H7dV>7xu zNOe}RuZfNz=E8hTE1zU%%}~2*Ay?6@HajCpU?!R(0=X!PfE+Ab*$K;QKM5NpvhvER z2$71$^L@(q(!RCn_q`?Y*0Ii+k&-&|{Z0nqQ0^V(BB&YVaXoI_`pf0X(91pgcyh0@ zkv3CN#l~GcIOq!dY@6RW3RAC^kvI@lZ1kax2zen)k>*10L2E`XGEorqwCxwU#RH*A zKEyL4KG5OS=zq8C7W6AJ>&M6HB^1#U*Vj? z-h1ohB1q~+Z3QUZehbexsI}OHLA8nKa)2B{j=|oWlWdALE`CqVJ>1OFkCy=m)+ZQf z%M%!iqjx=2gAMx%i-W|wocHpKQLpIzlkoO|;Yyfk@Ska*=aa4@z`96n6JY3r1}fBn zTjrgpptj(VHZ3aU=x6Er);$6IZrQNL#ORxmqzUp6Khl^{)8$dUNYBc=Q>biFyQ}>? zL92ubw{MhDdu$aJXdQQn_%M>XpRk6EyP)>TLP8l}8Ya z3MQ&I5#8(pyg;yhIL6>1jMJ`n99GXimc4*_clxOd1m||#ed@PWJ??p7TCv>b*_Lt8tO?D;`#Ml7WjI z_DHGJdZV2`L3@t$)+C9!?>uock^K?LNTjuGa6~*VqU`q+AD)YrK+=v$fU?g)96ZG_ zuP1K8bJNnqdOsRATX*qJA6DmmJN|&V0GKFk-|jb9_vWfKUM=3yE5=1UE*=@l0rn!u zf-=a;q5d^yn^?CgMKp3gbW!`Ud`J6QnrFC)h&Fw0T2^}je-ERri+>OGYzNY*gB5H% z!^EYuYY~uK;?;gG!9ViLWrz~a-5T5{$f{)>NJqn^+?obovd-QkX8yLdmk&V`e1REy z$&YtDjLzMF0LQ7$p{6DSw7bwS+oJS;=1+oW=`vLd?cvWu(l~XGgnTC# z64~~!%li}2;)TwQWZe%Cfuw1AX?6J@m#kedi`@Vt=o{-zLT)HGcRztHs<$^$d{ICc zA;ex#p6kl=>g}j$)RQ0ClM2F9gQ>j=(H<8eZQ&x$o?!{rb|m72OzavC*lhC#(`FB> z{2C!KgdU#kBIz`EWI=-Mb8JO zSO`1%j||MAjZ0l8>-69_I)(@xb7S^ccCT1CRvUxKF$p%GJSS}r?1ylS<8RvpT5_4v zjkey^-D_tPrEYmZ7{@{_lL)_Y^`@`MNP_71|9LSAu4DFw699judj1TPTjlI`jQjJJ zImT7tzVE!UlXnoHzM>!V<;UCDzni<$ju+-_|EI?CWC_RZH1@ryJc256SfS!zXUPb5 zw;Yf2!0pjA@LWvkK5;+_+$5_mq{m{wCfagW{{tcYMz$A3bTmxoS_WJ*r;`sC%&OD# ztzt@KTQ?eYQhpLQ@+nvp@wbBpLFd@mnkvQWg9f3X)!G-o>m974fFI)%aJ(!W&xZ0DJGJTca?~DFfby`SK^E5op zK`Tb$f;aSfM5FOmv=RT4)Pck?waFN(_>A1yZvzS~IXh90$JE#I?*3YXy7@pNkgd;) z&8}x_8RX~Nl6kAPbi6Pyj1~rXSJN#H@LZTW(9}G+(uvTs%t4wfr?H)zHQB59b3my- z>iVY{7bE^*Hj*&_m`d(|?4MnuUB!91_#xcEq}o$Gq8R=B`?aChL1Q*MqX4v>rF)wX zj5RaTRin8je5ccv=wi-vgWoozwZo#gjt)V~XCj%`m6W@(PF3}DZU#PkiXrvVs8;5} z>Q{0RuOID8Q4V9hUC$Gi@VFZ?CEXuh#v$}jl}NFQg3_D<3*7lOui)N0KHT1V8qJhx z*4|PAF1885c!^#)8WteslxLc<0i5}R$r|H!07Jen z(!&k-Cq5Q}>Yx~eDi8aBY$oz*aq%0BCINZId1<_}CghVU3GaLAlwhCnY+p5Y@ANBa zE}O2m+7Q3prE)?Ne1yAnu-$`o4`h=P9c#hutAYR;)^!^;D}&Ep=P{&rn_+E-F5B-iqE-+3idN~73k0$Iog5W8#y=&is6zCR+?J8l&TAr5*f5T0OqPTg$z3e= z4$yupg?CmLW3l9K=Y*k@ns}rv6vu%h>6pUHBN|$@4eX)rD!y%%%c|lX+%`gSJc=Cz z2tm@^vWn+M(3`QT!i2e%vOmG=j9-E@I--YgXH!TBo{^-MA(mSnEu<)<0rof( zr7~&^Udkw3QfbS0tV#J!c1bd&UZO&(4UL;ppiTxR-7@eFgdga3gUdK-Yb~k8aYg6v zHV&}R@c%S6tY2wf8prG+G~JaX<=@dye0lB-7)m_g&zSY_Np{f|I>QnoV+`*CtTgH7 z%Q*?={gDnRv#FS%IUmxUE|7re7p9L)yNeo0DU|BUT0Vd*dz3wlz#tg?{XyPsVbo2M z_lvqLu5DLL+qniCBJDs48$iQ|xNb3Fm+u`yO04=d0OHKjaQG6z(mc z#L}GY{P21u`>7|+2MkT-q3|GH;T0#GR3w?^aeZ$3RS#^uPyf7E{7Wtmhb0M3dU)!a zK?Es9(FS68GVzRQ>EkR7C+w3IlKX_%;(O2H>fKhL^@;GUW+39QCp#P6kg&#)I3e1m z5_i~A>g|krB?2MM3_1kRd%pX$e`}-r^h4lC1H>+$`kElR-sFy!3D+LpAzy3!Dz zG|sgGT2(8m~bXovkz;v z58MSxUxj-1S`nm;#JOn}yssj;8vZ#|=G`EGTO2QE4_&W*VsjI;=aAu_MCZ<97x$xwzK{ zZMrTt%u1)05DWkyEqW91wA`mh(Vw?~8M}}99GTz&bX$!9b*G?U`a(s7ONT_OhMFCe;ghkb_CTnq}UKUl{h#nyId+#0fT52i<3a zh5dWv?ASMZ#q+2x6*nQf7CPPN9ZP^uN?1WE z*GC7|J{p)=YTx_Aq$WSe_=;?JSF*}JDeyZn`Nmk8Ij>ob#Z1TM4qIxDhd&!ZcoWr9 z_G>+P;Oa!f@oS^_xg1~$aLHCbKfMHggmgTW%-q?=%-~k{suKLDf5^Ha7JHI|#d)qR zV1VLGt4wz{-!hK)X7F{07>Mx>I-zvn4p=+RB0D<7WAmhafEYi!LMyna3H&cC14^Sx z|0i^OVCIn4^9ErZLmtrz=2Y%HB+ByX_p_j#(@9wa)zjbn)J7+jZ8w_Gdw*MaPWDc{ z?W;ha!4#TDY@SDHtsiIPfg?2xMl9jc*9=M;P=i6rvR7Lgfuqxc((vF7fHl8WxD>Tf zsN@;a=+qtl>JC1T7CEJLKs&Mq_Aj7d?NO~-H#JPf#eWKSUjy&LAeDG=xCuu|y3m1UJNr#YIZAaymtB$Nhx#~6rcdoS)LN1J@S@RTHgDK!L*(-I&BETCDAhhYW17>s*yvrvFulyAEM{y2wx5Atq{2+OGgVf2ddO+QRQq!EK`^Zc(_dS@E#D9rd`}z<89NUFmu* z5;pn<&-Ppod@43=*^KloG!@GJrvZP@DY5^)3WX|{g`2K8#gBO@ax`!ze%pVSH8G%L zHYERtco09Q#=wxRXh^SygPo>wOeC+0c?86G)SUE&06;a!Vl~En^C!B6Xr6LJ+usTh zD@V23Z4{=dXFM}!?oK2SMNHRi4F`b3 zYSvPLF?tpg>~tXem_eX+3C6(JsshbEJm)F|7PKHC?^-Eal zd6R;5or1#Km}3eVf=?(((q~fQtYUG*X(t;|~F^7?Dm9hxf+m zGGis88Xm^i4kVai^+JhK=ny$(KRZ^LoS4X+Zz*=Suu^r}*RgK&xDTCk$wa)ZS`EIq zYwX@lj|k>@vsPzAzr(}Xf|0H_pF$zyV(z}?M5|@jV5R@UlprT{UFH>`=o5LZ!TSFggHx$WJq+-0 zKdHxv7^*p-D3&iueR(b^E+dy3g&WVYXdV89T`P;b8Ae zbZ~~1x|Nx+zOl?}x>Y*d@0S~|CwlU;(*M&>_{q#j+CK5Apb8lA`Y~%{Cr9Qi&DvLt9kJqCvcpGw16-Q%l4;cr zr$qT^F3<@d4|56HUGqVI#*0$h=(ES;q6-tXzAeMRtpUhwI=&uIWBiABWyP1=QV6fZ zkZBzb(-;IMx{BCi9Y5(ae$l={g+T7KBbW@=C5uaINDlp%3k&S&Ng@GOFVSz|^O!%H z-Zf{#1O1T1v(kIwCx#O{`rD&`*u#IM07RlA}Z=*`GhlGD2Vn>DZ2i9O3AJ z9jJ{%)=+#$aVvs8!>!lKRX^sc?HljIjKU@b@scGI&=4qmQI%a}D!Y@6^11<#(^p*p zW?r!fnqZ8Wc@`W{n&p_BLDxd3T7bp{V0#i1!ANrn2i}Oq3kAb}Jp$Z?-dIZ20`Xem z>vhZYo?_Bkth%a*&Y^k|WYmiz_aFi%1Ky8CWe!$4yy5D1`LW!hyRhcrRUV#^G%)dG zEZ);D8j7Kwae&9F@(-w)f-CwLi2tEx5TmKHqH)|VR;x2+E1cpuXT;0J%M|;3RLLpRCcAZI5nj;%S(k~hYHw{YI5+HJ>0mm8r z@bUKn@fpWOGOqp}GsR&o(&>K!9vOjs@%fWW%018Ck7W~87S}eyNja*#2ne0GW-B0~ z>3_KWn7xRz#)wYGK(G>Tdhiq5x%)4L?ggHb5&A<+ zH}!dPrihY3CC`cHch#^YfT}Q@4G+A6tK*8FRG+mLX=g1^8Sg;q{bYN>aswOd(YIsD z-;eHVg}kw&z$@i+xcM|Yg?2&3BCC&Mjd}>Bb&DT&Sd1_9_fnUDk?Fip_|mdJ{x=xx z^PO=6~!xxTi3wq431dZ$qmz9acTD7m^hH|y+tQ6FIo{7cE;p8Pk z)x0}L3Z`TYwxQ)%*i_TxU-rW*mcYwHY;7)A9`hW> zEgr1XKL)*VN~i~6;_J^D?(p4+RwNb2BnJd+m+3SZ!80&F%}t3auAa@vv#q%t zB|=_I%pmlly=W1rGi~gMWZ~D>V7DYm>Q>Jy2~)nisuf_H5D*~Iq|~JUX)Y?b7ukme ze$V!>_pvxf85P@+J)hz&#==L8zf>6%v1hSW(Kv@M zKc&-JuDz_>c#|mK%>AM<(7g>edLj%=4&T!Fq)iXBo*i3H)eNqYs0*SJh)IOWtT@eI zex#L8#^^iU#R#4pU^U4@+I@Eje^womGS3Wc+i&T{D(Gm z-rk8N4P;Y-sW#V}dbdJXL#A)nvx=NHA#APnxj3G47f{3i24y?%Wr<(+^8#xMbi1%H zQ2rKnI@ANGMi-yuql!V^>U{_<<-cr_a;g6ol*~YnoJkNFLB5jm2Oc1)O-xa|kCgxIC_@o%Vq5+}#eT(D znjmqTX{eGR=(1%evDT3FfUQTXm0+4!PHjxGIY(2}5!8>(o7HOSLn3zich%moFs@p; z)F3fzBpT!mG5lbf8T7Fu<*NzD5~%pw4CsEbSNDf*U0z#i_0EvX;l=3T60GHN=PYVH z!j2YW&=$@-L#!W2S=la`uG~>Ou}k4kQs>)tb}41ZmljYx;R1R|*noQ1Tvjky zlq8k;5VPuZUR75H2eHWMLr_%-CXd0AGMY`mT0Oa<{#CCqfJ8pxlNHavI17=!h{(qW=F6<%@&bu(Oy z6z$;BhN*LCPW)uFFDlGU*DrVv-NUC#J^_I}RKi-Hvkby9sg2AYK3?Ag1CgFXqXiC! zhN}5NL&eCkpfy8^lxlIF7lk%3Qc_8Z7MnDof}V$kwiJKm{A*bxZkd*J2hB-RY>hX5 zQDPga+s6pYw8I#3sXuvN+Tx_x+(N!px-8c}F;+EUTPJg~ks&UhqtuJDY;1@4N6gJWaR=Ln1<)UE+K*N#?6bWc`^l(08{d06V_mV;O#6%*Am|4L4RQfVW}+=N&;y)4PwF|)gNE)B|vL3+{;n5_H1 zu#jthdzpd4EFz<=R&c(tL6E$uRMKv)Sx$aCz-{4^OTWegT)^I31l~W`()GBUgQ@R? z7r)<&zFPQ0f3WkFRCkSd^$efM0AB?b@#EE79h|H^AC#(67t(7vdX`LSo8rgsF-EV4be+#%2zQdX-*vgKJSSOgpYZ^7W`YiOLR zckC{^44&Iaw}1K5`f5@MWZYC-g8%B2AdHQi8a_K7?6W!Z8se#aGGNLyulX~sX0hEJ z;YU@4acoMpnSycjL-lRuTWGLxPUU`$^S871&kz(=EL%p%t~Gbrl~($JT_ZQFE80u6 zb;9vmwfkgrkcz6jYFnwK6nq)8tN@n_VlM)JD}(5_+rI0E4|JX*Pu=GV!DP8z##iQlG3#^< z*xzM`T_32bI?+Pje`7ZJsVQObk`?piuu@QIGVIr9HE{g99CFqn%}C@I01Lfptwne0 zW-?D>&lrj2hQ8YF9^Cp-d{XC}ehz!Xuc4_vbtN$feJydW)_7e85Fg(wcO8T?M?}!p`9uHZuY<`WXIXf@441dx2A_iPl8tU*VTZx1@uuO zEWYbK4k`$#RWL4(t6Q(Vb3;FhyOUnJ*Os!))V`B6htKD{HRKP(!K~15B*?1b&xKPL(-(oO zH&2d65mWJ#6X_0_GJy%-hz+8FDl3OaS_;dy&HVHCdK1rF49 zP&~6%6*B2EplKf%TW!DqgV^@zvQZ$PszmJv2?_t0x38Ge4U*)oHfh05Q*imgV&>!Q zCRN!gvlka?F{Q4P2|mUbeKpJkm7i6gBYZPxT7Xo6%J7%lxCK9E%X~4>n|0*3|T;h_(T5e%)h!X zT;z+$7H=-U3DUd(4Jr}bZXzcMUc=i$im8?u@fLp+9~s=fepbx6&!j}xh>qoCp@v57 z#t|W}TyX^D#>a8R&78ExMJu>p|~HaQYBVk_%VVr@`0C=9&a zjZ|EaLXDQApuq3AgFWY{WLPSEyuf@+s5?Ru|HnffF{#JKN*A7vj9FB?O;Q=A9iy*r zPy|o^-P8tQspmqTpuHiZ$+;hipIab(#%h9f+!RIQ zYeLyPstQa*;Ro~(*I!D0fZ%;xZ@U#KoF@?M_pJ`A=%kRYg2jll(<#!i2 z?d4JNaYNp6^^(nuX^ZFj9a{|^pYZ%3_DDq4G~@@jj{eYNDU-mO$0(tbpWuW{8`RNVTL zgd~^x+3}}{;l-A0NqeV$-+<7 zMl$mSjg!cY-kl(~p-|*9xiBc|optFLKye~JLDGNj= zj(!$?lGs+3yJ`Bx!(m&?Q}2G~c=1CEXI86E&-@s_5B#UG78uQ+x^jRev)4vXZA}Ud z!J~qA)xjpD*t1LSB16)bYU?RQxQy%C+J`eyjjK!TGMrL8vdg}baUJ_1`)NOu+*7#l zeNw-&8q-GR&$Vv(2{O-XOb(Lkaz;o&jX{X8@E>HqY^lVCj-{CoN2j64^YbA?bh8^7 z$+b&K*w}T*MF>RGfB@tq0JI(nacuwtF|L;L`FAXlQDDz)PU8 ztRN)}Eq`k4lZB--CAF0S@Jw;i&6S!>-hsH#d-zQoG2Dz4Ag31#t8y|Qz9gZaQPJy#JszUm6Bp*5$ zCCcz%ySC83X6~HW7IWxxOg+*MZ2XK5tP{0a&Ah&0#bov{X)a|V?u#bQ8>=SkK*K<)tX)hUT|@58p8(tEc)3puVKIR8|wv!recn*%g%^_(I3@r+V{Q$T|WR9N4ikbaPhR}^{oru{~_1{Z!gT$?g3W` zf>@XDX^0(<80P!ooaj0h@m%-Xm`AUkb^>h5-Fraw)D8rfn9s~-9Gh@*gTxpCd(B=+ zuFtfU#O5e=pXvDWo%M^~u(-Xc$&3N-9`3Y9{g)rjBnx2*q%vcCoI?;8PY+f0a{$+n z6XVLp{5iD{c7Ge_b^>7UDdneQ1NGZ)*8`=!aMyAmv7bI;%9qXo{$m8z7g`K~X1dgh zf`D#{o)GCicP|XmNuDdc4Es67wLtUQ~ zU>Lws>Yur1QfT&=fmOtW3P#0nSa~xVkb!A$P$TA@JtxvPX?B269$omta11a zdo9O~TP^`txKZf+!7O5@oBwd4daGU5y|N_B2f?%eOc5XBOA7M8GyN`L+8rF1kjXV? zkkY)MM_GzCh_0>V+|8B`P+`WeaYb-s4XnqVoR9l>-z@w1);)lZmS-K8ExqhC)Z5Ji z`EYL3RMu#-06Eko16|A`6{HBhIdi9>kS1THP63;qpKhfY&(r<7rgz!$t9bW2>IM?< zpkAjzkC+NAmU~w*bJhTk9e8$Xr_(sA+wrtG3p03E;nLdQ={I*Ac0~;mk)$vOt%od* zgz?$UpX*Nm{1!`d&d9KTz8nWVT#FLJ0I;leL}=fri$eQI^B*33p7%KY`jDCfzNW$- z=AmDNl+3^Y8w- zM-{iPoyv6V^c)d(R(Fcz4v#ur=)la4^7VW}{nFyT3M?Y0CfTqd15nQzgQ{jbeSnB)RD?+_UmzF?+Z7?braR zqZJOf_%L?p+LOk>_rE2lUuQR-!EcSNII{t~TgV5nBVaF!!v5N>lvZC)Xzm$KtK8+E zO23W-vrXXwPLJW1%wsZ#tSiRD$)8BK`^IoVXKm){yKMvwUC~1S1;9p}edbglu5xqb z7>y?F6FCP>5P;1OSWXom=D%~+k5tReUzoE;splzRW1G;G@*B$^Ub43HqkT#6s$c}H zRI?<^87z3^b9T>8tjzTDb*4iGTORt1kq!Dwj3eh3DWwJ3CTGZO^qvMF6H4gAt?#3U z3j7_cTzJS{|y6mQUi??03_K{+&d8J?_fI~DEtxT8hn$c$TeG`|K zJoEljXDy2rfCGZg@1b+cWxH%u#46VPjsqS0pes8C3yJ=_ za%?_p-uyeX!G^WHtjP*Sjm4df)MlHk*pww;r%mLW^lf7*il4LPojmSXY(`(fUkCxj z0mhYXQ)x`=sNLy=Oc;yNvjZZ7%1ql>hl*kC9~;&IdIjnbfG%|uZXh}R2xkmBx5zq? zeD(L>bj20pw+L@cvrt;$N1wa>dH_;RxpCbV^xw2Sb!M&MGpJTJH@_guyV}HE;AmmU z5z0?)t`l5n29t6c=)HH` zQj55Ea)JeZo|!IwyK|~^U=tX|7-`E_&gD7vtkvPmBv!Y%&e}5@py}1Kb!}?*ORJBT z+d@)Zwx^M`3nOfkq)IlXtHF)6|&8Ns%zd6};6!H)F@OQcubmoiPK|8~Ow;T94P+!g$s)!n;X!IDAAE;5uz0wTdQTt~ceL%uw58i56 zZKSal=ZxAwinc3|q;g8m&YBwoAF#LA>Z@s(hzIe>~;y)$|2Po;g&hF4)a*@-Ch~fTy&GYc;x4$1cAQ4N$ zfsXi0-t1!NWKYb&+AXtw+2%7~6#D~%B$QgBlhuRk^)IQuY&l>FCo)R9t0wY;CE!Rg zHEXN~B60ij$sVGnnW-)y81$!LRm2|NdBe=<_+KNa((}4{29WSl9lO%j%0l?0Mhqyp z|FESWAYq>_X~j{Up*8pIM+7T$Ho8m35&iHN*h@?ob!Jj2XftQ{0frT&rJY7eLkMld z7LJEfVncJoKEWBi3@jCG7$`W?ls%>OoF$y=>%1RNbN2_{Uoa5eMqF!B&TT!WdzK*2xy1IZhlhl*q`1T~1PLAJ@2XPVLrHwrr! zz(Mp2y1qh9Bj*|c0064a7FP=v*wljre)nKWonJ?Btvg!FHM9eP5@yPCWHfQo3O!5m z+0;xVo5s=Ta*vS~g3V>@foqiG!rXFz;ND{FnWZhJ{ zXUTalRBjP#&x?>Y#C=rB@n2jzi7SJ+*OtGj7_P0gjt15@9mOceS){d32GF%bEmmZ! z_b;P@?mn-0Kb@ z%Qkjo`p+zG=Wb?RS*I6&x1M6AsArFyR% zQ-!9P)Fb5@m8N!6hztP4yWQl5vZ5Q}^i-ST<1+P!_#0Hn84VJ6+dpnnHk7!bjwZTM zW#ORt$!NM#r}XEA9kI+ZPGh@NMJL~nA`Egt@X}EB$eU&cp2+k3X%KHA_(8*d8SMYY z;f9R65frew^eDret;H$Yt<$I!!aBLf#7>HR$k=N^FO_SV#tT!#c|@o-ouJ4$@hM$H zt!uI?M?zy66;ok%fb0BLRp-*B;-P`!+!N58gVFZ*G|0JdcCPQotVm1+ zRoi`8Z$rcX_Po4ugwnD5W5Z3&^NUA3y~$h=-%WRZ)?L_W@C7y=U9KvRVy306Mk-w5 z$GsXjRXy-DTdPRNd}N#i9?CbIEDvPZy+py2T0qgB?&zzpFXO`vCqNI)bthLf;jZt| zhDa;}gCL}7rn-Uk>-EmvDx!gL`B1VKY)Yvyx>lfJ|xGsy%_tk*} z=HuN0R2&(xT(TGK`zeC~uS>Y?^ecsB+8JI81d6m933FhTle;^_7k=grwsC3&_DVav z0#Au&O>d^+Fh9&53T7&oq&CNr1=b<3_8AV|cm-z_;fy^^dx8uGA_#ONg74{BWqeh6 zm$~bs)8w+~%m)nZXO^}V2nNlGbxjn->9Lzjg(?|DvU5*cljEx|-a~e6j9{P6^dsZ! zElnjN9P?RZf4jme#>SISWnqoRP|CD*&M8VOo|&NB3-^L+32n~KjUk>=Vie3~$QB^; ztNCwemMzv)4+p@kz~>C5cy7Yk!O|qhnkC7GivVrtS$Vw{{&AJ4L#Azll-?b^1*eQU zT{<{TqWaMcB8UsZALP#&2eVFxZIR8V`@b$T;E|SnYpNBK^_4FgX<*-7VFUUNXbItp zH9Dk{$j;OY6T_x$VgGu7Dm)u3@ZL9Ja~eIJ1y3rk!0OHI{3)PPC7vX>qODS|ws6eN5rIa32_5RMbVcDl*=Nkn=}AeN`U|9b4=MLk}FDLnOYo1G&?kl1|eqfWh zO)0WTG5_Pz)$#WzYh`}y9&F%;Wijn+09P^hLoQ}@1dfOkJUIy&!D?|71$tuAr;O!M zqz3y%lzTkY1Fd|TDxId3h3^!o$5@T{vf^&RWpl{q1Ye$Rm)=~|eB21DOKvpfuOU8F z#l3JihXR0*lN5ChySVNc~1c>2o2iN*GZAWp0@+bqDlId9@S%$PY?2Xt=PZvRkx z{m9F8D3m}aJn8R}ju!^n=xw|2coL+WN)B3Bong80Rb(E5*&1N<=b41K!Ov=ddbqMe zpLe4-SAmsO=|B?3iTaQX#%R8j7G0X3CVFqIl8N4kdWd5phNGugq1UuVI3Cp6a9Xso z8I$eQ6qAp+4f9FPxfWXp0K`O+1j{D3bgn2s|LM zIPrIEzDx>R)X{xsQK$7;oDn*_l0y_gFl-CsK-G82O;6=Y{8S-R zdTj!hc>J(rRdI^5fJjcJ5^|P+LFpoRqw%@NBG{Oe>`|go&+hxv6tqeMiQ6#U|7Dad z9)6GI(=nB*)DUHrRx6aG0HZbf-J^P*6P_XIDh7`X#G* zjSo!8`Qq$&f*=AgguCaT<@4D)3}ei0j+zMG4M_vDV196fD6h)X^oq?R`xXm+p4L!e zjd9a;v`LN(Cvl*MSNwQ24QuH9hZ&N}M~@WLtCW~s7G2Z5U5BJGqa`5uCzmO1wg@Lc z6n_(-i5;~gj^Mn}&;_KOB6pSzH;Y30iy>&Xjr-lmC7cQeyCveC)FHRuU z7q|-6aQDUwkmZM^aJbqOf~>SH)4FdYn3wjY?dKY zwlom?qgTuPPdw~9Do^d;CjRmMY09~5o9kot&lHVUY`URchbxceUgW`3-tS(F{YqAd za5mA7j&s*K#fbcl(J`BN*RKiqGLiAQ&+y|Z?@p8BCo%o9`T#YWU}lG>+G}NaBDH!U z6ED3zKn!GwO=WEjxuBpA$4MWLRaL`fBr}yJT4=Dls4(pYQD{m4JTsnNTM4n>ydU%X zo9=j6yJ{c5mz;grTu{H%58bwKD;Z7zz9yjmJ`^eI9G)IF>SZ(A7PkEz6P=e(dt!Fb zAv3w0DUOC1+G-5z5ubSng%3%2?FfwIkRI0ZG>0*sQc4z$Wh2^tFNG#J_&AUPRbk;8 ztdZh$J>m;leNBvNQY0jdIy)17?tfJ-(OO+@u7b0@&Mh{JDvWa4mocS>I&dMi zwa#AW$-RW?V?&HbX&EIm=ZefNzzjDMtuTgXn^bY2ta8nhA=Ru|SMo%Q6)zMn&wA^T zJsRWS^o}nIv;>j&l-4W-wj?le)u0&T^6U|m-{BihLZ=o}{k0so01cIJ;gG>|LoE5E zT!XXUU_P8<+m0&)E;I1x0M(KC(pVCgip~GPqEp(-is1(1%n$n-1bOR9kRs}Gf+?ba{ z78@DwcDO>!swH**F`kvwioY$81->A!TD12Tjroux##S+luIGKPX1QDFy(GDz_T!3o z+H3!;Po?kG>l<@}GYhob&#lEVuj%yFx==!761||*H#`uuRam(PWgy_f-`;xIQufLG z2J9vzk48XNN#EoX1rkiM4z>d3C)n4VLY-X-F*BT^0i8eHT4*EkV*HK7xKE5}rNFmA zwe>l;k%CvxigtTk0&jw@gX`jE;9WXJrqnJw|9&}@EpfF|@GSaZ2Vcz9_){rkiZz()3<|lkma7=Cn*ixVmkhR7*gq4=Wi(dVQi8tK zCkMiNay|)5s3zTt%yt~W{zR69B*Rsb_0{WWA@jecvM?AhhCl0=vkA3R5Y&PGI=C?> z!I$;c5u)RVTdVfT40g@Go?^FJ(}EwD6Xd(WJByuUl8}qV&V10U@XNb#!+;dsN`aq( z54;tDpJAaBI8@gRy-<-eaVZ%c+bkvs={K1&G%DA;jCGz=Z~h;{9YS ze^z`^=m6<$bZi9@FMhv6-U(UuCy4mhSA*!xs(d!EMF3=xo)F5g?!f$~FA36w=HgPm z{#ghRM$|xqGkEdKj>zST%>gK6G83O(4*h8qHqj3LXAz3YL3@tZyov#^QKEJ)6)snV zdp@>7eBY(lGV*qWeBZleZp8bVNll$Aad9dJ`o5Vpnvmg+X*aPoOI~nPWGc^MY*0St zX^fl?M<<2lJ_}P*G(ItPh0)Kf*%BOOir*qY{bU{+;BreX zQteLO3cV&&*z4>sX>uISl1}sA5YHjum=w)sn5+F1^X37R^X4g!L`u5wx>MuSp&H~P z(`|YyWAy<-N6jHm^rR-Wo+kLmI-1`i#gJrsxv8NCt=RX35mgv*LxLv1%_A#dJuD%l zBo3?&(NLIFod`ZHOz=3OJ#P4Q7y>5#&$ue|6@FlwwYziYo%ncFt4L&BREQ^K%o|qv`;^`mvKL{P&5{0vnNcGGcR!I;V*Q*H23} zijb*`p5|(r@F%<~#)z*UNoP5QPw%orcCt2h3Tr&Y280_LQq$XG@Q%b&B-&Y93)wxe zEU}8*D=+oKnlR(?fhL$Lo~LQZb;cEadRAYnh{<7?j93lg_WGn}4Mvt+G~cX3Jdt zT*k%eXe%oi#aL9L(qkcc(+Y=&i(X)His6^y6R)z?=d7&%eMd4h74hV#ap&}U_I521 z?)^_DIEE=$l{JSm;8uMhTrG6TMUWnhgYi(u3c@2ItHsU;W%(g( zb$faZa5N`k{93nf9mI8x2yB+{++Qpc8FXv0#j+of{=9->+>JV!?6*B`?Tdz8JyI0P z10wyMcV<@sj$e7;)i?|L?*w)kR5%j_{_2itu)*D1*7_lo4+=oHlz+d9Q!sy~{CrrA ziF0bQTY5E}kEONe&+NN2#Ae?{1Mfl*Q&mLtX2Oq=Y3U2FzrZQ8nLmHFt@aSx96X8* z1GGE>uES#9%daIPIAqz#Ay{4vd45cPZ25?h-6S8>?Hq3uJF?mL(#0oHIv^2rGHa_i z-!s1+F3{BgXW9XCw6x?lau~4pJmMGINTi@NHV<9a;KO>q;<%1uQ;!t1m)Z!bFkhoB;pF+E~^Qi^Rs*_0n@5P3IFzYs};+ioEC|E8r`bL@h;#+|XF~`Y+gALrqT;KhD&)iC`TQE$; ziXH&^^`fE+8mhXZv9McHQjnvMN#BbXh#*<@wt93uk%N=hz{ls-_Eyk~vSepC41t3*@E-DP@AA48lYCtC(>jD7)SVugo_Ure{wl0 zJraogrL|)q`>e#NNKtKO^ywUlHLrE!{N=FMM!Hl6aH&PY@;n{%(Yk}VDMo#l`I2#)ibKV!N zyRG(~HYjww1QE!OrX$o51RWJf2$aAI45B)W07(b&`^k$+zQ7!w8je*D{_BezPX5DE zBO_$Wvl+0532=6A&b`H(p^)4HzkzM@;dTaPvlSMTTM?3Zs~|r%p)R0qqfUN z6149ZOv*xY3g>#5bqopU^>{N;Pq{)GG=;+&EXOQ#J1YWu5T7+5&*9hUEbD{$)~2VP zz5Yyj+m<-BTDh5|pc7Nj=7rw&{quQ>XP@orT?d>xX94iv7G@V*B{n$`ZzTbeJm~AY z*x|~g%Xjz4t(uSb0~{5bcwA73r#p0RpCFHurJrrVy+i8qiVygb^~%jAIQ9 zs~S=N;ZdH_zQW!;Z1zRR5g<`xT`?VV3#nXgUW*8Mx3lw5d4f{0$4TR> zdhBe{^5uQIW%-R}jE951(Hm`BUrc@l8(a3IP6YPKh8yu~LRi;akG!8dQeYV{8it4X zt=7Un$dIHCR6=~~kuKvqJ`U;fO9v=Hmh|xk9}J zAM=P@0Al2hNJ}=vVNdU{SI%%ono$+H(!yHK_QyzfW*R8gb zhv;OTm_8pO=A3F@vg^PBNiJpbMDOWJ6z2FBFSrA8b}dmna%`_H(uy?(-jO-Ri?x<| z@7>SLp!gSrLv)JuI~d@l)_l@V;f|EyidQkSq(bVmBM*Le$p@r1|K1rm52w)SQ1lg3A#zA%P{;}DL} zq&$m~5Oc?Vm_Si`(GB}&_eYqJ>}bb!%~KZ>Y%OgohEoHyuBi=<3{nKst4p!p24JPp zNL_vB67*1|p~9>-cut}6RhG~XkqJ@sW}%J`0w|K`S4GTvij5oygh2n62`;_XxD*0E zr{@M4;^?=05Nv`$P{nO;O!)1HK^+}+nQ*z?=2akn@Ho0uh7P(#Gxeq`U6%R?qb)hVGHKfGGqH z(x#^_3&g&}{WBREOS{)OKS)<Sp^OF}54OF2}?OD5J%+ ze%=AfR&}q(L6M=;Hqf~a=wb{}8Eo`DYh2&7v)$%Ga~O85B%mc_t%L7-$JOAuVgVT< z@nxRser9}o_SShh`^_*^k+P4)lWLFeAfYctH6ri)$TJusnBqJV%PL4cI~!|gzNIeF zBg1Q>Us%i>g1GFYQT88hU)?{~`yY5%X#{IYb{Zh&>uEgD{M+{AY##2Y$xW7vkkdgAzr9GWkQoBqg4s>qfBEg5FtZyiE#Rj%YuJP0D2 zysr1+ReHRw$=%+>$GXGK)EWm2dsX8lQ)$zlT|TknbwO9$4*n@aJ~ibLj81|88rK%N z@X(3(>1NA6!sw3Z%pxGGPB^1ZsOXK-I_@$#TXM7eQE!HWxpECce6mz?SmatUPyOKv zugIapNgF!9KVsE|UMo{(u6dN3{cy(K(tP%Gx&6n^j5EsWsSzYfZKU2Nyh?A|O;MNC z4HV6+rEpPk9|Be7Yp_HWM1KZvvR;0v>Vb&>$Nq!w-2_m-=)vZbPgBgEd-&{INAepV zbkF=i{7Y&vzNaehy3wEiU9BGWP#XC=T+#BAvU{#GpPk*E{p{;DIejuwZIH?;>J23x zwDELhxdmnOokzlHO!I;94JzO}?=T*Hbr&u2EF=e1#(HM7QfR7<>ji`s38S$%&KPK` zwuqD$6FiuD`y@j)BL>863{K|V+jqhjAJ=BM?9c?KfM@uie`*wlP*4$NZ|1u`2AaLw zZg9O8^*6?_V@Y3!W!Ih=J`9{OqtX=>ci2o8TBdXo7X|;~KZ{MGMp4t<7d*|6v{DuF zH5?4K@NUbyIn9em!u3W85DJuFw1^1!N@=Im&=&~x3|`ydopKRX(V z{^M>;(yw6T29I=r3fjWb-EXSDhM87)ukm#@SaR5CPi8uto%(E1M@+fS~GA-$}yL}%zT1rfch zUta|@B=aWK!NSt`1>g`MWV%Zv0SSybos2}TXYOs^EH=#P>Mt%x*@D!2Lv?# zHHjOM)WXTAyFv+m44{Hpoopx(hx)HyTz0gN37Q0=5$v+h(3nLm{0Q*yB{Q?5vwFOt z3ZwEV=~9R%mfZRkghjIUMckuO>oL?gD-KNh%uL{%wbbm8qKA+q9kcK`;f68(DMy_n za_vhazO;@(4osn}xHf4wgdKIRUzf=uG{kbV7AD{MP<`=rwc4(U3M$&QJ?d%GSDGNAjA=NBNk zWOR{q%aw|S52=ATo=V^#0JbzY({t^;!+2jIA)dBU9+XNVS>Xts;^MM+OpRpH;stQI zbo11OGP2H!adN)p&f*mjd2`BbZ}4=%t0Y3=i%1lNV$^I?9vv(4OByIiQMFJ0xDheg z$*!)k&u&B1Z)Ibg!}!NIVY#NQrZo$ZgwgHfN#rYWe{{vIK}le|O0%IPs@LYocX#NE z<69vRWsq50a&n#Ji|mhca|L)yk^LP~Yg{ZT8$0)%DvGKaUYCPVgV*dZvruM7F(Jo}_;_lR3~Q3L%GIvL@*yjq=BD5(&k0F1 z^KE}nXTfBZK0k0X$!U|qyQjUGT7ZsNkO%_vJ=aWD%}R+jAVuBsoE;{!&1w$vO89OaJIe3xgUvj837l>G%;r-1-*P0f*n<;-Fb)5bzrU(af z0<#bxzP14G^dbx8i$PkKQ`u{utBDLyyfc_A!Gb+h8#Ug^8eEUstQBvqPzM7XYAXR-GS*~N&YWisKJxIC( zS#AD(QL;V+03Y39w|x=#t1MsM7g{T6>A2;z2Yl|hhL3w1?;%gi0A%oXlFVE3+#)O% zUfEC!ii!in(pQE&=kvi)0OtNq%wjNDXMSpHUfgIJ$4*D2xF@q%G@s@c75cr)IAA{V zzdhFYHOdokNH>^kOa>&(7_vvPC^#T?w|oG3{fBOMh+z*UiU4 zepx@2I}@$aT(I>49`A*HIBF91bKBCQ@sk~i(041fHi({W^etJ8Iz-_`^#!%5PgW{M zkRSv4ru}(0zr<@pR-J<=fztsy)CS&1O99cV;+gV*s598G5V&m0s z;4;Oz`D<$cKX)x6`Ey<28xo>GIuJ8`Ht8NXCGi zNNXUGYzhW;WlJu$tEQ}JT+gKwn5%aJb12<$IR{Tz#)%>iMXBh3U5qMey5Q8?{#fxdplu{ z0jnayu$;DrO7R=Ff^qw;2?ZxXQlgZ(MmNyY?nv_mGS0tpqy4s^iTI)y_Sb|ZiA}LI zIb7NkGGnMA$UtFxgE^D!t=$CaQ!Z>1hQcqv`M7g~h4zsXl8p-`blYbFVJxtYT~3t- z6%%!gQAYTy^0#~&HvO(6XpgW1Qb*IuktD^=ji`#ZGU8s%F zRgBdt5f=`yq>bu5T7vN1n~ZmiMT?1Y7=U5Z8>9}sb=$)r|eJVc-BV6R<;0|R3-M~T5(G5KceuU`I0H^FX zC%JJD*9FysnIJqQc_+}qF~k9~mXinZn!N`1oOfs@L*4y9rx~vzc_qaVW|+VizEGa3 zxKglUfSp;vUy)5jit7|OmdvACF@h)~3K?%SS~pQ4{c;BdsUGT*5`J$4uB+4Jdx$A0 zq*+m}S!(>OCvA|Zx(^})id|+JKJPc9j~X~DC!oAQ#ct>&ANBZ&WaPK5{?u8@_(47* zwj|3!RU34uNLN7-cIk-ds8XRT@;3zn;}<^rOIznb+cSnyM_e17P0`llCEjzj3Fref zwS3-x7`u_y=K4$L_iAF@Zq?hph^w#p2CK*0sEtKyOheji`*^k% zA9s}&ifHj{K6G+Ye!dbdvSF%pYtQ%tZ<%#3yZ;Hg?JfB~!74QdZ^8h3ZylaQstmM5 ze*u^9iHIK4?Q3t;!Sd;dH}b-} zxv|G27EiCNF$~?1cb1j1xk&_1U150F6P&h-5WBt@Sn>@7!ulX8f$)#*N01OIEZPJD z#NkY!pJ{fk0qx;uy?{d2zj|v-n>&=Opv^e;Bs;SwR4Bgz(LXLiGo6f|LZTp7vrGBf zag$w$QRLcn|??{&)B=M|`CeP*BQGxhj893M{PmWSS7DVxnJ7 z8ayauK(|Y3?3|DhlqZo1zu`oPO0f=|lyMO~i7iXnBiPP?i2=r(VqeK-aRrZ}^QyxE zX>lX|lJ>AzEy=vlJ{TmKKzAkAqBN2*zWSARAx&djnwlev?M(Ss(M!TJ(e)ZQG8Sr1 zSpH-~3cUY*M?8lOf)#!U&xbsg)Z*B>|0>UB{}Z^a17scD;eR z=|V>is8h*1`|@`4tl+RQANZ!s20v&8XRZ1E7Z>=o!;rOkTM0Y`zLdpd84-dC(cuYK z&b{Vk(C+p~dhyGOB!X9x*5b|GKQttfFecexOPmUkd3WZ{2l&8Nt=)h)*5qrs+Ea~V6k#*B@312?U&>* z5gEe=BP~0>bT@x6NrkWji>}3&;c8|vYS(?ThUzw>!>I`VebR#de{Wu^8R%MY*Ht|R z-8qrMArlSPY>5HIMIVuUbSMs#R6q$cYluP@&j2DysnMRa=?B<)V22(!IXBt0U1eN? z(_I((T2nk~%%A{w$ogt%wj-4Hqi$Nsn5Zw9bZVQ*22)U)AVDBjWIWzIDnynh72-#Q z07#z8u01!#NMbqu*4Qdfeqm6~y^4xruA})4=xsz5TU_Np?>T+~{=q|yZ$(-6z@VG9%b6>Y zIkAkSqEvZdpsJG9X=xWNm)GMi{=H)aakr~a(}Mi5W53|CTvg5o#n3R(`@pN>NX1kD zb+_#A86Yh0zXC?;atT6+joPl%m@Q}b9cP%{Sk$sF70u$6DT|C^8|Zu9lz-&j+TyTl zGsnta-iPX9O`eWgNl4SuwQ`l9iT}9}WwMwcI98T9Rz~0pn!l!T2$G>K0~-*37XLiN z=U-yLu`rIy+m{gy3-i43tN~ufjb9f5+$-aa;})tD&4;Q57`km+#hXG6*XOr^fc39} zU>;pDhW6P>9hJzaaCG5@Y=%jOShJ;eufrr#EZ#a8Rubfx%QQ(WdLh|a@6uR~_e6^f z5_e;Jk2q!a!Za-!pJC-|vS#z3thH_U;oFyXA6m`a3o3hFN*vgNTrBV_rcG$zT+&IB|B?A)dufG+?_*3>R@$DqJ@^q5H*f`qw4WKCG8KUdbvppm}tXx zZcm4k_W_c<3VsQI{Gc+D-D-|dgSh&A)LIG`G^7mqIffqncb?#_@RcGHbwYNR36SW3 zTVnL#wY;`t&DQ0)lshoE!ozDyT;(w?WfL<*FhGrdAanxU@HXJpbsr{p-3&TQA$__P zW09IkLqdDjeVj`_T33t6&|NhC&l$hCq5Eq*&%TgHz0Yi8{K4gtCSHLi0XhC&`vSdb15F zU<=oV_}?q=iE;L7s9z4hhiW|b|L$l3i4(m4u`*$!^>?}0fuTv>C%9<1Q{BfXsIEB2 zq`?|(xZI#xK~t`AFq_xw7C|uf9}ZqVAHR>7ncvz?zgw>GZ`+I;S+`;(y#%x0NuH$& zY-&;c#ik2;CWvB#jZPj_9V5v_&b$rnXG^p1J4Ma&F*YqwTqy4UJc6dvZoKsoVPCEy z=VF#vX#d@qM^Fl6?_%h=C@YUx51^qUsQO5iNRrFJJ)~)smCe6-jyl~F@D7? zZxgr-j?8n-vfflxvLY9X&Y#zGqR$vl@CE$VCn<$<;~!2-<%^*lEPWZ2qQvWPGDDYj z+TnEzdEOUu3L`{HJqgtiX@KZtRI zB|nyPk1z*_tnIMZ;N6R;Xk?s!DsuX&GvuunyddPL?`Y6-xNq|}Xf333H;lYrN!W$; z=Q+E3xjer|um|p*4+1cDDFDo;9N->4vO)-u!}{4^Vzy3Ictvii79QsE`sk zNllL1yYI8Ynf;Qia84DbcYSl49mz?l*&ii&;o}?S37uOm&LHrYN9FiFak_NQydH8P z56t8FwQouP_;zM<+c~a?`TloBHZ4AG#++8X0YG*RJl~XsTGjo#QcZ$Xla2iI zjg?0XFq!023UlUdn-XS?vdnY?ZuEk;$(MU?Y9<-u;iMK8%ZE^3^r+Ik=7 zxJiVkZRrz2sdOdeLx1B9tTAlp>9hn*0vY1$OF_p8vk_e%{^4jFoFO^wFIF5#`XXHS zSo(BBSt#EZN_S3I&F|+7Gm~B!qSDdVRZ4wbo)RZ);xiLi7M-)!)1Xx_qxuR!E#I6) zqw1CpI{5=)@Y;>>`&G}oq3cNtyZMXyDl%W>Q#Hm9`o*jj-tvM#F%ck%fcN+ZtbYcV zby2~gn4$|Ljc2@9wzfSnMZJ!Xo8@?H$OsAmo1i6+XqeRSEI3PzSSyziBl!`DYA$}Q zh{w`P!{t)R3)v~VmeIyEkn$eUNKt+mHnI70EZ8C@;sJaXcp6NA){nPbEF2v> z+}6->2IsA%`WzF$1pXaEN8Dlyiss-yaD(gxh#M;czx!U6piqRu7f>hLTU`Ts3a4U4 z{Tzg9*WXj3BXlu`ZUITctbp`GVAB;Q9v)ii$Kuf$A8j;~Oub7C@SXN}m_1RAUw~m; z0=JwWAeqCIyD|A-7We&`v*8cfPS5ACicjfg0ga#mz9+i?Yk;kTtyj6t8?&m~xFm(yCw>=qb;=l-Q_o<4d+`p=@HIP3eQ;Edjk|>b!In9?%F$Z5NoP=p)U$<*5_)VX7JEZ9tVb1YD zk0(>GunW#^tQ2y51%*@|)3;6_M!iPK@O)IjR zJmgYgjU$MsV-p2`c`dGU+A4DY4wS@EUBh`xFT77>IEWiz*Iff*Jxj|MuB2KABwK)(H$ z_LJ1@g(oBu-meTG?GU~>iAWow>z(`A<_z;e$Mk6nl)L>+EL}!?T0(d!OLC4ICy`Da zdY~s4A^+7RByw39h@b{`YlPUGGh$*=aE29E5a3=SqFd;URW{z>s)ay|Nap8o!u?#M z9>c|M4_@N2#egzKyxbBTVWUR;8)TSm_v=u7(p3b9PnmL@8=ivQ^r4%6cR+NxE<-i|rw2{PzB2)n=%1%^B z^7UkHC{9}1_GX8Fw2Q!PvxhhF4gOj<2cOEuMX4Smm5j0WDEd=ga3@|nd#J_UrLWul zAo!j{KhxGMHvF*~#`yG67pRPOcn&Lt-?(%%BISdOvRog}maquxgmgK>aw(A{ii%6` z&wvW+2UZlZP}>6QYfNrY^w)3~YRT*HK`CxlpH7zNm4+TUlp(|n=T|dCRKTDDWp5SC zj)e(ZS^jz?ep*Ub8u~x*YFJ}}f?t)UtEc}LZH#C)1F9mmfLLgXhmL-|D2s0O=AM@` z>r!i|Z7V?gyEsi74|tMP9~2r-6xhc3G8(#Wd67`TcRAN&!aX5>S-|{`Q0~{CYRZ4M z2~mh}mw-!n$kQD{i@C5to7z<3v*`=T^`s%}ahj?eo@v$k;pIp@cGN9rDGYxYWH~g!m7j z0PQm7ZUb`9jJtu$c76mX8ta4%trt0KOXPJv5dR7zM&4(6{AEljd_a1nv+){p+tMO^ z!KJHQ7H+&So}||HE&ME3d+OrQK=;e7#}MCQNtw}k!|XB7bRE%P7x#h0o2M6Q2|H7{ zSKY(nsi?jP$QnKb=!!<|C|n73Y-JSQ%MiMHoQcSHDaS-)d3Epn^E9yf%bL|}^DI75 zbTwi(Kv+d(6$_KzKE~9JQ<uIc)?Bp>UKV>KpzAS5uO2)EBiacpNWF&p_!c6v^c_Vr&B7n9J*!tDrdiee-&ZqP~${Z-+u zb!a?`?ah(WG6i?9(FtFEqYJnF8|=CQR)r5w2y=7y;(@{{4019BExPjYl1oZDh|U*d zr`hFx9ZmL~7OG1oQBc(`bdOmt^IELQlef&?&SkKIWu^Z1nMwxklUQ%ii#2yG*>Ex| zR|=3{`X*o6&TH-AyCW1pFk($3?#R+Y5DE)uoYq`Gj0w$*(|20J#@&^yX+ux)$^5*J zr~b_XM%~&`xH+n?BOr|4{fu?vc@lO)98$cl&^G7}G1=8kaU|oU%sElJy4uVzi6Z|^ zCm{1xW1}vueE9ZmjL5MmYZV>NJ9+cfTYUEMW9g+!eF`1AD=14ub-0BRvg3kZHn8AOAgp2KG%w{i z_tdM!N%DbZJ)O@{FTNH)g(jWw;+|O>|UWO1mQ}E3A zOeR_|*hQcea!V?KE^zRsF+_tIQKL1$@8!X4ev17!7UVVj+{VcXnAbfXm?`fRJM-(! zKsLEpY=^z7ZnX3*fa?RuA>RH=;n5SF=O$Q7tR&oQYX{?w%c+{y1^T6r&hh#GY4Dcl zPbiRb#tE56M0xD$j8&DzQi$3aTVgu+ns93jzhr1# z=E^-4L~&}b^-1W^CgRVNPjcjxq|N3E^n7=-9|Ccd)!q)C#l(Pu=c%eQ$W-P-1Q<+E zy4Vf7cCcT+^Jr<1yXH8iS)n~v(t|kEjIODBRZd4A6)HXGBCS0~x``c+eY)iJErKi+ zT9CLV_$mX?6)@|T0+j*FaCrGJf&hWR}iJo+AfNl8NZ9LT-o&Ae6AB!S$xL`_-J33 z1{`(7)h)sFVc!&YHoRt{)~DMkSlZ<~M=v&P0JXCmc$aO3FmVg~5pL5|w~dhoe^!J1 zsN}BcX#aFe38~f6MC_UJzn{>tK5YNElR=R72F%yDfuH)U>>f??S)EDt!#b1z|33i0 z*ljQ$1=&jGK+(d*8Hjikdte={7jO~r;w^oi+ARSvJv4PuU@d%58P3}&`83AXp4s8G zR))O(l>oW_3xta1>^v9M*@2OvS*Yi2_ae!ZKo1sVoW2d@dnvj=T zSi}P4j!jt5>b7I8-}2IKRIa^gmJwh734g+_Y!@6@if^x4RZE(#57= zKnTv`w^j|dZiJj%962{f^Ws=;MAB-q!-uiUmetm{+C+XY{w&aaPGkRoW5s?hI^w(5 z8sihssK~CjRCOITa{Vz4z>l0%7@@=l;#ZgxI3b`xc~W}a-+xl1-X`pjm!F3z zlJ=Xs+xOB@nQzWI9CPY;pBk3(y^FB*dB`P_NU>T;o)g*_kU7fA3n0tI)AK;N*c59y)Wg^cCH^eAUE2}L)$DUEJy2tgR5)r zE+0gw0b+KGgT7sXI!DjLFI7UyKUgP;#J+VZxPw*9p;aM7AP14TD{&aC;0v zKV5A8-;KrZ3sKh=sD2(SdZDqJBHvStJGsxY7#1Zt$MgSLc|o=S3y?lzRv$2q*UCQM zY2NB}DH_ZfQg%>y?;ev3+xK~ybaM6mQlf&P$bM}Kja`^kfiI1=*TFRl2d zoWxXhEYkoE6emD>F+O}p?7$VQYFEd!A)~s$crihXLWMCZtk)3ma=w(o&}9?tk=wV& zKlJd}vxn2M@9jqkJr{#faXbuut6Nc-%o~OTObK() zG4*^yTbv^s>}5terW#OSdv>;J(|~Q}y~(PBOgOPXQsl^IJ5Lcdw6>%J|F3c7bR{R9 z>^v<^ZatFS+kAv80);+_Lz#w51%_%X1Eg+$*^-VQhE%@bxEdsN7PQGs z@Jd7p&%tFM=w6UDvZ~{Tr*emtRryf;xQ7e3mVZL8?4}u?V@Px&YV#2-WV25tK(4JP z=8fe9u`0Y&C}KfBI7UUtzXq|#!)xKvD#EpIy0bvbe>&oDp$QDWMq>zd-wP{iqvPj14chLd*uJfgM z7<7Sf8;|N;tcaAt&!q$frS;53m zWh3YqW!WXTcj)sz!)H(Lh zjwR}{N)eav`J^(D+#pVA@?rs>J2mBhY}mW(9p2uj^F5rsoHMIubh5J^IxKv zIG6&gnYTe$fH8P`Bm-a3#x<3pKiQN!R}t(Eygu#4&G=D7DCN-ol#OV2LjrwIQwzv& z%ByM2(u%6`RFixyU=^R`O|j=no5i4YEK1x-NINOabo82s7D-jC?c}N&&itbNVBdhq z9wlPo?VRaKM+T|GX2ek3~l@0(55(E+dNSk$@~;>qf1>2N@1Kv)*bQrzj)myTRa!E1?Cc5(wLi4C_ZH$Mdm>=88CeOCHF>5!i zG5U?X=yx-A`uZDM@K>?>>H!WD7-zgXQPCCW1LeD+P?YX?GSu_gD>pgP32h|R0TH1% z$EuYC@P?qg9yUg%n#5`i_(^q6%Ee4nZD~fXQDt9kP!ousb4C-~r={inFKEgucOMx) z;Nx%Wqmf}FZJ0=oQTVbTtQ<25$d2Q5lO|!)a;Q*0TuLt&noVY%GaW87W3KjGP>E8A z_MkJn5fmkf44`Ik`s}7tkEOo>99ZaNyH*tSDO_J7vzWFvP#$z8ak}pi1CSxcT4g)1 zA02i@jsKtn{z7$Wh7DW8A#IAC?pJ4CmP_g4l$nxCANVr}I;^p>xbSS-7G`&fZ5%-X zJ;~C%pRXv$xhGVLvU919v8Cg?7MS88AUt&hfh?*_DN&zMdKHa(o?xo3-fXzVlQlJo%rZT?+343=iOJtR+P6%`wEi4LqI-R@UV)8kedP<|eyNOCsn=?D!9?5xST_ilm>B zzWlF(AGrKH3Iv*xxd#hZ zNWWPAFy-(2_RllC-^78P4~#o|!y&IQ^$@bqpZ4#@7xGYir;fC?EC-HLSp_;A_QA~m z$I{{+L^X|80KMs&yUb|SChpwPX+3|Illg*~#Sfmgfl@=LK`P%1MGG7fW7*DV|Jb|P z=HPy$(;qaqd$&ua%q!Jm2in!@@P{wr-QAOC=@Mt-A4meFAj zeZG+cvvz=Ccel$GQnOO)DifazkdJVHUh?UiDS;Vo_7Z~5I1%3OBT_fo5a-p9XJ-?j znq_zy&1-4m*4RmlC_7%b4yU~US=WOr0Y7zn|AT5$9s+;WQ>}@!_%9sd4QTlAX+#fH zcYH;nZTUtonV9om+$aDRdc?{>@W&QQW|Gib=nK|Am=5Dw7!eHGJ9+Y<*s^^lMvP-< zuL*?nX#t}CW?re}7^AXJ8DN*|%FlmgtOt4dW=YeXKulxh%)g%2Yo_Q<4%ro$_gsV3 zITt7u;EeU3Hw%dR* zow$Zx!2Q-6P<|G{ za_$GEdVz$lz?&QBYx^E@mCU3mD%j+yC)=00lr+%{Tdj~@+OFHUGoBK8`wPC@$9jP5 zyCb<9zzgj=3VF~=<;^C-{9UMdkW_VsC2J7*o57f*&wm@qLG04y`sfsz`aOyy;trp> zUf&inP2;{$#rb!Dn12yH#)!2Zmx@YPf^(Rc16J4XoWANN<<|E91SyQ-BfTkS`F?gp z0^B7borY(lKVR?=q!PLacgdSb_fm*AW6rYq9-ls%^YuD}^X!`LY}{=Q#l zQi2PRL$dSa1jZJxrEME_)gO$(5o=HI{emIl)?dEy|4I0Na;yIty%sF}Y31+czrA9p z#zs8}`!y;>);LMLp+(81lDYMN82Jjv4w@8Wyu?Pj@H!!kwaxE@X5&Tmg#FU)*j%{$ z-GFhMW8SxOsEDR=LU}u6cjRNzq}W-(_D$f~KDB9^!fE-w;U8lsP#mGNtC$sj$V0gr z*3mzfZBuRuTe&5n(&P7`!p_^kkA-JS1GEa4BfBiSf`HX&Md!=1H&4K)OTL7}y}GP= zkR!ZL5(mIez=6iP6O`oK`7{)BG*@Qk1d*jhtX5PZZd*Nq;!`IWW6-L$k_dDS?3581 zX500Liq&nYv@4`T=`)?8Y_M}gxS92B_ z=Ak3zBTuHTO@)So9bpWpbfmS*D3~KlD85U65$4_uTPh8;_6OvJ6*Cfy{OTZH$@$mh zN^^9_h%&cVAdoA1j=@Pjp=kwuaiO}l7d|Y%lpa@HAyDl?!;o~F8`x6A-v6k9NxJGW zXo0X!<{+QW*LVcOYG7Ql)V=2~@Z@=QkL^L7)#MX!vL#dDjzKiyfgUKUls`Wno12}) znL8L;<;&01guFHiCep>3g(C`VmXWUH|4_prE!adFgIjRfdq2*P^WF=^3Je!g*L zBle*Q5eKuYxKilpd`&aSz;WU&OA1Ft5PYJ7{9{7=I=q!sHu&c8PKm=-E@H^Sn6U(2 zRghgfppB$OCqDqbt%lb(ZPaf@gwC3iW|V| zo{hBY<=Ca@x(4`Z{wHytbw)&x=j-g?#|3346o5JD-aP$qiUMHv9h6k{Wn75I!$`$O zq(dY8YyK*9J_b%Wy8i5nmCLA#F59C&Du3`4HX;|!!vLd7NzrhukctI*+#vFG@=Hu{vAT)|GsFfB552gtW?YXEQF ze4}=swKY1%f=mK|cE1;Zc{$|NMG!@Nxr0&LAI{uur?1Iz$ua9dz@Xw0iqKwwOrU@uTiG)a@>}$86P5$sKg}(t`Z@t4K?lumQ1^5q7-E z>Dbq3V)Sw?7^04hN}*Q()U$JVo5h9&Pukw8x&FH`Pd?7wr>c5I@Q8GMqw>1lOtb{v#uAmA}{%MH}D|2E%v5DT<~6tE6_U0KN+ z)9^IHTQd6$(h!u3f?Qvtuc$9avci1JfQC{~S+UP7dtbr_KCvTEq(wuM5Vo1G2t zsLkmXP&Y>kSZNbu_m-F`BhVO$2{_4m$8~mXp}*(P-G=OCiv>r z1hf;3A5v?~C(+Bl@7>2J$JQ}6hZp3`u9=vl#n_gin?qDrDnvx*gg?s9w)8{8Y_8i7 zN?n20kXB9UWGOW0Sn}o{>qq!l(bwu(QkPRd3!dwDgDA=e=V9>X$njOf{**XK>r+$Y zO!yj37RJ)e@x5MUlyse z&g6a!S27(5*ckVftRsn6Hc&T77zO;8C2IM@@;f?wp{~DjW+nNA6y5kwyw3jj{1`V5 zeh=_`P;N80r0XroOfRjL01solmNDdWvm(&geFib8=wUpMj z_aSk+dS(mfIy!?)Fhy^0My3>+Ek7UcHGsXd`~U`??YW`W#ai7!6DLx)2S>pO^+aI1<@b5_Z)(MFW+A9W-tq@GtFfM)J! z`v4E?EEN_oPp*#`PPuF^{+F@+$QDK7F=U*9PqC>NO?%y>F z#~J}@QdqJaaDEjkBq}9>?^249cP4TAe9QXMEZ=PyW?=oyj5d}>V&5bz)r(_k&_0&x z4kSVNjUBkB9YRbi>Jv7V-425oi|7UDdr*AFApe?D%ZxUT2Po}i1%y2^M8C$+XMF9Q z4S!JO|LG|{fq8{#TzxmupK}6TvcVQ!fb8BJpsHjS+ji*lGKD{ABSLJAu$JT??%|aJY zZI^d-$C{&>zVxT@iMHQNY~)y}f~^yRmD%R;2-CSg)w@UgNS}9*a%jC-<{hZe+;YXr zrI&>sd0y>%Ozv((FLDAEg_H7puxOw;^wLZ`UT_I0uN&jI_8M0*f#DWoVS%1r$VDy( zG-eCUzOVw4NXi(Js3KCk1aQs@in>Lqb;Ods)?$TXnKow&^c(=XWV)JyxOhq;#gwRE z{17lYZ()vOE6HyV&@{ixgJT}Wd{QxK+79I!S7G$WK484|1UOtafO&NLQHz@y{+v91 zsZ)hZ)FS(=k3DxaVd?J5=9p%=6GW5}jWSq0l*&Q3^KwV}Sn2C~o&OR~X)pr`J;{Wx zkWN{Z3xL9EK8x0E-}1N!*NFI#?0*Rz2WCNz9{5RY-&i->O+BUGJpNNNg4nM?0+r3o zK_0FK-CJ63$2Ky&HhVN&5EyIL>`A1SZ-&;L+b2PX{Y#3*hc#dx8errd1O(86nZ_0kG_l+;^Y zJv|qJ<2ol5sy=5G1R6qHto=iXx>jOtj`C}^AWZ)(J)u>vG{q0Zh1EfxOfA#5^Aw8A z1<_KHA6>@8oCRcm+gy1WBwz=W9qmPVM!6USlSU;t6yuCCvIK^t`^TUCr%m*n;59x3 zLXASvD2g|Twzk|qIex@~o@q76XFmUkHl8*lwZLbRR1^F3`^^N*&yOM26X6r>O7?vX z}Ew`9Kz@kdet`9S;qD} zj5T%$g$x4~KDNxQnSsL`tf zG9G0W6l5w)$#8WehT+8~a2sc-FaXgx&G?|>Oq2bz}7u8qgz1M7(#}s;XIe2O2AF-meXMdG2!eL zPDD<^;;;&_({L86!Jx%6oGFjF%di%(G%SL$*#Yj2SFuhmvt zgA6H%7BIkFJ&2T^*ci9^+Ry^L>0VSoqKp;cV4DrX#@5vXz<;McyR}~w#9df%^{rT? z_m>*6B#xH3>Ag>~;>2FQqS5ik#HYfB_9q9t2d~NHT@bw0N5#ybam2qrRcvOyx;scv zmzFsyL3q@!9-X6wXkmVo8W8tzMZnG;MH_KDn-h4hxjR-Y-r%T^|K}&)ZEj9PGjI^k z>BY-0fptiuJO2KR`<@^bHP7-ZKBZDfbQE?uH>euXl0<&khRd5OX zlL5{7Kff@`I6YscE{U?#A+@XN)oN)tg~`X4kpk&1_+0fkz+@FBzD^^&K%ULUUzo_t zJc2I`3V!T3c{oW*{S;DL?2d8tbi`r%f&#!5K{u066>)U6Ea!@?TWpO@dS!-D0JpUz zg(YPm_$`*kH<*OpybIyd4PJzqd3<$CP;?CpHNtqC@rH_ni@tmM8^W=de2j5W$jA!z zGz|#^enF=@;fiP0sZCqO>@RXsT2l`RKUaF2LU4n~QURgxcMC~09+mYIz7-Ra_T76f z*)FSnkeCM2&9XY19~+e6_zgkJTp{V4th+^H=(;KZ6J$1*(R()w<7s&-q-sPdzbPYf zsXfRrk3{-%fTI+_8)`LJ&(5DwBF*lML(#0isS*LrOE>cBF8@w zo~Zq)Bvvg3n#h3!H0qqTVOS%Fu4FO;-#D~M>YpaQHqu=S8l$H6yW2@DIrRoMzk6uC zWe&-%^A(;i@=ux)*a5P+bE%ZA?i;^~)m`SM3vHX9*HlN0_%by5_+(LrbYLx6jJXW3 z2Za{XL{f=U@5D#%W{!pGh|%mMt zZTH(Z2XL{jl^XTjdyjI1!(0NiIWubwJ>L3JXLbrAMf5qQ_(N~OeRhVG%hPWeW~)9Z zK#*A47ZC+?tkIEI@dy&+IS?fde&%s6ceg`B>ZQX()VrU*wS=C)BSCI7`4I3g_d{M$ zFE+8-6u$%*M*M=CrG$O9Lr-oGyLYhn&>T$>;DobnfAOh?TJzBja>zcjKxktpVYY&I zu&7$K98sR+zP+^qN519CgN0ks5OGV)UO}U$yEa8|GCpY-l-r$&?lb&pGbKFJNbvkFwAiGPCYDr;@UKd?q#I;|=Y(yPx8I z*Oa0YGg{@>d4CFV1R1iW#*J;Yotg&pG zUu4UD|KV2`g_A6RAH2j4;Bca9hKc8d+LB`GGfvQz^`WA5-(rxaqy9z%4{@DARlBm< z>u(dARg8d*MU&E(>lt!jCWZ&BMuk_SAH6?aN~x&!qTY!`8-W5=QypW;n{QnW)%u;o zb{LCQ-_-8=v@3Sk%oHKpbxE#I2>}|WD0kLd$%I>d-<8y{Z&rln0_P@eVUbio-9Q`SPxFp0jH&Y$SX$jx z)?FB#jO)1|gXG>&<|oRA+BQvk*mkT5_zcm~d;ja=9yzSWoZt#*kRo3qbNhwo9FvN$ zP-8ujkaw}3Ny5t^zdUER`VGN^8Y$Ls39b7L2R|{A8>wr_jJMe=KrrFIaHO{HDO^!d zMI6WUGtD@(>*!9FGv8|VK(A1)+}xwZIT0Hmb6yr*B-{0pN!iF8hXowelSdxubKjR6 znQfLhVLJA@I&IZ}ah%%}fRW%FkE4SpFbi|d2>P2tfnSgXUjgYw+5r~2`fxTOFWeI= zA)IGjOr(XybJ#ooQ!Qtq4Mq3}=n|{Gz#T5z>AZpT+0@1&c`}D={CYkzp~x)kD0Qm; z(f==~%TC%8Oqjm9K)CO_d3a!%^tpCh0^4X#Ac8)0b7_!Uh{n_gX$^S1=#2Dg#sxj% z2*m*;$o&bz@m+p=I}7Y?#3iK)CoCIJDi zLXn=ZGne4XK`uYo^Q%3Kn-S-s1ma?hlJ+<@ST>e_#{$HZYS3l}RVpNwKv;kU*G`)? zZbLpi5D8i#j|q3ai!lz3p=sdXi-~s+FJa90;p&r(gvu5AoOdyjn|HY=3o)sqD@DT! z7OXv1B}ePqlGf_&c^RmMp)Vr_mgZNYyHbU2CazvdVn+wf0 z?=7;bN289t`n!)j<^^&1322GNC73N47hPMI4TMzIv zC*{qlNox|p+c(mgBHxZ*`g()CeGmjT_{Uqt6k1&VN&-acbU5F9xxjccq9M3_T#;TK zb3V_>eLc4g2>f#H7I2Y{)o7VdK-H3NI zLRv1YWoi=Xv%;n8RzY%n#Cww#L-%M|B&9?rwKq{+wwD{#Phi+}FbDgxHVODZYz0t< zM>>%?TQ#0^Ae%)=%VK0A54Go}qFjNYe~Up}_k>FGWts?wr&|A@gSH%s$#5Ov7JGEy zou$hY&IfB4?h6zci84@^X1YLbkXl?4YX8YcZnt%e-tBF{Tn_zRVCcekx=o(YL`SwV z_Ug~t)IJRRl?haO3eZku#zI6#Ok8ZoHir^K1v7r}1^PU)HjVQ((;YK0Gn`^^FIY_y zH~}uEea_`?jI9AWBEwCi3q9CXT>-w^XJkKpxvcW8#x-_?++_RfNb+9c0jKyF{v&J! zl*pz6f`~)oi0)r?Qov_7VZna2<{{0t%#;8@o-(pU#uz;GjxAatpoD`t+&o)&*_|NaEMZ~SfQ{FhHG z@6#5Hea{{aULsn=DZxh{IVGViY2XHaBfV(~DX+`vx){PY%IITx zB$1dTM!~!w5CU0Gc%Mu+ zM|YYE1apU@sSYLbcW1b?OIhXRE_MWzxCbaW&klf}2yG=YHXX>ORUO8R09uUC;Kv}Q z4$Mlja~|u_mhpYz9^Wyg(1b3fF~gwVu1waXX+t2$)`qzd(;R0U60MVQpLFsy9O_@} z#Nd8s$?2{?>uoLIvIRY=~exK==Ah2e+p($Fsts!W^__Y94?T&qM3jt6Aq zaN5pD?NO@Mn@O^IXl~q0@IaUiuQ?3>!R$jh)U&;C!tld_2`S0T-k*X+q{-rxNQfSt z2p{~w)~OgJ2_dp1;jlB^0u=pBIEeTQraQ3h@-yy+9vc^cnHuOfAcVVIn4`A^i77Mz z**N<<@14_TytI>}yHe&z;4WQ|=L*R0UtB9bU|zglHZ(+`jJ(V^Ha=56_ie(D+dwkL zE!&*udwUmDTnz7>YZAus|3)g{>z?!m<)2Vk$Z3r8WN4NSA$;FTOl)`6?Oq40S&4KY zVpFFrV)|K%-|WXrl6}493eP^P(v^W?2=w*&aMqZ_JF8mK&d1rzj7}BX+w~=vzWeV% zmf7pUm&!A>zI@vp-ipoM1TAUcAkm2|oCfnwn>S42H8^x1ewC42oNfG7E^zbW;bj)0 zD5f}3to*B{Hw5uA&|z(cD*TS@$bg$652|`Ai-MC*4n!r7S?7A~eX#`iZ7ku5d5kpC|nv-Vq}KI60Uc z@Dz(HLUoY*%#yiq>Q=148(Ww~Xj`huvk)X>r;N&BQqvhrZ-D}`)#80~D=33HI19!J zB+AD*s>A?%1)SC^q) zzkzoKJp!NfmGiXTP0oh{3Kbc*>*~V_dXURI^`V?qnJ2B@%RC`n@J%AW(Zc0vYRgHb z{%s5ck&i_O10!-YEw7t8JSY=w_cSi3pVB}BSfQERCKMEMZe?A`HDSd%X5_PaSt!0d z!tUg9i%il;E$#5x=9bSZ%^7zAn}`72s~f?WQn4ezjV*t?;9Uts3Duf|yxYSRzg0qr zJXX^l^It*^P$+h9n%4n=yJ6xu&h>RNUpi2ng~P51(qNtZb|$e%`GYS1n43*D#cL_q ziuHbJL?PppM{+i*=>22(-a+f&;~DMkUd+3txnmj7lhnb}4BH6qNbBBw%!FN-Ar0a>naVSZ~bH8$si=Wf?j(;?c{UEY)tmLBW%bj`giQ;IDLp z7?A@yeaR^)ebQc>P-^)>x1MkA)ZTGjvV5aZ*7Wsl*9maCd9# znZ-_BsT6vhU)9TiWD#s$#ej|#4yxk5E}gI*hbf!&b{8YPOw)(QGNXS5c{;9sylb0# zA`f*hZw*uw>K9=@FQYK%C^u`-OXqp;36+W5tE9lP!uK(MTs-Iqc%I7%eEyXGe?fU; z57jUwSFjS)sINa$3l8V9zg*!H{44=idHXeCwy^|tOksbVh>z;t;(Qa76!$*YkZ8p! zSl3i(y6l2qPW%U0#|odmkjmSfAOU{)<>J*qkDy~5_?F8`rfLnZme5ZHpWp;*DA4Fy z_Y8pbN-1-pknQ7J%sJ-Ig=<9*QnC1zZYq5U|5clm-#AFrjPkqbAS~T^j#oq*QUtio z79PAgy*JfE4pPV;kZ;^3Lmq62&yUZX()(Q=Q5U{FQh*vA{w+k_AVlLBH3u`V>zkb{ ziBT{gfBd6Ke4u(6!;YyQ)L$ZiL~)j3pYtYj#l|~alvs047SIBR4~_+evEF){$EZhq zb@lJ0?2p(qgKpn4L#}u@iM;SjUAF3led+P4Q^?^kch#4PV@E8!>8L#}KCiI!*yCJ5 z1JARQ%BOD{oA{DQFmbkHtxoks=y%ix1o_)i^63skaeW#HnHeCvmj9$}a=@ zNydo7F3rV4kEDeuO%)Gw)g9|hW2j1-75f-8a+}ccOyk7>*{XleMzdj{?ni&MNalSP z$~A64j>(sb8&!f7>M28}(5f&|_8ck`H8H50R)7(Y--a8FW`y?>D3_`P;rL>pNgO2u ziFfWSz_v#lVk}PNpMt@q-=}0P7;%*BtOi$}C^#LdcUb9aj1n@wUfcahlLWqqU*8M!~Q1C4lh! zu)4l?H}~OI0F&#E1(+U?Ol>XJwtL{(QELvV6R=~3hKG{eY+A_jS>qCGb{|^kovK8v zn04Iw6R8iHXFd(y`=7X%PH#Qqp}%Zp9D;3BJin8ZBUmp*wuI&oF=!rolbP3DLpydL zhDh{lA49BIs98n0VB#!S821k-Hz!M$pb>h2jIu z0Zo)EG6TB)AL=bVrL;^B3VfLz+9iW!4gA{!#ixr~;7hX;>Du zD}#IMiiTy03;NWF%Vfz4>?`$j!!CO0MX~Zp)rbHvk28%Fj!ELhk*yNPYX;Ie;iNOL zxaPp4n!1h=spMUpI7GopB+|}t(IOY^T|}1?zrLL((c%X#AcbgC`TJ~{i7*&*L>`59 zcG9M3R6%|u;~1tD0`k`(3KH#t+iAkX2Tw8#@LXk*$5C*NySN%aDk~f-=R>P5MpQy* zULGIrX=o*az+VnhbHrU!y~;{q9NeA}MlD6+&@%#aOs|lgVv5K6K9+XZzZq#+n~893 z2L?KQJI8}}(RSLJTUs7GMt-JwjmpHqOP|)i2@!LLPFQdcH|?0@Z)@}pQ$kO;rrcB; z{^0j)E$Tvfak5N<=`Le}Pv|5hkKa#Lg}KOdAEeSc(N*`6bnKIPCanz6b3HYTO9UUd zF~l3fiRJD;v!~JnOr$qBnW8lvdkSZRw-$k?ROXM*}*qeRArFKp;HGp&MI~fT)LoII(#jXpyWo< z`+ysZV>(oRf160yH$Z8XnTWn!dPobat^e>O3FwG_;p%klx0@rA4w-lEcr3cYQI@>- z{zFS>BLMY*vy1l+&l`-{bIr-@=HUHLb%aVUyqx7XEGYeJe8X^_3YDJVklZ~!vs&+g z;8`Pga;L8skCS2^cz_aP$(y&6WGf{Mi(vGa*x@lVKZ%8f3iY_^48b#Bsc&iWUmYdy zFwL`h^WmKIuUI;U;&>!ldVE_o#vy^Dh|c$k zEf(Bxw^Eh%dS+Owk1(S4S1t_R*z@t=qyZbhXUfb}vJXRgQW09d|1$oN*U#ugoDu6m zIHV93A2kz(ZPWV=vuk0V2Ii4>;s+He&-4>s>}vrM1$(PJKXqYKxG8Lwldu9gk@~9n zK-E#vCLpuB*oqeb`dep1^Gh_RlETvRg$ys(oeEysL+*E%!e(H|cf~*a9Xx&|qFsTk z|1yh5A{3*??Lm+8=Db;<4QnH4uxVLeJcQYYXe9tvl;?%0G2NCj0&99e3A|%qUHpfm z`%>1Q^MA9DXi^>q1~KG(e9uF^S`hc%s*C)cnXQQ#229)#ZAy0g@{Phj-x1^Us2ob_ zaMnaj$3M~ajY%%D{f`gh=t?@bTs;*$odR43(Igl<@Dccex_LHOomcCUCi53i5kMJv zhOoKdG_r%T?mZCSB|!ak+R0cp4gO?GQcwiNN@nnmOG&$VA>{!2uo;nDNs)Q=LeNR} z+P1UIKQ{nQvyRBN?R|gx+pFHVr8;J1hXEEX_!Q#P$w)C`kT?&b6!NRVuQXXN^&jOz zQRy#u)X{*ujmoMdO=+;{8n!dLh0KQI3PHoXW-lGE-~$?pM!e0Px2gO8Sc(^0MCV!fUzOZuCl*jM-A7JA;*LZUt&a9kb}dG=vUHgCtHN<` zl;2zc!x0l0?Z-hesQ<{`U{iC$n(Sh=O~mk%mn3{#=gNQjX6glIeOsls-75)hAO>^; z_sU}OR2lX#Kk>1uMF$J=dMMah1t46rxUSnj%3r%d5(pzJJz3fM$V>W{pDrhT{FW$P z8QKW-gC6R0!H{OiGjX@+m2d#hsXwh9s7i-clUd?VDG<;Ys!#erXz)Mg8P3vEIv=My zVzg%}!odPRxeodj4ach#oK6)e9VR+&}Ox^RUJpO#NB~S?Zj$ThaS>Ica^&jf6AGov(S; zB$9*)`Ju5TN77ygfLH9mcg#S0wN@3Lx$~Hzohze!C7sifWRb!=ZxZx*Gkb&qLGZap zS*>7A@{F2=t23LZBYiE?SOhShHABM}4roo`x*8L^9W}oXiwg#628-#i&Qp zTcA|Tb;SIXK5)udRCgSd0&ZdP-DA-Pe?1&lHnr6rc$S(rNZ3$l6XPwRAz@fu45%(+ z5%|=Yt^d+UIM!aJi>`L|2hJ^DLe1Jv0{?;I?p9-N9?3T|^g~9jjY(L|0(xe4x^4u- zW*Ycg9;>=>*RJA!*;Q)jFGeE;4ZMPn<-|$D;CYvYfhjwH{?AFWm!|EB`8p!_QJ?#vD=lap<}{xxNT>GPcj>+6lDD7$S?{s?aLQ}CK4uTlLxa!? zcWFYJ)Dcci3o}p`N$%^FZv1xZOT^f?=9QhQ=TNL)LFi{I22~ajgKWc^pA>}03~cs4 zQX}>9r86QjsI(!jFr_W+P?p1Q#q0ww@+6<w= z`qlRRzb#|F+;p4VbwXK}b0sp%mjF9t>v*%KhkFs}f$aNO0}}$5xDqyivyS31i~lj1 zq^Qm7;89!Rva4oQ2mWp>>_Zvzh3Z46p{{4vKR%n{x57ZMd1Kx)EtD=pF6>nPWfn;b z%{RMtaNB62S;f)}|E1ljge~?EVs{C?rrlxB1d;KJZe2`+|9uj_Xg7r_Pt1};*NAzA zZjzg~_EyJhU*VArz7M(e4(*|d7I=M==L}fs7(>au4eucAFujYVOf~8L#pO2Mbv^wf zWDhfEGO((e?A<*svPoUevm!x<^>c;_30dfU9%{|3!Jp)4&txSo1hz-zGnU3_oQ||+ zNcwwLr8Ou*Y#J##hT$RQ@*Ao44s_eBjA%tEn6fIFkr5JRY{9V7UW*WXcq5Y#MTGLh z<7Be!DwV)RyqJSSh!2t39T>v~EgeTE5(-7lMaAg9-Tiy@>DKZWrxu*%qRta2@?xOR zcdSg8n}62L_otjlS)#A9{{MH%wckOxt|M*!T(SC+W{!?g&O^_pmdKCKb5 zwEc9tX|$B(YKtHA@qujH6saodsW~u(g_@pH*`Q>_yhJgLC7_n-A~1 zrpPRqqU>1E>{P=`rVc)K6fesWH|Fl0eE4|iyhx}KbYUd>c9QH^`6*07kKJ|>^rz6j z%`}5mQLQqxC5I`{yzUDPp(yu;HfB(6HQj0LDr6myon5eBQK?yPw;3$X&lf&% z1a^kRPi{E`ES%81h-1C=szydp%++$u5h#w}do6%vKHdR8k`O-v1NTQ5W~LSv#XJ?~ zG4pu!VyqFkRUo$41<}GjgjN;m#(gS!!!v|xabjdOugP{9=evQKTDS891m6CjiH*WS zjqxQno1Thq(OXlm;XbvPa*2-V1BcDLwlZhkosz*uP<2IZJqxF>bMb&F3-#7_TOF4} zvjNL~BX5V`aNQapgaoHe`Cw>&3p9(kKe4x=sk$fz-PZHnRHrlfQ>^&iomQ-VjfeL+ zHZImxKe2G2HZgUD9MFo6p`~c1g%WpL`jbng8)DFt#p%95Fx{B3^{_s zk)_wApVkS3LijxA(@ek zaeb)0x`eboI#nhWJe)QPDB##6>1wV~&73OxO6 zS#3~>Hf=Fp18{KTz|He+eJ<6sr0~JbGD!B%UyQ5de?g!rDgIx z)ySVvXpzN?K!5%ew9yX?M|>GBmYY8K zd&#(ZVmle8f)m|nhk{uUy}>NVq|N200^(?lA-Gm1OYj|gYu=v~G-qD0gFrrAD<_6K z{lk)P!fY$%GJhmPoW1_ZY)(06QXw&%A7M}WZZZpkJ(~C|M4hPozpzQk-k$}XcIO`L zHj|MHr-+;Qz1seS#qUu{J#d?zH=~P^k3qvpbme5dS1vMEodoyR3)h1V{YWMv*?5e% zv(kTheGVAKr6N$ z_}f7M|33i0_b`2Pn0XDX0%4R;pA~lka8PhFnUi|{qhY@?_3XH_CUC=!0mnqralaYN zYo1x^M`o;%^bDnooLH zd38NHul@9ByjX|{HIETZ##%*7hkdJE6z`vWE*X@VJJ*qR1RW#RQ)#7_Rk4T>&=%Zp z8+d!W9*dNyWO2nr5s$ToAW6*?w1pSo3(+(%ui23g-tPwiRrQp)6<-Z>RgS%vDgt%o zTfP${tsqdgj`7%7?+C6z&nC1|Cy21(QB3jiN6MLvM2RY&8SK#_YYIW;u@kbdyLAx#;`7yL2P-Io)h#z zhC>X1QG+MiX+O_W8RSf-`YX+?2}@u^fBAz~a=uVKc!pY`d$mOqq@EM4hZ#~LZJybZ zB0y7#`io7-p#q4mF*1OW4X%|NbRxH`?1AEQv#9o}bPbEQMZ4J)yZ_pxU~|Ce6zIS0 zRTOe-u=N24Z3JVdbeD-%kCHp08JgP78)YJ8GaNE5V>4~vwc%y9Lb7yo)sA+fs!46Dc_6r9*?Fx52p1hm^=UyBvrkw}m$8gpQJ!qiIw8 zTlQjf~MpVr$}O;D6mon0)bLaP2xlVfkOp<@e&9M?o@=yKmrS6f?K5~rL1@HkI` zCmpaRY)BFCSH!_P0lo=mosW{w>J3DrNpBlMo|ybzidrJK)F-2L!Kky>NoPM3`?0F+ z#CH*lX#R!+!OPCXDvMp2BX*7W(j<&UNTZXCq?%+&yt)R_U>D9Q53Mt+`bvh=1^x~FSa#DEjWljt@8 zO7@?^_bwC!}itgfnzH%BSQ{Al zBXc(xATs=utX}qblm9SJR3y?Ri3?&5lTmqZRfY@}`G0jjzzC@gVnEdo^Hq?1gC}sL z6oblp80%vJSNH^ARSJnLNOPIHZNLA~Hq-3ODml=8wOVHcVT221-^|Kte)_{l4Vr9$ z{ztq({Z;D9x#%%M@S&OO_C7HGOxS>Zjd>8edoW%7M@nTGIIJ@(m`fe|1 zs^=T5y9IF7l3^U0;AF8n`e`NZJK(yGoZ-@ld1Vdsl)mK_Cbeh3M5T$0sv0Ep%i%c< zF|~LNAHQ2hSsIceF1vmHU6NXl5*z_xt)N5n*vzmTp1mAeA2EviwU+3tv zJ`)iMe4dx8G!P?9z4A<y1_frt)W_Yo?|dsQPHLB9#t(>A7zvP5+z^{rMyk9I_S$ z;^ogV4%IN^04c$fet{sTdeaBz1>!}b*)xcKgR#_B=rNyoMt4&-?+zW}xsY;wG{oLj z5t~G|N9>)ECxn8UiH5{#Y6;JKn(p&71|{moL@xm^iN-1^?Xsb1CnKHoLcpxy80|Dc zj~kTVCet?jJ>(5-(ehUwlls4GljjRn6Q=1G{Cg<>{X89G=mFYg4T{l5v_21b&NOuz zi?xt+jrr9iT(k&OhtTXF!5Az*uZikRDEZmnb2kOYX*Y#YA&cIGdPbElz z4)IZz;4;wFz@xUlq#U5(N(~oPouTH(8ypUQ6bo zbP+@6Jd=pd--?!Bn4Q;$GGi}r`T1G9?L(L89v5A?X-Y4=Il39>kAbt-_@-?WF1TXg z{AO~$H`b;b7mko@Uy<66esA)M%5IMerQOpyneL8@#`|hEBAc!z7qcHKbiVD#Gcc=T zDWn7FD1~&L?pY^RpSdrN$DHImWdz+NwRb}in>ww!D5a*BaJVWPM0azDcI06$Q!JaP z{ZA>F-B4V+Opkw@x9(~F1W~beI5AYDC#NM2Tot&a{m-LKNsV4ltN*$t`~&cSJVqZe z`_O~h<7g&JK0gPR^Db2DrVqf#odVO#$U#M>>zNl2Gh2|XFN}+o%J&p8jx45SEZJc^ z-N6~c3V+anfjsD;>c_MmbEbLjzM!YyHueS*oBW2;1ftogy~-p z({YE%Urb@fiZOkOjC8WnWF?Q%>tX^iSJvMP`|gbcAqf&6Yd#nf(yoyeBBz2nyrJvL zO9i7%xx>(S2;ArkCo-ageQtIiOo%_q;U(&#A@#DMj?uqZzk zc~<}1;XJ?bs3LH0S7o*i4wis7RE3IIrR*5Knl_wP1>j{W%O!h}V-QY>bF9 zI+VcU z98IMhZc`g)z$hN6AKwhR$1pr#ZLFid@E_01Ar#iLv)#i)@eB~?z2~c69#sH1nIH>s z&d>srx5q%1i+*iOqW6(#gmi>Mxg~j0?@n5FyfgM$el)-q9@vXqCMui%^?ViEnoV6v zsJd^Jjh`g|X<4fcN`~p8%D(8-7ad|RFOZ6(XVO~EN5l|1&5df(>K24e$KzT;BttlK zcc7E-o{`gn(;qZenZHi`40V^agtG;W||K*oCv-TH1bDJmvwi@OUroqAeW_pvIdYV0e&voI_p|@#IaWQ>t zNU7#*G>SK==v2zoAUIm9b8w)m<5`f7a`Xlamw-4-dkV}$%BiA`)%(D~TW3}{8wXkq z*BuQDXqkCbzUaW>^B!gq0x8LuDo{vHm3XuqOX7T1+!|daK(q{kO`f|OJKju|SO$LH zFuQGKF4_gw0k1mRq~8gC-U2~9Ro&4STNh>Lj)1e3R5E$kXk!fIO~WVqo_sG`Y0PS9 zr`5)uNw~==*#UH5<4?o(m?~ zZH^~#dmtpI&L?~jLE|C#q8GcC%a#7?MD82e%40WKia)c1E5Om}Ax`=zORFS`6^M>3 z{q&x@+r)zS8Aq)FiU1zvJhY*M7&DBnWI|^>g9v z<`~xZ*YH|kC$Q1?k`Gaz5)x6}_rzw>W-RJwsV3zFl=|F)LQ*rBxBr!FtG1idVag-I zlb{QA!f$`FcrV6?@i5qZkR^F-%DIvu%k~2tN$cEUk<+RMoj7!jjh|$nu{-FnJM*#uc-r7rJ>Gz$3kE}Uu!wl0v?MHVf-+)KDVKfrS_B5Wt%Lelb{pw2lbSCs3Ii3UzpxtHajkgk7p=kAo)a zlhUE>@*-`d*x)E+yZvk=(XXRrX?7MJ=wZENTL-W3Eg4muH6rc3Grd({YR$Rzu0!X}9^D&PE z{lL%RAIR_ntL7dZ)+!upNmh-~^KR*{`(C_yJ-fwLN9`jYviz$&E|qv?7GgG!+$Jb) z4+LZ%^c0p{k0H3HAQWQ6OhGy+fxdJS?Ds@*1_A{N|CPbluX~-%z8gk?_shTztH`a9 zq{zr11cVUzmDfpdK}i`uoL)JQ@5$kis#@ zPgmw=;4TpZvDCPnVq1nrrNCVd+|#MS~#7Iy@LLoIIxC*zP}!i}$3Ad4-;K zwjKVd6VedbT*ZJAgF8$eVI?pq@I(Fd|GtCn=fqKB2Q+ z10hiIdX!}p_A0QvWrlML^^M_~9cyZ5c7Q8cSg4x_L~oT=_gMUXmOhBg*I52~&dhDq zjOz!&NB7u;1V_z0mFfZ@vARU{i#L&!Hps#J4iPw9fnOEPx%Y6_2RQ{oqjEnfIpq^v-;S=LL7D;_r#WQJt~HsH2a5l!KRS77F<0UO^h|lh)D045?JOye=iJxP8zZVjE0SJrGzO=g*TtS$6b^%KdL?tJw#GnNum86UWE4?v6{kpalwM5s_ZB4a=1a= zEChql63jTcelk`_)#)1js{uSGv$JeY(+XOY$Ghr=RVeEP64BNtm%kay9h%DMRf;pA z#zn0Hz3f&aPv zguUutPN))*sa1lg>G4t*5B<6{M@FMBaA8(ZEyKww8PS5t#v4t1ZiAXIuQ?p&K{lK&(Ma1oCL5mDhP}pBJy8d>!IEI_i+IwgZ$saKlwq&>fD{nk*5H< zm+^+1pt3@NCXa`yd^ZLaz~BWCal#5x1mf6UqenN^J?@PhEDIX#zO2Igvget$|AUq# zIX8U~2IRLzSd`Tx%x=B*s*j`0QJf3D(#&| z)sLqnKOD&t!N^`RQ|dkRK%YbRM~>+U+4tjfl4zdj4ijM{Y{9u8eNDJkwt8PZx!G>> zq1+uefML`Gs|(~8rd;&g&sLbsbN?Fh6p%Wl%&cvc5Ywe4=#5#MRZC&G2Y`{*BkSLe zW7@%BPt1jhQJGH7pd)fY3{DAS{fH5!_jaC#Bd2Kf6gR~%^UPZB11Mu9XW{Xuf^zJz z%|b!YF2y|5=iY-x26w0}TXc`PSaL0)t_b=>q9YKiEv=u(1{i!@F=XbJK~}W9!>ct1 zs)sO$y3wlnMY{S7a&Z`0E(b@8xNn;nd-jxG<><^Ka|=1WFcu{uIdMwIUByBWqRmw_ ztp`Yd%bP_rO}k-u6mnf3UyTga0%GU=?@w1~*-uAt1eVC}Pr~&AdAbSxZb^+oG~qBh zw6|Gg*IbCti!ZnqG9i5_X0WM5}0Fl}v~;K)CBONAp7?4|hrUv+reZ(seF z0Rhq|V_x-@L!T-%gD~e*6H>aESEZ{Dwac32K>`K2Jp9z~_lq#N1yAHt zMwXYfT%Qq%LF?u%v!|5g1eMFfHC+7oyrh#UMNPtvec8Rnh-|mS#PX*v6T@J)y<}q& zg3C3J(DveuTH}v7oRvQ4QNRLbvo~jd;b)7hPUL~%j^<2~M3Vtkfwg5r=Su19|7V^` z1O#s5dIZHpzp&pg=rJy!$Jk>lbVTVxcM#7u)AvF&G0AcF83A;UirAslIz{l1LR$^A zx8%2>;|QglEhbuYBiYRWVDTOy)_12LWHVeNH5y6ZTLf>|()E(mQ+5cn+tGFkL~Vqy z6rknFD`LOYH&m;0m_4Z4I|sN4zjk#6N=}LLMS_+YyM?xp>$-U(`R<)nQ zJx(5C8|#rW*vUI+S$k8fE}Vr9?K^Ty~- z?-!RF)kqlD)wuvPzpd3wTYuaPu@_K0#O}GW%O&m)G@}AVCwrjOpfP#8BkL*BKD0BC zp=3~LH`h(ft(<)K;CwVrq&r8(369D9hoVeX{B^j?hTCV+&bQ;lEsczuxcK@BtWntv zYvB50QSt_e5GVSDT=|EY^heYV-yxP+*;2>(pNEm{*p05LaSBZk@c>H}DiVBEGljHA$@1jgw zy}$rgk{Hx$%6Vs(UDJ&>TnJeRuy4fDy!jvxgf3e|oM3t5(_<5jv6sd$%g3M!FDM^j zRv#XNFI^ff!Wvweq9(~pK*@u}TT92*3-!mnzk;99>4#pgv1QT6q>VA)t7c3!3j{sJ z&#Bo$i<&;xk15u^WX!b-n(gFL);Pn*o#}(0AR-=geNIX?{g;fNsBk9aiMDreF>U_v zBF#C;xeCSqb~$YbZa$L7Wk=*WJlD=wxqBC>Ly8yBa8%tawKp-L?X5d6$I&%%IG|bs z+69Q~(J|N9WBjYu2IoKp%&2BduoPsoN_CEimgSVqJeVGrwuczh#l*$j2S}Xri+B`I z1$X3RwPt@l1QWti!H|ibd-++K`56Gkljwmub*pcE{=e$vDB~PHWR|X%@0Rscs97zk zFPpXREfDfWtYMs(hWTt!=%Ji)bjjY?3IGoC6JMWZ-e{-u?AWguGvXc316w3Dk&>(Pr4976ss?%DYg5f(v8YhrGAvh*whH&Ia)$DyLiYfJ|2*$N zWUH~C@(`1yTbw=3XUcU4R=jLR>j&tfr261!WzB~$>D70V|IWg%F=8e=McE~+W(8;v zfBRNeHbav$vbtqL8z|4_JuU2KozsycMPNe?7aHejo5&X1xRg*vsh@vcT#a7TGPWC2 zlfx{aChH4w_bA?hqEf1Y)mBeSFOViZ>?`eay&tG%wnTXJAGipFJ$b(o*Npqd+!cl2 zwXpd=fcDZMxG1hvIOw4Y6CeXfoQ_}SxQE-4jF8iy6q4biEJ)xIWbHs);d_do9_D!8|*=d#u6Aj<98uSl^Szbcqsd(6(AX2><5?Xeqpz zQgSnwHd8t(QwA&u_;eL z?}d(XovohNbAu0-Cm*jpH$!``s#Y0v{M{UBjZZnvt0O{3A)Suv!QA6MhX~!p)*&1nScjbV0rZht}-cw7-btSYY1M5{Z#5TtP@lkx8Gv)m-XFLiosVy{9z{f zd}#}chjSb$OB$(v?8`feauRQm0<7O(3 zmw$>sR$Gd11@Pe_dztB_jAz4N2q+E&7GqSm`SI8sUZ|bgKK(mG<6??ddT#_&j8hvU z@Q|;`(;pqqqT$o}14gp*JBYv!x8FSKAq)t#R&*jXH4mD(IQ>Juwvawu4-;#>6rd7X zV837eDa4WUA_^TE#bLYpt8Q(ftel|W@VIC_hZ!0GmlSq`D(KCw!a2wy^5Rxhu;us* zC<96B20_dh3W444;+?|_#oKn6M*mY~exkZVGzAfw0gX66W2o*MM2Ibk{o;jp$_u%G z>gUs#tDS@fodkl)^cE4+G#lvm;wdGzg^Rv$#Kz$VVL>!#fyW^<*rg^++5tj>8IxSWb|EsA9^U2yrRN#>aQE=5w3Rq z&^9z~MI}WXL~9LV*Ki83*HJJV**yb!{$_*laQIAgG_!4G2m!G0;lU`B`;f?#1h@as zax*_bM((7iImaTti>X@0{IEeHQ2$jxhZpHYJW#gT@-t(;Q~F{_aJRUD%U@Ah4#D7n z4&8u_h}(7KJQoX+5TK=S2`B0YDtW6Yk=M)PYE+A2*AOe^i?sdplJjVPce#n1i zk5hiL4Ed&huXS@X6aZk=7aPJCvWRg9P-RkJ(Z=3Cmb~04cxy$y-4C76e3jv*f-wzyXB z?0-!t%SQ%*F4Wp-nUPU)eqZbD`TOGwm#VbPuY-wjV4m(FDdGsJ*&npchfpqnFsq9N z@f(CApN1`K)xZ2_SaVr@nh@%SS&)#@xiyMp$cQ6Fs3&mV*k6{TQtKxiZ0d%$=E>gb zi(-)brTrCzQ!uCcmp}wJGHrm!_oxoSlwOHZqJJpDIrBO4mmgOc)^b{w)CgfS$Oj!2 zGul#as8gJ~qiR7t>K;IOI$nYcz)%y~aJChXt4+vVPX9ZAJG%^&zffDLclSnMqH2xeiDBQyPweoZ6*x0L%+w!pq8f}wviJ6IH;4jc(y}+kOyBa5$ zQJ0yJSlNDYcj)PbEt3;>LcQ3M|8R|pq^O5du8Ff3?6X2iR4O859)3_--UF0oZgLAU z2?$Y-iN3RLjB;Ae@u+9M^(WHo2TYC_O4_?Ub5!Wzo;bH~#qXBmy{N2>!PIl9?2rZmWY*QGa z02FX@ROfRF8@H2CwttoDpljKyiH?+ro>Lt-FY*(5gU8M$np5r*Bg z0JIYF3ecVd)}rgTGXg;jY0l;S3mBS?;Y%T{!)n)zo-6!p0t9p!-w`Z0aU!VJky;D>D)DF#G=4vz^ zUoE1_V}meR-xHErVy_lapDW9s4MdXFDU^Xd!mk2j=R>W=d7cfompjg+4<{Y;*v!&a zubiQd7hZ@+5d}$z-#?9jv1K|ul+DQTan4Zop%hGB9E{Z=H$mSII3&E#vC$uHafZUL zezp|4qEkF?JL!4dCmpN6q47N9b>-Ju8|?Y6Xr8pUd{md1LNV`7z3{vGBa~)DU~Z?9 zVvoGzqt!akl|vTP_SslUjz~fM0mVuNwf%`-4iL>cp;=XBs`*YaLGFy3~=32_AbE8 z0{4v;QO|I3<%@8@DWzS5C(3OhET78=>}QH;{jfS$(3rr^;{ zI4foELD|)B*@*2|xU!oW5rX^vQmh5t@2fhOOh3$v1=w$j(5Dt}YmK4vBw~nVm2M-xNfVu&u%C=4%6k5n9R&tuGroOh`C{iPxUm4C3E|6aZw&laO=( zi4ylXo9|7gD&2wK*d8*8@}7C$+D4>)^?#?zlM}!Yv*Uy>6DFX{skL+ZXEZ&a8M1G@ zki0r+4xPlQI{zySJSnxqr(L#-Xl_L700=j`H7Egz)H$|-l5g?X-#!~$;`W^cXHy0K zM4Cd3aRa?U5gNdv8Geodxt=&Q#aWBcHHle5Exe?p)(G6x31KpT6D`1pW6|4F-4YQ07xV85Wd1KGb|PH)(Y#XUyST(Og|_)- zdQ*hKZv6;6P9EcBIMv+ks*?Wjj=VL#P}u62%@X;jJrEJMNa8OJ2|=Z#&eg@kx@WbQ zFjSk`-H#^auknW4LBSkCNnvVtWX1AkH9(ol*0Q#)c{kbjZ!+1cFx1_+!yLkMq0Sfnso)f@FlW0s-v$;jU$-B!7a2&tI9OEihGg6#4-`QE!12xxlEJHt9+~;MVr! z_Sk>D-cZx1e6HEhX^J{{5*--1e`a|blB$lw2+_pvKMoQnMZ!>fsI^1%J0LU|kdSTQ zVTs|^Ea{z3MBPnCY+hC@@~beBm?AQnJT+!`76=Jr^h|tW{XFJXkNA1~e;ecTf;vY~slQcKrn`OJ^^=eQa}V zzN>E*`Rn~Et-i`axCW_J8iZg##)PPq|Z`<9@>svndda*Pmvg%R>Q1Gb7GNV*PvXf#wha; zD2GE}h+QP9W8b?NJ32m-GDPu-wVf^)N2-RHm?PXl-ed2y5?7+J2a-}FUaG4FrT`gZJc1#I7Fuk<+WA4|-6sexz(meyGx1nr6a4 z6eWvs`TeEaZmE2M{mGzLfOThQ&fwq?>z#Q4b&^D_Al_44R6hCE);mf2g9xtr)8tWL zavBpc26yp>x4pcOdo`TJOaQ5BxG6D{PGo0 zb*s$|7)y9#KW%;c>v_n#rJHp{N*>R5PDv38vTk~i4P23BzLfWq!z8?kul*Qt{n&d? zeu|-CP+n$Hd@tyjk-u{i9T9Z5-01#)NP_G%56cmr<}oS(s60XtA6T z0o};i{0y{^o*u(dT-&I3i{&d!4*a!l2XP}3^Ke&`V)OG$qkEK#S6Z%${8aMKgp^x& zrv@aMJ4K@oC{T;vr02o9RNA5rjmGrK`=T3@I+K!JwoAz#^S{E4soF0tb9cMtI%o0q zJRu!y?5N-Kv|mKO;F&NNm{WFVxmp}6V&T)lCe89b48C|%W#S)XBFaSx4$_gyemrU` z_yIAJ>>z3F+n@P)eD)kyx#0UO#EgJ&VfPG5KnjB0ayNWib~8jFelKOGgp}7pPo2<0 zdHXSXRJMfAUGlY@tWI20tD^hSv1yG z+e3p`@Rf^eV>AO5*!CSfvoDmCXEuI3jAvR)kZ0z-V-24G2hnAwSQ-&kB0z5IwjmKHhF;^$8;39FVu6H>)-gl9{(@AKpgH@heKx zdWC(#+0{4Rr%7x6273^$pJxE->8TN!p)#O8}l-rlht1Ra)! z1S4{v(e?SYGY>PUTb;#fSJZCwJ&~t10;fjcBqXaloFtE)RWUPWL5!#X+Q(v0(o?Vgkz)( zZ8acG=hkuW;VTEZGb^4V?!`ujm7-%WEfFVFD;W(CyB(G|WlKUIrlJ9Bos_lgR)Mx8 z_8N6eBZSSX;(ZM-bRr_U9oboZ+8GB-O~oC%Pz*2TWLtmo{W{L*i9hho0~?2iZ-=$7 zek#1#F#mK}(>WNhVw4k;2jfI26A5m(y4q`9*!36&t%*+hLt}e3?dB!3&Z$XkVC}}E zZb*29%F?nivmd5LU|NvKB~eL>i zAP{#a#5kVue8(pn_z0sMjq2D-;l6p^S&KpOBA&=z6*PY;`Kg#CX<^cBN>cqwpd!b~ zYWQ2$U&yFGEZdlc6k=}NV<3Tnq}|*Oo7qp}VjoMX!pa6^B7=hnMhA!-@Rk^Kf-ClW zju)6v?5XVWoJ_cr1egU-j;QW`<7ek6;GgOx1}(rnEoUM{^jP;iFGm`+dw{&GqH zb_?l4RJtJ0LrX`#qC7+XLDOkU2#4+$C|*7Jx#F}In9C`q1jlz#1ygS1sV40cUKrxwbxZn~v&Ww-DwalV8_Wg{%HEU8c?kGlZPbONo5LD9@;h&aNOC@w= zlK`tB<>m&!n_eslrx)f>D}dvo$o0Izk|1{@Zr7or=lFzhDz`#~C=FX%T&F3TDZ+e( zg3axNk^1%2R8n5b<4*GX_qaX3j;Z++EJ0@QfC+5>Lt9BF5rX5cwRUtnByak}XK`-X zcNql}$8gN8gK(zcGmkQ1rJ=@TXaK~4%`O`~23N7Gcs8Q$0g|8$56R_4A*ztpYd!O_ z7>|?Zm#r<19X3z!hY0`f{gahW35tWvCd1OL$-?Nx7p1hYawsL2-}6F<`;`6ifny6o zmF~$)GJkyhUAzFYhQx@uU`n62eeV9DPL>zYPT*6VQ+^ zN!ZvM;aJA{sbY3wV%2;qNhV5x`Ii(-XG%+rR4ucKQc#__r+&K4)$R%>>k-reC#LVw zh6ps6v~d_l`(+%(by+`pd_g9xG_zt9u8I|?Ynb8;hkUaf>Blv2X*~+p)*6Q-ppf_J zs8Xqds6!Sc3Nf+7cRA7Zi+%RkOX=0#NPzfDfBe5UFnb^^Jl2+a*AGBPT`Khb%QFAHgQlfKv@GFcwqYI6Dap?>Gw$}0tmP57d;vBvZ`VD z(8}u9it_v>ea8~YWKGo}O3Y@}N`yZ$&0Mn1jjd>nUprWRFf%gaJp@PK6eD?e@v!Ox zoMNd-z`O@MZs)Tm@s$e;j~B#Pyr-%fjN<5w1o{iLJ!;fQ*&p?%-AKk=?O$*3!f3u{ z=wL`2c3v>JT|1m)^w8LWGtXj{oueeOAdGS)iHjM{xp!ZjMFA@pY2&N&}!j8piA}j&^yE z$=!KakpL-GRjnd&vZ>PW*h{3LC36VPDB@NYDJNCjXEiike8x7f>%G#lrE-fQCO{*cg3!%LLZz9wf5_A$_@|FArKG^t#$eDB+KlM$M zoG#~HDE<(dTr}QoFmiNr& z%;{t+)wi&KVpU3x#`JgEX%z-uT2~s`JpptOrLoD4eOjfd@30yFu#67`UkK_cF5+9j{@T-U*y<{C~hw!r-cIE{l4RhiXKmB}$oNQ^O*GcW{ zma_qI#hW)FtG!^&t@-ex-&L(!$A`P%Th~HS^;Bg$I~@Rzdf37q`IFjllri8<&x1ejqgWuomC`tVCa*^NF)x^jupt{{#r=U1nPvj@N@I& zJ@!GRaR5~XOM6>ca$Wdbhe53>Aty1yo#CveyTJ&cp~Li@AN+}h-~Q%iJb=Suh-IKE z7fN#xHAxWt$SOC>7+aQ0@mNjMq0cgkYB^T#AXeo`WfxSvq6QhF@1)&@wEYr5o8aKh>97Glpnu3Z%(N)vdR!XiPk|UG1Exy*WFO3 zj!CjfHA4@}X_H@9^dn7#5~@0TFe&T;3Vob=T5nuf=C(-XoLu%KAP(xO2rD^Ble;0R z+R2X&55Brzr!6VUS1(-R@l~xJS{K;1czy-zK=WXNh>a?3ru2QHrlz*BWmaAVgI5D>s+Fx>TDxbmkyE%*xHltgw$H|dn-~t_Bjns12gbE)% zOr}ukF}=kieK*D z4!-(CcG_NMh*SUTxqby&os@+x@9*GsmgzaLMd9?b-Ow?(>8QV3nlAiYq-s+B*Waj-*0tL>QV^%0$f(5!;QK4f(p{|` zPE+qU5w&sB1%nvY&GC1Y7%6Qw1>AU)ZX5&>$Cx9M(%Jso{sd5nuqWqs2b zfvx8l-BvF0h6k)d5TmOvAF+h=?~;$I6APE**0+Iext{QJ7Td7R)+9H?_j6 zria1poeyiN9#A}@=XOSY< zO-1rgvB8epV)@@M6GAz*NU`M)m!D_%bs;fd?QVv-Oj8> z94lbX7}Zv>gT7vj2XBMFzj$&EMF6|AQVx8hJv=5LUL#UOw*ThFJNk||!N>XZwYum| z>A6lW8B}g3KI_7Vclk};Mhv&lc4|=AjRA%dflKB``pni1hq@7LabzU1wo1ANtG2}~ zPb%F&9JvpFm%KOt|33i0ydldF^V_1T+;HmnL?X$!_}ac~wdW{)70jP7$?8-I5t$jV zE%Z#ZLPw^V`2H%5JmYOTI%M1iIS?&1yqh=pu(MF_UK9Qh0C zBlR`DmimeMT>~WboufdjQM7%MsAbZIX4R$VCU#0&oDgh4?_#pvDU!(xdo>u7wPD&H z=)e103cC%9ATbk3eu(P9P)hazZwx=$M!I z8v3-=P>kQX1o}|oP!H*@@s0B#PU$4(p@83Sn1|5Mr#-PC z!}$CoeB{=qU1sSDNIs*1TL2ct(!j#sV!S*Xd<>&8M13C#rY{En)xjF>HxJ@B=_6pg zanmAmL2>=8X+$mc1KFr4@Pyc;-xE7+-z3Z3i{DPk2qR(ow{pQGPXR3TF3SEkSZ)4=q^A)BXuY+m*xC| z<@FWp>{FMqSa75Y{Gd>P?A0MAtl&WWU=E`;l>2tg_B9zRQ*#cTCG3xOE4A^l0R+VSK8shs08kjdG0E7+!pqxkfMJ zet6++vs=Qlb3B=T`N>61nFA{rgyHm9o3zAhNchf8$&Xo8B@1J;jz!>JyDz6qpJ9kwF!?`!KUlBVv+-8_X(Vc{O zAc8rU2UL1xvv9VY*Hi~?MW))eZUrR%@~1@|%tiXCY95*vhJV~$6QvkMdI$yaX$mtr zzLhW$YAA?;b8Qcqh_g4mHfny>&eR-!77@CQ{!?}8kym2{E6`TI$J0fTd>U+_>)j68 ze1!;Jy=3WxMnSLucf^IPmc98r&_5pjN83SV@aX{{cjbx?=c7TU8S4WDeIf(U5v2cYn@ZU# z1B;;c5nZR1oy^R@tBPVB4IPe|i7%o5CP#&IiZIMv<)D>M^E!kd6b_J9#JXu%vupyy zxiBjV@cGR|28I{neNI{=2rj+zEtvZ4Q30Z4=T6eRAdH$))(UvVL9CewU&5eF&7qQT zVj^B$N0fnfgn&mi`vVM0xLWntd1bA?r0#DO|*=2_a zB(*x&j1gu!xm0GB1uAFVCe0zIkTBBpxMCrc!HDmO70ZPk1VEgJ{v@XU%1F4PSE}2p zm$F>Kw1_8qK_?sj)Nc{M(ooT$DKVL+kl|dOgptu~EmGRPT_m4I^*@YqiVwW#f`cZ_ zvoK!HoWckAzn)4R2cB&TR~6+#qPiw@g3pewRw?bgYgH}6|%(uExKv7oFw5tXsG z#D%D`swmTVVuEr}93|;>&^p-KK#H?AGlkTkus`?Ot-(Cs9r_l!6N3c*$p07?! zQ@Km|jw(Rpc*I|F@bV*Ml-Rn*bkMZ$q$y8DRA1YKXJ8eYP$Y452=%DbD1$P^!5rt4D}zYozSGV z$&rL1QIX?^O=S^hYv1*R2N(2Yc4{LR+xBvoY<^7_X@D5B_Z7xrk^*ZaFy^Z{|bt%`UD8~ zIMY?+)wcpx*#B}}{v4l30p92K@7Va%fvo!`XO7z*mA$wPX)*r<1#BBQTyrJ22n?2i zOFFHs*nL~W*9SU$rP0Su$cUSFCBnw5s(GdGvY~D}^#js@GRJ!gvGD^OF|V1@&A1i6 zSXxchjrTp4(+71{2^eSzjS)a7yTo=c)P9WzK=Qkbs?dD#lz#F*A16*n;k;EBs|)bm z*u9u~#rKPsygw%wqtW4hyTn&_hXW1OOoXwp1nxJa=!$M|T zJ>2Nzvv8Js`9-c{WKVj(nt{)R6*1&SIgV&GwB!uGeng6AEY4j8z6ITTwrT(pZO6WX zc_5%czmbZK+J$gIAJuCI9OA$o=YbHfa{Vv(ITnD`@$ ziBVi4s+mhKsQe132%fV;>~K!yjic33If_&5>agK;eNtF~ba~ zj$~CtR4U;tLC;5WeJ=BECc8!nxlXSivL_pIHc=t`DJ|8#*fdf&UM`~)|UXoK;_X)+-A{Ak70)_PjGn!n!>z;5xoKU+uj z=oY6gS2Z1p)rdD1vS4#6{F^A#o2lB6hf%M}RfK@TGJsjbGM$p zmXlI@=c+6Y<}Cd%x%5sN%&i=oXRzs}P?_#lP2+hX;~b2{5xhc7Pw3pQbIKz%B5xWy zqsBYTdJ{3sd~{TrV4_|nPT_@`uepshY`dPcLr={Qb83u(3$<1(NrvrDwlEA8Zmu{k z?Dt+f{&%H~&0pL7g7X2`w#>*JH*Jb@aCSjZmGUPjH7+AjMka2yvn* zo&&DYWM_=3L2Bp<;`7atjw>Z&tNd*-YD+PUsY&|`h0G$`jJAHilR014+?88m2hcki zppNuh*mi7&9G^Q8^{WG+8Hf=SdW26bf^`k3ew8ggEvQi1L-ipqPT=vBIrJOLuKaAPU*+N`-V9XsKlcM@ ztjCs%3TbJLnhO4m5#tPFrRJ>p$Cr{PP5jfbe|Wh+NA8&b25S3LUxx8u`={Jj)n4$7 zjh^dTjl60lePd}>JUDI6a-=(n6|}TDaIlV@5b`E;r~(o*V>j1?>o`auK}u085;%Gd zz36AVl(~3Px9YXFEF6u79Yc>trc8PoxVCs@c>fD#3jj@)07mdfL`l#b(ZL;R1g2Sx z)gbb|BFUrK1IL^# z)wtpbnvsZhkGkD9VbnQrg1!jW2LBnkQB-?ieLRO#mX;P>Xz+$wPflG_V z=QH8Y#WLNWmQLjoUH1o(IRTXq)(tgJznj8Pga+~*;6hNQd^Q7{lpj}jtT#?VM<@}) zlvb`eh3-7Gd^boSE9`=Id1k=HzQf#RYw@*E`WmLX^V1zYV%tkOWv~M5r+yIZjMf#* z$U3&)LF5|)5uxTTj#~8hG{@<_l8^4t|2S8M)CA_j=~mVR&(>;Dl^VF<>7i}355eQU zIpi~1$t7e5gXc%RH8bt`<12sOtb@I>AM<)N(15k<| z{2NGDi+mCT!)8q%?GpC76QZ)23DVIu(1w9_5OK8j_&}Ln9g}t1$0$$pI9Yg{S@?|r zx^mcrJH?SZlvK=`7<%T%j8T|x1*%^%F6zXAuF$dHYHbK0uv5mG4+lSb9#E&M&%~b5 zeWg4KRW4rcw}+2%xt^aouA|E&H>OV@Ukl}DC!{Y45gwAAq{B*EeRymYG>$(&wqKY8 zSse0h&WZMGe1>2`o+$>SEC+}Qkf!!?^rlL(;NL=09$3-sY*3`JZCQk9b#-1q>WlG6 z#7`JJ64*1K<0&N+fgAvvhwL=Awh=@nbzGuH+n)CTv`_$d+A=HYM3) zr99jgy0{QOT9Y*n%Fy#ZA2BYa-qxm67$a1a6E=91x1^4({Z9JVU0i4>#f z1o*UCHYqLtL2w2@|LRtSR3Qxwlq09XF(x4-Su8Z1#Y5FMl*SbUcC^-JYw6oB0zQIS zwk@3yos07w61Dp1H?P;n!|=xdR;ECpf~J`?YYR0U>E!>Rqni5smXym45D-SK&YVt| zf1r>#CHbLZQS;QW5uyZ%ex$;3k}KLVc+}SN$`RlNt7B>QqfZkN$f-jE5 zJ?M5b*~S<=*xZ^Dznv)GsaZZ%oPfe8N6uZLC}*f;KgQq0pS&x_O@@Sg#Z6h$0%l`q(c%U!>`)y-IMkY-Z%ZBXb2wA%yZr?tZTc(Sqoa!%fxDqw8RGJ zmiQp!J-^b}Ccku?*-p~S-S`SWROVAVYL^q&XKVuBGe6kX;1nCXL}@QcZ&qBjreY4g ze$}+g;C{kO(_WWpg$3S;6j96F$>)+#;{K^!?ra8@`5G5lC~C<7E}Rm`*J@@*6-+J5RSg=B#4R{31}jCiw#*3hTMsy4e z!O-nZFdB1;paxQVg6JQ={Lzz{<&TRG8vg*D&da58{^2wnfqf}9SM`Z%Y=A9mX#cGd zbki9rv3j^h*8E1waC5ZL@Di(~~d!aGipAA+`$;2d|Qt-5u-j9$k- zRnr5A61p&=EBHz38Mfi=@PNW$Pus*eCn+{h3c8%0)1*VQh)A*HG^4l0s&+~F*6~!!GP}9QTHi4(AoU( zel-B7YHJ0lD!0%umsMtUl8qDcgB+IRXCe>v)v4(i@p7YQk+EsbJ&LM#i)KjQoQg_D z;Tfi+hqMpN^E?pN4uETTRUT~R~ou{3^2jV(|ADt?QxE0hP$!Z>3 zbB%(PQP>{t`0z~CKKGFYd2#!Apt^_6XEPvdF>{@Jgwfi1P$05me66I*g99 zjl~9om@mE6RlyuU8E<&07#<^-epmQ{C+1TxtUG1b>TzvD;BbHodiwNE$wxkfw%`;P zaZ9$+s49(mFpKeqFYlUJkAw{mEOtNsTT7voSfBdERM6c2H!iV2qSwO7PJ$>U^VZi@ zt9`?un*j?fkch|V7&tQ3L!Mr%c`%+OR3%&Zdi^C~v|#oRi@3nAps1DYLcCnD#>f~Mdm10czuIZww< zbwy$(%C;tuD*?QU$7^y&5k5r2rc!P~Qs6&Y9ESwPd40;<(LD>8YAT6KE&v=!9t>)T zY^HQ3ej;jz*@NDaYL&08RR|7g1Y`b^p0wngz!&!d!#sr%jOlm%DBOcJ7XmnkEUT7EafrO$~sm z(Osunt6pf;A)ky!oHO39Y0l_ewJ#4Hw4g!UhKHMtrx6642 zsp^TkRI4<**2Xs{pobRKr!c4pQ()VH-B}U05MT8-=mB%tu>|0L1D`&1*46m@N4 zN@q}tVd`Jnf(cyyTw<`QhPClTfN89*ja{A6+mximcUXx3^v7$gCfstnIw#giSkH-u zM~*L<`mzeEC!K4GawIREMMl-dp_(OP+Utu;1j#n!ULuen1t^|A3ird*SIja~$E5qa z9SN=`?|}F)Z4Bu~-$s9TnC0@vnj*A5-D_5BEAvT{puuxDbqM@#`E@Y@h2wJlo3HBW zk`4(gjR}Re2}qmv=}0Y(jU~L*o=NeY=oEce_SA?G)+ELkJ@=MkvLf3kUaV73>fZIL z1>T~RGE6n53{GIvJ!I{sBOfW8NOt>Cc@5va5m zORm89cp&%rW=_8M|LWzF(@S(oXm=N}rEP>#;kUZJUg&j!txvt7a#`yo^GYnW!-D*Z zHrvZ-Byf}+BDQVMbAp0(%q&aVMj@T8o_xnM&^#3_jLxx zhZ?FrwxOOKCy~4VO6Zn-2_|Pp+^H$3el!AO*aG*}q8=uRS_6qJ>aUqS z$;Uxw(j%C1Z2)daVK3->4Sg&+Gwm8NT(us$8 z8n-1PL|#hn9-{92C4DdOkEGQ%8Wy;81j%g+tz_Q<` zJIZ!01%MlXtx+IYduvSIsiQgn|jKI6%v-S3aVz6<^BA*6<>lK~AY)(!`k5+lv#;aUJqRt)^v z-?tJA88!M2re{)pn3huKSJE;3f4q8bZ=+lB4s^)u{8TN4Alg7L9>I|0A`R}qbJ~U* zJ^p=RVI?%>p;s>Y5JQDC8Js!QeN^V0S+NE$fgcgDY!v$@&ALQQng7xZ66yAcwQF&; z8_E%-53@ZO__oI^&ZC)~X5bJ%biY-nYO!T%akZg%Jz}f#y9;{rHqQJ0fgJJmA(>Ex zA7zQxC)FeA`KWV6hx-{=ZHH8D&jrN?RY;1me**Aq4}+c!S1xO(FPcEBt~P9DT2@gs zLU4Dt1+EkPi})V522$~6UH6J|>0;y(0W5GupQ2;U$j4m?`VOKHCx3~nMtVr=m(vB3 zAuNW-CZbfC^TG<)>-yaX+3db8dR3DG4xw{1-)Y+(!4YvB?>sF}MUy4X*pS4ifm`$?h4`$n^32PwswpZvxa? z&vjcQ8$gZnO@P_w)Wx*VOjyf)pM@|wbR$=YF`bAO6oI77lt2F8KQVhyT``T!$0X6)#AVzLD{<#`sP}s@e2<41Hu+UT_`-7RO`XfrA^DeikuY`|LZ6ESfD-2K!@ZQh_j_^CkiaZ)|NnFHo~xKB#k zLGwPKnPv2y{6hcP_@|k}HnJ?X2??kxPZ#E2qh9CuzNB)f`9wjpsCFX?`LY13z` z^uA7+(Rn8hv|tZMdgphdB|GYGC;0=7Q6zSSa*z!qR#h3yh0))+epRHr4YnX-e4Q(* zMIJVRz>7mtNbD-FQ#tx4^{b*Im_BRo(i^@J!>7ApLGFL{6MA9lCcUePtl-jz(Bh$m zXv{Rbo7-&&wAWt!w0uKrp2+ez7n1dM;6(064zmtkiB|3)^`@$tQ}Cja+I-*bK)2sg z$Sy?cKWW6B#C=3K{lt7%_+^I3^E4}z|K&Y{w(A4rq)u-bhj_-9i;i;ds1g%NA}xen z1oOcxdo)l&94Ib%jW4%e)#D7<^n&+~=)DL63!wQB2!q5x5wW7MFkb++j7N4T`e90t7)ycC$xy3@^%4 zdL%vMEAG!z&A&T_bd$Pp)X!RRb5@R0INYNzt?s1tO+X$$DJ)?c#&bJwqX6IRew5E@ zj4+q||F+Kq1o8m8i-xRg-XWTbn9Ti5U_nS#q(3`BPo-U63YejDeGM1m#L7O(la1Cv zKS_1&E<`zsG`=xB~TpG84R#8IggZ@_YwcASL4*<1M1ezS4TGt~XD{Q=+>< zm%MuE0u_W0RzvV?^CAL9o9ezLjvC{g4D%#8)N~VpDqU{*naQ*2)|mMzfQq>S8)Bi+ zaR*g23<_YV9WefzE7 z@!B`BDdBo}Zse)d%l!3f{=un55&JP<=aj&N4Ku`(D9s8=nHjE7zlGYRSQEQdnqYJ~ zX*2O%7V4hpHA72x0H9BI~Ms~TbKYs#gw7l7KWAS(C>Y?D;=5AV!+ zi%uh-3NAkL)R!jCpg*u)!}ieW_*17&QwK$&3s8GoPEehV*Ua0xn1t!)uLnEGqDV2V zx-crRZ7TN8b~D99OKvI8O@eML*+TU39m>Kh-Fr#0w`fkdda9@HnkNi> zGy!ZRy&EzX)W{r*nA|&#n8L%Ar3yAP8i74vf_*|; zIQD(o&WU5+j-5P+0ubHT6AovbY@J|nAIH0CU}VmZZH`^`B#0#bByl83HHQ>rRs>_6Gs?a_ zV>_P#x)fZ(>m#V(_b6fsy{_ksjxv_q!lw$@qkqhA+2eBqKB=wBwsFop^ZpkB+YzOI zp*A{JRLF&I>C02$VBo0XdWE-N5&|SChuxE6feAB}4W}mAD9zt_`!(zP9|W7$htAc} zKtxFAIrGT)LE5DC_by$pLo80BuE-f();k68)Yl$I@Gnu_SId4O&js2~YdUH;Wk8VI z4xTidwA>noL*6D|i;Xqq8PA5TrL3rh=wjp^fXt}R85GE!goKnwuZ%0w`0B+G@mk`| zlHo0F)rD!=6j~QL5I<@QCk%2yRvh3lR)kF1(@xu*Z`zJ)rYCrP6CIjHvh?+i@)STi zZD+Hv-PI?5Q+>z;QlG%kY=Z<2!3;`aiAL?zF?Eou81F=jjy_rJkJOzO$9HL6wWaqS zcN_JvnH$sXlX%5S^EAe7(m=zBf-2{G%l|ygR_9lNi9dE|ys#Sn+O|PLVAX)&Cn1*` zpQv$;KtLVTS?#TOP$5$+Pqxlb*%7JA|NpN$0iXM%qYtI1B0#6fE*ju;1*u&|_;jg& zEF0^U(#3&?N|Oc#0v8Zxh2;|@*SObV@M>@@sfP0ux>Zi{pXEeU5rZYP$;Lx86O^Qz zyxAN2owV|2GL@}XC~^Ii!+TAxx=X{qrrR%laHPKI3>^ZPz7SUPv=br@PRKZ%BH@$8!?T)$pTut1e|>h{%8+tavIwaw{q~euI`4Gs#|?1 z38cU@7E+=UX@&zsA@J%4*Ssfa_tHTWxpaY|t=_CA?9V)s>9eKy4Ra?6?&y&(-^%3? z_W}bup}*{=%fRiPnTDQl^})ibDLX3vT8sCqbH!jJ=1uNC+0y#T^g;xg!4%tg%m{^V zYc5v0Q*Mw&S%@Y15fq4(f0EaGu?Eq)GfbXw`gM?5opMJ!syz!Gcd=Okxj`;y8X-yO zA5ilG59!wnd@%{A%?q@k61v3Z9Xi^qjdo_m55#@(+p5dVyokS{7D|lte6-3DF|p0K zodRgCD=9$E4+PU}6zbz6zbgOMxKe6V9)g4~@sbl{O)6m9Got0oOc_P#k0fBwV~F00 zx~g>v)g5H-OQ@3W#IXD-QhsMs`j7Rxal!8l$T~^BgNAafj!Rk& zTml`^QfOhU^NI6Sb-!1*(1X|CSs_Q07_(2*vKydhXerLo);&ERYmdU}oM`A+-t2JV z4whI4WL4F@BRWnPRebN}yx(1jzK=54uhlMw$LG`~t+OTVyK-TXI=$nopxLnFLfl;d zSfZP0m;}P; z)0*+CS_Q+Lz$cU`q^vfp+@D^O=MPK$*lN&>7L@k^MXZN-mT&ntgsgvU?9rCtwyH)L z?;rNKfBD6E`PTr;;-dThMeTQa&IE^H4oDeq!aVuqJt#e}z=TfB345igSB(~s}{ft?6Gj@q?4V66jw zGXyc&-4BurZY=<1nY8`vjd;9ikjX!x47vNob7Gl9D_lY4#z}C9ljVAAs5b1`zN;Jn zg!+Sx|0n5%|5$ZO5mg^KUP-^lNgro3pm3%ANcz_5eiEJ`cdxB~<~lxyp8gg>>~7!o zJ5?ziKbLel=fud^+O6b|#3cc|y7clHO(q*lI-&m+TYjS1GXN=cXImJ@8duJ-{to#pIT=iPf3et}nx#Gps@sv+;ZYe3byJ;z7*xT?iSsa}a}72M#; zlvA+VL;^|9tATRC_#jJr3MA9p(dbop>yG*09oCHS}B>Qp?gW z6NlK`kLcmnkAa>pWYaXWhx5nYrXlFn5Sgl)b-3Xa(NsMQRa08*f~_INeZJdH;ATfIHCB84$1Pn99j$ zziFS+Hf2BQPiLYYrWpFIdss}RINVYR%j=r5SEfM0lOovz_{i!uC_9yp?U}7e)X*lv z9R2>{IFhwA24EjQ)lo+o<~_c9`SCqxJCIUIVG@=bq`|DNl{A*uzdW&M=I7ArfoNOa6#<5|u^%uBx zHbUT~TJe0s@H`C=VJ)EKSol6g%*-G)U2~O+P@SwtfpCal_w8AG88gvVtMo-u^dV<_!QydzYwK{kDBCrqEf3Lb|z z{{axD19$}!Ke5V(`>CUpt$u^8pC68m*X;3}D8CG2%;scs(xJ%Zk(aD3c+#H9dm!Az zVFw$98G+f7sH8;F6RZE5i77qoPhdsV0yy^5&*r_SPCGR0R4t|CG|&n6XI_~~UJ4_j zV=cqhvzV(uoumQvDEA@5lV`C#ce%Z>lM-cTe&*N)CUntF zD|Mg!*Crm(xHX1T?iXew{fHk1g&gArf=fCXr8490}oaUSSHM+b{XHAV?wp1 z*^#eXrN2$`5;;*}1_AqbhrNdWhCkb_8Z5etwt5{vR5BvBignyevK^*&fi?=zj`w)y zrW{6?e+plwC*-zT8=Ny8FSxz*^RLyf8J`HEmQ$nG#`~*4AUlv-K6*wfp~ON4GP!Lo zwxJz*qsexyO#rYwp+>i!)>>ksNHWh;)BO$TuE#XUz)S+Yy(Hs<%uYkKJUxL5lA7b3 zgvz2}Eq}M7d0N5^^ewK{LU(G8h4+SPtB?|diM)L}R!S9Qc9b;pPF~z`u_=h=ac8nf z78NyB2*OS=u(iiWaEvavdAno?*?h#aiUO|sc1?~at3B{ROZ1whfWOP7Uc$pZKh6TF zn^3%4A(d=@qR2Pt;bxAwEhMi+rg<4Y3&(|9-RFtjg)3A+NHs!I#*t*;Ee!geeNXpG zo#FvKS4~$Abx<#ydzH6&qSkr~1~7PWA+m{UmGTxqS76{eS@lJNa%&>R!bd6l<0D&L zwsK0!bxcA;J=*jFQ5#Z+EzotC0$?$=t)bI22^($>xT|<@mJ13w1JrHx!i*5c)HS3z zU%Q_ryN<|Gt1yxJuCrHbsiS?jP?|;dCvK}}2Ed+lON_deoty{-UIxq-?;4;Vjdt9j zcLTeNH%m{xNfkS@dB{ZpP`^Dsf4DOI99}HF*LWy@=l}R9tU#;>uCPFhs_-={bf!z6 zHFUy3w8%qaYe0d0A*)!(>m9#`2RmnY8w5^sz^{^@(SWwifC_84lBDKhUsYOZt3jMX z$#?fSO%JYC$b_j8_I8HjzLAyQH|8b{08$kEAk#qrL|q40r-?_oP1}yI~ha7GkD$ zpQ_Tk?8|*hnjB1iN-;K%mET}>@R`4eKD@$WiVmE#X96C?N?xPv3a8~BKxH={#hW&f zuyabzMr5!|LDA~#PT$vCgjO)67)H?rK{+heU`x*;)sb8CO|p)ErY-ci``rJqamB7yO`d6@72{1i_thQXSmS*)^ zz2MOx+lTBo%&`9{E!1c9jr+B+htA)-b+M?G9w-fs9r_QSr2uACr<{&d_!_yi0Y-0L zu%3B&kH?Z2J#2dxkvr37?>B-{7m6ES`TDEG` zhX@#KVwMH=0g4jhp8Xf#AQYm3(oEqJDqyc8#5&F6G}Q$S-i;ci8EjHpF^mE%0HM-L z*2GmnvhG;XroN&8+hjYk{fVpvMVqh(0wQ`Dwq?vYS0fNp69=GW>-9o1@%Vbm=jZ6D z68v#LKl*hCBBH+wXBHsNs)jFx?0Z@;CHR;{9fkdvqK<{yKeW4F?rJ@+4VLPYk%>{% zK~0S-A%Q6$?DaSu^J14JD5FF`z6Vpb7fOqcERM6io#eO<`^;Vt4>8|*Dk61B{tvbq zUwW(nK|sXbXtSm!Gu*ng_l7PGL046_lncNhEB{jw0~y|SwU4ixKHXsA$j;v+Ff7s? z*mfB^^AP!X3OVaH7hTkl@wg~z``HHUpO`g#IFq>c} zLQGBQ+-`avlTZB__$*@5)ia#`#;Df2jzSFPxbV*enjChKoi6Kus9?CS%q~-F>b;sz z!V(uD0y)YESe2GUw7Zgbg4u;c2C0NPICZYv*^?N_a^oC(io+W9$1!-MF)&iP1Ws6p zLewFA#<4gWd6%rI0&piQh{t|{p*q&VFX)7c#tKLGF^ zM$kZ5R_yW!D*LclM8{7?x|yZlDIT-Lg(ECT3?#%l7q#h4M9$}s+*3-ZN`Fhm>!#xp z^`Kwmfu-vL{clBh=IhNc>Pgpv5j4))i^a{6t-^&pT&lf9=0$ns8C`#fWHZ` zn>b_A>Efd_aYPimU!Xp!7)phUM;Z$7Ix)QqUV$$h-5vmqQ(5I9$@9^RNOCdR)=UQ= z>&e8wRMeHmY>(E0bcw$Cf_U_?4nhsLH+U{5EYz%OXRAyBt1f~Y?`h)iQX$AgVlCRR z?A|g|6MsYGerir(B4hn#DX#eOwY&70VkY#RCh7dA?aOcLa|!)5Upx%r07WzV`Rs}| zEsq&nnqe5ztBG)28}6+p9O9A9B!ir7oe31b{vm-1c1iEN6uaV%Nxi->0r<`|aqgJVe7^mQ&F zC)?iII;%IFr1a|!&?VUg#kdcRUrYRwP zGvO>tk_Cx;c^%m=<-mp*#(1@>rz@dsU;Lg2-H+7oNiw$%$jn^br=y?sOPSZ&V0k3+oc@7(6nxiuRg)N*ntu1y1?N0O$iSD=~& zcLK#8{ow>}f-*>`T#V<_Ih{mQ!iITzuuZ%vPPBMtBb&7}qGQIAKgSEfP%m>$jyvt* zJCeDmE(slJv3Lq0SEux>ZtKI_~wB5UuGl%z#Df5_e=Zl5roGuC*BoC6P9yOyo zjUC9lM;-Z8G{tqhxk0Ys*-oRKeI?Gs`erqPypLEY&J=nV=Q+}#ipQLN0dbmx*vEQk zW4x4+1JL}b)?xn6fu&-9_YmV(=Cij9b52nVk~+l;8MkRvc4bnR*XmTn#iH490cCEP zJ$&g(?!xQ#H@}!TC!X1eqjdV@?T@dGQg(yVt}bS-K2s+;Md7m=gxYY7{;8W?Y<(iP z+0W`hBb~1hs0vQb7u=KaL;$}qM80%SfM%C>?FVm~8weLz+9LV$-;W7v7jK1!ZSC@O&I)Zli_H-toz^1Lq~*%3$?Ep>i~&yCO-z(fVe! z77%OjW@JPC%@{~@4q(uO=*XyIEzX5jx#GXH!#P;T{in+N=o!tLV=l%MKvs0;pnfKE zuPt($Qz`EehykRv-#7%zz22VtM zoEvW><@@6_uW`QnUhfDXy6XJ^|33i0mGg*Ou8iIbcdK=B!UlMotzFw{WRY1Cj)3)( z;ys=#?Izm#2j;Og^SeS92E|zjB3o=gooYtZNyT$yC0EgVP#<*s%bs&y_w+>sd$Yip zMN{9=SM^diSz*CUVPn;o9s55i6Cv8T*}zVn_=ji*tg$S3eL}usJg-k(s_5dL+d?@@ z5{8f_k;Be9!D!qIclRDpjQo!~P55^*Ox!_)nsVvf26&2j8)nHguiNkNs){7R{tm;Z zwvcmiX|K6KAe_Tyim6l;Y*C}^z80bq=k#Zs@WZmi4*cUEv7*5Ly~~QuZ<$wmQ~}C^ zf_8+l92I37(~*$v1Fs+({sA3i^KMCfU1Ql)ICkm9vQh)1Z{^4a zX#uKx7KhZr$G*=PPDK`(nv|}JhsS^mKR;y`egB(kVj;C^+-4sC*|Hq~5fZ>>vfj!h z7J}3dci^o@M(^V=U9WOZ49sxjJe^cWnaHe)^r6q94-ecj3bL~sHWfjHEA;cs)lCZp zudLi@r?xW>kAZfJM_gn*)@ZVtveXN5^M!4epHS6cW^ebTh3C5r+0g{0wxBD66>QZt zNqK|5fZXle54H_VNQW)K(X#~Q!f-bX`e--;@lh(@W()T{PN7?jd zjJ8^SBaV1qWUQB-G!813^WR5=R^C>0YYr`BLKvU`)~8hpL}3TuR1PPi4lMsJKIM+% z7CnTRW(o5G$}krrc)eepWIV*V)-DOp@kV%SeARI#gzX~uneMO$o;AJ|$#+4t_Vms& z@FDu)ITh}fKvl*mz2n>b3-Gc5Sxe*qn#CRg|p!FOld0#Y-_%lc2 zKEz^*Ml+3`^ezlZ@if^mQiTrdOPRBG@~BeVib+_WqL?az{KOwsg>tzh5zi#NB|_1O z3WqyTMkC?6w&TxI`V+`KQB7&ItdAvF2V*}KG8?tkAvgOpidB2(>Q0Q{(G^#Kv$*ZT z8gLi~#;IDTa#e)H*BLuES`R&8Aq^_J>s>vc>ilwsa>4`pqTr78d40uubHErd=7}D$ z8k6{BmbDF)niIdD;>1_n&&FF&A8*c|fy_U$zZ$nlZt?0~2KPPxb`ecVTXdY>GXqP@ zsnu!xK@cefwmElmjdwFk|7-|<_##;bq8iBqpPjdq?ZF?P&mcPlW@+mW{(f&t(h)wNwa4C3fT(wdJ3Njxfc^ z`^CdjC?4lghN2&kpVp*biAR_6%=af9q&@QA3Cd$ z#!~Z(`}FnA-3#mIM%YDf<&WHJA1AYT1Q|W7n3}#W+&;*N*=Q{Nb02OVEsk2D@hXV^VHXG>8FdlpT@YwN-i0?+k5xM7 z^K4yk(5aQQWqQr1O__FCp_L4NB)Y4@3+KRb7Gcka8#_31tfGt#FZ;mUop>8{%0-z6 zDDaZA=g(30og<04W@IP-TZA0DX^1T8xe$B{^-b;R-2tDDKk!N(N;AamLe?#Uusa0q$JeOxl_|)H`6_uj+6dJ7Fcs9dDp4OM?W_-AJ1w(~(07 zO+)z-(QRdZaz&D~fp!AHjie!>c6^FJ;0qpGFu!6dqn z4}iTQ_F!@!ix;en{%phHV#sR3A|%M2aiBX#OLqkCpy=g4%Jg#+-L2<3mw6EAysy9G zEE3%@9d6Md6A3^XR1N5Wby6kdG~+h+MYaY3AL#^mOsHaHh$8sir#jN&c30)(KMK%_ z_b!4PYKE^O(l_gM_lg4~2F|LD3g2LJH+S_ovdhvJY}F~$y^2`Jrf4D0+w8M}oe&Qm z(>xP62`*yfG_4L0(J|$&Ujp52bqkZFs+0RJS5Js6ehP)10b@!pp7`d0VB(@it&(!zcg0*7B&i%A6ME+CgujJa9Y}a{P$WB` zt?IDDk$wWk6h6|V{;~`to|idXIBnSad`#75U324>j~pRWC&~p$7F*YWD+QlD5Y;sI z8{g}S{(H2b9W(e>Ce7ocEBD1yDze9^n#y#wztUEChsCXOfZ;(OHd7`ZeXupH77nUwPeyIBelq z_;<8wHi{KssN-{x7zF5Gvquq8zV@LMDw0igAG9y2rwUYP5fAKNL9Ou2!G4?qceyj> zlp03lkGVKkRiW?~wA>8&c`mm*A`^_IspLbNH`G*tch$xN$G`eN1a_EydRONw04!6{|k|`T6-xLrO-nRG; z|2MERWv2VLqqNlF`Ng&73YKT*rVX*(0Gy`A_30;QjJ8iEcQPi2Sv>ZS> zFMzJ?(NViBR6mIOP0%cC&C#FEE_u@JbV--zyj^pVA5H|XH;tTH9chpotEna8^DW4fdLA!)#`S=%G63Ll^hc-U~s+znu$~2GQMNjtM@X3q2=T>6jA8 zITT)1ho6~Gfv27~ys2P#=YV8p?XV!7PmtPvLA1%5c6+#I1l;`kZ4o9l z#eGYaT&-=(DnsF0{wN^xIWpS3E`rKPcq^E$V*trXwIKKEvlULGpcj3^-dARso&1G5 zKU_AKjJ}1=Ux`RPmh*G8%x?g+y94QF$K;uF13SL2nH(NZ`WEwtyR_{&f?gF0#1FOR z&=TOShwJ3Yty#6B98cGI@9_C(_Uj?~V>Z@t=|s3j{qf+1RL6Bl-|I9{1@>uua$?a5 zbR?3HHBi$ZDwMcbgbDmZ(gaVKV#kim7$JQ`;)L&cXAM5_#NLHE2+9&PEYM0CnPiMB zQ0-+t-29n_s!A$j6O;`qE#BFe~? z@;2fuQD>RQcanf)%tcuKhg1fjK@TBkl-1eZE(Wc634=aI9i2rm?1ZwIUmqo@&<7;Q ziG5d+4aNTKdY#s7Nd7=_wI#>+PWgEccyW9y&u z^hVvM*hoiX4+~foIX3c^tuu&D5kKC%dd)|U4$gDIo2Jq&niZW%;u?lb6gPefU}az6 zzsC5gL#SsM{F$lioEP*OoMQtFdO;1Z!AxPvK#6av=JqM6OJ!?hVh6ap*H zwG5VxJ4RbXwu@Pqy>J~UPHKoj_qCejwl z$%e21;=36wHw}E&X9byXS=YLrOPwdOnq&NvO=Kqt3F}6q7+9@ zvRVtBRbGA+{_}A%L9?AMW*@=>J!8+9`fz}738$HQ?Rom+VBX2>zENOQ-bW81ukRr) zW{mB?xMElF3C#Fn@-YFw+*;hcm0zuGi}D5D`~=D_nMem(Ql$|Q`0QYLyBush4K|IZ z6K;4x-V6?Hy8h;V&9tEHcPW%#Lo~HjhTWe>< z*&$0~pwl`7R;V5K@(3BNDZj-Ch~fDb$DZ?X&AS4!RbbLD8WXd?l2q!knDgP;?{Nr% zZ29~Zdg={o#Zs^`JUPjvZWfVr2^zBNdU10w0S1YlzqY%fc7at`DqB$C#7qcCE5cMv3tfKdM&tQJE>54yjjn+Lb!83s?*m9wfl#S%SH z>)>{E+c$0`K0&_H#28~?Xf*C4P5lIStv;^szz|e|Tgkl}oXv6SKDq@uZ1GPz1Qdx0 z8VS)`(y7>ibL5Cr3H0R?I?hIH%hX&;sF+z3cQjliYrPBjw0s~=Qy)VfWdQX4Os5n@ zQv9Z_CHalsv$!ntMj@(T#F zgQ{Ddv-(ym#F~+%;j+(2q%e9VgO`9dvEQQ5!GQ@x#%Q~Xy@`%Wc}qdF`x0R<49nAC zi@u?V#T~P9nmWi;qCuq(RzO3NO^D<>k22Z*(weWCL-}mY&Lay2DV{5$w2C0SUBEEs z3=e5tip|=oUzy7n+`%cOzxDJa@p8_&!D)^@@8Z+Cxmv2KBxV4b%t?O37 zLgzHxS5Kd@Ze@_3XX=j!r3*V5zvUl3GBR4tIf3)O&z{t{-IHQ*(B){L>3@(*Zip~# z>4V(zNDT-FsZcvPM*{u!+iyiRpgTFK+NvcTN_sdrBDI8+nIMgkyC2IK-?$VO&8Pco z!9*%1lu1Ssn2|wZ77+U@8bj@cEm+xef*TIKQv0XjNfr&CbYEWCE4jA%!&mD}8Q%H& z4Co8w4^JvUbLoLapKaZH`DrBTA@m8N!R)|I$G0s1->7PadG&9N23pQYZ%9ye+eN0D zQdM}a+~KeWa0~{E$~!I6LN?0@S|5X+9NK6Jk5pYc^ZZ`~*PC)gW!C?sD?@e+Mt3Ti zH?1$bXwhbq*w@m3!FuH!ChvFFS{EX!T9`Gr>2ak^7SH;ew6t_9?fl9o8x5uAcgb7X zxOPH&>AmEz0X5mcF!9#ID8W9K_!2Kjt(k*XSygZnDAgNVGmWBhZ=Gg)I(l0J|@7{ zmt?M(#ebm+Kb!cf#}Y~({NUIJawD2=$Qt`+W(bnUcovM(oE70!3?c6(TY^} z0C@>k5Jt<#fxMuil-NzzeRcy*Xv|gx!VX5-kM<(%K0%Vr@j{2;RIR9rUUZEg>n~wn z^B7;$;L*u!wYZNc@pfLSXV+5-vVU{r9S@`-V6Ai_P!gZfRaPJ#@>WOb6(fJKC850W zu*#%Tr5u@rQ3eJlqaw(B&$=fT;swo1Bfb$+(n-i_6=))b2zDEY2I0-^1!2Ht&bW+je zz1oGfX#W%gMt)65Q{6F6&6Eh>!jiVUd`%uaMaE#o&{7`e`QNDFm5r;|YQLb9x%llr z_9h%lv?+uI>`?-*uRV|^D^F$=9G z?+En}x+n$^r|9(LA9HQ-OxhxJluPCK*x(AOVY)#84QP|Xw`BzkLpS8sdb(KDj;A>Z zfdUzBYs35kdZCQIc;M69Q1~;n{%W={2~U=IBl{D|p>f}f&pKg@5CJ=ydNE^idL+{l z*s-TYoim*Iv%C|l9__sS4wRqw6&dvP9kB~YW!7Ngf)rK2J(4DhEU$!5{Ctgp<_rs2 zfxjomSK#n9A1;6cX2O{s*u87h3wmu*EQ8Lt$voFgZ@}{Nq?UC$wigr>YKoq%IEC%* zSxDlFX(DM(MYU)&Mc{K(u5}CFMuR)eN9d38TkQRaGxQA^sJ^;7&^OS9gYXK89)SO> z^HyTKxFklKq0pLtxz|0_#Z8j##ts&B?@7GPB)GwmmOr6(+y7VuiL!=8*yR`` zVzZ)Nt62g*#&Fovq3N%;GsG0fciJJWv#76l1|u;7cRZ{1WB8qu-X!5@5COx^CmXy! z`WwHf#F;4vljF`mn}o}p2}l>(QHjt27Kl|(ESZr5QoUTXuhDB4j5h8zQ>~==%|Q$( zB)5XqH}1jyTqG(3XIpg|@s~vO9ncBcA5apA&yfx<%x;BKP@5@WtC+;O_|%%(wU)%B zv6mZa^2^YRX#qei226URRo{~zKiP!i~tT0 zgW$U-Bi>CFp{JlP-Tq&A7u`N}q{&)10RIY-IlDeI^tb)r(#^@vaE?{3l{F2nQ*T)M zF(zXW_iFF+=>ZCpbpD;9aA!^}(kXq|))->BfE1q8lpp(}w71KSpIR8uF4O484d-;1 z9z11pv8nL!8cvm5MCf}dvCOI8htwegS|0T?hj6L{!>@h4u_t+&?G5(J^XP}ymB!=wx*C9ICT$IM(Z_;Tm!DsunU-~>FLHb7?C-)H(0q>s=<7xZZUEDGT zn2+SkI%)XOe+VZ4kDeW9!qAOQH4h851Sli2^7M7kS;Wv} zH_k2UGQ&aHOmr1_A_bmwsTb88-v(xi@{$|vLCOFppA+4CxjuIZu*a@f(#@jrQAD8r zHLdDDm{GoS4uro*&6S4>hIlxV2{o&!R*32Dy$bjL{u>R-I*rMQH+8@sPi5n*+$6FM z2b&7-!6hYy3BQMgnA>%4_{!wb=y95oX~xnhy58^EL97UfOkcQlgZ4Gz#v&rTHmF!2}VAs z51I-im6>cVf$5@vbg1~WZjB(a*HMSeeIcbR(f7Un<*v-_(W#r8lF4cEHi1r|;%+-r zd!N<7gFc0`Gs@~_l>84i%+`)ZqCa0c)f!cK4PY8iB8O#K`0xw7ghoIbPr{=gG;?)+ zlH%$R6a<_5TA$2kIoY=hG5u?>=GiUD+ifQVV50Xq*}OW-6ii*{pX@-bb#od)M8&Lh zP%Nla92JX*U{1CPuMabeCe-1=lBO4S|idt+CTcz}X!zWgyusAN#^-3*hYTu9b z(d()}J#&w|`!a&W@wM^_a3s%i7D;az$!ZltZp_%$s1@!box3@^^8dSg9|FXi{l34W z_&8?pHu7YNFdpg9GzwF{mp=ay(@>jPgkot7dBuv9ToT9&kEqhl$uvvk=Rg(#Pd zhi;G2u<|%J*IB`9mKm}+7bTc-{C-NlF4c=qzCi_pA*hEgFRuTzC7QM4$r}5o9UcYq zhy~j7EETAo`ub<|zWrd=qJvZBMKHk5MLZy#zAfOx;gi?KMyx>qV1Xz$h3YsEBorlm zQ>NwBhFP8Nx}fmAragTh7|g~>?qvOj2;7QI_s7!a&L|uq^AKLbkuM>j5p6L@)fQbZ zR6a8w9SrtKopgCjYKUKfEQ{)iA^>)h+h#ZH-BY;*D{WSFHm|8!#smlM-`!7U%j{J~ z2`#c~i|5PtQZ5Pld+wil8@>XAc>YLP8*ml0jHB+#plA3K`#(b+XW;2IIBRhUQ?@V< zNh>TYO`NIis9Y5jxbdDNkRD~zV@si2zU6Ju$M&U%&>RrRFHD*Fcoin#9!#i@#b_<7 zf)&og{Wd&J3TVedZw+q(<22lnnsNR@8qFD*zsvQO3_2tY{_1s@5iEd<{m=z zy-620nQ>D@s#vP$+8U{tFcU>rp`!!q{Z=O4sVas|haTOReNqEnojw0|dgV}`F zqRhzSB}t-;=-cbAD^;6t<|er&7g#q>_^uv7bg{0~NkhPy zk81MlHYi$bWH$~h?CX@ieMzcAD@B)@oS0-fr??bDW+mD`X#j$Az{ZpuDW~wO`{?1} zl*T+hID4S;>FtCT$hbuTDpw42DQa7e`A&YUU<)vjI~}9lWgJD~Ni!p&V54&8X)W1< z@S1z0pE-v@w%E!v(E?Z(TtS0Uv_Ll74Dr7Mi@R9jCrG+x6N4vmqY`So=}4Q4PT%Dy zy_ZPNepnrFCPi_|hn(Qh^vKs+F~t8yX7YUGpPk-MfpiDCQ5B6g{+m-uXn)aB4tA)1 z0P#%eFTCi-v|+2Iaz{qIGdJ`6-W*Q=B6fZ;M`NG@c9a6BG#Ub#gurd}v^3*to(pMf zRLMZnA7o*cQ-LCWyOa6hO-tBks)=0iaa0mr@GwaqYj? zgoJjfHpP(k^``I;b-rK_H5m6)KwJpFRN`J=C9D@H&cgG69L!%~#+%O1f{oW`jU*M0 z=SU(t?p_)tnB@cO01T8W-`g=bss*G)5;ad0(TG~=U&?J_T^Vsq6TM4wh;-?1cJ4>0 zvfK0eDHT2_=(gIFi=r%+qVb33L0tOd;T?9GTgl}rRjBI8SjQO;!i1h(DMtEsM1fqXocdztXK{U%x#H}yGJtL-ubP9`fBd4`_Z zF*phUSnNWt+b-n}QELg#dh2F1ug8cNAZDyd(hVO<*!z%mSt#w!`;3`+FbgE!uRRwm zROPHPDh+Iu$RJrafVht{vOj<_jmEUL1xym}OKGE(S-Z2Kr@O6h1 zd~QPQsfiyCTyBekJ#WEO$Be&Lo^UreJ6!u$b4gS~EvzrKF5oy8uHew{)UK{t=qNn- zKMvT9{fREifMV461Mu^F2;B6P>vAHg(Eiy*71v~&Py`&zp zoV^a(QuEH*8o1(eGY$9MRo4gk6Yp)u5v8_x|{Pgobe|F$QvPFcs-r zL8+MEf9YY$w|IxH?_hw^L21jVHPQ?{h{#RZ(*M?0qw4mvDKAg>a>eh}oRU4T(adMg z#*kj!zWUofEY2Dm(D*TA#L&ezAZ7Plkx#P*UF<1Q(91{{eaRzDa=N`gn>66dH5 zr&B9uyjm%$W}r<-shePI@r54;0`btThD0S=;CtZao=%xne36$KyDbz^&zJ(s*bmfcyCBY?8osnUX1O77c6EJxM zO~ScoqWhFhNhS?#8mNa|@5c_1&YF|kppu8*;eXSkqiO-0>qH+rS!twU&rDL@n}y}a z?qQ;|jD8$XBm?hk&ji8?UyYFhFU<|rc)>LTA+yS(ebS8rTl=4EqLJ*%<#;n36d5RY zp8TyFR7@PC*^2w6OORC57gIEO=<)_eZa0S*hnKTAa;WHF{^8$c8#y9bUR4{Y;Ltn-(Bwat-e(E7Qu z#h^sB6JO>Kp45Ju@#XTqn$+$pN_YbAVZG6{#Usoaf=hwdHgJ!)8<{s}fEC!p(wJlR zqNMUTejoh`XU4~JCCaJ?%f|6ob{;@(gqeF>aN8<)Br>s|zRu%ci)O{73&f>KOQz!| zYTNZK!~z?lsvhTA5GDjn97XWC3{?7$iyZhimun+FG@rF}o_PxZbY98eRnfZ8+N@h}%Rq3je&z z0XeUp`(J(@yzT1^koS;=n)3@hq_0R&G{-9~%NItrW+=s~zc%S*GKw9$sFix*(8S!6 zM5^qn`L0?PpN}}_+T1enT^XfVi_hpL$Vx?&kfcAqpcK*8kI<+#*ZVWY&RMdM8Ha>) ze4s~O4#kTyFUb%EAJ`!in9vusIb~R#8jd=(Wii z0dmi(CB=r(=0fP%SeC8~Tabt#;!(3~yc$f|GBj&(cnWDmV!;%lPKUGTTSzJrS(L#; zge7awJxa%GgJ#$|r%o>7HLQOh--q5(&g1^y8(0~cF)qt3a$T^wsAR}uSFi+lAw6sx zycb+23W3lH0?$3_Q5>4f=^5Hy=<8J0%8IKLA`y3FM?vW+j3A zg8g!RKOT2P^R-gvS^SperPWo57P8rj?+6U@*u4DHsEFyQ!Kb4_bFoCw)n!$XT=67b zkJ2bBlFSN#tkrnUhA;GTSd}C+hH(}wDNZDaQR0}%E5WyI)(e1{lPtVpUE8d0!x=Js zt^JH9%O5Y@mHvGaC;|TdywvBCTW#!I9;WKABegP*McX0 zAJS={H~Gg-P!|I~h*%C~o{ci&>EfDRozC$o*ov_Lq(hVjv+-$GT9@=FMz9&<;(={p zRcm*SYq<4qFYfH=Z(J8}6YC2g_dW84b zhK;*rut{z5SHJ#4rMpVTX4bD>GVE1(2tPqt+LW>!Eh0L}O?*8wHAZI166eXj1^Su-VsXnQ=h* z{IzO!i;#0GAm>zIqg5i=4kF|Yt&jWGv@nT+dySe4(pyt3Un~29qAp$N9Tg=KEqj?i zUn)Dcd(^x0)_4|1sTas!mG|ELPe!f7QSMW0f_qh=7|#XZo78a9#yA-2ugfBGb^zMF zK(gG>-aC^U787iB#fvgw$K z&=sKa5IXTBka;ijF@`z=k_C4`%36p^Yi4XcwqJr4TGBUTT>Fvu#>aMc)g;nu^%a;# z*D9@`XODORUE7t4iR|jS8TMG@8ViPlNU!L8yYu3vXq7WRuQ}bAA-8O70H}In%N@|1 zxn-Am_2h%SS6eh4RbxSV8RqtRKti9asP*AfuZwy%mA2vXS8pH^x%5@#|tfiww$gVGZowu z0pdjZiTb0Ue4s4SdjnscUlq#%%|k8-4^GDL(n;B3#Tc?PQDS=CA;LJYOL}xZz$Y)A<4nkL;eVk8+=u}K z^sDR;qHrTYLeHirCliW{2b^)LBddS9y}ITK$4=>U<_qT5Ajm@XLtr_Z-~2XD+cMB} z6m(D`+D2RKpa6O*fAxVRk@VD_{e9}iEAcvDT+rW-Kd46j<#BLwft#8^EX*?SDb4ZA z#YY78L#vPksTwM=jw6*b7Uw|8g+6vNo9m>{8dEgR6ZlA{@T#c8dL(3-ApZ5o(4JQb zQarr-f|qjvnTnbvP=HWnk;8@n^W|N@986Nv5`l2h>Q`bWx80lt!Hb>=AKH{oWMY@~ z7jFmURlPg40=1d88%9$;rXST+X_QIFPYAy%PiBb5%#N5;Z!z@16gpn5;>7ca_u+zM z$6~!_HdAgc1(Ai%NE+Y`=6@cd*%}X#hpLH;g$s)gjB>|lb6I~N@-q&3wQ(S1>xd&c zA`A)j3Zs&C32~9qYz-y*ylq^m@((tQ8?fDOM|?D4X;%Zq_|FpO2<2#dmF%p{k~xTt z$d-o3k=c@Kd}7I6B&R8?#r3MaBjNw61_K_Se^!N5C@Ga)sr8o}@`v+KZd}fn;ky32 z4|XTvQ3%O}O0?3Uk)p&eB)>kNh;|0u1UHhDKI*KNN>q9c(tqIjnzRi#*!&hiQySdW zrP0Vsd*=)O%{bl_S%$lYJW)|cWan!mcORJ^m!2dz(|@)9mKlbJZQCERw<1A~$E>j8J!RGo%9EUio)ELhz;m9b`MO zA2Hv2RXu8lZQofzWY6Ww;imbkPUwt4@Q`2B|CPQ|Ieb%|$R)AwH;tZuv@Qx06K5;- zM5P{CsQ=?1=`Umg3-bQ=8qPBSoz-=Q0hLXcH(kc1aSMPq13zK$Xm06B zkgYtLi735gj)~c4=Q{mVevKx_UHOU5Dj|Vf(%z?S@1(5ms}54*GS{?Ri(U+uXwl40 zmtCZP|8BpU8I~A2J1Otj+eUu8x#}nEJ^Ks_M&qZli1wd|>x?)I9S}&b$DB*O>GQKs zC<+FXS2K!=02hw#61o-lqh5(%3T+dy_%Em zUcoPB?ahdUVeq63zYFNaK@K5)UT~et3?3I&hk5%=WigBDID4uIG)Eu-ow2cubu`Fd zmgHHh`u31jmU)c_%aIM;&2d!c(-m5M9X7~%yD3ALAc(BUYoHRDO-Rs+;U2XOCB1@Y&Y~LjwmXEQ%hQYM1wMjDoYE6HBiy>wTN3gb$if}>M35$ z;AiwSlH^Q#7jvGI4TDnZeTHtTmBis%J?QpiYr>@NVZA0oG#HzfD$_siy9HAlGSR$_ z+8bc?B~_98TNg34mhNnU_0y1_v_9Wr^;`Hk%_A~iu{ESR~+e)Gho_L*z1M} zoYf}3jD-zB-Gfs5eqxC}Kp0mt<#CoN1bI;6AR334K|oZZ7i*YDx6Z*$BTsf^Es{~B zYXdB~Kq0Ntty`|oGUig(X!`1rs$jY9Xd@cY%0Zr-d4Aqh{5_3fk8hxJ4|hTyhEw8_ z*=$ut2Dw5g^lj_kUx8I@r{vDNU93_~AA$a5qj&Cn~L-Dk{(fz|pTAUnC0d?;D;)bYcWak5)Fku!2x4xt=eP zJ2Y#{p3`)6q>`cwefKLtQ}Zw`nBA72D>SE3MD6obXml6xFh9bEHsbg`d>^hl2ROR@ zloHsI@l|2VBwPaESz{y|weOI|=23fy54r8|9WA{40+i1GZ8{(-1uEc#nTm_<2LPSS zstnO*g1QEJLiFBWfMMz+E74Pzv>hDss^W=x|5V~f_e`!kujTWQR31c@DI*WQ<^hwD zIBu=*#j%6?++&S{Sh@qChH3zOi52PU!7#)^zL{*nK&0m-x$D!C4cW+=?@)lcQI>`V z4IwPt&5VvVxzGcW=g8OIQa4pnbMGwdlgT!69|1Yx#`+6uy?7dviFjK8)Yqg}c=N*8 zjA}x+-N-9L1NWwQO@9sHzH`+q4NvxP$_&`Z1XQW)o?7IvpMLAVA|)-7Qnuc^iM2D@ zkiSsh{WJoC0ehYIAnguh&R$P8Lkuc8&gT3C@&nic5W@ zO2xIB2|-Oy_rq^kkUyVk`*psK0V}-1!Ujcr~T4>Rv4Nno5Z%HvgLW1ZJ<~?B*IJt}5-pguw6C zEEtmLAXHzs+E!eX;9IOHwNf2jqOaiKga283-M857K$Wf7H3_C*u2k;~e>CXm+03-L zKQu10#p`61Iyp1f@=gG?4X}3)benOjn4Xf_R95-KUOAA3V9k$Da(gGv*(^7QdKU_~nC{WPMXrpf zd?EwQ4X-5eecwj#Oj|fkeMiUV3gTy=04pRxBXBczd$W#C@3w&v(a<(`Ac&srsz_hdT0BV_xy;jD3V#L6oQy0edXbVr2B-j^smO~s&ptAgK9yhD8 zpfvSa=>;QDLD6QSxoBYEMFXbiZe088o^LxHh)Vqu!-9PVDKol?K9Jf&SB6})*9FmM z(>CGc{H7~Za>?|1VtlY`@ppH*Wgm2g0(fm0F>~XA82bi+ zQ2kDh999B0?`|n{kl&E+S9PI4WCbEeYVDl^hrc_RmW8tgRXeiN-dJ%u-J7LhkFo1ktchn;wZIK*}N|Ln?2Em_IrxpJP()a}o|VI$aV{ zNr>$Kp z2rot9ykqM+%#Kx<%x?n1pj@twH0BmY2f}dA?^=OI%xm;)wK6mN1NFhAsToL4s71IZ z+*7+v`Hs2i;N9Qio}rS77TBp?5efQI2?cgepFy9I;q=DpWi{ zTf1Yp4Z=1YLmFXgVYi&B1}=N5zz^;YNzH&m`G@RlXO13?e6-xa07pYqM<{oJ7ElC;MLgS+ftX7=yVTePrpzVl!|iEC?FZn}tUka8snB#E&# zXQjhr6F1_k5x8l4%ksRJ z>{5?Vir`EK3}CGW(v^JvT}kZ?PB@F?35?GG|33i0bZwd@5#B{O>u>Q8ZlTc&{zR)f zy$~MQ+UrW=%KOR=8uFr*+XH!*6a*?3@g9;j*AK2`_6rk8Y>pKZgfJ`^pCGSwdK9)= zVBx{EBrKU`g1Nm{Qt$Osohx~P7(hqC__=n;Ae9Nj#0VohQj)GD^S;|XP_W^ZhbR-q z3i`}=Hd_K@YvXrYPMb8hfxpp1^~6w`GS_=+1qwzm@VD1MH^E3$sJePpeODGjbu*EJ@z5!ITqc2Gp3@jVtwf}Tcbesp?tjDtIu)6^?rPC@!L}(o;#jQ zig^_VVs$4vciO=XF7tl5NQM$#Xg%ayP<>#n8#2+_CeFV#3Y{6fcfPM}81;tnrpV`1 zfwu;o1^&=ab>o`>iSejB>=LDp<6;uLz{9n--k9nuZLe(G&ZJkO%3bUF&BG&5m4AYx zfnKYU8F*h&56sDK@T$Ya{4)V9%FVNE_ISn+)^O04$_1rUSY%anJ|mA7aH?8MCgI*s z;TOz7(yAGQAdn+(r42+M6jRSy$%b-X-C8}yWH&onww_W%=%pUnBr03xwsE-y)O(5h zpc$>`j^#nqW(nYu{Ho%30GetXK~w*STOT?g3_dbVHU+eu^W24!yZ1MSmQwW2&6%el zU}JEw$WW$D!?QIieh4Fl-4x5}PUTaVQ_s+K;D%`@I=2Y3`TcI;PmaO)xiv}Y;e?v? z&B}8dsDIJck$`4(vfm0kl75P`8wrI+ErU)MT*=rxb1OLU@!?EF9asT}u{+M+eaei^ z9DC0e2iTfvjF)^mdC(JgMDfxnOo!p1tW2-Mf%QuDMI?(S(E>(|la~cWpRMz<8Q)+N zJH*^iqHTTooih?i8^Q0lMRIdF%4GDt@YK%gJ!tn#N(n>y@a&=f1xXe?fm5paFXa!- zyo`TyogOJCcv`pB;u&3Ur9Jo_q{-*L)r<3IU$gV`84)+_$sG)}*vA((!eZ(nfb^iz z7Dx>tA%>7Bya_hWk`Qlql)xj~xI<*m0kzw(5 zFf5C}&-n>1RNpD#Hkv$<}{4-Dw~2T^oO&;Bt0nK01ON+(65Clyfx^Bj<040DAQXmpek^sY^xzo=dux21M?u z8>eedr&!F@UKER}%nqh89Bjc(7k!L>1b7e@o0H^g_!gWZlf#^(L4h`esuByJH)7dZ zVi)_zx74yIYa=VNM!JKiq(AdvOaK*5lsr+W40V(=cw`@vs!%m@_F{X9$-q^)t-Y4> z)p(VGCG{K~mq=^wR6&%y=Dm#G{>TRM|LuvM+u(P3!!&aV)Z$3gXb`Ud?_F(n_UCGc zT>1@`{&lmgUK`+J@ezNvI~BuJ$0L>hx@z_@&f>FckRT4zE?;x0J>Q&N@fZuat^*TT z9w|j4xKa}cim=C;lOpF^N1F5WA07adpQ%(>T`=vI!`eq_`KMWg5*Mp3MXuesgd zMk;f78@{#rg7j+%dwZ0DH&;qPG>FRYZ0BGrg@6zdq`HA@M5|zE$+ZRq+){eI+6{luIk`(5f5eL@2DaqldWr)=@pfCit@8*KtA~TN ziA1C>R0MOQ#_;H9HmK9z37O5DX(&ZM>;u|72&^(pVYG(FA+=|NcBP=MMf~P~bV$Sn zyOEr%i^M%+~AR-$Vb%x`q-N9j9Ipr`?QOIfWL{v5A{of&`zU# z%Z|6-S=tePeO^0{+*0d4z&m3CSgWrD{?lI#0+DS&jy7fH0!EP@04cJFo9{dBhY6dC ztI2ZCBi;DWY#64kXUc*=tD`|LVM*n?Ml{ZSKx%@HcsvtxA9egQsZqEsg&vuiyqi%s zX3(927VYvSSbC1>>uko)7Vt%k;fiT&nxB2b>#kS?ebEHyp*B-gu28sc)n1)o!B37X z)DFH~+i#EITR`Jr1>96$8=ee0xZzvp2ysOqiQq1CJ<*11czS1l5-HgSGQLy;I6~Yf z^=}=Yw69Lj*lJ>*|34sI6P(RP2=6{2OcStNIkFEvU7(Y~*V%ug-R(VoBeJ)wTw1T# z(3wpw>BYe>=fd<62N9L=k}XOQoua^T%i(nZ)IRA-EPjW^x^ZOt?aWtGt@ zh?wDr4CFjOQe8(${otD7#Af2Kj$U5$kY6O7Vf><7V>EU%n{Y^PP>6Iu_+zEom4JQQ z1f$v(;Hf;5R2n#eqHH;Rmf=fBhHWzrd1f$&TTu3jBxmIZ;56~K4Dn0@W~>)o>5NoPpi*4w3A2YEnug7 zX>s!bTMJ&Ql|72|KHiG6bNkB=v)Oz7Ub7Y)7b_A`wbkflm+Gwk88I^<5l^$>e#9!F z+YstjD>OM5l%Hb+M&#k_Ubj*3*Hx^7RK&9TQ5Di)xABUUfvbzxc!G&6DPDJ(jdeJe zZ|kW_p9}kIv?VZq$eN}?Oo&k`6ogBwvz&e4(Q)zvXb`w!##Ml0@kez(<_E6mD#M;W z$wXdqL} zN7|PKs{dNH=YmJZtJ{2+i0EVa0MaZPB?!Zg>46$luq125k8w_48`dvaUdos<(G(^p z5_|wFfI#!J6cu+!oLx7W+t&nKXt=2*_Nb)hrbG)Z?_`g^4bl;?j?`J~^4w0R%V|ik zZ^~>;SZIa<^05#TymbQxar;pLBlx*gGwO7BP#?nPlEVn14!g$8;Tj_4Iq0_j#Dl`I zyVGmS3SMJdCDbC0H;S;Lj2D>TY5~(SWc~zGr;pH7$nVW-&}%#_LA*~f_p`VT;2phJ zrQLWu;h9WtdM-nSB&# zz>~TX-6OVFDx_RC63hmzQsK*8A} zm}6_@Lez{qi?~~tXN)Oo)MF?6fJ)z;8w)THVE=u*>1#8B@#@TYx+foo4L4<1%dEYX zpMysl(f%M zYk}#9;f5nc92S)9nN8<;c4bO>(GQ3=uwwp-jfvLiL|N76^=p&Sa4hm3kh3UZT+7v+ zV(Jx z#jKaqE!tVqV_>(X0Os_5@%e`c)zyF$V~?~m?BnY%L5!5i)7DL&=3LuberDx#xwF-w zUtWMzgS~@=`o6?$V~>h7eD$LQ#N&m0OAGWzWPQ^vTD6Vgo`b01wXiqZmH6yjtJ_9x zs}m=^h4PWoaY;nZb29IjVqEF5;H*K54|Eu%AUcB47is#J2f)M@uBZjb2~k|&BSD7R zu#$T;!YLes8*m|+aiD}bi#S#bC(TK>FR&ty?A(5V-Cg zYRtG1oL1Mc3luJ;;Q0@)aY92BusRBYqs`e~m0SmYt}zIuI1RU&l9rfrX)nQJfYw{) z;v-b0up+t(|5#z??v~mMD{>BZ(v{C&$({{JOv&W!>b!J}J z^Ouy!m59!P+`9zCx~DPz?*txuFHF!Y^pweLvwlk~d5MX*f?a@c>>Dk{i6(UAIcA!g zlY4u6)RFQ>^|Jx}q21p=Mi87ShJyaH$SCN1$J?zR0M>Q__+SElF(#*Dmu2g6usn9( zaCH6ekHv?o7jQ0_d76lxwNY!M60hE8=KvQJLkb*^n-GanM^ZWZS> zO7-XRqT9;l^S)QikWFIQm-d<9-MP||HlAe3v%TH0#Z3}|CY)*(zAHv?;Rz!E1}O4taV|E=e@a&aD8&BLD}en2$R4( zG{LJ#5yuX-_6jJ3oGtjKWtZZ%KZ&BJ-MxNU^7s3~Qm#U(rp*n8P@?B9#M;yq2YHLJ z(?#A@81CavZf3-HbaR^`N^mj&>HowRcZ0x{l6CIL-4KEs!V11+@;w3TuSGa{!1R)t z*1-2L`71k@GHfA~T@&C6nA$44a@upwu9F^2iElX)!me+)ZEkLI$1nd`Jri3U<=;Fo zLQQRm8qeTs2e{dkX)QT4D)uoOVM{Y5D}*mJ36fZimL%V_*A{aS;hppj2P zj=o|WyYS*^UW0P6fwaXGiJ5?W1VYd`X_)Z?t70sK5G&9Ol~m!owNuQWetoEqzNZoo zMjr~4OsHJHS6cEGEcn=m$O)XD+PO}xI}zivdff87Cg-%(d8_cgTQ$YgG{Ah_ct69# z|Ia)ufO(Q|%fT)li8`*PloJ#bfBtZ5+fm!td4tyaN5_kmQ7b*<07-Y};`f7bc{z5>Y&XJw>@Qs#U~< zL8QSaER-K{0M_o8FfNtxnZVj%~M(`TV6X|Qf`=txD^s;TJL1MlC1h}~c1 z#15mf$>xgck8wnG%6yZt7M}>>(sH4ba9e#H7ErZ8F}71Vzt&!t*+|iV!j29KA#=JP z8B5S7sNukt4&kkxDIVc`D9NQZa(rx#_Nqv|Eo6cz)*+4|dGIzx6qmOm2tN(=@mdUB=pdlS;bG$3}WSShw>cwG?O`UI>Q%}57%t=nisUEH>yI<&vb zRHRwz#(iFwl=-&}TT$s@$wvHYN{WE;1pFsDhWZT|6;|(CCagjT8s>n)3L++g1z+2u&!7u!<_%ULX2sz9if5Ukp{Zz6LjnZ1;L03g~eR}~ClbcPYSE$#HZeFI})lFuO*be`@lCA340l^pttHK}}>IXPMz239#G=$b^} zrSt3nW%1(xMA28+oAmR0f=tdPO>C-w?w(-gvJga)d}WOi`o|L~|2782ZcN&B^OTmc zNkvw-D3ft-(byMLTh z;pz?2skd8-%9B0^a_@_3BYbw3$MCTEvz8FGtV(elk~JlC6vdAuUhco@7mK_bJb2HQ zXc)wUpql_^%$n~xr?T7-Una8<`w1799r32hd$AApQ?^m0Y6aqu1kvLnnu$XCpf%>O zDsrGqY60yBI&bBw9L0Yk{%k5ShMz@4rCOn*zESH(Qu0OriV+->$zCCNuqoMqf#E2z zwkGO`1r*Zu6x{CMt9xi+ioLNnWB59sU6%ae@xELo&x}5@PSByw5aVZkmm9389sR@a zdri2}F0iDQsjY{!H;&6Nm9+Y0-;(l0hleAoKt)P{@>c2K6Ie?yvl*7USDUfKPl z+2RG>QrhyQZx|ndw#Bbm^IV2MyW*`pxB zpg1|ekz2y{FXbD|*@B8b*HC)I#m0ar9}cG@KW@%WkLWvPxvtr{4*c&?5vL*LUM0h~ z-^E+(4B~>(o>ySf_w-&cYr`~iAgnIF)Y#ZJ$h5c!UT)p|n*4O}hmFi(>ZwCbQdrN# z9J^dne`^Mn4yt@;MAWqyPx*_K$VKSLLVVXMOVAYg%Esish82LL&aL_ug9J^Sw}LE= zf3#Og5V`SFN+{QLcb8UZ;8Y`y{z`R)qQ19Y{ySMtPm-<>z>pnh<1EY3sBP1a{NbgLEif;kpFa0E@o;gzUnej}|nRTkEMF%TT=EoGjL1#p`iz1fNBb zQ$8#j|G6X=*?Ns!=;^W2^S%sCTB?iIWEK|>$Ha$QN}t+h_?Ly(%Nw~5KVH?|Q;I7T zx^T_1ntKeVHgOW@T&&#-z0)uB0MA2@!ojC=OSPLTP%AqA!KE^v`4W0Kw>fOOumI7# zFtSvXHs?J1D9&2|dqPR*@xUwsYrwI!s#w@o( zAXt+0Z_DjTIfUG6h|vuVv{^gOqmLURE9QBsdqN69u~{D{VOc<6pZ*&-fN&W`i~64W z{i567o-!md2_B+1U59?NDHaK~I50R!#rxxNc8U;BSiYOQmU-ubdqt};zINXI#~Hk_ zpr;7fw!R{r1l<7k%h>9zGq_t-^KSPW=4*r3wJi9-OQlK|4Be|G4=1-o6D>F)m`!5> zlf<|WJa1qp2)TCDzpSwz?WKwN_FM~#-Og$IJ)OrN=h?@Gk3)k?WVSccXeDi}{kEd| z{T>2wp@m0!3GJ>X`Z0c_Mv%@~aLA9QFKl38(-I(s9KMf0#KpvPd1+_Oh%WE=^l5Q> zxYG?^H>2WL@vfLI>M78@Eq7sZILn>lm7|KMh*MBCcP7=p^O2>!k!3xPS#mzTj=^WD z=L?D=#xu58FrlWCm==qLHx)z3Ia*rW-4lTC1dLnQJw0~xB=R>fPjv+_Z~Pg-(GhT_ zIay|h0f2KpBNb{MxC7kCSxulfAi#?i$}PavpEp)=7&pK1ciUx#JH?q6b*N^$EuUXf zC23)#{DA5@pc02=0!{F9r(#>hAu54g2V2!aZLw( z&Qobu{MT|ajzLn^oaORRs=xC`RWrhQg!d82wnZTF@LFA1Y1O>^}lWHwJ z0PsK%B85osg4|9H*`ie_~_E1?*E+vH+gU*B5bt&=x0-k3w za~2fAIF{a(;rGa4)R|3Ngi;0I3*v?g?t0n~ATcp_y3f%{NuIYs;L-)YfTWJ1oAt5+ zJ+`g}n%9@if~$0xf}KGf4_uC0RP{}s1>YII_wqSg&M-)x@NzQdH5~O?(l^l*bYLS9 zA%rwoaxgVb1X$C0u5JR&+6IPx*#N(A)K^F_jn#2w7+pY!$t3kL%+|m#$6|x;PUv8m zddc=;jxeAUV!P6{I2!j1>Se(6Wo1*eLVO6OVp77WiJ!z#2Zx`a=v+*z%T;nlrrN-Ypu zOuMWpYCGkiq6=#)p5$UwM2Ok#X;W5KHfJ#wORfjpRL+tC@sHYZVEH1WVP>1ADhQDb_&2PH0_xQi{2@TgJUAl~2H*oUa3Y)mk*>Tqsb;R~nY8AIplimT;nsD%Eub zWTlQrfreP(X539svZ)TbL5|zz2p567=pUK{c0GeuHxy){R{0PrnXG#YGe4@`MfZDo zvw6Yv9o?nIMf3JK?n_eN0Wv!hmx|dmk@feMAJ|hj?a*YJLwf^zH2Z$OFB;qW5tff+ zoSq`kREUZW9tlY?Cb95q)s~k5y7<0aa8E%!W$;6s@#^44J+H|V+Cv1OwpT(Al2s*Z z2N7_WAIsT+I2c1C-kp=szJWl==+EmS*&oqlk1Et_;nw5vMfC1+y%G&-2J@D^?-)LM z1NCX0RB9Be(D$}6HA5~axG=vY{BxvkD@SU;dz2C)QkrpmRqAZ)n@mYH5gvV9eC|=C zTuh#BqwAh%^vc$!f#e83>QJ}D_r6Z8Yku9J2EWc(cD_y+kffR>G}+mtAQM*qHd)>S z<$cSJ;nP;89ojs?nr{hUtVhQL1~^~$J0rT1m3T>&F&dhrkIPx3`*$Gr0_MNuylA1* z!rV}L@bexY%@_-MeKAs2pv^u9Yux!bzlkp~?EOIi9+oSr#Xi~}ijU;;Zuc~Mn8k@# z8uHKt^mb58p)QWHT6wbiqA9Blzj`eiD?|(M>^*oNTI_u5G43*eG39!K4TyOxI_tr^ zqN8Kul@bHXfC{=XmUYKuHMBx9Vo)e-zx#UG^!<6vLe_D0Kw(T%Cpr@@J@0`hEiY)% z-Sx~^n!&s=+@bbhJtY$k(uI8WeU!PFd#jT%rUz4ITL}Y;5K!-py+d76B`sJ?566-5 zk#&-(xTW|dEtF?#v3`p-gES8Vy_&oRKiEzW#Fkb4HE}AxE$#Dm zmXFM|F(T3W@gugzkBXpZr1BGZ_q}RBc-avX88rB*I>lW%AvMz$f*}$W3gS~20}ZMb zqfb70yGGhabB9lI7~PJBc$E{D^F@Acm0Aq(~2&MA;FG8I=D9O zT~j657$sc-%%46~b}}GNYd&y(qdj$bm3 zeQEOy=y9bFEW?o#*MjP{GD}8sqt+F)2KLi2*^e2T;ic|JqX z*+HizS8lKl>n^`6PY8`gRT0SmvWjS{vi$D)`Fiow1%)YPL!Ja{(FH*3{$2caORpJY zxR@t=E~yZWZWthqYIZorkCZdZhnm2YGO5jQF^!M4X`xSCZw``5Eq2I9K%I5q`$yZ_ z7C$p;#Ncxk-gCWsxECxIAW*S`6eLvOa;&LQ#zIu_!?_VtYsT7#D>aP2Hs!sgB7#4x z=2fD#e#(5XqR|jTSCh(W)Ndeg#NHavgdctm_;xL~9EbPnTlAEDI3ZRWkGzUBb@&aO zgBvNC@YWf)3qZE-o3kA_s}JK^-^4kl#ABI-)4zea7)^JaD_H@n3&eDy z*fVLp{7j;lPg8k2+T6cq)}r+aZNG~$uAU1_5zFAo6kJnXS3@9LV=`mUSmy3nJ`krB z8Z!y2lc4NNa>-_e+L5T+@_~u8L_nfG*HmhUV&L`G_mvS*-_kH!Kq4)gXwnK%nNAGX zi9G1QtLc|c;iBI&5SyeW`UKohH9X3$J?@#%#`s~kO%)Nz#Ldw((W)xQ?x{|w&XU7{ zAmkqGj_XE@H>)$QKvIN0a^ZD-g9p8oy!hpCn@J9P`On9#pQqkFLRBE0ra4DDlyPY= z-#6d#uukP-YEo@0DqElPZX1B9o2E zl;jzP122=i0OR_nA>O7J{~iKGJk8X}s{d4`9+zmwL+O9$vFSNn^!N+yM6>7+CNyoO zMG>w3&_9{&=Xuf>O8G9g*gd~VeoE@Z3U(R&r#b5LdM;s4V+k6~T#8}w zUGmV$6Cesug5~`0M4ObT_)Y;$Nj(ex*AN$)0owHEWwKvyj?xT-22-LA{-|I=bC-O$ za{y(De=**=x~jvK*(gCs*Y(|;xqYxOlPJ1+r6CT@$HDc3G}gr<`_SPUSnD)9_-EJe zdNQ8)h=QAmqiM7wP|d6Q8g+R-1@_*t_b|e+85Ku+pH*k~#7tTu1d;JB5M)#7# z_1Gp6FgTIwW=gMTvgP%NSPAxwL4?uGH9qgjA~Vs$jREUaBD-uOD|v6B+w|a3>p6ph z+3bBOl-~I}T>O zX)_3}797l{ZvOG!K=!B~Qq3OY3;ck@7eE85QFPE|?UH6C`2c&vfIc`Q+d0K%Shczj ztG+a86FxCsm0ope#lUf*iR*0(eG@^T@jC`Tz3u+hpQ6GJ-t(=O(^HBuGW0R3g)oI= z3PfNM8v>bECjbrv$B(5^Ak*`!h7m$GldhcgM$}{vTxwczVW9$=3>a5xGHkzF^8Jb; zUErgT3o_qZfTZL~IG&AycZ6X}F!ZVUR=Sw1#n&{_l?q$awyC8XaGp4Wh(h6ewc!4f zW(O*}{qlS&8G&!q=$*2qYz3?fl~WM#(Ok#zwP}g~rm*hk7&YN>5=&n?zr_{gM$?4? z$E~CW*V7U>`7-uM&Z%M!uFr*x!n}6Oz1)ZHO-2ijqRgm$?LtS_TzUsvFG`xExnFL1 zQ7>=Iuli9b&o22kf>L~`)Ad<%P3^q%Rghjj#+>&;Ggv=ZzMlDQH?D;*#a( z18AwZ(J!Ld1aVnr**45E$>`aAk97}-j~snS!itbuxm93J5gM)fD``i=RJ=l-9Mdot z==c)X$fiJhj}%9qDP2Urq~CkF1_=G4pf+`9MjQn>thryn6MSDN3gCv8{kM=)ZgFwP zKJ1mQNu`NT+~zV}c9s?UL1?5sIp~1%VxVUAdFH~0MXo*y@=grJ&@j1^qx`HpOumIq zv*KiO{@97dbHF=G=jLq-0&y>g%vO~bxFln#Xd1J|Zlkfykcx=Es6VyT<|sCUZw2VV zmAMJ`dnsYSH-?;GO`o`N2vr6)v(ceYv9H6q(m!lhqalp+0G|8AVpV>Syw7aHT_*D` zX#`!xm+AF80ya4h;F{B-U-=M_kaDi@bGBuahnhk+vvj|YY;(f{_-Glf$K$^iVMJH( zhOKm^Dc2#GluOf9(c48e3Qrn7u!_eE*_`1)%R(Ck>fLwf__yra2(OB*@%dbwd#+o) zK1ca)F{FW#)JK-KBaz-%gIuMdwZWp>j?Hgcr1>ceGQ<=V;MvAt-+uAJuj3LXOr07LJ3TaPkWkhk)+3|lK!0|ltqR83 z&XCSCX}mMJ=O(<5_kdw^q8>|Z&A{UTzQd?(!$mrztacf0n4JQ&@|QAZ=vxf;tryz zdl4ewYI)J3o7`HT_{_91EAP%^7r$!`6{y{<;4$48#}_K?1b_f^3SG?5KXa!W%}Kmy zgqf3Ub_UYR39U-N0ur2j^00#%1bF|mhH<;zZJ9{l22VNo?*LDZ z?=j6OhSCWM-4rC>2@7A@4?_KJ=K4rM?}-Z^TKsafk%i?2-u7WOcM_iy3K%xSNyXx%oL4t3uv@5!odUv;uAH=qFu7rcD2e?Gn*^7}Bd_?1p6CbxmptJX2C$^1=k5Y=LHEi~E%R_RNRx^{i<%$h5GwKs} z2+8xr8;=nTx|{LH%Op~a^~q>@!49BYjpjwfAM(Qa(r%kxZzlh^)Hk`G#ZdzQ(r z9U77*UsT;L>#pHjg1*#o2gLmx1A$wj9L$J~I`!m+t;(!{n5ZWvD)a*%d!`WDiec!( zXMLK8>{{9VTr(B1PC-Jp-$P+O=7CZqX)kCsY~N)-ST$Mm&0%N1mO_v#YbVYmW@;5lL6cl z7~nZ0sGB+?tFaDYOj*-n1F%m4SUwU5MED%l?-|V24>tbh+Fc@k=QInekG`0O;`HRm zq8c1KRfv8V)re6N7iQz#5ke^CjP!+$u0;Jd4c`k~eK5(uL4&gEcy{hm4OhlyOTdqV zX4{Q7C9!R=M&D+!I){bq_Jl|cmh#ao2+5)`J{7GvOG)&VKxj5ST;F~dwGirtIHJ!f z@jX=MEZ9h$>FSqY)y<{!<&z)jEfIzy+I z@qE4=hruol(unMBEL4tE;Zh_VxEn4RBJhi}v%y$>Bgc`35b?~EQ&CB2o_>N0Dmhf- z;t8ZAg_H^WGSx1Ph~>FCP))#$qHhtu#s;mH!Yvn|t@`4ReeI(v^rwiS4}MAOJ$DNd z)|c;DfPanBx<}>8*;Yvn2s0eec;vFdfTBEF6aV9ey7lo0f{3+?tG#w_r0Ku%vR1Wvu(ouEs= zv9v^f>8JHRS#3W52uaCGwO&^?ZOMK-$X(fOZb7Qb5zDfqa`6!SPfq0C2iAd$iQjBb zj+HxWf|~j)>kJ4;hbC!;{?(#?{SX|9qL1lDzz?|p48(%o+ez)8soz-g6I-Cl?yNaj zNOOEe{mTc7Z_pm-6QvnDzu~=UT6cz8|G>OIK?*N1kn0feE=v8cAHl`lWT@3SY#xE5 zOl~ShU|G6eIZ>lO!K-Kdh`M61kuKtRO6kO0kv4A; z&8ynZ=(>CYKiat|Sf84XL2gj89VaUI9o7Ex6^8)ddz4%;5 z4}SVR%UYbO7$mLKcsRJhKTX^Ce(~M9NivT3{~??!aM_eNjc7mL*#HxdgpK6m+@2CL zxcdVcU&fTu>+6f?9wdXON1lcMwN!KDsr5}(0;*t6#?k(P#H!n; z$PZ+vY9&leLp^%s8$rz(w)3eQ4R_5s(-8+bsc}OjKUr}A^M9Wzu&T>#is~6#>piK& zo_r1zR_9z#jh&L*jkB_NmF1tU2zfb(nw2TOTb&DwGmZv*cHqDKfp+x8V&$4N|=g>6AQK3jCYb69JK&OGczw2b*=}sWHJN+pit>|dmrTvaJ z5&^@-thMM@?$vc=T5))36ecUOz8v;H!@u&8v9SZ=-$ekf+6$2I$O*#F*kZ5(E&b z2#KEFKaDn>@ex0ZIOOwZmX*;ZxD14MLOJT3cIzB>vU~3JTq(2=j&mo>$9>}wcF%#q zb?h#~G#tYKqtsXHqfINtd$50_nV!0e+NNHB`Ws_$NMSN^VQXfs>wm6Gw>?0FmGTk* zll+hzy<$u6y_DJgB#B0~^02+9T3KCV41v)onKQbiC$J0;hI|9kVB*5M8(j2mDb`0+ z-o!9lpjTau?`1Cf_r01FIal%!)Q>f)T0dZrCJIjmJ_p^Qz)laU9y<=X$pWD9|0J*F zkAUp}*mJwtD|s$*@SNA5oK0BPyLMGLG#5q804AGKWP~nxsBlNnQCw59)!D)ZOnd}bwo`bDyE>~kjt>n zs%#t+J0|P%kT+vK<;LT6%=%eAEUYNBYls|&8?1AC!Y#Z0#T+vECaCq`^B?Xr&@G6X zCdEUpSllohM@Zps%Xs&xmISu_3-h+pQWb8j0J2X>+&~}Phur)mDy#fCtv=UM`Cy2I zEw1eU2Lkr2fbKXS2N_1;3=5~Jm-=mnq$33{?Yjs>B7YRep)2cb3|<$aJ>)8@VG<1U zdE)>Inn3Sx^--kz3KVndKs(pAGG zqS#7bj^UpMaW`bhaHrqI<2A}sdY_YCxN548+>4e}J(b2HzIb#;-5FYkyG7cJy~C!~ z-QNk6BT|6zJK0NyD;7g|h6fIN>75~9HRT z-_xC$@C-5JM6in$rHKAX6_E-^{Zc1+()b*zXB&O2+N6dk^X4@C?!r<03)ow&zy!<=K_m}~85Rol(Npi%B6>JV& zZ6lnE58DBL?ioHf>LhpHZ$Do5Y@|2@JkA=FqzKZL<9-@%M z%GgQ^{vP@f_5AaTP$jzVI@eS!h*gYvS}nul&1pK2aY_zFMF!9g*p{O%qVU*6YrO6S zjO&l2XeG&$L>@v_6QjU!TGwg^Q|t;tSf4;aW-p2u_Db-m`&PRE30tEdH!A}opMJs( zky*J^q7g8333%$$%^`^FTV8oF)S^qcNQk6@_7BX{jtKbTIV6;E@ zm2Afs`|Q+h3Z`G0YA)24`)RdY*7Yw1tKI@ROruV=YKA_OZYO`r*%Y)lV!RDt|Ad+; z7thLD9Mi{39UVObWym1P({hT=V)`xt!z*c5d z2oYwJ@P954V;m)v0Yc(*3UxYd_BpkQkmw|qxhv3G=gN#PVD>~Y=<{eH&dox5mW_~{ z38AJDB|V0fD@V-s=dS(W)axv@-BM7Uj)*e2RgU-SFOIDL}3W7U_MC!PC3R%N~nxdR9F7!Dmj&jUx6W>xxoVh_C+;ipuO;GeZ zz0%_t2#CmF9fs5sNlg0Rm&cu!987`-SEpdRjGE;@Y0jn$P^{Yenz%Ir6Otr<&NrqO z7bRD+w9jhab*nV3+?%}FgUs2TQFL$BqWTLjBK?XzSUi~Q(d<>*Eo<>=;FrC+<{{YJ zT4YOF-W%&Y;BnjIfGh>Ktv;vN&Xb1COhapZ2u57RexA>+!|0NPas%z`B{lD7 z#-z-gS4(Qen527{=>>IV;#6Rculx0lOV#^_F;G4q{Cp z4azDt^tMt-$Ngn6HhnPxB_T()5;*$$6-z3On$el`4uR0)JRw~$G>lNJ7pR*o4@Rv@ zZ|v}@AYkob(H#i}!|~j>_WQz%M>HE5n4a{jn_@9RoXcQuo8QRO)|2~n5A~>n2|byP z!Z3SmFxucs)MA{2X1TY(n-&v{Mbgl2s_LdL;~e%)K=_+{x-w)t7aP>JtXkz>swtXe zNJz~SaQ^Xa$?VJx14D&#q!y-Udc(Cg2v|rQ({O6hmQU$piCb%T2)K2P&UGi?>^2{s zLTnbwCySI*o&wm812|^WY_EbW77daWW~uFK>JTB5dXKsh1xd9d>8mSwxN+^}c?icz zuXu=KL>st*pQ=K7fCr&!llSw@8@$D+$?h|HDPin}tvf?IHsB}j9Z1kcHF-%7K7QB{ zOxVpywa0~)69&{<9ij7I>_pFN_(v%*iO`J>g|Z)D$!#QJMtP(XQc=XyEY{#e(O znD2Er5#j`h41vYQi}>=j1<<`k6nV_S4< z$J*MeI&}LQQ*JmExElu)?o*r1urs(&^Aw6G=jrk9DWpgWZj8rVsz_9ulrPe!gN}5WOl>huekM{~WJ-z6J^8!>RG$lflVhX0LAW>2yPcY|3DQ4TqoM za(QOf{FXg3Pj@%`R~Uz#(OpJqeP)qUp6eYnwaF}pad$4~z~#1mf1D(Fh2V|iCm`TEvtAbxn;!s^!xFLy6l4RvsFT7>O4|HqADZt70=uWV7FvJ0~kTD$Zfep z-L|~u&KgdO-Mr>dqY*@G)$O5fR;-s)QlVbuv|b-t_4+o2HuD$oW&$8@G03q&Z#SsS`;$Qf*xWtHpG){ zVMx0&b3u4XPGoZkCQVBbb0`(PkhO5CNCIuayyn;{In;Tzfq!E>NF*1C&@K!D9&{`Ms`*(`j2P(zT4r1&le+ zqY99Y!sEy}<%=DDp+EM*IIA1-4hehvxTrAkZY&o6JbORUjoopJ`3R32t`;}v7;R;O zsnSEd+!DKU080vBWxV$)O{dmn;|)F|Rml!K@T*5N4Z!k@abzop?Thg7 z!BP|CLFLz){95H))oRqGHVO}dwtD;rLtXnPt*^1OgddYSBP<@yhmo89M;O)1c_Qz_ zfZ@}cduZg+>uqK3SY>e-6$@t6Riik=+~W(LQu4=|SB9!_1L;3g1guIw@@0Yv>)EX$ zvTV5SYMJ-Ox)e-+pa^nq4-uo#vHV41{c*L z(M#JekZ1+DxXUW1_QBQO@q$0Yl=4Gh^lWE1?>leX z9DNmBvI4*baaR&BGC4RR1{`L>BaM%RN0Nu^e=B)td#&keV4{;9{;PTd7?n!xT4vX? z6vljG_PtIVYJF14%yY%_n04%-CWW+hb;w!l=y;0ao&KIp>s_4c2P0|0FvI@H z^7M(2HD5z$<(m#39Z*pz%hV&1<3F&Kw&tlv{IU5NeqKeZhzvk_lQFwI;Yljd3<5%y zF7W6d!A80pw|wyI1slm&AjaE~b;l@2lrNsD2Sv4#Wedx(@;F*AI*(m+e{uRB^jQs{ zwu2_3NOqC4ZM^_l^;D7-A@P-?ThiTKuBsvt5<G+fz8cPbn22&Q-)jKbK<<4kK?s_#U!bPH&lCv zFaSNp`q1i}IFJ-83btMBe_ID%97Du22O0W(sldGwEa?Y`K6-_YE||84!wVI^Hyn{o zfwCXUGWMQS52d&k<8W1(q1xv#7g$pec3uu$3qw7a#|*DJ8>u(5y7kfQ+$c(i3pGKl zHAYx_8p?iNwBHaSF+-FuF0I3De2I2N%?tXQjj<$K>)^jLA%%J7Av%Ng zB^8mGKekYaBPR0qFZdyrekjuFeAbB5c^ZQRdXKVY*Rf)70)vW@A@%K3bCj4dY|xy= zx0>&XA8eH11F^@F!^cv|g3vDWA2JI-NK*eq#g#r*q8@@R8IO`e_uIBd9#DZ*3cdh%DH2*U^|DJqxj?Lz1$}@4?53 z{L{jk5?F#Qg+^2wI)G z+Pi@=i#>2ZDykVbqnx%O(d_@Xgj)sTSjIUhATR`|ib_uD#1)g}L<%_qaVUC|;5tm) zbp9SKP7=qpA2i5{41aIOsFt*J zvPfXk%l(Lc@GRExhGsf$OLT&XAmD4?0=6Gm_Uc?++tMrsiRqwbb<1GU2ZV(@dp(TXYYH&QxM z`$qOBrmWh#%Fpm@0B7N4@h^6j`slwn2oq)Y&pgprzk$Qe#s^aL?VwIz(?u>R|W*Y-hme=OmvN_6hO$ZGFANy2LN2;S%o_nfq z4JIuSHw~p7qYB++IM!gZmg}!Dfe0%*5ZG`oZ!K*xi-9*3;Igq2!I z`OVBoy%&4HBUTeJm@H)F3K-li>ISbzisE0V2fy7SpO(3rfhBMt0~ncXWMUgt*|c@2 z6C?x*RJ0lN~gLb`sU@hD(wWDNZIF+ejs|uO}LCqB8x#_!h|cH=rXnAIW>yP zjk5zgZ`uMs3*lkmv=xE*hX7m7+F=!V5^7Z?lM4`VH7TT*-&~=3*A3tE2adbn z!upB6+Z9z~s)GtDhmc(k`KyMmfpLF4$4EZ&?Z$8-hx$^KM+{8=XW@j{b46LvDhE3? zO|Px6k(NXiW3kP(&J=l__yTd8*8XZ;w)$APtXa7Tk~CECEafQ}Zrh^x*j?aH0zs~$ z0U@LO&w>d@8DHw)TLUT9{Kj7fR@Hn+!I%X(-W%~(CLi$E7j&JRmaW4tRc#L#ZqUbJ&3wuYfX_ zQDc7I-xH@rV@gNIY{($0XNlS*TRiFZ#M^Uz9CQL5HK}BKls$78_MMRK_aY0~#y7EPCdSv0Fp>$3z4Pihq^e0RI9F(X z>|X*~Kovo|uG?w(fQm-t@knPJHnR>IdDyzVY;RsCgkndbrJRmgU5-e06nk!5{6>5n zb%PVl!zz`KhGcBeF~Nxy6f}DPfc!x=^WY#`xVWI?fb)6%jhRo#xBr6gr-@Z*D@x<& z4H0KRW!{7HV&NZpw}{yL1{Uun^ZQlJpdQm|rX~OcZ;1Z!>tV-1rIZgc=KUT28lGrn z1(x{>XU8t4cwexmQ5HNk2<=3XQ*z0Nvu&9 z6i}~Uw+_0QA@vS8X^B$5%T-f~y$vU3nbco|uy(ipermI_p~RmNkirM!m-2KykKf<4 zr|9%J%34H zcP8``uxj-&T!@xGI~cwB2T}k0S*0Wk$@LB=Z3uyYB}12e8Nv6?@a1o_+yogOxcvf0 z`T&ikD2XH_m3Ark*JQ#^kon{WXekTpcn92XDgo;%j_zmy_dtQ<92v@W*cJFwCO?sJ zTGYlVeh;@9U;w^-RLE+;eG;P(!yIpC22IZ4<`^YIogHF{+e-tDB}h8-FtXUS^dkoj zxos-0Iv!!HSX2kbJgK}iZRj+|Z`cSnkO*Ra z!z7#67R-q&uH0 z+{bHs2t1C#W-tvlrsgt}5@$BmX<0D9{Yobb&!;O-I z4aE-jYdY(~$$<5(16@@myGUb85X>}K2J)7o0`&ibfwbI-gR@>;Y+(9IlbB)fG2@3T z*$#r{eyn39+Q_e09jMi%%j((On=swKuaraCTX%sX-XJK99ha!T_h5z_UvLxP)L`{( zJlLy*4{K3!ytR9%Y#fM(3>WC5wB)Dcav?}GtZMYqv$1l~(L&Uv0pK3@?U%})h{|2j zZW;<+7-(2zI*A(v7Bf_#noG5Jg!i%Rh-7vT@F4APzm>^ZVxw5koP$q2c975%DWyY& z;RFfy2cTNlq#swd1;O3{yYaLky9_}iFIUXwE*z6x z#^kU2T)b4A+go$?P}wKwB0mi-&Py5XJpz?en^jlDqI{Sm+%jd9G9n+-s$a@ga_zvR z4R1`}bf14hz&cFq=&gPAi?c<=*$^J$aA|D3+e*y#ZX0sGi8QXcV{k)2$1TQ6gU@r= z1H;e@U=73$4rO>%Y`~;nI^%8Hd^r!zeQXbm`nf}Pd=g)b2D8GNys&(Mz%KJP^tn=l zZ4{|A`o7ol=}`H;%HNi}LI=W>4210H=HNZRj$eUN!U-sc$Qb7+O`jMP0$cjxP_FO! zYT>F2(3(PAmrdwBAXk4HWFH=SIs=S1=97!aoWmZ8O1%48V~Kn8MWU!9{Oa zbOi10cV_LQGFo=jl@lg3^rC_a9XEVHz?@m86=ocm?V#tDj`~5hgdB>$_F&W7_7xwc zG25pN#_e;RSQ5ss3Y%x{zq0GQ#LL@})4_Cq$Q;vcLabNIyq}f?& zZmPxRU5dK*;SRfZ9ys7!S!~7KU<<67$Q;+ZeAdVBCGEW|*O7K^iC&MsL!tf}3czzC zHmL@432C+IQR@gXuE4hJ|_X>tnsx4eB*{~V)q^n@HBos?T)cR&E)u$?%6}(`>|QI4=bA&w|ilV0G3@Yjx zZ;zxD?(<|>5>h;c6}Y_pl-Nw>%6?L|e)zYlH$t+ir|qAbD(UYWlW&6MW?$;t&4^z! z(`mPTupj1ELUX973XsWE!=VPb)YQpydeV+It{Dq*La+vW=g1O!q2OabS-wPB+=aKJ z%|XWK&QqW>(>>sMV(uE?h=UR(YHLvg!4{3lIR39Ut#ptM08ggaoY^SqN^*;Zq?i6+ z=47I2bQ%iQ8uL?b?Lha=y*wz%Q6~wJQ~uzeoW%S0j&5=}36Rf=SH{s?R{`_a-n5eiom3 z7&pR|8FD6ZoS>_+FL8abyFcxbO)>F#V%|IVbankRVqZB9yVCto1~{?1S!aK%u2BRr zTiQ{f%0=L=Yr>*Bjx<;x8(ENpq#Y4`N$&O?bojQuv?hWPBVQ;wcbU;J^#QuajAtuU zj?>r)!Ne-5J$$rE*eK0wpqaokEpO5(fWBRR_%QD#}_bOxZff#;{ z8>m;IH;j=n3na*^P<(Ffe5u%$Jw1Pe!Dz$>V^aMAFsC&t^++50b@6_to4lEZl%WE- zh*l%Y&wja9T}kUNq5Hb)*}|CYUd#Nb7^OuUtW(8T;^_k;x;^VTG?Fv>)Cq$a7HJo5 zx_U{?Uil}=iE19$PG_5u>l@D;_AB_8@pcU68fPByw$J|Fc_D7M1sJW-pNrB62u#7q z5(B>AQFC?Xc5>j}MwA8mMjT6)inY6A(8~zYv?s^mMG5qQyL6T;lE5;1M%w7|F}_q< zNb5mZ6QJcFMowntB{)1v)#rEc3Mss3e`j4n#H1w{JKnO7%U9PW4(51(O!iKV&It5U z$3a%zTaivlQwMxwgvz_^j~Rnz>#!4T6geXxyAY(TFq^&U#|bO@fnkN6GBOEQm-HX( znFB2xd(BsB$P)#Je@3O@ufESC>y8q4ilV3GN0$xaGyQ_uu5r%MamzO}n41l##d?@+ zEvqehni1lOat&u>3;_)_W4-&86AED)o9+!2uW$L6l8t_GtP%$jGyeHH$o}1p*Ehj- z#o?7uoM5f{ZZMd(Y|a3fOr%FKq49Vn@kZ{@+5X+Qk0XixynLlZnn(M~l)j6%+b4+K zCBWMtb2Rg686GASOVL3HUtImuNXV*_~ zg+R@GUo@>g7M20GpoK}J%~85F@ImpbSMh-uiE;gwe&OwmO$F=f2MU1OtU-_|Fo+dh zOK5T!vl8e^W{2g}4%Rf6M8ovoGwTxc&+^WUe($lg?G8AQ4!*A z{3XM@q;5R966f}`GM3@vS0br)j18rj0fJUU@SKu(Xb2#pvLY|{uO62K?H1Fi-wf^> z+J3Ki%8p%L$_`@qv)7KWTKq;}8TFHYALEW7+$RC#$vR0eeTpU1I*yR2s3&pbJlg3cq04E7#mh3qc zq%a_Z$vd4w{X+QLzU8;#6POjVMe?|YyGr5e3eH@~daAJb^l)z+@;jks_Dw>;b)P%% zP@>psTG@woQVv8I;jQxo`!Zd_;D*5K@0n3EaQm2MYy(eHN&94%L)c1s5BX}djGE`N zTUHOoCjgCN@dB1rp#YVLpCI-2OX^@1XF?o-^*4$3TP7FlnpqHe6veW5Ja~}l6mN^y z&qnMCfO{s6oG-A7>j;w$m;2wqZ5>S5JQ6`%gx28Re!e_k4zBx;%y0FO&{quJ>I1ld z|BiovgDicK95{!I@H;HG_M-Ao#k74}x-$ZxC|W~!%4Q=yVyf%sTZ{p5%UNK`GU2y2 zK2d}Hw7D7`a;o8$JB(hTA+C^JHEX$c+dwz%YnH~S+pg6_#+B#~#vg1xQD0ETs=eHR z5U}(qr5+r|1b9hnWc_zkB>zv;E)Aa`P=jPj1#MNP`cySCtYiQ+noqaM4azby3dk^! zzRm6wn3q|{+Dz8-h>FarUe31kH2txwh8o!CoTPKZvrb|H6U@iLRb^=laZIG zZcjUv(ngD|RC7`}$u5Z7Tn?p}v01reWArRL$e1bj-$74_uuL%#irvTp`XUGetmb6- zplf!gr^m{Jxf-RaSXWc=FA{zHLd&}bR-k>l3r1qs!ScT%seW}Mkv8+?g_f~YNB2|h zu`>?5oCCfadKacxY%mv@BVCYQIde{B)YUB<2#d82v`wJ+OY(l3`@%>XVVA(0@@E1m z1afI60=Lp(kh%Y~Vq1Z3R)TrSidCeEs8fkrY(fHquI`E|RhCy@?wGs4xXQv=|{=jr(_fxGaOr}rvNt->naR?j(RtaDz`*rsO&a1jhH z0Z(yRgjiw>m!r0&Jc6*B?mII?xn5ahzwwac7!Pxf zuq-~)B$jcAOQ|0VJ{vdKY!Vl)iLwYvNoX=K|D|@1G>yOx*>B=4trTe!jW;16b0c+b z22k;h*ZFiYRqlk{ncp?`X2 zTuT(DqU8DPc~Y_yo}N`eC&BNb#?#NmZE!gRUo#yzmQUY>eCqt>4%uqw)6#i)Zc;iW z#n7LW{Vc`=snj5GnCWR|uQ`yI5f+05K4>s{EWQ>i#uQYC24)j_ttHBdNQ?sS$0E<& zabo*dr0N^pp9nPbd5>XS7_$8#@1zuVWO^Sb404?W#5+)7|2s+uNEO-usT*b5VEh^` zl*W$Zy7BZ}oM)^up_@Jb#qcP()X5$-YJQz*?7&K>eXOHnv7P>g=~=n%SNFz}&IRS# zifzOQ`-pDe#kM082biLDxq_6LEznR;+{EEDa~MrK$UW#Gpq)3*Wd`3!xw#4$Qe3bE z#hTm4t}11dat<^48!)`Gsj}Hkn<%oyFn*d*ji28bf_Ol_uf2`ilY#i&HsGz>UTobr z-1TkCkRC%0aa@j{1j;+ZVUY~|`$sJZI0LDmrGJ}~&OVAR16ZUdohjgXBz};KHfEIH zT*y)vs`%Gem_KsnI_Ek#X`qw7qy6>Po5*= z*pOl|LTynf<~CtOH4`I&{S=N1T*13Zs-V2fp9idegr=Xseh|C%TBhe`4O(6K7ize| z5dfp=mlAGeB^KHm7WXkzJduLKt5J_81vtBXJiEcfKOZu26wlf|S1SZ}7}?$!X@2HM zqPJ7Q4!WIi5&t~22hBNEWHTQ%w+{7FM3r*Ay0!eaG6+z;rsdJ zot74gS;`?(dc=Jkv%iZs5a6#m^g~%@8R)s$Q;Ea{(1P(R^Zy1<02jn-u9Z@A4SJ(S z!;^Ku3x%CrbQaMD*nbsucY&#;BAvo<35O?-&W6?O$i4;1EqG+Z@-V?)IbJ@6@gKN| z*3*ytAph5T9i~Wh&Oh&9wJ712shu68^{#l?NI5kXK^_d!x)_M$P#*nzEQgVy{Ew>G zR8;Y!LL~7d9LosJ!^aDvLkASUvDGaHB4 zF>eVMIj%3RHP$(JTzcBcKywI(-&gXbl#Ry>y&Sdg)%aiIR#jTN>&!32eWy%)kxV2# z3FV0|pYVMjq3YgYTiA;Ti{+3uRA&G(B=Pjr{3 zry~s@nW4iB35oh##q^FFBfOJrc10;R$?=dT2cK4(S&*geSY&f9HUKpi?uf&!l>^ey z0OcH%_Uc0g5(37-tv~mjfq)h(-7NrkLo}o<2NZpGD0;S5g3g0`wjEBm?79rba+!2q zsx+&A1FY8J-k{0+KmvLOx~m(Yc#(H*?PmdA_CdL5l#CF4@C{QGAWzPCKOWyc+woOI zra2Nm%fyXeQ7iJ4jFp8`z5?6sGij6gARkxWxQI)`hgZua(i@_>Os`tvn6^gO4E2Qj zTYUPfDcvrZe|FkA%M2?9KjQtzL9H?dO!)e!v+$<6Bbh%g<|0ij|y&qqfxZYWA>Bom8S zA&MxW>=847-6WkC3D28batHJ|a!ndNiKA%+ex^Nncw-CCO5I zjAKGD+({$jAf5N&EAn)o)Dc8;_!nqf0GbZ)%LWlB88*zorZB)2B#0M#VVslz)?L_r zsk`R(ckUkVBamT;FFOHEv6NKYEOBr%%|s0a-l<;BZMQjM!%U0G81Ll5V$g&TMWvOLJ88EiLz z6eI4AI6u4=vEH!sW2uCtKLclUW~!QkO*#*Mh`1;qZZnepQo9PBgd>duZfjAbG1ygv z>+&Sf3&s`>zf4S`9dYsm-1V~9*|Jq%)>0?fR3_e*RL5L?M7CMYI#^ONxsqqsDJFF z0~ghHl`@gWeI?yQdo7w&l|nZ0;+c{4cDjT-QQtsx(cm5jX5_oV?rd&^R^$s(MDTH& zg=wrOVz3eYbNG`9g2QR}_9hCFsMOYO57Fc>%mRV~h|oyPnV*DDa(-DQeg~NT>!fa7 znzbYmrIq!&PyEYT{cm*@<eG+xk-f9V+qXFFmqsd>(~507xo@cC7SH@&^SZ{#2GothA407Hz`F0 z%_-C*qMT0KG)A*hEVaD2FJ*TI*V3V0KC)1w5dtBK7VYcRQ&K6DHwQV@}* zi;T&fb1e|)#o6g(6aXa>xv*bw=4#3cpMCOSJ)!LVDF_wdH#QEiVe>3*hU1)ta*8sKZuN;xi_B>JdcXGCjldyB z!ef@nzP&!^j(be7`$j2xz;iUNcWhn|80pE(TWQ2k_gB+e-OG~aOIAfxqE$^p?z7a^ z8Y(M%dA?@!n?La3!6IPjsS z+%n;J_cQq|Vaf^+h0pf|-B{FC(L6Lj?-6++NnVy06$23K-`cem&7jP8f+DC4+yug* z;zV*lR%FuBMgHl&w%)T_ObV zeO~ePui_eDpSbzxlQE6*Ew>9qvv)qaWYW{#eb%OFhP=I19NJQwUhvJ0X*(q$_@y&0 z7&3VHTH8B@1h=v_>96QCcb}K-QUU;*k2mPU|YD}j1-B`j~vb**uP9R zBDTqJAAmJwiy&ja(fUHyVl_jIDK=s=<$m8UJ7#uF6iK);mlhUa3rf6r>3COfXeTQ2 z`F^h&oBU~qfP<1J##Bi+d&eN9&+wgO|1SsW80%H&t^pc@`YwiFd7~RbdoZDHCI;4k zMxGSmgrZo6Ncvh}MhvEB9n_xSmGA%=xFy8ezrzzc^|N&lB%cK3!c}MqCX(Vm5sNyS zNMm3#UScF<>QfSYLm4&Hi;iGatYaM^X$?vC8(vUsSsOoQ@osg! zdGj+&IevwhZCQkCnXI1IZ&FepfHn&KOkvtbH&Jf;Iq{8fz!25PnQ1(wBctmzO^CQ= z+Mt8?*fjMq(pg7gw3^x~$L!NsqM3l4i`3XFG8FT&#y5mw_@h3pf@hs-crR~~T>d$x zBx?iYT#=5G?eTcP;u`-yH_};9?dP|6D-`#UVC_J_4o^W#xFPzqcZUe5dcg~^2PPKY zus|P=KrocZX|#PkN<8fa`oX}#4Ni-tMJdJ55x0- zj@Y{ESX7^wHb1E%CZ)JMI5VMbC=l{sv9AS{B|xRuI;*EQl-Ym;G>W(WrLguUJS|`F zGEP!)ua%%BE>NpgjYsh`koI+d3-E(fnz@8R=1d{#-GLR3QL&8-bs-`+f3Q)haFe*Q z3~6#Y*@lI&*!^{2nIaQFFtIo`IRjWdaC8m$QdSj!TIvOE-Rg9bO_6)Zfe@=k1TxsB zpH-LP1o@ zIu04|@1e)TgiOmXynxY2mRkIrYor_@lDo%!^L5G4JBiT){=Tr+Xtj(c7b?(GT_#95?f^coALtHM=8kpTQx!IQrW%5V!}Ck>p3(0j9L*~$oVe$A7tvLpmH{m!9u_4 zm<+^dzA_mxapHQpN6|N8h+>>=C=EzAM~XNdp}b&}7O|w#X+CIlF>LIN2j&SY;O^L- z;g01A$_wgSt(b!|ZWyU-1imSzvn4Z5$68ajh{3^hd?~mue%hFc*#XpAv)-4EUuDk! z1pe54#>WG|D3b&pc8CyV89}rL@3aGr8hfHIoLs5hCnau4o1d+^2QGmSTKAzO;-TwF z3ZT!IL{e5EsBSPb(O2oR)y6rM_9AkUpfCSE3nMY`cNuVJlxhdH9bvmMRVL@dq3^A~ zF=qzh&ycn@KZm;>KRT$-|2)3}n4bba_F8772-mNuU&IB#U`fgJ3!nrWuqq zaMhvvAwf^%Sac;zp(Sv#{HhgVR+6;}w@O>=%8E)n6IHN5KG8CGnUR%F&s|JIqB^?3{1@`gtTM6brH@@mO9pgYzYwGj`q-HyLY{q5JldfnFAuXaQ|tI$?b* z|GNt?-k74sR+2KnF-bG#{zlWo$OLt*U4z(q!C3F)-3U}87mBB_txv9GDI#6$`UD54^qVw$)YF)jyE5I>GD7-qZ z{DRWJndNt!Oahk`PKOJ<@3%4I^JKaFt~n1ZAO6Z%6bqyd=&{Jdj4ZF-`C<-}*v4UG zu&)-&bV`L_t*K_qzw!nU#we=qR}YGEBQH@+Psh>-9G~nWs5sBxbCpV>@uGYhj~9>{Bd{Z zb%uq}%S?C*av4FklW(`*wl}h)AU^#0s(kiEHv04#pZP4$l|S~!e(Sx+>HDy1}cI>p}W+X!`r2JOX6QlB`*;4ciVV_&?rpk;0b~@QE+wUMQ$|y~n zQjWW!it&{ZhXDxr?b?WWMM%QE7$^0YNJtRq<+`RCH^3um*j^AHFOmA__5N^JtD@xG z2|5A%o(Y|%0l0)`Kf_Gg(4!ym$EH^ACvJt@AgCVKHp~R%2{OS1az}^2Y~B=KtgqK} z3TSFU-vFyfL4HnpQLL=T6LAN)`!t`}3YB+e>zm!T7T$tUEc?a`mwUHpa@}HD5<(|A z;2kF`z-;KzTAEJ2E(!O(b^@SQDQ>|c&ya7zrOTT{8zQQ>rlO*0bcE)P#xGGOI4Tt0q0-%V;cn0KgY6r%vW6I;V=uS8vw0T)$UfT=xGPn7;jS4*4 z^9t#ClVOhs23ghpDi~xQG%&>91ZMkapHxrZPKAd7RZJYKsN9gPA6tKghJ89~+FOq> zs6wjuLvp3}nBL|$O=J}nq;=%t=RI@yY;YN81~}yC7{mXwuJigkf1mVSlvsn|iLtxC zIOx^hsmD1&*`@t4p8ZeoN=y)!8t;)CPO5?k%z>;d8O6u7{VE5tB+w}t+hz@F2jEz8 zy4CJ&M$L2i|B}KcEKG4uS!^w5n=)bBL*O_(lnN8pxT511^{Ae8omirh)R}5?8YI{! zz)!U@%Gh#OB(r2Vxt_&JSWj@S{i_{=rq16BVaHF zUZ>V$I&PqaS^>_^&PDuz+pE1427&2f-B9^j0E1IN#ilHGvHGUD zo?R0ZPnJ;z>#WP`Zy5N0SE+?-+wR_>G9@zjpb5+roYb|4w7j1P;|wr~Hdgcnirz@z zN&UVWH$KX`4D;3XO7A922<&IM*7F;rz)FydZD{+VO=FQVio2SG=t~!gpV&W*vTy5V z1ijYS^nuy+9wI*}sXgL5z<`Sb(xLCjdtYRCww#I6^mrho9PqSEES+x#^>Yd2J)J;c z_<DR>I zK(8yv3u@nDZ?T@~giAskz^fT=PKWfXfQwbHKA#I!?m}r4<~>BUje@5C9$_rv0buHF z_5|(oNyS!$7bGy{GwxfhQNoSLQd|J%%0urd?dv|&(bwtFO`BNWqc@S0vT z#u3QF6?4_he2;x1C#dX1?-f+!Fu%q~ce_N08^Ei()Tb@L7 zjbItpGQFc**6ArGL0Mpyey@QI2ijauj#$?0RBY+=tljx=bNOPTs<|xO#3M7JNza{C zV8e7FdlV302_%-QsXzP^ma?_bwU;A9#ex4ko&kb4S0g>@o43ENF#e~ zQFnLOKU}o>pm~qyoSl3e)N$g|rmJNzOHZ=eFI%)UABXd!+1bc@*&P<6tHNiOO3AaG zWQ5%UEPUb;XYYJp!+;#4w4JG!$8_|s9=|h8snxGM)Y<;j2_??~d=2B6-_|JbW49*M z1z^Ae5Sv62A=v{z(J>6&ulBkBcHl6rE`D44z$$!>~8$6Mwt|$14iN z{>kC}w?a+N(~eNBp&m?WmDCqhtuO^e{rZ7hG@`*=9qi6dH$}8U1Qw;Zmc7?Ix>cdN z=jclT5nu1mx@Vl`*2b`*Q=jIu3V)GBeuaBmKi#%{qI6sni6^Qg6&WdBWWlll?16@d zmDWoAI{({R7GAJjwz<|IE}$hQUx-0bu=)ihs}Ha)i*YEfFw%A4PH(g#4*859HWS?U zi(p^Ex^>^lAT{^?5gg(42x}k=Bq$bWa79SP|EWWJ&Iw7sQr|h#?b2X4dgfKSGdvY+ zN!l%yYTVb6rcgenaX1Z~nGekAg00_e+cVU{H!TtF1dM0HlE>bf8kKNPYAgUphNHRm z?U?u(XQ6+o`@4_hkU>gi(dhK)Ev-C0TGwBJG=xRssd_3qjRyH?(`i6XJs#$tUS8M$9>qr?x%q-^V_O7cTHUs3hm*jZdlX0u%_VC1XSp2A27T;gpw-YFcO zlgWvSUaRyAD0eS7fB(WF_LcI#=Rv7WdU&L z*D%BQPOULgNY8=+{PxSVYJ)=&7bA3b1Guhz`MG5t&z7oS1#8Iv}I@bx=T?oy(szu*6ECe`*g1|Ov2_RW5R zF_9XeK@y8F?5IhGOd+UGCce|MM%w6qyqQT&y<0QwGMmc;{;P22rA9WD`{vmU6@r)) zE;=SX5R5Dfgi1IZk>v;}R&0sl#K03)h2wcFDlskoLq@~e?S16CZRykzJnN>QYl}0k zgeCJ3!tBl)6nb!iv!t-&>605~kYQ8kydFKkBgPTRR8`>VZiWVMiw4W8&oR`EAauZs z{;eqnt9;9~a6uuT=Tj5O_PwpqHhbKAYgQH=rA$Vj?VCX@i>9 z=;YY&HQ(G+EL~Efyt3pDo+O1D53(xPp=Uc8J@3sbk}ZD#y?!&A3yz)CnDn#Q7aRKb z`WuDPM37T`JAp!4aCa$!44#z*A!NA-#S3@KR#vXvzPY?w_9K+00iBD4HQ(khN&|_p ztDi~C+1>wz(&Iv_@6BK+vmTNjqD_?8q2h{pkZ}xz9<>3G&8zp1v*0a) zkki>i33x_9TS3UPQ;t%Sh4j%D#SYJy>+Tu?6GjnM^zt%qiRgcueL9TcFUtvXvwNed zg6^JyGqu+mT!RF%*CoE^tsEV<=J)ERN^`3a@S5m46Jgw-|16jq%3wrNLE*Min9LttS1gEirF6j`$S z5o7z^++Rg97d;escoJW%@o^0XUPm6+@#_r+I~f+@f51EeDchv2sr*AuCI2YFI+z&7 zf{xc1P3Cx_5oFP)hBvPqttqaB$2bP(Pw3729z_hap&Fkdu&B@FhR0GFGg8&osbNTY z-T|!_Jc*%D#ka_}eG*bZV@|2J^3o7g#5D4cNGU+;c%7Hm8-*ZDa^WXO9LSkj0)6T5 zh{C0Fu{G@el5M9(16c;b0j{JBWaMw5L{)wNqA}ur*&6PHu1iZMc2_s403bWw0Z^AE zZR?&?c^cYnDZ=qE9U(D-nEnn$XK#`qlo2=OUSh%(<@OXKWwz;P^_n3q#dO3i!>{|^r_CU9QL zRFNpgkpTZ0mHiKZw^E~WpXNHl-GmBd(NiF_*wPQ|rwJ)>d zvkGSO3{bXynz@^Tv@MB5CexeX&Mm#GNRt6k3QPzJcr2%5U3M=nF_|aPo5|<(rDd3Tw4Q1c#0^Hpn-Lto$|tO*zTRR%3mt6u zipvwOAt6!KkUgRWK&JGVxv}A7`ML*?VK7n@3VnY zY>z;}>38*FsLq~Qc^WVq8+vut^Gl2)jHX+xaMHzWS*d5Olow|p?K z=W{1W#NLNX^n5YEDeu^8MvNJmugNV{d$j&3XNLR`WwPjnp(n4lBR+KtGs+x>{hhF6 zg~K3kYhld6U5}WU=5BSQC!ybv<)NKnck5kEP^I*}o0MCy^W3#A3Q=zH?I^?Z2BbA$ zPFSviA9%|gLZWS3^-!-)K2=R~C>XU8R=&u}*+j?_a@*!sbM<@G8eefa_FEZsW42NwdM-(@tpQ=!~csKCn|wz>(*>tUC5#Tu&~k+UHv z!M^IxPAy3X*s--8vv#MsfVO3U)^|IJ_iIV|L!gU`&-6>QZqJJSC1cQu;DOSMz+@CT zs&)UZ7S&U-4zOvmOF)q!6Cj7B!Qgi$#E(ZYfq}~|IG*wp8sWI4u)XW2Z)L|L<2`CE z&qk!xL_`gI6yY%8&~;j!x0mE^&&udq4YSV^2pfc|)0@z2T(P= zIzqC}B{9^nNqUV(y%mH9F(Bl1sF(!{ zb(a+!9#zGiS9aysdC_8&EKlc+(^IdFO@&y8@dP0^)Yq^c9h?U}B)9d9p9~qJjk<=3 z=J~RlIQ7#5bdGZP;+*^y&gsoskWIz!r+s71dru}Op^%FzT2&}mtFuW!&Xpja)tkQ@ zd%szZ^7jC!!|33i08fOTC zY$)|-q7I>WMSC-4I=?md!k$0S^yoUuJ`{*qdhs5c@JcwK75Ipm zZ2nf1#NF>CjJJWf>#z$znCd9>g0aocU*)Wt zi+e-^J>Yy@i9gpj?c3GwLVw&J`^x8#;-Q80 zYxZz-OZ$cA_7^*L1DJ$YS2>AY2pV^X-Z}gUiaMrwqwuWJg`Gl*X6S8j+@(O*wTiw^?g!WzcX{?W`w?4jQG5FnREK{AE)E-nsKFJ<>M&+Z~th_Ft##32N_nQMq zbUh0F^{^-ro7b$2@8JfjVLp+h!=aX_^4E+*=~)D0%rQ0w*&Xb_tb$vK4)f>Kb_@K- z#x;jE3hbun(7v(|N>m7Hc>}!!=V}jAW%de$bMM;}UU6GXG(@Wkuh`H8XxmvUQcn(L;O&z zUMkdg;CvxPStUp8MywxuxySNk4}N9;D533@q-DPX16U%V?t2-8M8>V8_)Vx^mSJkI zk|W)-*GCBWWbD$PpFRZN=aX9kK&eqyuI0Ay+SNdD+)&0nK?)PDQwRdBJ52knojn0q zJ5wqknK_MYo8>Q%dzUJuA<6M^v5macbZ1$}LT`TcMa7JotP*d6X1dK|L6aFJS+c9f zsW2G3Xbj>Yyg~9lQ-Nm6L!MX8~FY%Qw(0A^u*O=3RQ_aJo-O0I3t%{w2W8bB{@6V3* zMWT{03s+s--F<>y$1sHE9oebmykJn*DL4Bf5Fg}btSd6*}aEW zh8h#R8=G+s*!t?t75b46LeA;s<|9m;8Ujw5x2Q531fBGbSR>_#Jjo5>E)=ng(k76YC8K8r zN<%JZHBPL6eA4ZNkWZ<<;{HSQb`{7Pl!b~HhHb~H`gG3GJwa~lS0f?!D@@8VI{@&h zdm{i5Z@5`33@O%S-VuSWbMe>?6iU{nXLN(z|3%3O*Q^zlUifN#DDnZ!u_>{D$WoH* z(5!8X!{cRfG_taG8)p2o^v6A6czxKqXeBuB1>QxA#;UVs?#}|j8b9K=p`Wf4D1Lj> znUGsi-ROnJa&QXyxxH0CG+j%}g>0*iJ7}qE%tDhm(Yl3Gjft?GAU(KbVmyh7OhG$( z7TATkqE-5~@xA_=*B^aN0SH;rJ8C;EZX!6dOCNQ8$r858D4T9JIl)=(JZ^8lLq;ZX z!l@RP3E1TQ1t%_NqX-~D#VR~HLkiHKAlqTxHA8H|Wvrx5OOk$zn=1v6XWMbs#|@G^ zDkr657r3ZXZ^we-`R@EFkyd@gixLP6^B38d?}Lml=JI7~T>5T3qSmJFFya95K2`1y zW6rcw%V*Z|uI^^KvL=YE#d4l2!Gqb7Ly*+91I`?Vn)HAi%nPzFIT zbB*eC+awJs0^UYeC%YRXia&pKwt0I;Ol-$NPkA=L5|YrdLJ}_ks`gk!0IW!Rhdmo@;4M=HKKL|DrSP#frC zukOTv_4-}s6}a6|7UNZEqXgBdJaPAk!(bQrsP@rh`Z|Y@d}dyMY(-uVH|GKGSkNYe zmMVf@wa40}l*J=VKuwr0d{5Ox)=PjKB{Vz0#l%roG#_&qVXahU>FT==BHN3tdb1pD|InPIZ*TNnX4@Hk`n$s%|z?* zfCh|_=Rv!T#UjOo-WptlsB42+0HuXMZY9)055{1@S#rmI>tN}%&4su|D^H(ijs`fs zm7!3TM`-NuiNRYDa{s&nbgwSjV^+yJe)&Gn0kuf1^2=Ke*jW-6_b! zDA2@4L$Byi@YU_34F^~U=Qrs~&7H_bG4kGaBD6-ZZq1!cJZS~_;6@3}K-Iq}H@QJJ zPKBW+b1VtRKH!IYdPiH0#9c{ocGp5X+>~iZPlW-e5A1bI?9)9cz|%H zB{#q}F^&`*4Xa}eIod~0cC(GO2G1BCPfQrQ;kgrh1*AbLYzH-d&Yxuq8q+AO@1u5B zzwOvL(F|OMm^I$G#@}~7#c{x1esh78E`%J+$0e>W>b-N|JVvQgFCmRCZ+E^41?k#7 z3)cN$CK?rq*{kLQm}KPVIduL^n7H=cvL$(brTcCbdj)$P-_9&dT&xfYBJ+N^^Nn|S zYcFTc2wq1@s9Ity@lKN5ZN1)YiWFlz>FtX&q{wVBplT ztrCz{+Yj?gcQ}Uy3+f=VXef-u?jo>Lp$AAIjZ_aiF zRYkT*w{s0X{iHXAX*IW~Ri*en_t(VEOqnI0XidJ`WHDHh*POveOpw9pOS?GX+N1Z$ zCWyt5E>;f9A&Al2x$`FBQVY$3tg5B~XW_$&AJY6B!F4&z>&sD5-{GQ^)h-?mxV;^q zgY=)1CLLlk*a8&Rvc7%gu1es7CMjhI z4i8Os`<@}-rVeg#p@duHWSW>D$8iw~y~()+)_m6RmLX25kqJjkebSBPx0-iouIj`w z9bPYnySLL@Z5;at%Hl_rWT=U0MOR8`+GT!}6!|I`C2%Yoy>wlwJy*35oF(hD(Jmh- zE&_Of=s(nxhUXZo#BiI2PP{&KhWY#vnnqlP9*tV1*nPZ@l+d?4Ly%yMmy26`0c_EcGZ3fFo6IQeQVekve6-p~=4Fs%PQ+Z4l00ln!C11jT?{?xi}@q< zcDN3J7&LXucXeRqLlvm_V*76sEW*Uy@{J%yFEZqgVdR|>>NECNINhOXlG)7*^nC^8 z(Ty3@i(GS}#jJdwi<0DY4|Cc+O)uRKmxCPN3|C^%u(umrCPQ-vE8b3Sj*4B88)-1H zky%+Sh*rmk5?8kIqEUZn-~l=9Jpqw$arca~5>0#nBLIn)h(f5*&u!d zC#bSS&ub-wIW@U$C|y-eM#aSC zAOHh}a0Z!zVmlK;|9Vf*2)4}a%U)5Uw6A+=>WR=YL5`Z2)uU7HuJZ5)iV;P0*(~dg z{tu(5I~klC1b?0OpTA$#^es=0ubqg$&35-TE^heHjsKb)o+$?^*2Jx&aWAGnvi*H% z3mxTH-@PltUMMso*0qJ}A#}5qn*|i_=2$v6z1>;-#R#|7krQLncQuosy8+xi$gy|^ zMN>@Ghie`lS_V>e{wrK5DNJV1a1UjH zBYbfpZT!W}^6};Dz?vsa-m!nVA%tocK2Fa@2T+odEj4bRTp)4%vXyvy`};^8jwuRR4p#?ulJzrZ!5dD^UK2PY+$@b`vq zFj67Sd&H<#rrwLbMIH}{9Nq~YqB;Z2Q2F?p1eJ7N+-(jiqCb5w3L>%XhBh+vT*msxVy(5eu(q z<|**|jH504@}vgJW{ryV<`3Wpg{kGJz>E-pw9us_G~v5Hv8eix{DCk$f24UucL9DM zFmZTH2$6@hcNMu`+1c@m#p#c^di|sXYhs=I8MVJ9?gzLLIO9|A6-b{_ODH0j%AJtA z0VGk7ReSh0=9#;;@lt97?p9enX=t=)+>^jG1XC-XNIjaAV8BPz{x*|7(By4#^_dWc ztm?LC;keg&M$j5_B1>X;&z?JDGR{iT3{{EfQs!;i{1F@kj{N9n_3-W{r0DcRH#j0l zWP6G_;3ha8c>Kte?Uu(YIcc1>n1i-WX_EgAOeHIM&{PosA8;{px1DETy`F3dSEmO3 z?2^;^hXR(b$?8;oj~73y3{w=enRiV!Qt?Ma@N4llqd_x~RE>EcwN^c#Y7dCyQB5 z*1nl&>xdw(198xF(#OoF5#JZZT9~FVbRJ$-LGV~2vA7;G7m*%XzXYj43}0J;@Kuj7 z4gwryHQHg=OVQwzk2Dp7x$pBcQerRAJ6(!TbMCyMPb>%L975nM!DBJ6VfvlCh3Y1% z#Ks&}C6!g1bRx~-&{&hx9j=w1Qm&bBanCSTPB)hAu#X+ltx`hGhZ`sb4AN2dc^$+0 zQPhG#T2sUZ8CTJBPa9foOx>xK*jv4qfR#(g?4&Yi0Sttp@?Gw#YP=WfiTP3eH!$qa@L26#(g_+N8%|T2)tH zecW>kW>}<*PWcfA9g9dvzx7J&gqZu6i=5zvl=k9^-yTWvJueNi@K?SCL;7D5Ze<6i z?!HH)Id4JY`>+-&e4m%byLxoL6P=E2Qw3>cv&0+r@ABq-t00Koa}D`1t7glA zAf6U6s)e7w>BY#Q35GEUja(7DpEQ3x}e*K3TJxQ zN_izD+m~7A;?};~0jsej(N9h_B@@tHxe=!(5c_c#hM~sE_f0T#Y*{id@f7%a?RtIr z4FNQ_WQh+ya5cXeVeX1%N~YCWnd>nUe#Q}1BR?g+o=pM)UA9vSlI$YKfT`)vI-i3M zuwe@Z8iBeqAnTi3jAWyNWxgseLo`b+GF93yxc($NwB{YA61oqR-Y}>>DAq2?>neaw zv|9kE0XeicObuM<3>nLIoS?R#*6tm=Y5`>gH9tAJDF$WEg8gmkGxF#F+H!HpUHN|4 zh~zmY4=pHb4Wc;7X|3*~`O8nweL6)_`-8+YP7o}oZP`bQ&jJUuE(ZzSn2*i5MS(tyUSA>2mONlZ z`sH!X5-D_8J#VpF&53!5H4yjjUE1>AlKl7-e`z&qAT84kgu{$JZR&~xtsZW>JkRp- z`z5LVnvjw#z^N@-y26YLWXm$bHzR=t0B2}89@hmE6XW!#&hU`B4*i@y#=KPdr`ds1 zU>4}w(<^*%W+D7NtZN`6BcCtl57@ILfRV-=J-YffAqYk4)$Q8uaT{Q;pT;aG0RWxH zs~5N-^=%FH%CIP@WCDG_0@f#!#ceQ;b=qPv`TwKg@+f$|iN=b0s3;~BO-q(D%x}vh z?T&q)G}Yg=H2U4a;nCJ{t#4?f;43wp6ep_mG5qJLQE9&@UWfT-NMm1mYYkEI(Vai) z-8-0ESm62nq^0c&Qo6F~2)XF1b8ZaojvE*LWy6Y6gvHb$epDh$ z_lli)dCIIF+^Y8Z(VP!+>Ko)AqkTz6UT4ayZ~&`uaqb4K~qmK@#;g`Q#J3(QFxeP^ZP zMAnDL>)WZiPE9@muTlHNg{;R3Uj}_2fwAW$`ScqG#~Vk82*FRp> zX@44?kaPz~rC{d&jB(Pd37yC$ivzFB6TsOHg>`W@AdL%yAz?3Qg<_RclGPxx^m};J zuB!imbV=$i9{TW;O_Y#27SL*Pux*_at%Mtrv!sg92U)<99n2wAUJ=uYV=YHnkxb7) z`rcbSveSv4nWjFjO+Agng#R*zMUsA|j~}FUJ*{*e+ICaTc*$K0LnrHGNV&uh5piHZ zhsJcZr##Bt1APk9W`>eKNnU;{-ia2Qt_o^#5WWx#%Oq9fwvoqC0`tcqPK1{|Bm3Z; z177cwwg~!iG&FW|WI_itf8sYL|JU+6i+KadUcFT%>pUv8*)5NC;oejT_XENq5m2oz zeVo%hV}-6xrh=8@6&hJAjrl zW{8W7jE@yvI+#*h&O+q*dg+pMlO7Sg|3=~NHKCz@8a5PRUrwC$jXhvvH}+9CqO#SPfW|1CA_Q2(#84I zN;T?~FhUXylxoM+NJAoH#>bA`kmQ8Opq)8ZRHW8#Kj-YaRPVcCpZ*3Zoz7LMd4ZG* z7>I7&nIwlF8z?yk+$W->U#yH1i;_~KR#1MTPqp;Au)Q_+e$(Pv`&o}qLGL9%Uz}tj zQU7({r#RC2v#@sbW()-A2qRHh6+K{VA6MBeE!tJtlDF+B6VmjPo)bp*rfo_(0axakTHosOSUY`V*(LX} z3yGW93hnwoiBZ~W4 zv*1zVL3;h{{r2aFwN;v1p&_SLW-tOCfA7!AgH=|q;)0;w0@I3yr#v%-lFzSO1>|s7 z&?W25xqQ<*h0wgrT`XM{`l31{Jd#LRJJVt6hj%3>voeTFsXgOzQ7EgeA3;4c9Ty?8Y^nzFB@o_7n2A&54g04uVnr^*_jY=?h_2^X zN9V}n$6fDWZHa&!isx_lq2R_8yM7QSHzO0u6+a{--?}5}mhzB5$AX*X5H7szC(Lc0 zuTv{nLi=P!a&v65wwlTz40^=LOhVrHKOuKrGrE-)eitP`#f%J+W>!G^@IyB-0uXZy zBcMBjgW6U4ZzJ`N@atFJ}#!Gsqc`3M_d;(NL zo;ObX??kVL3mB6#=;)&mBOqq8lHh!bON?~fC(mr}QJ~WhhSRZncg+h(IzNbmiHhUa z5h*iy53ms7?^#i{$2*IxT4Xru@#EO2_xE?7;-Z6Z3v zZ28ekZ2KgTUQ>JWMV5RA=H_KiT<*Mhpg}56r0%f|g$<$1(40z02H64XHF?p!j-MD+ z6WqF<4{c@U>VEH4Ch^2c6cO^PU*{2ae3QY@H`8GziyL$Z?RU0B7Yx+GjsMbrW6qJZ zUq?wX^1(O`#+U1y3=c5?qQiqC%BTK*#f3@+oO;J1N9NcmN5YmnTJh2lLIa{F2?Fm7Q>k2N;gTG7ZS^ z9i#WhJQl8ppc)i5M68YdZ~bO`)DeL|nDE@nN#0jcP{b(6TzPlUB>@6CN&Jcp8$r)A z;u}6vo|h*k%tT58Mx=xGf?C{X61eTa@l!sUI|bwWS;;GkM|4!>{oP6H-FMMAzsAp! z`<|OAA+^|ZZvu+Vpd9NX%7)Ae&P!`Wb#&dzXdhp0R|?=!&o}(J2oCsW_yi2y=6`UY zOq#*c41nZYEqcsrdnmE6809dNXZzzL9b~P#(mcX4`5;Vp_nV%j1x_)51_YS&KkVv7 zjThH+;$?{Wa6l)0?|Fj{U6M14<5ubz^+|f#H>oKPpoo*ESL6Y=Vv5-xw&!ntm5wp_ zsn_zx(g7sp)66m~5r2{GyQpKAwG7f=lnDO7sx!}zs)hq2^QD@j_wpBmjZ;0q@1SA66wnFhhQ_u|FA2i|KM(vg`~PP8?o<}XoxtQUkS-DC`@V`jXF2mf>`ugs%;vr z1`kLRn1kQ>?$6GnuSzMK-o}LF=U?0t_oD##VH^!6P?chdNc238HhS@Adzt-S|ss2vIwKrMXZ`r214qr>eV#qQSs1pIy9&<{RZvW7pr!Y zh4hL|X+DQ?Niz|Fyh_ev!R$(47dcI)`9X_iO0^@>Zy_BN5TT)6Fk6gM7e4wSH1l0TLxxaQ^mPyECT=-@*^td zYW8E>3nHzDs%|ll{H*&l4i-ek$6}6_shF=5ewcB46iZ<2sgB_NT=GFZG{>!RiLT_X zUTNHAGvJiJrzf7>bBBfP9iJOY`)2gG%DpQ6Ml!oj&JxmHEz&QG0~2hLO>uf~HX*Zj z(41r*RMSA4eRkwFceQ4ADIzl)S2*0a-S&VKI9JX(#ap>Sjx})`!Bq&OkqDAt=yi## zk5T7k$8j3L)(8>hDr&}5z{dr~a$MhyjqRILs*rIQf^Oa^*@4N9lT2)2kHW!LLuk20 zHT-_BnchnZ_A#9`fFK{UV$;nTM)|EJBm_4T;$1w00WdH(@vaEK5ibTiUx@etR&zqSB-g(w*)e*WOTca&xgwYcBv`vae0&2mVKMtmu~ zJM7`7R35M;B*P@9Dkdpe+Ozx70fTeh>EHUl?~N4e0IMH@RI7)}A-VC78j$a8lL1Ry zk3fn6i~oodPSpZTo!bWfN{8D6oO9tZOAhSp4mW@>8;W{DR^t>MJ*qao+51!Q->9ne z5W>2_iEKkio1PymorQeq;kmKyJ(&YW*g0QWz;$8#8fHIhu-^#~lU6O~p`Gp|U9aD7 zWYQY0(07BnE%Zk$c4rwPZoK+Z6*HKY0fQjqp)>T}k!5bx>EWiSDWPXkn@tjr9UMCR zli@tbst1;WK*I;j8*J1xsQSduZReg1Q3lGFF7_d5YV0MLu^>{$^7RxAcBK$Xi8O|Q znPw0NT^v3cI5!132r0gdl)W!mp{-yi?BvaQ(UFM@rM>?F(BR40!Ig)PyN!_RYXwHn zFoHXf2;V;+yQWj~*IHqi3917R7 zelnNU%){>-6oQq3W(nAchk{UolQaD6)YN#` z4oDe_f{~Ek64Y;x(SXVKIoCk&FiJsSBSAeir}{>1DsS1~iO?7PM_8|i(RG}mKS~3b zT8CtJ7rR-l6lYj0?|IVS?L~=k+*}kS4jUwq#gL7B22ua|(zEEJEx=wnPti!Ds;i@n zoKjZ1N8Q|GElbl10LU5`7=brajWB{GbjaFYTUN+nv;vDg>W>XsD;jAl! zr%YQ~eE(OIWJIfvd+2NHs;x+jxL&zd|K3ehOE5QBR&qF(_}w2A>tju0k$2&26xuL? z^qJrMh!eVmrkPm8^q(Dgy^j8@$EmbL6g1!9E3TNF#8&drx+=|C;2qB6sfrTmjI%G2 zaT_V)2Xx!lY{_xn5j7e$*-Dn`unpmx2Q@jdc@_BM&`sv*e@>$%Cr#kS8trz3}`@&=Kq zTP`%A&b-(^OLoTo5F$uSNsyJTj#c#W%ih2&a!+=5|LQ4&%I?;V- zOdfU6j2DQ4F+?q<4ITyL6WoDnnxcjC0|rWp@_`veO{V<^O`;5^{0Av*h^rexc?msc zheQa`eKratw}JXiE~L3ppUPCF2mr)$WxMvztV&W^CR%-_^r>EB| z9Hde5Xto6U={mIGYPEIY&@Ks_f$c8NHCxMWDZ}PFu_2sk(zk<1}j*wA`fpC zfUuTcu=l-JRq)>eyRz}mjxy93wMql+7r*xW>^g|CCZBh^V68yf6B0ist#3l28nkfv zGFAY_urtught|>fuAcn*@bt3;*S)6lIg4_{d#Ukkm)8+p=}p_tG};S3KLHd6R?Z_*+C zhQ?7jy<^R&)Ie6}eh1EeFjl5*=&z=cn@C1;eD>d9r)Q6J*YiVq*qQ8oE=X(}yaG0$ z3G2M2-<|<3=ls!~qLjI4v_o@)5%I79%P!C8n(qK(r9MjPjMLf#0C-ay0+x<4*6S|EONi%*eA30VKoowpO3*|0)LdF)87`6tM5D!VE5GMlcT zS(Ielq`-=UL}{=FJt9#?2c8m<3=Lo4MIV{d0S>VcSP_&oR1C#h{WZxtlXd7Dcu*PSr{@Jr{N(pC`Su*eJ=9c?9!+1}pfn zw3bO8bEk|j%zlh1Ukp1{s}s>3-!}^MyX!p2O)*yb+PdhOMgjn%{v5_9LBs`WZ zwA`W7!f7mw31QwN`k3n5Ah~V!*I23g@vW(3JrL*bR$}s*tj-BX_?g;TR~^>uPM<}M zl>y|{%eZY-;rHw)aT3Ii6o5dDU1HQ+P6D(}hmwHZ77YK7rvm01H?kw+@R&-rD8BJ@ zs8$2UFzeGfaPs&RD|Gbw<;JKf z;D2*B$J9p^-pPtfo`%9k2W>Asyb=$r7I$e6ILStsNz*~=0q9{tJmVNyI=DqK2=qlg z%xAr+Dg*CiG8bzK&xl7x!c6p=q`$nuWgwl~uOP&uNFM81dzhW)O_GodNKVGbt^IYd>{~D`q_3H-epNG}NNDYcgOUw(M zRexHmx=rDvb;YmZzJ!c^<~sa+ML86$4IAPAPpD*k2+w?dntZmS%kRCdvoN*VVT5UhtFCA5RV;B!>}R%__^w%G%KC{~z^h_=N2 zJ1UB?E}Bq=xviWBh$C(63X|(xhw8~-?<3X$%F-M^Aj$Jz~j;^?i;{zYGk&Fm!+{}au0uz5Jz z^jEm2Cwbx&wgZ~pS%(eMD5c!;YKIdS8@wS0g*idY-DDruU*0dXtP}DAZ5u|m#LR`F z`N4YqB@GT@&|a96%@EKy$6~x(dkyAkbX^bINX_vPK~2G|r96iz>52qPITb3s8{)$w zSfNmj2PEReOlIp(geAB&!)YKw)z6bG`g|D|43{b(L;DkVF+*bfEOw-^3=2ekXP((o z8OO0jty1GN9Dn(!6Mn#F2F%tSjR4@ndXJ2-()koefF#B?16beKe4fOB zjaMztAm<`HvGKnxih5PT4iTPgi#%WGVO68eoVCa4w5B3fktharLpnz?K2{jGFna6t z9}DN?8{b@ESa@N}kVwfhi*3UF9Kc3a>Q-*u;}9Z>ZNzE)I9Pme7YZC0IyTs$d!M08 z1y79S*RuH)39}A$zi1$cMHwVMBV2w(78#t{>%|P!zV1IcqT_$H>{3au9nidT*(n-FGp@96~cNd!$c|h3`%;Hxszee=3_r$$f<*s#5AjdSYC58zVr0G! zuRuN~-R#nZBCOaDRIM9V2S>*1T#JI!0jD(Z z#88`Kp28WNYbVwq$d8_5Y|*tM{;89xRgW{tg_Ar}r5@5j_iy=gxRxR?v}@z@<7Ara zCe$O>UinV7>#0Aqr>uk77<*V49yUd)t@$+C={LHS4gEB82gWM{C7gU#-9=5rQn|i# zQJC&Am)LdYyanAV1pvU_oUT5h;38tqCPTfDJ9^zMO4Q?0kJ8UyBMQ(k=tr$y!j}mK zvlefI1m#%68|zT*g?5XSvy-TbED%PYL!^6mPR=l!({*X!6yg4%Ln5_11_OR9mGY;V zX;U&366C&t;`58Erw8N1_bARS&Qr3B6@A5wx)WfjgRm7B0Sh$C;n0*B>FW_P^{8|* z1WbJey3a3DuPiWpuMyLQuR!O&IPT2+%3Rg78`bk-wrxCwD`Yd?7yHsTQqwpkY()Gm zN<B7d5WAqTi_FXb$3>F)ypX=9KsRgnI0h2fJ`RX=Nah zU$M2{x#k@-P`A;1A{B6$5>au?wVyAstpMb!vpnf79(=%NE-xW?@(?FJSgo?ly&cGy zBC_)g?DCT%p}{_Cs5;ePhPJiw(7_$sEYb_|fi_N+g%!Z5c)8uHxXubKwMq-aPD(lr zvE3MGBUodUU#Y$BT@RYTP!0Tp2f8dL_umN{!J2M!)y~B=YI=24IAuec~rl=q3!#ED+!A-g}vZ6S0tS@x@p}qJ!2RuUgMDuY8-S*Z>-YvW31#voIzCdYJ=9q%{Cx!5lTQLxevS_{V@fnVq5EW_LW) z`9-4#oe~rV%x>e-JM0`MV&tzrsRxBdE&g|cbURu=PZ@hckzp*)fpUgER;T;k_219uvaI1ME>| zujP!$`YN0ZKlg#dD1$}61b=m_PBcyKCWtr=JG_upgWmttX)yg{zjQh?<{?#kRMxGa zlDnF_;Ii4?swW~Df84xIa(%gTTx9&CxkFU|Z!9mpA&ES7<1#!V=2azu(HZic6WQB# z0U=L%hg9bB)4R1DRbBV!rxwQ`AcG^<1Yho_ZoN}+#ce6bKW&xPnKzG|C@F0H8^Ng! zc<(wP%U(fDv3e~V;p}Y8#1e8JX59d7ChWJ>qxb`>F}iMCI1J^% z^#Wg_{#k)NH)}oK;GrVP5pS+88Df%a;i>9A8idnNUUimPHcWY&w3040dSF;b)cAiC zeQsCx?J;7{NF%(G{yhC8Uaryq>|j@620KHF~MwXm8Pk6XFtO3`8Sd|R=b*CC5+ zV_?X2o^B6FeL!?_W}9z|R4S;fK8MVMw(ynSsKVv95u08rRY7yT-eN+em8FWcD);z@ zr}u(GIqtqZ>|J>SdoGV|%#%|fqA8Gp{eGP5qJLGFwKgWgJ~F%0%zJ}}$4&AZPw#o& zWbHIngYzkgBab|rlUOpP!O5Wu+{+m+%RbN99uHn z!3ajHQjxr+SY00&BcptuU-y-3 zN>v~?MS?X_rrb5nC>)f%E{-IA#P>rfcqT-=K3wR&MR|8a@c^R)J`^Wy@u2FPR(sMLhC48 zjS4%EkZIx(nYJ|GU9OREsG-8%S<9hxBOP+yXwkYZ*)mYfA2s(2O0(7D*U)~)F=&H` zbYp62C61~`r^FG}@IPB(e(QBKhaS||4tC<-(!EV+1|WYESV6}_B)`N6jiQ{7x5!BN zoyYx2e7upXQWoc@F>O&p^|pXStAR*E{sVQoO=bAc2Oo*y{FtS&C0_j}SY{?uKA?yc zlif1tF^2qNFc6v+^xmE_>g0r+h);6$M#^}O(xppoxh(RB!A&4Mz@osl^KdZ3XY+^( zkT~hqsetbBopB;pxf`UZCcuiqEGg=FjwHvI#V1=?59&M^t{c~xe@SEj>>rCjf~G#) z^jj!?HZdFat}HFn?xF?Yjw(pcNXGEeU=nr7;g9i~y4*-96)rTP22fe!^EvOoPsV%t zSqsQYIe98n+HJ{HU>&|Df$=-dJsZl0X1hLQZ_6EJt1!jo$*8%uaYRit7%LAog;mi+ z^GSz@**M>(H~~eT%K|~)7<^Z;t+MwEr18OpHe<}Zt_krxBcNFE@n{&R>%GT*9^>BV z{jcJ&D_3jeeP|3Wy`Wv7J-%7_gt*!2O0nM6%rH`cR(NPTbpeMY6>HDFy?5T z-0~kAqr%no!m0sJykHV_(Rs2B_OBFvS&gWdl@ko;Y1*Dxpvon7T754hLxE^D8Oe#2-COZk5cH;s4r#z(?%*T`|xm@=D3G@tVgl!8;wnim^mts(u_NP zwtWk3r$lH3)?n~wLPxu;WgMfsMv0z#QmiWB&vJ8ef+f$K`Z&t_)FtwB+141zFOTzY zl(m77>koh*LVw**u;c5pr=iGj0svuI(KH}L%gZDAQ`8tfZPIp5FzK+f$N*t25c(AL zqdqRrXHUo`BkCJ!rh2SzbuM)9$MO5RN%Le|Wc(g*bzQ({uIk^Nt|Hf$G?j;(`^i)c z6KlCwS~s-ldvVy&7P?4+G>rIu%1!_liul=V&O>P06qCmRmL;L*R3)bA-a;_eYmsER zJtPYvxIA4M}93}ZN`Ai8DgPlay_R*`)vEmAcPrI?(2Ageb;Nhj3QJ3I|sm=I7 zf=lD};Ry4bK5FXIjZT9QTQYa*#wwl4_4M$TW35xHVtk~sc2@qc3t5Gjcw+Y;$g+w6 z|33i0n(0R@1h`q4t1zNf@u2fi+LoXE-^(*AN=qX`;F4UqtOLQ?zxwvR-oy7r=&0H7eMqt z59;8@VX2N?IEj>oKi^PuS>TL3;!6=1py$?b_O5#kyB+m&A zKYL1XBdu@y_2Vlp2lOH-!kw67C|X`5pO`_wd%$guDL?3LD`Y08r8g&{e}lzK2`P}7 zk96ASt1do-nt)oRStQ*ic_=&1@D?2xw6slfvb+%Z#sBQ6_55{+e87|zL@0ecIn3W* zIDkdfQ7G0I2=ATP->l)PymAlDl%D9p%_wwJ|6iWi>yT*KF@7oQV@05#B#XWu1*^Jez1FO(>tp?~;bNhgJvyCwDg zFE#b=bOryAIA3tsa=5FoJ|j#MtUL`YlPM>n^cJ@G$mZ zt(01YM2LJwK3bNi1GdrdKcyhLCFA^8V3t48h;B8Z>hdHM^a(Ep7X!8pwTG(L9D`ks zGDgC)adb3AZ+e9zE&-sjYdKt2 z=DVLt4ssDUWKZ5@N;_B5(_e8vJPsWD=x9TykF&7L{YXZBn(MYv2T4=DNK~Sb+p*C`&JMo{^KR!P%Qshlj{1)Q_}70)OPJDeco* z7iREKJ)cd^%;Q463YVF|%eEqGnsyd%u{L%Zq4ep79;ceSJ=q0ORYsju1}~NJvdXrI z8;hDdSUfw&+fM6lBeS0I=`y7?E;CtDV`z-NPwQ~Pqfq|$bVs>|5xn4o*^s&|rTDj6 z`r!_4Mjmc^Q6bzjoCDUX9~RR9cr#@dN)+*0eG_bY6j@#*LwUJ9Vi={!tan z%3zHV^Jk}LTp_Gg8O9{(d%tNR`f%QrRG}D~V>CME?Wl23hequMeCwgW7}__v3D7Lzj8Zg)aiKj=sHjtup0# z4Vk@QcvskhqecH!)S&`oz!2vv+TG(UF}oiZ;1iUeY6d&u2k zN!-b2@4i6Q-6GO&Ny}~VyZqH0Ol7gJm8Wv7FaIZGANHjJHWN>(YAl;v$`jzugD|C% zqq7_Q48k%CXR|i9xf+L4CLdQ|Jhe(wp~SXwhsZg^BeS1HASNN&r6^pmerP#LdG32R zr(8WJXGz}Ke-U~-Is|3Q^i2J{`LEUnDkC-*f=~?6CMPwmA~056%KO!yjWX-iba8lV zJ7Unep5A8JTJ?_3`oL5lZElf$2DMBLyUIC8s}%kf%XQMwZLr{a=1Mh-z1}n&_vf9r z-7CRZ2OTdqDq?)~7eEhg)g;tTwp$UF{xL)=1ML;oY>h9vn=Q!vbM-Fzv%8L~hN#X% z_IzL9P%jlB@qg={ook~0bu*8=I00T)N&5fQ=C~r)W%v4Hu6pWu889HMqt@oN1{c0D!}9$g<=O_9#d)I!j)xS?U%$MSh?U!UX- zcMLg?p(ybDqu(M|H)J4LjN3>uVZ^Fi9`X{DeZmjwdJH8u+dSoak-?_*r{>K899}1BC3TqD+6L9K<4%`ziufnQwgNrYmuv<@zV2L@ zK1RS&8giW(+cPa&696FZc5qO$IUxvKkYO)oCI>w}DGP*;M0&<+Ckm*sVQd%zLa6f# zqj~767~Am<(QpOJr(W1WGR(XGU8rFk0(IG>m=(H_FI1_iwZzSdrF;}DqN6PjG&7#H znPYe!sR{^p^t{UHcPm+Sz#SAt3nDXfQ74JZcSzRAtOZqs-FFhu0grj_PWcXG#r-VDEv%L5@Ya*Q&UGBbF>c^cc>8d(nt^ItdS!o zniU>znS-=4la|m2=ekIf)i3RRnoqx%LEdwp<=cg?8AlHk20U6X4BRWS9j}@om){yzZDkh8!9*C!)M$x)>QfV z>LBMjN-$mL5mAPW=wdLnV>~8k#S2bkJCj7af_?e!xh7ls^XrMKkk2S@`m%OV2$|NB zvjo>=umWIWyBhyEqwsotY<2nE>?drnPOTipElTeSwMfU-Xi5Rl+$wzH@4Q(l0}%Oj zR#^q?1xHlxsQ|`)aO{u?0BMPTyLsNUU7$Vwm4A%5$B-Qh#% zWw<0kN}gc{2#i~vn)?W}qkTjoHuL5d4ki5%(SQmrnFM#PM9-3sAR1Gn@mrL^mg zo4orN;N$NUIU!H@=GH+4)0(-nJKdRG)~bXXH`&0d>*98Ru)!10{{(U(+F6J%5o%w@ z2K(R-1Pt*K7hPz$)^o-$hy=M6m_)kN@QLzy6?Wd{=A3fkj2yP(tF?2b1^Pe_KTyR= z!P4@d_kkpVRLFT!zWJ<>j;mO`1>^V7BW#vs zvfB}jd;czH;;f>V7CkqtiLtdeOE87^6g#n@R0|p0P>--W+i6Mwf3~TTl8vPqF+FIg zkCC{^pt*VOIpY&b`JZ3fNvSD`5#|-+qaFxbWyZ{eaXIy36oM7xI;PLSP;uY1dT~ZD zH?n#?dJR?V8(rYk(~)J-?RztkoLD%A^;c7Yd~eUSE~GO)fb>w6k~Z5Tr!FAf6xWq9 z-2aJHkpL$%Xq83ir0TS5@yv7k(rqu9&^wyOP(P+ikUZf-{WTgZV#@1AmCNz|fH(6`<_mMx^pYR}k|5 zk>%VPIv`?}F04JXq)5bB?|ui3GTL|3euQuVnii^)iq@lHl#>9UV4c7gKq1)!mpQ#+ zWM#-{NEps+uLhMh#EUS9?eXmFaz|7EZum4{o&?#CLqFNqy%#8XHBp+Vr->5=!EE-D z=`DwkJ~G~UW87nK>KD*Y8EGB@E;?-SIab=oGx?LrNPWRttsnr%@AXM7;dwFe-p8 zp$up4g3(G`rMX@>SM`8faN#>@p8|%7xAr0bwp?qoHdeROh}e8dVU2-;NWowzl`6_w z9QiVfDoxYul!M#&6jCR4n!5im6e{2ep9FC@)VO($xI^4%~3qVm$^gW%mpK#XGU(>5nK>k(YUss|~qhOs}L z0`&Y)FG%7oyGCTldaXn~eOzdjB7kL>GQ|c_&Dxe`^Sl8S&Z*0;K}w5OXaDZA$^HFX z{?w?Um9eW9te!4}DB9h*LfY%r+N^0&I&PzPeXe(WBecL#s(yL7v zsK0des)7y_z$~Ix0d-x%moal=gWIuXQbm&oR`yXJq=ylfz+7; z_W4GxV;!XwPw_Vdz#;eFn*qkB@3}R$8i!ZinXF8Xh@y?u7qE?rL}Y35Y?|KK89nDn zBM%LwG?v?pm?8PS;5I@&F5dw=(?cJbcWr&kWsZuHHeD0J^6?I?3w1{UbTZawQj4P> zdH<1L|F$U0rhaxUlAshoA{Nnhb<)8Jeb>gaTzS*g5SV}jZLc~h9P4$=sqZ|@XR7d!KM^dJ`5Wxd zX3Ms|#cjVcqqfcYrz{=RMzo>H^L|}?Ev=&ie+c3L?~v!Qz5Z^&7}F-Dk$+xf^;{%t zyU~H+V0f=f%xS{}!LXwM0S!qqI9DN|8MCmua;S#w_AhoxJ*mNT{2^Islp3U=FhILw zey8wMKcjyLR}92kwABBl3}*v<4K%y80~R?|Nl823)oWprw4tYc9)c^g!)cfNgpUBB zAE@2GWk-Y9WF>7+n8OF{XMPR8FO4CVsNS4~jaMLnqr&=0Er=|IkeDd;h@-~2cT?t1n73tv0Ug}|zU5?EI= zp9#&|LE#WJPV#NIx4`QDypWDbW1QFe|0a+zSLwz>)(&jbv%icY2{K;4qwLHlyjn@u zL)(dvw0Q0Yuda4c z*8o3v*2k+qzA~Dgw(Zyx-N(B%q2T!QP8uZWIl&gB4=m+t2*kVwpO|EAR>32~L*>t6j=!u{2&s-LRjOK$qP z7O`Gjee3qL_^8DTe+Nl;EB5@1$C=YR zSlTPiCH4n2fn~JZ#YK;^tw;njmP#wssoXg{2hZZ90I89N<#YO)AeIP7;W~!IJHj+T zytTTNGlT3PCErdkrpr~i3MGZm8|F5U0CneD4u#=vXE9<@m(&I}I=f-?k79~tFciim zqyMLyc7zlIeE9%u{Cc@mmBI;mw?NpNS0r+={^CPk zjPF{IYKg}?O_Zf4`aj+F@1*_<@=KRYFT8T_E<8HU0yN8*{hDTGBlumKx!f-fqib%W$*>!TtaO|!I@(@SvZVOvNaq`cH1_z(EdYcOu~00N zz%PIkrgXNK)ma=H4FD$I0eIFLiGKD$jtJ&jPf8!Q?8)A=YA^lFNlv+~8UMnA_4fv4 zFTDg`Tm2L;EYsz$QB_&;!YVj{t>~%3AEm{(i>Y}4R+lIaL^1SPVC}8470sfUL`2(( z(#F~o8;GyK?hwZsm&ZQ6LG)JCk^xMcGJcIBE4^tuqndWkS3pgj9Xh9e%5&9`3Wa)i zHH_5PA~LFa?vSWXs|HnBbJ+@dAZ)u+u{?JB8|;LUI_iCrj~?P} zCW{QBnO3}KMI5JZDQN;)3%;9O=`pRX99H9MSA$VrGJYl5=4w{Tk86cSSB-1Rphw=5 zphId}iN0QCzc}OI4knB(m3u1ndVTYL(SjY3S%tsj%W&67r-oR_*v2~#P@5R&t`*=K zuCiPQi}9J@c7*V#K#n?2<@ljYiYqs&{o?V^Gy|7$%j%^)Ozgl|w&QuswCbw6lWvZS@H8bL{QM;}CS6l<%|g@k8?DHJ$7I zClw3z+f*QZON%T#V0+41n>JY~(;ft28gdV@_LKHvONR}#v@uSPQERHVKyQI*oERi6 zL!yjPtl}a}+7l(-=2)3&MPm zIXiEUD~!)Bdt(SSr+bwTp!xBYZV(EQYCKGodE`{44R9onO%F@fFXndsmHiY*g0HPRb6kh4Pf%2sw^_Mm-)@lI(Ne$=YlZ?akSO6g^>*S@oPxc zuZr1|{q=5-Bf*;D?Bh4!0=P|XidC{lk-op_+LT|@h&=R8-5}yse`PNNTgIqG-)WL} zQTFwkKMRjD+qoAAX?b2QvIGbwpTCYgG?T%K3gNU$gedv7Blz7EmrguML{hX2h5FG} zifC%HN;$m}AFo)2Wz{=vZR3%#^A85HwHTmQ5zKPq6Sx9CkR>Tip2Tr3hu?=7^dal2 z#E02&O&#ZdN0`sGe@05)(D47Nxz)k1mQd6!SG{&bB3t1*ra3y5+*>qs_G2p#EW0!K zpeWiq!i-I;Htx%~Zjee^ep-!_$k7E)g&&!up zOCWB8_47@!%I|x2ssT$J7snLjwfa!EhoXlALDh-@KCPmMXbEy9{VW`YwOw7cJ7CFf z)5bOo0}nneq*>>y+TN?|ioNiNC3==eAHzo_x#QE*-0x@r z_ZjV^8@v?RUS;J-FXq5RmwJuqgJx6yF22Vzb+Bc5H?82*>q^W;k6RU&CW?-HQ)(~E zAG%<%@6omJh<_sMH{$zfK&T;%az7Sj>*MQ^kUv50ybd{CgrG2|jTS2#+{dCRJgGB9 zW5T$NG`=&Ws93PUtXVl+&xd&CUUV4j`zGyEYN)=BI86njEdH9lse!^VW%Yj^TyZ(6zH8vnX=(wrV8Rom)Da5LB z^x@%LZ-)SsZkxw zdM0rc?>?B?Rg=-ukD)i3FV~SyYA}p{JT#0D^=THuz+_c5irnXH*`fK9_>q~)ZJN*- zJO97V&|TCF%?KQm;oxqdlAxJ!${ zcgN)?2x4?thdfA}t0BM&(7;AmvrQYr>#Q?f#3fK2KJ@GuSApfbw7P-#!}9`H4@p`g zRJU$#Ys)X<&)H!wWS^HBuAa^L=3CpO!xl9ggh?hWZmkj2JG?HpU#j(G&Su`4YD4rL{UzQ)gl|R-Vba3M!C69YB`^w?GZOwm=IclTeYBrUdjSKEwUYux*Z{zK^7raftyq(C$Wz+z9pA|sud zUJ$WQakSgIWAf{M6B@I=iZ)a=*NE%2qF*P|%2)L85{`M~H77v053#@2n<(M^j29aA z5<$e^k{%bE?B)@5FAL#Tj)0MdmDi^<*L_%1e+JsSsX;*MGL*-M&;Ct&lEi` zALT!7ol3Yxty%7CjchMbIGJ%G+wbC?5VlgAm>16W2i?6y;M)nlZzP<0g;h`mz4P;d z@mRena;$|Gaou2b_ECObI>cjM`?A%H(_d_DpEv9yxDz=)+(ic(xOL##IROaWlc#DxM9+LI3wC?s? z!8-@p6%6wE%X;m{OR(o~ysa&A#tGfJY3!W~{p6!r5U62ylpyb-SRMaG)5L z2$!jjS)Xo9SM#Eg&-wM_odIrexq5H}#@qoyo3}p$5}C%$=)==Y*xus)JP9vI9;#hH za#>jQ8gPE@UyxM5jE9g>_(wTKoD!n>`l4J6%#IyyimbLvjZuu%wwR{12;aAj_8JSo z0B2G?#QTYG&rnS)SOjiSY--uEXF3ht>#o?N*fr|4ZE$r3AeGw~cr?{30aZ)PzfZ4* zKR=4~@E8W!NqL(S5-yJn_082ybB%#UnBFEp1{8vTw(R{1xOXph2spAdRK5GX@^`{H zZy&jC=S`SyM{V!MV#htxs>@NT$sk)Ob4s3hz>CLu6^0xET11eG zz}~t&%wjz(?J{Y?FhI8raewvMR)|@{&jp~!W|s^3#f@x_?|c;;u3p*6i| z8BoOl&GOzN)lTzwGieJ5|AlNTf+LvGCO>FL=rI~Yb!hO`>t|4FZx6)xa>f0ARL^XI zRR}&=ah;Tig#=!PA9PJuz(iKOLtmjziC~pZ8&Ry?I29fRv;c7X9MayG(528!G3d&o z?g#QCX1mXFDu&~dax?3x+)2_UWHJW>-~V^GxSV6F#_Ud*NIu6!N(d15_ zR@fHt;F;0K1uZ{xqs%9zvH_L$?mMDGSbL<^Ett4mWcc&8vc6=0K2rN`zZsLdWRR^x zPg{YBI!qmHikX))#iR9GRQ9U}mR}mD@H|GCeCfLu!}pI?l552Mvm3aUxS@K>JcxtB z#ulkHQqzsel%i3+)T=I1w`*f2?Gp6jjKbSo2fODeR_;*L9GSA4ixJu&^Mb%1XH2nf4B#nIIPEU*g%}6*tm`-c0{4V7R2}s^j(>r2M-5;jgdAPLgfk1L(tp3tAV}LAk`>egzH~v?8YA{b? zK4T(NkrXVVa5j6qs|5v)&E?i@v3H>-NxzDvMNUC?n^WDznuyh*tJW;B8%5N?DBPqd zDmkCkJ2Q+u42B#4jg5$diJ8UC{2XxhfFhv2mtpkx7P3&Y;}4~Z3!15#>^NeTB!qUy zV2#;~UF6AC2279H>iIuC27C21>A*aZ+@LUx)~ibyY-zt8J|ka5AEgEuvTS{=bYS&r z0y$IglhjTP&}EVwk66J3woy4qM!sT8#$ymYu`ampA9JMNX*ad2za~B=o#7rsj9QzY z-b*=N{{Xmf>SyKWTheB@--~e6tcb#}gZMXuj-RrjP#+!T)73OMb|T{{jt*PJs#JxS z84_Go<8zB*o5XXYa6&I%g2-i2%Ytd8LIXhRMc8k$q4&=~hnlkA6Mzaks0vwya>XXg zVD>p*9vW^?tSFx{91)m9vC_FNQ!ooGk%DNm?c#)OHg?#j@DhPprAhcn4tj~aAwSA6 z4!0DZ={lNWlgqkLh|PBf6k)$63wifa+P&wEGQ_P!*&29?3|DvE;a7PZn=dsR)9FP5 zN5`@@wMgXSQ;D6*%#XuZkq~7(-U@w&Z%5182BXBL)DA|yKT+)8RSWrlSq?V;)K>jp z+?+p@A^q;kC_6F7p{S9ep^MLa z^IGE!y}FLYvxsR*uI6R{H6A2|?LfD9YAalh`{tatTA0Z9C`xCASXz+aCvAig9R5*-Gzo+Ue_9NRf5irIz>u zV4hyaTLJ>zFl8obohXP0B6)*#F)30KF%A1UIUBKBYDqr2>%*ytp{ACf&07nRZk|iG zm&Ka>z0aSI*C{BDzz9i^Z?RCoh&X>NMi5QJ5O+fR28(K`tbja!-oV;L(a5XepduL8 zNEcs#JbL`8f~qV2sd)XdQdmR}gr93NdwlHi8?w=1M5k1JN*`Ywm+rJ@?EbQ6(xU1o zp}l#G?&X08lxcOp7SRmOybaKeb66F`=r;bqq{u%6C&9(x0M9Lj&SZY!ip(7XlEu}? z$~4$2z-!&4l%5{r@N~Cs#JJG_)=B2Ke|n)9c7x0G!9%wd4Q;wuq8``I)~@`a&!z)q z=J(PzU$82eYJ_Gmcv|4H_2q%=A5LBw-6qlbOsQO5DY8H6{p(FisAoSAVMK)psU=#R zNb&zZF71Sh^5qor{#l`LZlQ-N%-b9$abbcwcB+uA=v;JS43wC=L?9uDj)xi-YxRt- zPgB(3A3!(tfS8yAAWc~~4@qu1h2z*kt#RtozVkzQ^$%7ENo8jO3pN*jZA3>R4=@;$t%Vin2E=46G4FMja=Q;cbme84eKqoPJ0E-j9#vqCqn zPAjAe`kL2ObGoiMy^#+|EtK`}RFgu_H2w*vb_WUcIXv_Wc2&|r_)Ftw48^BQ+(Jvq zSHGW4r)amO(HA5CwOl)r?5QLmt9kqy*_i>B_+hp%V~lb_(lK6SAQMVfk~dt!Ud%ZvL?_blO+7n$MGTv%ii6}53&Yx+iM&$@v^jlPsQCDv>C#;c53&C9PC$E9^A z(h1%&>o;ZX+2|Pc_Twn8To;|1zMgtbjTk(B2-Bsl%HMc32x8gB9m`(Bo!=`$HYwIt z(e;Y(%Qf-7x^)W*r5sC z>tTP6!W5Wv3OdtBge1X+&SXUp<$-v$Vti-Co^H}(t9kcJz5Dv@bS<$oJLltK?W;yy zqq!BPSGFYrI0b4)by(BO7WJfBNF9vba`6B*By_#%u?=?=eu;9eVcCh7u9%v`c z>|3P6fHik@>U-h0;qk>+(~vLyxvyyz`K9pT4PjShY2fjLXmvr1CB|@&Y^lksc?gS-W9wv0>?b1(U`J;0AnuCuqBuI39yeF zJl(ohbFZ9g$P~ z$o7Rtbtj;hYMW4Ci}PhBxMa*2o8UQDrUbL{53VsJ;7vrsdF`n1tv>BoKvX!eKzOMm z|CjdO`FG3|V|q-FJ#M6n{BCokt0*M{T>hJL1=yS6sTenQyplIqC;|d4I{NIVE$QDC zaOi(+k>$`YAi-d4*MQe-UcYxd?882IUeb$1U7HMn%!vfUO5OSpA<~lMf8?zkTyvN! z1(j*s7~w^!*$$0`Ce|`nZV}%J5_9H5Ok^B>1%CTEcJ9Wbrh;e{W11okbT3q#RK9<8 z1RgM5q-e=%vkJ@s?eL((?_MRDt?c=$R@CQluj;iIk{`pQ^b8!Y{OE!@y#Vgo`hIN; z?RSm5BaF6ON)ONN&a6LovHpnf`4BFYyoWpoYT{I2ASgV0C@HAxNP4 zOVF(r#$_+1^QSv9s7cw_d@DWRE-;NO0mWO}0nKC|GB<_002 zg!{3P!Z*~^N++D4P$NSong>wI=5*SBf3sc_Wl)W|DU66@4yrRcta6^=m#6`I30n-I zkn}a~dP*fTXR_tMne!dsqQB^d3W{W!c`jD$U)4*&IT8oe&e|Jo30S1hzOe&K!kjD5 z#p4t&w3?l@Zz`X1z)2Qiu|uWO)<)}J=!&Xz`kAcbs{#7l(Yb!nmTCtO!{hk%zGcd4Ln~Pg4Ge*n1**Cu&hC)!D zTXu7VEzZhr(>BMhlt2vu=4xO@saL#v=Rhh2R|RQrc*7)$y3us99J21PO>yf&eW^cDw=$=yVOW}7_1v;_6i;Ne3Tz$_c>t!nTk*sS zWG+{ z)5M;+XNcJmU}e#Pb~=z(!~q<9l@GX9@sa5zA}=a%74HzZH$~MRDT?dEv_}NcWgkE8 zf*c;KBEMkKpA95I0`CcIU;84(irrU@h^QMdjYln?PuR?VTYCR9D`O;e?jXGN(u`6pvVx&)WLR>o^+Yc@ z+7H|tZmXFCxdK>S?lsIv*WcEXmUIml{{B~lMCR5i(Sm;8*n9tf&S!C5)yr+oYc>OS zbmsC<|Jc^Ph1T|DDC;1#X=I<=xT8k8se^?DnKUXl7pTWC8MemoMY@;CAKs{tm(3}O zMZIlfknNkC)7#UxV=qm^TK*#Xk_P7crBfUI_zSu(lGtIN&m8_v%O;jZKjJOJvwsbO%4p zN~$73l^C2(h-*(HHQt^f(dEY;gly_5_9wrFH z4RkiR7b+(Zigi{(iB zq?|@jDiPCFQl4kL=UaU~?AvlKV68R#T$_)315efwjqqQwF766PCnLe2XFmC)3Bxp$ zjqKO-Bh5~)_*B*_6tN?v*36BuaxR7t$f`Q2Z=Fm9VU|g%tHASIyPgViixCaE%(#FY z8!s93*QVX!Bp_ualR3}izNo=3EPS4tWiZTb1nM3C)0g`8lE0ZW0vaR99(8~p zgq)eT0c%r8;LqWYWU0VeCjcJ-oTVR#YQi63-m+QiZ%wqjz0t6mJ2&%O#B)1N(-wA+ zWlwl3nP7C4b6Jg}t*rB6-eh(B(ezKMDXcZ+hP;=UuvQWoVlpT)du+dnuSC|RtatFZ z400mWn}_!#e>4;+xr6atF??S49aqw*i=(>IQeu0sr^qwjPyps+3r`A4HZKI=G_~FT zAz-+pa&Sm|_#-m61!dA(C9UW}^8LyZo<$KV_CA+6uBF(FdS<&IrI!IXE#Z^0mU#`g zL>i)hx^}VJ1*Kc@GTjpiFM(IEPAe>7Gzl!b>z~{<(TGfqXe_STYZ*CP&#Khx^)T5p?m=G~-k zvT1%AA7WS!3Qr^-kX{2O6o5c5Lhw_AF}&S#odIngBNJY~7@B>l&@X3UUYXBFW)>_n zlYWucVjZ!_|DvM4?yj!H0Ar_|>l{VfjC41s_Q-Grck+x;SM3dC4~@ToLy~KpvGZeS z4b;w(97F- zEW_?&9D8;Fz96vv0m)7d6X1RDDKcQ5x}Oq#i0{LojCcW&k?UM)4^kT;e}ob z2m{nWHub}*5h*jM$8YjMqZ~40Lo48pQSS9S4zw&Rf!yRX7(z;dA~~fn$<8675wORK zSa(p;7McAlq_T?sX$`aI%rLY;A<7ZkGTz=;P5Yq<5C%+sz$f?b{-qKJ_km{Vw%A2P zz5H1DsG#LUkXT)djKLq)>^ZHadwn~g0pTXPwj^V*@#{J4OB?nf0@oerAFNX)Wwbf_ z4V$Z{AEemI5vTTPcQm8j)MYBAk3^k67(Zj6v*1r94INWy5=QxFIN?dcTgBN6(b!z3 zA=J*HiRO_KYOdR2Q&Vjjkk!JL8n}qq;Y@$RIBi&YlNQ?kVH~m`d`Fq$M>1OM;Ir++BpATq&a+$ zZX-_rMxS^$!V2=x1OR?OxKng7Ojy=Tcx>s%_g3r;WD8@1A20KlZFbAnm|l(3VQKw) z*Uyub3-{T|Kt6h>*H$bOg~9T%{e1YR8pW&po9K(h1B4sMifFGNEs}D5->Hr!Lc!m0 zJu)vbbuzc}%dCXvl*)kidAh{$Kn{Gc`-`++?XV_`Fp5^U)8x(P2Z?YH<1w^8hD;J^&ssZ2?DQCQl6q>}cAelEf=LKKAE5-x)tgXvF~l$asE{1Buxz8e+|8uUC{x@y3Cv8hvGYlz8U{k>wRBDY%WdIT zA4-Wb`}3M9J#;JaHN0JrV|%!HdPRloCepq&&S*dP&?L{7KOl*9EOsMw6Yr`abC1gHpTpIFTQ-5+P-_b&Uh( zaZ@ylYFafwVl^qA^qc+_^E&a#p8cNmvN!({@sEeN*oewjnmF&khvM!#V<*x#W{m}6 zP7;Y4pGI5^MdF<0qojFs84`{#(_qs|mgVNu6E7u zc(v`h*!{(t#{YhRU*d)ae65^bOgvCT_&G_Ba1q+(XR-CBT(FY|SdAXqRHbi81JO5- zLRyj2P?^KKR#Y;Y)Oe+VUaZ5fx7Jbp*WppMB#`^B2iK*e6Aj~?;@%bDLeNyjS1v0> zz99c}ZkTE7MK&QjE*Ix%5SyX=rV~)a&eKQF62?LRktQknRn3HE86QLKqbRb1Zv@`^ zS#9~0qPh{lCl7!`A;)~w+yWP$IcDA=fYkYb`a`{*$TUAXhwrJ$m&kVA^ub+#%()AX z*Zhix2Y$#qO)`?!$8}7f_2&nR=|eYRnr%%+*6I{Ft^(>3KX=>`krii{!+KA@gft3| zZ5UUg=(gqzlW*Iw&;uzeFi8 zv3AVMEOzTY@i#ZPQC+#{3V1cd15gM5u7=AEz=X@zL;%|xm#zFtuUkCUylulhL}t3y z;+>Lr&O5IMc|qmp%6W><99-&Sd(zfC5N{;}?0lUKPt$P(@D+(49!4?3^Jm?iV_#8n zdzpeUDll{0kEjf-kOqCCoiuzX+y4N+JJdXa);L3H_9R8!7RU4;eWuWwvThXo0sdkP zp{|@Dc8x%5x7^wN}HH@mOMBm`WrV*vz*#KQo^BjEyKh+=!nO&x)gdAyh%aAsl!+R0m}1FC_ZqUTta>J@eEB_qO`{z|JC3n{%kE*bd-LoeH(1{ zYAn!r@givaJAOpz?3IlZ0l{eU1~}6F#$SD$DrMwM&SK1CFSn2rudn`~nu+mQ8a<&) zM8)!{7vYh|R}0gVXG#$J*kuDT*Sll#u9OTb9zvfWD0H59fqe7URnR@XMyG4KPfYL_ zJu)D}B&hIqkzi4$u<@6{->G3V$~-KRzmR9W2~R1%k>}nxzX=wF=0LAN#A=Z>k6dmw z%qr=y!h7LXdd9kuo_xf`8o?dIm*OxQUa(*2Y#(q5=02fw1N%j$px_(g6`P%3kS!+y z0AM||qAkdwB*`gXFSu48N2vA*FIj{-9VkozAHZ(?z6+qJAL})7#E9j=lGUaaS>0}1 zFVvsrwsK(4NTR}bsN@bOZPHZS^1k{QO@m5?VVNULJw)uHc{|mw8<#Ki%OgPP3xXin zh3;x*)L>?WBMv&3T0150Yo4UBst%Ti_nh%>b)B+@ysR_fTo>NO{ueOSqK>Hu=te<( z$*^vR@pT>c=LgOq$-*pXe|UMoE~&e>lZ6(JZEO{i*DE7t*(pdii!)Zp>{nQ>^JhK1 zPanj~ic&n*qzLvEvn#*)2uZWee~&iu%ad_5m$Vh(MT_tl`3uZH2|%8T(EP|*kR2$K z5%lt0a%Lv!)@MnDK_>wp#Ap0H{xH*d;F2VlipD3<1&pqG+f5?Du$StHwruqu#~|U?j2!?jg|h969eK^ zyqa&l+Mu?@;g%A=3m#^E3*rY|zE0S7N3=C==Pt!Ovq`;~#>euVLH!g5U`^&NL-cSV zvNgcAhA;*$Ws~lnIrdtSH4WOL{Uy%8*>bmpA<~x>Kpg#YO{YJNg495X=pgw!*Z&ik z$M1#Arfbn02J9Zgi)6QdWS0jQ#uX%jeNtmKTCCOeRx*UgVLD~p{A4g zy-N5B+=BQzZFB~o%=_ChH>9*zusO1@} z9c1N#?j}}ju)|7;N`LMplAyD7-wpT(b9K(-`=3xAE!?e0-pDsUFP&vCV!lH){?Psa z4TI#T{HCD#w;e(SkMoQ!?n4`>25w+}&blWU?mf%D(Sif$y%!p+xJVbRjF8 zd*?`@(#Z6OZJUgL_kb6E6J86@>}?(h;pT%1T^U^b96h__05PSovkQEvG{O?Cr;W8Fgc&S!VDWx=&`ENFL6TT5%%e|KA^cn25qVS_ ziHm>^h+HN}W|bMnrk3?hZ)v4BGf6U#pPS7v>Z51gUAC^jE-WOIkc!ffoL?>^)fF(U z)vQv!<;Z~q1Wv(J9K8h45>OCaXu;xu4dh>G=ZVby2ucd6_xW(sYT3ZDj~aVG*(Bu5 zT6E5^n^1570zm!0g%BIHYuZ(--)$YAx<)t|s3)fQbOJ0HA^(T(VRq&`macYXj~T;< zRLP^(xV?4Vy2rf&E2DD{c-<_RyWUWjvlyeTsT{soWJGj>M*jGr6w1ed5z*mf&5^1G zytKY3(e6~$pXhjV71ekRP}8M2QBBs0>P$ET;dN$#c+2<%RQa@WzMu@qep)RS21^tB zv6I35Ncl7B5Ugo<`a0>j;T^`!$zN9MNuQuT9aCytxdl>Xh8Bd`6%zyoMyG0_Qm*c{ zOv_Q4*I^FH(eZfdT4|x2{6NE7@N+1k#*2N6*UN|@k|gN>SMyVhg!VqdSn2xJDd2~r z@_Nm6P!y?2o*2{;2p%b;SPEpVY;07g>YP2=?(_R2z zrqham`0>3D)u+EIUWse=ywqCQqn0$7Cb$k0gEkEYLwZZB*80c4`EzB4Qk{O-u#QHqyAc4*0RWO;`*TII0RDFX|J6X^ zJO1w)wqc~$cITN@SofntjJbjf(UiIlCwF>d{(^j@`b57AB-2Lu%Z7*F79e&j2s3g5 z3$3vQ0u5H)wj6tHQ~X=s7*W|0NGk4)r)I@i*yw_&`2`cTmbmS_nu<`&&p^xwAxInx zqT6&GJys~cr+u&NQgvof+D){uQ#K{g-f74P9Y5@thv>X^Mn^a^UTiwTA!C+yOojuN zb@lCcI;E1UNYU?=Rt$9FrB_kEra_B-VPB$Xs9{g`bkxRGk0S#ijw1KQvgUI_Ian@X;CEpW7>`d zNR>7xyF??H4hB5^v;MY7{Q!O^6^YFUEQEFuwq48VC(*XHbuqZ*wniVx@L^##Z1Dn! zjW(Ln_^6P%KI-SUZXUX4WE^W|26D54ArLZ_W$r7FT;H|-Ob(!RoA(c;o01xb5%HF-qP@%e-^XxC<9-_7{r{wr%8w%=Hm-lVkz zj?%DUxFYU6buE0aZ2Dcz9#f+uo6JaOp4l-{q9fH%0vs|3j>|esd9#E6mR&_u-5?5 zRB(-RR@x@a=$PzHVlq;aAr|2}N-8VfWX3r0gqVW0cE0i=Vy$D9@H%D7N9o2?t-(@m z#J+IeZ&8E{Jr&+m&Rfb|HXS;H)2l(W#bKoadd5;u;;aTV6-WffuPe-i@?+12i=6 zS>#s7b=AQ8PR-{2`-F4*(kCnHqc2*ElwDARE>jqvW59y*~VJ4kKlxWXovB6UH$y^GSK{ka?t~WI5l18i{>|U z!o%3-n7V~MsesFN3xHWH7h8UdaD}q2v{BG)>C`hX?TPI{!``HCG(s^C1ANaUbnAJ#r)o5&vi9 zBKD|9~a}Vr^s1H}W^2+S-OenVB}OJ_!b5 zcVTPD*){UIKB#T(qS!p{9hGC(-vzYiD$_d?PDjsdUV z2gX{Y9^!taVFChJb<}niPbJn)W|?MkJ?LBI59U@OtHvIMvg|?MR;5f3O7KT;t$T^$ zt1HTjs9!x3%R*019hJM8v=06Zh_NM)aQiX0l66u8z|!M-yUOK|vvMdRV1K+u(3`c= zZw*G84W|I&C&>TgMjKn!3`<7qW|>E$GM4~5A2fiN@vs>QZwkMgdb=Y#tJph%Q*+19 z$T?M|nMZbx;q3xD@!a-0mgIOV($8#I(2zYiF8nOaNE5DApH$7b;M(|1$PYYp7cp?X zS26V5<^^myEPGT)1pF#B~5?8g#x#LuyNyOHLZdD=0Y4xtUf0!7b@c?8wLP- zk9Se?x=0h#eB+J;_k8{W#C={Ob1uZ9*m&BDm|qhm8GXt=(L8nH7;haJwiyvQu7UMF z2$8Jvvi_)6t~L-NEqN57=TG``ua5Y!f4GHOU@#x4BQdxQRVm%@y$$33@XxkLW|%xx z0(uQ#)I;4>@F8NeYTlcbh52yfU&}n(%lm{hR4a#2YP-0}C0=m{g8=+C${x~9+z+Up zV;0tg=2F|?5uPvyV;y)*CE>ym_|mR%knXXwTkFu)*r*`rkh+M}IabiaLbUcybI8&_ zX#awfyP%JIzXxi~T_LrtJ)3)DN+CZxyk9g5r*8H@D3$t=U=n4p;mtYT&10M27=x0{ zu-mHVo3qMqeV3;_M2aVSL0lDV=K60+PCFCr}5+w!yTGh{>V@`X22=r7MG1kpesSqAgyW2Kw1TxJFTrCNeS zuJs1tn2Ii$Le)glMhU3Y$As>5HRD@qo2Ba#(w2I}YA+!x*Gk)zJwQ!6F zDqmrp%dGv?b2Xr)R#PnnB61UjkG>x|`kIX;N7XQwS$ zhqCUUrOf_w_KHic*$dFbfK|qbjRMvIHwZb+%LwX1Ki01AK`z3y5EnT;dL9`eJQlYC zl|@CZ$E6yVLo)X<0H}fV0Hqlr#n~;LWHs&`=S4!G69TDUb=k?x`s$ zQ#>s~^cx(8E3-hfcjBIFNC@Wyuh{@3OVv{UGi6f-nJG~MA4V_#CGJ(GtN7BbK4-Bn zm`Y@4X@JfW=Y=}rW@+xtlGG^GT-BbmNjuxM?LCGhRWB*bW7QRr+(Ld64*OBfm3h4T zfBMOiCt<<`*{^;w-&2pt9=(xlZu`wyFNIi)!pm4G?(!;bJaZ)QMY5k{%&PQk?~a+2 zvdIC26Wn2%lMUsU(ZS^~*c`Y9E(Rn8Rx>c>7dF&5{l7NIvAo-%P9`?~H@C4o?uMuy zlwMDuk@{7iL~aU|lWc|LpD|3Iq;#fuW_-d4HD=X(VS*Z&7iWBd#eR5CAoBC|I=WuM zN5)bCRs{hHEredf7LTo}1>#8~2ppWVgQYSuW&gG!7UUp7iEPL|R{z}IMrDC#9tmMg zS|mHuBL)WcjK~orfEBD7Jse8fkiqgnGx3qB!yVpRL-yk&4VIYjxrqT{pk`LlnOQzq zhTp%Y$+HwNfs&-R@{s!Rj4MTakzkefu6yJ-jrRqvl?@n{N zA-VD+tc#v}^fYt1Q|6UvNPU9fPM$(htQ7-A-i z&apO)3RM#D88sYj+XS9-AM01Ts|N%q1i_1+G!IFoVvbiE4)oa{<#$MdkFERuMXa#S zxnoEzIf8|WgJDQ=K!k5g467?22_qV^RN>+17S_heB%k5Ta9)+n4-~GpYcGw6|KPCN z9*I>UXZgL7$0Sadt5K_@Eq@EX^zBI2?0o2L;4P$hU>vLTcuGr(OR9ON8pmj+K;FuIrQ$#eG1cU zlh&9y>KMpre2;_w`U3Io@p)B3+oPp9rPoEo^nQ$qgfQ+fho>KD>!YZ zE>9Y2`=v*Z8kj;y8LOmmeWh7vdMuMeI=+5?dBgvS*nT$`Eu?*U|GcwZ{bxC_peu$? zu^ZEGmGN?WnMEJ zbfUMSDag%Ci$;=uDR3j}(1vf5QHNpvTneF#>rHLrvIXMihxiS1@NubYfmtGT=TG)R zXGsOZ9}pRnem6xNV6<|YsJ__CW{AGSDwswcMp=`RS}4)Zb^!FnvnKk{$ucJbDZTN6 z2SO&2sWg;3A*=LpZk^up;$a#nrl7HMFJ1Q=q3s+~It0D!b4+|101z?F+bP>eJ_vB> z#_IptSoV&NhStn}$R+sMlLm9H2_vws(Y;^>bEY+IYdQv3i;T=5N72m}EB(0_4=P>n zViRrNo*oCjv%vlx@a~`NQJwi#!N5}W#nt%YLO}JBH`j&gc}dGwS^d(M`6Pcfng4l0 z>Yv3wCqecskYs`MY%gaU4DUSZ(zqH6U(ISkX;VC&>#gyCt(KUC8bfe0hJZG7)u68oUpaB9MQ+)IIS`tiZVsmjXcy> zm=?YiSu}mpWVgtxrWV%b?oe`6n72G_jzoZN#X2fGBMkw4kv;y3sb;)y6#bV0h=kH@ z5=ftEYbPo7V!l3on`b0ilmImNGD#kYCs^b;Y{hUm$YiIZuFO=kmlt7GxF`$eri?Kx34J?l)47*HlWB{x?5LBjrb80L#E@CFRwX^sc}=VPMVQLws!q`ll~8bXIy|o z0y7pkK}A>GHJ}&JhUR*d$Shr++?t5(aF80G1rwq7^$F+L;$c$Tpb}C*DdE>&f0f~d zh-q$~(Q4axW|z)gU?@C++5$HmetqnawOFU7XZAP5V5h%YB)ZGBN3X@9ZgkjYC`pPP zRCHx6C`ofP=~jE1ARt#9Ex#PfImME%A{mEo6$}gxyRsClr(W*GU=UB;rw(wUi+nqM z13A$V@zWq*xZY3vF4tp!C{Pu08KR$7fT))8Yy(`vhG%Zc%&*5pepgCxPj}&N9-93v zcmRp5M8*m`@UfvnUYmT^g3@9`PCd^rLgS^& z!{xcVAua|;pDohgKNN9cJl=-`AasB6Y08=tfwsN>=oJA$EC$_IZk0IBI?V;g=P zTOf^$PyhYeDtWjWRWJ*zzPlx zo5h{DZUb*4^(#$>NC&&D|2*~|N*il1Lm0$%`i=q>tiiN+xwd~w-9!VF6KN{$DWxqn z>I^aNE}65zHf{0`)i+k2KNST=|=eFIX^Fwj?JC9}O+l0Aejk+gXqwww%C0YB)778pzb1XnOvp zHpG_f84PXgUB}C+n_qW^xhVUS7lXgGDR zffK}JUJWP{`-Y}1iHd8lyf%s~YoxMdhY6@Ky^d(^Z7Ns^hfcakbvAkpCPSd3f#&zp zz^=OUa>1;R(10_5Pvck~W12#!hh6#50a=IT#Wp(2a7pDfJ+sx{s`k(jr2PGy-24#& zsOYz&5SF|VI{l!-5VeAI0d>IBJIm-?&Ag!bq{!Y(*EE;%H&pVtI*zO9MUd#9%X5L- zp@goFS+{k!qTduNxCt@^@X-vb%x=w&6oqg$^l(PqRwZr019b8l3!k^I_x2VW)pWH~WCGH$ z>&ZbLDeEbi+$8ydY-6DZ*$HqAyc`i(!8~! z;ELMLonYP>7b3b5c;DaGxs~#Z*iofxH^-NDO=61nl}TarqB<9@{1ij1{M3q(=gA$1 zN3?1YudAsgG@@OP;puNSLpMO{AFRFePVDc&S{{HUFCWG;hXpyi{_=m=Y&?MGp&OhXvf!W z=G!F-Y{Y1+JrReNzr8{?CUae8^na0l4#N}6kwHsN$wLZ5K&nHlf(;+tZj=feT>OSC z*JqB7`sZrEar^=#nW2&uU>rERUC8-N?VB}4C~+G1^V9w z>sXAHMt-SRU`DQ>9MuX4?J(AVBU@=C2vv`J`?z4yV@EE0Ch7`6<1Yi^CJoX_3^5nM zj340gxRY46Bof>?sv-B>&rGp_EMgOPcRN6vFbFQ<7si)~0zC@e)p5rdET=E&20*DU zW70hdzzJpqZp-y8;tdh5^Rs%GcHD1=S1uJ`hyrOj;)xR4Q=q- zz^^otA3%2`U38qp`cI6!3%(OOc_nkHWc4(7G07xJZ>+5@bd!-_(wyd||Ln*qrxo-uoT??oUobkV<2O`b$B~2eVC!?OfkR*h7^D%#=~|*w zsmZl3$7|ATZ}tLqoNAQW@ST|i^F7g6-|Qr2Uh$$=h6A@|BGTr6yh;v=K){vLr}!3G zU%QN`({0~UWm$A#sdQch$eIr!7;dH!)ytDN@E*AIKSlMyBe?@$HPpYD8mY`BleCk- zlXD(fp`6Gz*KK7@ZcY;$@S6{DGlUZ(ibJn)H9=#djogA2yc-H}`DRw&3H|1LLIO1w z4F+;u2;P^ANYp~jxDejRNo>8tB+=W6JY<*PCtjrDOq zZ#J+a(^ygp3;Rn3$GxKXmYpxps=O}l>`LCte2?)tFdW%Pb1k!@PQWo>MFi$Sn^WXM zVzs4bF=0&gG1WiR=U3KF`n;%kC~&ez^(!f{!<950oK3A6)sDIKN|`bxl#;2w*4fKb zju@#YGw$TvURMLy!O-7EbMN|oy|9M9j=6uV484m*WD%^Wt88e^+ zD4hDFz8@iw-4gg+PtQ;|^aYS)a=MNt-PX)NI~4_Snv3yh6hdmINZTOMwXCSbkWEa9 z8)Q!KIAuQgPHe*UnR4tzg|z}P1}MGA(+k7nEy-ng|3=k7-Nc%MQtMv$5Mx|*i#hW| zZyecg3p40xE9<^}Bk^Wh*qxqN{SX4scMAqvjAKlkN~>aKVtJ~a)AN?^AAjO0h-67h zPU8NJUB67m9o7g8tLgeX#B0dtU0k-~e}nZM4s!hXo}OuUV2e9NEI~aN6r8cw26RKL zNypFHiDISL!a7XaSe1ku0fX+=A2Cq+5(=BHB6M_qJMQ~)uuVrowXdr{jPZs^{- zXf^WWNDu+}FSg1kmVJ_N*sj`dcdWycz2$s@^;;r0`0&RrdWOfi3P2z+8J9!p>)KE( zk6dtakY5p=4^eGI)MK`57TWik*GBvg{7v+ZtAMQuXE%P>qJTdQEd}8E*Wa{X{abjG zKx)r}WXR=cNqxyQ64rxf5o{SWxwM+;0yRW3$1a z(x^?yW!zu<2_h(KmJZoCOlX+x8GDFfUBG1ipb8X5WloV6BgqfhW$xMYPAUaOHPwY= zjbOI}6kVxd{`(SzI5GAZ0!r36E{ew_-7SbmeB-iT!LSXTe^pKxcXt7s+-|{LOC{W(dqq(eK61a7==>JVaxc zVPGrJMm59giUK$KQo<-cnK2jKs(9Uo>QhVfjnal$0MKV{A%OG;fj-3lr-dx2lU=1j z7fwZCpE{*>hbO!>a>LcHh??*m)UC^gV5>U9Dnrg@N5p-l6!Z@loNjAXFC&53n_PcA zxVg2|m}?(eVMtH2FUg3!mgO&Fz(F%C%skTQfA|yA-5kpy?NSb|`cB85*c|AmtZR5Q zKpHH57LwuegGD;f@tw^KaoAutGcAfGV!WzM=Zg)v~vhb7xB4^HDa2tHesA_ zm>CFcK*?LzXb!4=oPIUIf4$VxS9;_eQ7sG8aSOqaUZ6%I^6Ir)4|>PKv6YLfVv7V50 z9J|1!4B(hGh5sNoi&KA8UrD59(DF&755ZhQUv#aoU?3IGR4msT2MQ$uvM0g-yHysd zw*m}49W11>f^;F(it}2gIH-hDMT>f7(?XtDU=6_|*ru?K<|#qwu4buPLO^8f{W{)n z=&!1F!za_>Wr_&A-lKkxkUy;sQrfwqCCXU8g+69xToSYFK0vg#wZqV6m%b;AWQm0Z zxor;R4KW+@K7p5nG1`RHO~27w@58soN*idvxCQsfr*@G{RGs6g(274frYQa%l~nGo45yu^<30joqoxH)kfXC`Gj_Tmw*H*t_rjq+(TK~~GP$-AH2!_yq7lQGzm>!bQD?}Y7VxIbevTR!rT$j$Qt`b%GRH#+N zAoCh!ytK+vxu6gJMbs4Xo$vA9JEl~?=tI9`hfuo2(g#75Ol!A_+<+aungs21{J^%P zR;Q(@Jnqa=$%$5tioT`f#gHP}qfj_U4kTyJ)kGG_CbqeqJ3hj9OIWPgyzO?zX@CoY z?I#dN%zofi1OhQ+C@1`2?mH^-!X1do!JOGM=jsapmx?Dq0t|~7a{t54Bl*g1Hw#cZ;J1{pos<*97ZLH;qr6R-$C{`y|tlXB}?Q~ga;JkD}5 zh3M;kt8fSHBTySVl(I6GFf)*FqB-gZ#=9^K1!98)l>dgZe%|iv10MHkr_eYJwJCHC zGC`yr!P8k}OT{pbB;p%|eaU!yll@X6%y6E+B#^w%7~C>FpZot>+~mDBe ztl2i&V5u3g53Xx0o&F6VpSK@454t=ez&=3sLCC%}WI1xzSN#aP$qKpZM+}?c@H~QL zhNTU%tT#ftbjD;ft1x6XIZ39_ zl7fz^nH|xMTVab;6*0oP|4J(`>NK`dQGj)apycSB`r}s0F~q_(W7yBKOjMHDrNAGoYX6DDhgG9@gH$M0p#XgH5$?^|7(a;I1mP9ppu z_FU34o7CyOE~WKSpH5f=xk8`7iR4&}GP(cVGHP#j1Ns`bvATX;3vHo!b+_r`GW~PK z-0c17B}A%>sJN(>m`rd&(h1i@If@*}&Sj2yDLl+)w>4yIHm= z`RH+Lbe?z7UEFx83Cwh-|4mX0#7k8>ATqAQiQIZ>AG8Yc08S2MRvx|Y!5Z=e8!Ey1 zg4ySvSABGe&)Owi`C9axlSR;o6uQ-m$0I&NblC!h1nlJsyIFI5JJ^JK$j@MhFr^1# zkFxar>h}ZtKMZW>hpH3A01pHOD*Zbz_X~oVU$&xjER*YW(L(aG?bOI*t+%B`Y*M9H zndQur4o$OXT6Qg%!BS{*Mwh=c5sP&M{cwZqk0+>E(73}Ky`a3h~0qm zz_$2<+8yJPT6n6K6Jw{sIq59e%^L=)gL1K8&=Jx&JX){eaU2#e_uEah!R16PHGE zXrOX#`WF-^46`6gT2#sHEn#`VX}DzBQQW!_UF7k#I31mfcT-dAt8ZGWL8n|Gm;Rtr zrcY-;*KH1!C#$6#n5Q*f6AWm#bPXovo4EzOJYA2AeybG8Zn`Hr(g)cb(16vk%Cj1y zN=3sgBhMP94LP;*&#l!{{C7%i9=< zGdB0>BT-Fa;xK#ZY8*kut+ifWYc)>DmPlj#@qC<21j4Km#O$U*$H6iGbp9DPPRGJ0 z^LSFM9QqIjdH}AhVi`i+M>jKo{!8e%;2pTrUNz(qwRt7v;T-0ZY@&j=d&NtegDdq5 z>du8CFMe%i#d-H6Ztb_F#Y(e10T?rT-Fx}vncL;=JIYf$ll%RnK%^3vg6|@h?m<%K z-SX0`UK_N>WrX;xSn~`eDOBe;gmU3Q#bvY0^5ydNM_z4UgBt$SsQFQ!%{})O<(568 zzDYWS$1zXjEWUJ%lz=@hGwZorKX1@P_4{U&ADb;rV+oqTe4+=soTWh7hR?1qn~&VQ zg=H(Cs_nKJzI5-Xi&cyqE-E=2C;paOG^hH~Zb*V|RxNcz!H@}>@ktg~@KOrzE-~y< zD%>sK4r!QTw%`Yrm>izcTbPy%G%bRqEok$@onG^h-jbQbb{*>vGenk2A(mI3{d-H- zr|{*m%Z~H(?w0#pQS43kSxjGDaCNDyx{9nsQ;OBJ%)7~Y!G~rG!5V*Sa?h-T>n@Ka zmhj;+Vdb|Hz{(-2XP+#Ko`Dj9W}HYZrT;R36XJXKcml6UcQUG%M`#~VK|G>@2_@+> z^d?dqt*XH-f~`D5NjU&PJA-_>&mf13Jn(XoiXoTQ_xgoW8p9wkoczQ`EB(*N&VE@H*ON#+&Wtv{= z5A0tBe@&D4rnZo`?4BUDOO~guNhbC9vM64I!Ar-UjHcw*7!Pe9_xWv?u(+Y`eWSgr znx2Acq5QS}Dv74hfL*=B_~5VM51~Tulp06ciya^_<5eHzbN_)t*D*BDdn>yC*TA!4 z&E287)2$$y8F5zHmx>e(g#=UOecbq?3J^efrV#*14|x=SwFk$tY`v^d$>eoNg}kD@A|46QgPMz2m~u@&4<$lhLfI%i9S1U&DzFV#Z~;ck2O3If#aK$Ye=S+>7G)$p}V@rw5P#E>>a8pGK;S9!I+D{=%->` z@Euwdg(;?33PtUb*ATWZvsSdq+&90gDhMJ&(f~0t=z3|e4qIPnNOOOd*>$MW>M5m> zEh2txFbxXcSgZBm_zguELF`e0%eivG~e~` zS-8c>=yx=Wt%DPb^IzJCFD+PevkxC~c;jpdIs0GHLb$##&T01f;C}n?KBg;|q`edA zk#prE{v12W?8M7d121sg8d+oz1XJG%01Cczib%occ>!-@P~VdNd&3=QxI?&V#o>%! zbP46YGxG)`vFovj4x=fuLS;pJmftVpfE}~x2C43)s({eiuu|@E z7G7T`9+j*s@=#KEcX1G{f;|JF2!RoxM_Z zQqK>d%@aX!>nTsYJg&#gXhLoWxC+9aeha{7%xm^U|VB`hgNR1tdvXu-3O=Rz8zvMbaoUH=3} zlVa*Or*u~yF*s+J`ycorNZr{jQ|LV!)6TLHo+fOh{*buCa&o1&mbAIt9r>sGgwQO6 zz*7JHI7RD>2})~F6lmFHuoV3e{sTAJuzIH?2trdP$?r4IfzPt; z!8~WM6p_9yK#Zo#BP6ZUFc}o8ojQpMYvcpUdX-RHrUbg|CgRz9iev1ZOBVBI=!c_U z*E}PnYzJyA2>!*jIu|v+xRKJ=0mJc32X|Yx9dSh)I8A7`K_n=#`X;FD>EoDeWK|W} zqNL8Z9hv0-Zl4SIboOq(Zd<4OYikzIWk?DRsPU$CiEl;w6{>!B?BW6Z?It{GF7IC{ z?59i@sMa%`ickY{ZB!WXr^V(ej@bxHn?d#S{MF2U>{#5RSa=KRIEe%#*-G-J^e$A3 zLBf>3^#3XqPKlid|d7-K1#wfV^&Vlcze zI5XyIXwo@}EJ2`$aVCxj8uNZ+c~(`}gGh~DN;{!hz}Z>Ba2_`&u;SxbhgMozUQJKF zeJ(Y2Iy>lx8fOK}VCw$7y-(IJ<{Cs=Juk&-+`JEJsUu_lr`e*gabp2GfIWU2oXti zYnBsBbyYd^r zxSF00-SF+E=m?Anh5*mO&8zpM*%uq7+=N)4Q`n){>$1?wi{3R3KI!y~iCi3qi(#?e z!rKp*T3yoJv((HPm(L7V83|tzZ`g;SmhHHcnT_zK_ z@IIhZ2eN^T*oGJoH2(9OLXJ1tr|7j@;L82Z;Z^>G?f}3>rR)qNgXwLr<{jS2p#?C9 z!CueWt6gf_wogL+LAeLLItu}#t=Z2G5lJZvx|z2$OR+so-@=~4HnGy%IB26eb7AVo zR!BX1TW=g_ehPAUKasOEeEOQv)BOW9ps1iq$B})!$5mxB_9D&g|0UROf+TcX!5PBW zZ+fOGh4$=jpA>BsSqi}7$-+b&C`rNAftDtF8u7g)2MjVM|A+>U$f-{X5SuyRU5X%r zUN5BiJ2?r0e`0Nv_CH{9&l3EBUD!EGO3|Sg&I~tk?qt66jGP>8*@O|dhqt6MdcEEZ z*-2n9pz4IqmUV5bYYLc94od5YZ}q3`wtq<%g!SO4qfHNb$b-mI&Qnj00kWm_i;Y`u)n}c#uk(q<=gYl_AQLLVBruau=+xj=AKZ)@+ zRy9xboqlp%@DS|i@3T!^`HZCa z=*#S$ZA;dI^RyK?@`!H5We@xn16AFHUblKR`+R_U7q|*NZ$Tx3pdw&KhSn_bW&`Iw zbFsRaW$K?~;zlVA)%}m{I4A+%Z$+p{VJl*U+9*5sPW9^H-z7Czxv`%Epbu2q zOkL<+sr`GpwzPJFt2dHcMcmgcXE6?vj*)qT|nLd9k&xqTX06$$K^=}d?%$0vDOtw|7P(26O?@M8u@RDUuV=~3^lBNsb z9sfWQ2pt^DSmc$G`K$LboiSOp6qJ0lJVCL%@(WHYt8{2v5}m&H*Z9eqcOfKwi1LV| z$0bLekpBA`U?_EH+lCXbNF(#z55M$o*g{0=L#NIDD}y~9OR9KZ6MiFfHjGmtWH`q` zJdO|A2A-Mp7`eC@Lzsk@0yjbMgV_u4JxAOa!q{A~>(Itv?!yzEDytGQr3S^5$39_M zo_mqY##a4RkTUV>nAi6+uDoXks1K8az6ZW^DK3%1ObRqF@$lG@xA5sOltrFU4d9z@ z*w!P~!(=LgpIbF1+h(HEvEjmW3Mvh<%ayex$}^5fRRMdw382|#dLjf}Y~o#Siwad| z7hQi<*<~Z@%^RVH28KcD;|$vR3vcXejC_i*MfXB;L3sIc*o7gZ5q{| zxn9$uyUyY(kbDXYqmQV5)rt*I3cb9e2^!1=y{2#0Q5ULD({AD@K2F|fV4dSz;w(OS z9>ys!Ha}jYUIsK*$-GwIYwVuXL*22f&vrOAZj^CUQ7@kz0|x>H!^g$D%iSsOZ>toJ>T^MW?|-jrDzQUEQOsZ2rQUa&3s*aifzl z%u_VepZ{?DQjF=7R$Vg$ft5M`y8ksxxNab(D}8qVL>G_0Inr|6908H++K0&K$a$$m z#%7BS3&-PcvD{8jfAZ1)8w3Q}Z&^!@cY=S2v|3iZ-_F+mgwrmy;XCEm(*>`9eO6P0 zJiv^?7L$lU=wb$$A&fw}{c!IZK%+R;8@)M4l8!tNJK6cu_8&Mo++p=2r*qI7h1e(b zaUjgFbGUv4Q1$O$S9R3lIwY_H1?hIX=oJ5~c2p?y|5t=0s0P6XH+3$4M`ht5GPzKf4> zO}C-$SE?7H^L7OB8lCymkXuzRGvRY0Bz|m$c46@XbuLSP-}>>>{gla|Y?|6V=5V66 z($?#TcIOwLKiii@Cr3eY<=9E?)o=sbSsF_Qp8_GC?oZRe!p3v2(fYv#H^xeT`My;v z7JB$y$80VvH(5kIqHUJH<&4iJEtSP!YCc*b>y2Q_tF)b2!2uHLfnGt3Rx6dkOX7o~ z4=QJ{pGW}7^~W4TA6__z1rvKQ4E%e$AT^u z!e&u@p4E#P-e40v>d+xN{tziZ8{gevD7Y@bzecn^)o_tmyUBq40^vxddp;;YCx@B* zb*IVvJTKEW)S(mZ)YaI?nl`(+-n1nB_VcZsMDpZBg#qV>ABT|yQbB_Z$BXt{p01!! zP2s~g8S0!Q4)QIh8W;VG4!4wlG(9oT;r|^YxLa4&_^uy(+#$QN^2LU*+|g? zR>m?ifQFPfPFvG0|Fvnouyo!NBNrptGYt=u;FPHd-wDfdhutswy^BL~cpP2V&kh2` z&HrV6Ru*gkl6N7c*S|l$b=vdX3Rui6v^(QQtjA0jbfI_GhDD8oP33MA>J$((2Aa`- zB{|m#$c6Dim9LaCQC<%|{A#=({f)Ia9Q|(v#v7j>JbCnsDHQU;FSF}E3ouiuj1d?W zZdXk850=^h_ZLXpj3c(C zla~oO010>3!VL z*{85jxu3w}D4jIvk*gZ+EXX|#D4our=Vww^rk-b}4;1xJH2LVL>x_j%@b9PW%bQA+s|P_I&ITrrD97K-IcRI@EvJj>*Z?~ZN2(jA*6e6kgG zJUEZ4`4zsNGMj&0ey59OM{^37grtN8r6~5^UAsGi`h5+=zo^=$Dr&cGo*efO-~U>V z5XuKXHK-q)`+T{U2`qQVi}Nus0vfuzj_1cj-3SRKkGVpuym;!>i3~XtQKG3WT@+v<74MmrNxF0{~88 zMw-A7En4#6G!eahDNn6L>IQeY4Oy`MBcb3QtrTnuSF$(8?MrNNe@~e=D{0o~$TN{- zicI$bjg$y6!(2b93zA5!e}VIp07kbxi+v%uJH~s7_l>7Q88g;IsZGiRc%)PrN>KIh zfJ5`=qgSK!(euZ(cp$hHdRYU2RaVL!fSHyU+wwY!$2va`78U*uYf_EIqi;h>i*UJ( z4i;m!A6dsY1Z@Z##><3Qw}<6*?2U|yClC|NTG(FF!3v z^2srY>J1cnv|g>D0vXGe8s$tT(j0xQaFjH^m{Vsy%+ixINr4wyjqJ1Xys_54yF){` zz1;1G6XdK%1q1byOf1YsR4oRtz&RgE5|m54i7a>stm{)%Sk1s->0DS!$cfW zm({2%1Of)rVv0S~?zk*Fvwp%s$i%^VE1n!Fdgw2lRI`H1(l<)Q#P7e-qF@S0!nnH4 zs~H|iw(K6<*hCo#0GPhH1JJ>&xgRb0&jm3zL)halrsHNkUkVRnmcgr5L%=9t(4Tws zn~2PH_xB)ZSEAmiR4Y<6h-6D*-*EYO?;GQPC_-$@=29%xCiniFn54ug2|q90S%(8j z11iQGO|g}#&{x30vwGoaVaQcC3jACm9)x?5l`~T3d2cP4u!R|8IjC4sTh3*v^Oljg zPY~+SdQuxi&4s6s*6n77@=FJpsDW|`Jdr_Tm*(Uet!2Hq)&YcLk1xDkp?idJw`v(X;~nmLx)P>677 z%c_RWY6>wLTgfH;chrsU^{FCg_mz|UXhZA#ZYP#kYC)tSCevu8Gg%j4dpXc9?HdAx zQL)rWkK1EtS}yS2+6H19*TR82P_9ckq0~LK0V|`jr(sTX1l!9W^=khUc7e}9|5}Ht ze$cC*uu8>vcw#V+S}iII(eNxgiFeEP#U)jBloc5k7hIGk*f1g;jVvv27CGR=b~+Y} z`Bgz`tW#k(xvD8AMDZVrW}sP&rL#jLtH-Q`J>fm5Fq$`4v9BK&D)#{9`BI0YR>s@;e(jZ32=Z9u60HJ+Vp!FJ~z1 zR1M6Ux2aJ{cu$NC+#-Q@Au7vU>pf<32F=$<7B)qX(^Ce?^;R~y5S1pxCJXVaUu?Z9 znEaBJ(ZE%RW(LyyyJynqMDMo!rEp}n3o+mjj{M*G?IVbCMq$P;>o`G(8&>J7(-MP8 z!y2x4;I|wvgxB4@RZA5Rjsqf;m5Ae=@$_6&!Spr5_FG?gX2?Y{lBcqzRd59GCj)#` zW4qY>W>5x{xdRjg@`6udG#^S^Wq5tX(d)Ey_+kNxa>O{FZNTN9v6YD}-u;mjIhuq& zHPSmR$)>}ht|=%*2l(?k+QL+kc$Ve0v=Q zuCHxjyf^E~r|IFcS>!p|9u7O{H3u{pu@+x9+VCN4icYW$Dfc3uw z^w~jy{OO$l011oR*6}02ka#FF6B}03{w!&N9=KE^bL^H&B$tEDL9r(lUOi}kAC<${ zO{7YukKENpLTA*HBgvh=se>wW;GWzH1*pWCbapNk1v4|1c?-n4jf2UaDy1lCJ?T&a z$Ul^wqT)TgoSc%=-n+h#f9+s)kk06r03Q7MWHvx*F?&c6C3iksSI^Hjm;=A7Lt^Ca zYMLKXkJgC11%QG97R+LcP4FmkraM$M?&G|@LbHQ$fp%ONo_V$3(h>_nb>Y_L0buD# z;ZVs$raq$=H=0u9z(ploWgKmY9728>LZ8bPo#)E8%t|dn*bj)DY;5_!3?Jk z?6=IA?)-m=l3ekC(Rlxr<>P_dQA=hR1AGvtV|}|c?`2Y?SHvQx8VH{3Ry0xI^4PdO zMgX_E{dKYWj9l@fu(Mzl&=&N4<>XK<;US@_U8VVr7(~tws-EC??wY?6k$q^>fQRg& zyf*yv@e*BXdKDPsqn*7+d5?Mc*?sFwM98-5;3=GAuinkIUf_S@vxjJuV^+VRbTXFq{#>veb zIN;Brh;96*0mIC-z|rS?-)|detc$KK#zw>r0LkUm`~!fdNYT`bufL*dYrs#0EZV~_ zb@IF~VD83oeBRP~O<_q3h@;YTrQu_Yz(W92@#|6^;ftHiE>2RmOW`#mJwEj;q6JnB?)Mu@ z!AJ5$(Z%oEO;Yt?y|$rEMRucw2#r5f7BFC#7z}H5sG}277k=6uI#F9wkMcae5)fTd z&#;6GmMy_3(nAxLIsd`|BTdCGe77V!^Xz+7_zSo{8A$|p0p$%Aaleu}WZN6hE9r_StsRynCSGwA;FNzp zER9&v{;%?Gdo?2CDq&;xS;KnvNWf91eId@*)ge-4-YOgMON>{yH5t-7gt1JJAYAGy z__t=@_*S5;FN{V()|`zs$&68SlNfB|%$&rCC8KY;VajSob;!Fz~TqCF^{$ zjj#+lS|Xzxr#0l{d%RK*Si>_FZ_A;FSgKlg6o8u%1=6CX-%Jcz;`aP{v3@jo`Rlis ztEnF8W!-CqY@hmkWR57Xh#7ml7lRB_al8x2g3?NNR9GA-jzv)mB8rhFebV3@#dPxC zz^cEIOTW;d><`?7b!L)^&i>9)XbV|)`i>bt3pT)}z*TYwP~UQC+d|%iF!d%LzJ`F3 z(PGLtQmW+Rv+&?JMWMk;p%bQ)oHEtcpb!&_M$PHML%Lmd0$+PjIpPphLKh|fmuJ}1 z;-kk<*n$&{mnq>iaR^&W^dZJ3z1w|S46R{+xoOIG*ka5|zx5(m# z;nXvQ$0TO^Kd333%r+dyi9#z;U5zwVr&5Fd1^Jz)K{l2hi#-dnpf*0tPR*l}`vVJtqJ}_?=o=w8GEui)y$Q7+WAX5=4$>=zd)Pjm-e~**HI<4 zUmLrl?Jq7i`NEsOMdrurMg~ks51p7>VtyKTQ+DNcEAGZ~Puy^PG-e(P;K9E836aFE z@Mwgz>@Y8LBDDJ$76}jO#J^dCsRRU3Kerk?f|!+VzwEQ?`I}eGyBB$-=%#0BRl{C) zZg59yav{3SbY4p3JyjW86Ozg0wwN5s_7JtbJ~n3nKEvQweZw%fpAb{G%(bDinwdi| zR#{7yg7ZA}JqeMh*H(L^#>n`$v<^vdNdQ|-HA2II>K=BpD3fYYrmimelPa93I?e4q zia3k3ce0Z};(l13aO?PvL5>GTaAR^OS0_f@?2iB=3a>9aAgklAk7-whq*}M5wA@+} zmK@9*^#?uB^d3hbuQ=~wlN;I>ct4pFK0)1+6$bD~Y@HrLb$w8WizsulxU5PGHg5U6 z@t0Vv<)DNAB@8aZe5)#S1#Y}6gRqp^!Mw)nkM{U;V>&PMLp-kih3Hm)dAVy!b0CDY z(Q`S#e>VK=D@WS%5ek&xc=G zD+SQCQA{lYuy`yK`=bjjDZJ^mhF97#2V4Q5Hkz3>Mj}tX4{##?x=jcN9p3mC@(9j3k*^xh z*(9VY%P_eJj|9`=UUuz3lh|pE0d-4?rV&(Qw+5b0dA&8kNgDKsHzEQ^@CV$MN&yV{ z)&FRQzBfIgjM;kG2C6tp6v?yvh@JYe;yH@-)n0(LZJDB*QtAul0;L@r$#d&Ejc`>h z5dx}8Kr$TrysaU!WAIBJ}05BCCHeU(mY2%a`#F0*xSXo z@Ur6i13h24$Qu_71gvF(Z*lpqLVDlq8v{MyE9_`ql}* z6g!GtG`vXrkV#2W!o21{fio7d$}AaY!Qr$4X#PLV>W7_=%&?x2w&7?cvi=2$Kb?Jz zD{F#&2fBkRxU0B{p1p~l+$U;NgE0+B2IzKUDZHs@8h>3qUx5#viP+D6UovYxMpM4zRDeKuQvzrOZQK#3RU7c;@5OUW zv3W)c(>*K?xJ=m6$afMn92!TP$#yntDb=(*0tY>7ggR>(D&0>4HCB)_S9wc(@c`fG zsfm^;pcQWNZQthAg-2U>)u3iFj!4HV)=)SYHKD5N-Z?b5+mxMnDV0`j)LI;!T$)-F zyQ0HY9hPByUhz>fqB^{CW>>(m) zVgvD)%=UsnNE2>XR*po90(cJ{`S>HA%gz;La*F1DTeyHq;~UDY$Ohp8-sy&u$B{qAq2Cb)w-j*k=HR#I!;8;(cZbM^AaXQzK#Wo(< zY|gnSZ;hN}Gh2J%DiY~TZqYyWSc7O4$k+LFtXao(ztXpFuywT-5cgV8rplhTDHOH> z*w4`p_P>Z_a*sJ6H!w#>YABA=IA!@uP9o*5zb1#U+gz2fuccUnYdTP(6ZEWCa>?L@ zv9l^^Vy*W{V+w>=&b~JG=3aUQyRjMwW$#G~RrR56U2;2QW#RYDxL?77hn}10)c=$s zFc$&WNoNemHVpw@KQ~(uYM9r0by0ezzq>WW?-BbnxIz4pw2{Pu9ebe63p%26Y8c>>AaN* zGR-6)fx1^1i#l|?cTJU$-06r5;TCvHatHmK=yZ8n1~ulYTE>ENPfplkbvsO0IU}vE#|qC$#-?uC zgXsK?q#OaipOR%~gM#E{FJNPY+s;eSg2Jp@1Pm;68Zl11>dwSHXy(2))!T&$GlgF6 zGbc%!@o804RXT<;KX!~7uK2WIB3v2ZlmgBh( zS4FBGeN-IewlrLorLQujb+v<-QE^HqiY&z$Jg`g2n~7=j75R5awZATQ5?)O9q%r7a zly(BUAS+!l)_w!hn?%2vA>3Y$IlZw1+$|rqwVlqj;*ho(OMZLchAB2KO9&^4H(pH~ zz!D+-Dw`JTJw_HRx00JRi^8;EI4ipv3KjntM0^kPPg{bJ<%oa>#De7H-vE5qs1jt$ zM#P_D8L4v~i*v@NL7LuNxFG)PiO@PfJ490*A9$9xZzxnCG(Q1AX;G^||IceFqyVoB z8q+!+I2UwYjSQXL=_W}IzVt`+c+oZ5^UtcyG^F?xo=W?@OCGX4h7mN%MwxXA-`IXz z7frb|{56__96*WO2IJ9m^jSWacdVpjqd_+HhVvncvw;2%^rgV+Gepf$SpOtTs;={5 zp+7`0!@T+y1b$$H-Wfi*;oR>ooKOzg`M-}3F1rudmC3rP9y4u`kR=|mSZb!xI?!9D zFNd(ldlS#mV%Koyh0~J{R3`5Dsv?4fCvHC=dnPNv_Oda$9xRvwiM{0S!|~Sk?!G{* z(n4F}!uZ(YX9g=v=8mUMcy8Qkkk*2ztp5ku>0r&XTTsAd~@_!v!nOjWUcjz@225v08u_^B9_z;bZETcegmkoC^G7tez1} z&FX{w@8=vqZ_y!# zx~CBJ=X&+8IISI^(SarsM?9I{7gO<&f1#+^KI#EVn9E$RbArj#HX0YY&xUXS@y9=F zJ&D@6VqnCgnU|JGRoJ~Oqh>(oF*3mOIc@@%B|*w*5`W!dd_<0c%Fe-ryL=Ab>|+CY zx401>f@O-hKdA2WA6v{|Z>A9Oe!zDw$4b#y{llPR+hM=~Y>Fk-kp~H3MWsF4)K%nJ z6|m8kzE|N&hMm+wwmeG@zg}{?n^j6#kde98|hPjE0WL@+(}Qa z)_vnVEfKfx29@0DnnzqacSblPsX~$%y!ztWBsz07p=Fh}zrf^g$WRG0(eCVm>;4k$ zvx}Yr1U&f}t)w8+M3#0(ozz9bSJkV*F>q^&K7JbwgazqI=Na&EIQc9Z-||;hq0%hx2AUfOlA_a!64Ihbx3NZlH1S>aGDFPOpr0s}1;6=!s*gSO3Mm)o$o5ZOeNIJxQfM>G(Bwtav`jjqQzUY}Mt5js|bb{Hk0kJCT5S6lr z6bZ|s7q^Zj!JvxbTv7~_26#>b`m~8UW(?-liZ}VNz#zM01JG52_(bx&yuh|nS>wJc z)8OzsK>-A5_6Bk!_qNGrX{A!cjc(SZ% zH}@egFO;9`;hD(PbPk&kiN+KjGqY8NN>aW;iP9{BDgGmg!`Mm$ynKCFtBt|jw{(e@Kaw$hPI zSj9VeX#N}mW%{nNnNylW_fVwTfp^ix4B%1V8^36q#_$$$o9xtJAcpIGUy>4^iBk{Z zW{pC}d^C*cs!2IH<~t-qjb@QM7A-U7p!5rms8hllbYk*1%r{q@wUjo;<2Iy^#JA2C zE<1m>twx|f<^0nDVU^XQ#|+#)&9OT$5ZAT zj3|NX+FVF9bUe_^HPmn?Yd9)LH{~icpXDcITf}_>GY6m;5L}CIlFoed7W;jQfNlKg z`vMSLC}^Lg&Jo6p$YL;Wn~L%Zp#d@wfU0#{RPe((MV6kic{HD!(P3Wbv5(a4T|BSd zFr7L{VNbnzSvk6Dv}ffE0<*m=gbu%BGd)*+krczj2V_b>58OLn`K z(l^ESbb|ai*k|sGo6kEZ#-)NV3l{LA*u{3YJHcNA_ymt2mbL0=WPxh56m|j!L+4j; zq`d_{(h)!g7W3Kn7V|jO*<+hRa6aphLR6VV3W4c6=^hu!0w~y(MolRL--L zb03Px7xI3`CI;F(Q;U;2WYYka7qdGa#?gjY4&P*Q(X>TNZ7p*0=Buna&sWJLCOXqD z*jA7q$(OZs_%FH}U0kqVxoUk2RV-!hUYC&_SjkoDl@^P(Ft==x)QnF~19{8L5kD}j@%}h&x1Q&r(b+$VNa0UQfisLnmRlk96|Rv2 zsZuTJFgL3Og{^5d!m^<(@FM#m(``p-`*R{+z9z(4gJSKbx!T*%CmsIb)cLNo6w9(9 zV_uh%4vP;8qZM`ylpm2OS)#j;;Ld0AaKUz*rMy$N^5NUb2Z}r-4QZdeIugv^0E^0U zdN(5ywB(Vorrpe!ca<7-bXMY=m$tBksZG4|#3LBaN|i+~hDIZ#aQes(Hmnt~c_3)P+Gg z814{Q<`Jm8+A|LtA9sRFxK3NoENS6UTUaAAiUv(|Kj;}=ZpFXvJnlJfx>|+e2N7QC zhOYhsR6wEs64?qx92Wz`-oDXUzp=`GqnqW9g=A3K1ycQm;kYtog}%LB$Ic%*q1Kb2 zao@8OhZI=bwsIJReDnNZ89EJb;n;5d+h>!|Bhto(@Jrye&ip`XrqT?(j)JFRcJF6O z5MLrsSuG>ZYM##0trUbtL-dFhYYRVn@o0Wxcp9LF$;O61akPw&;r^$;8=nQZC?IhIw{tQIfB?j?KrH|;S|9tcSrrI|2 z2FQsOL69nOt5G$sPX5>34w4F+sV1Rx{BOGHbAd{@2P-zNOQ*jubmgPNE5c;2d1CLI zi*8xc(Zkf!-`DMNG^Y1pXnTFd3RwktA*&Mw=WCiXB}w-g+acy!+^*GTP4F{??PCbc z4F+AZ(S&0))a)-@gcl!>blV-BhxG0_3q&_CzB!#z2Jc{^>z{1JsB>f~EwcCqG+NZBj5+INKLp zrtZsERj+B66bA&65cY{MNy5)E6rQMr^D*G;0)gfho z8XWQQ$UD>!l4Kvf69a-WI?#VpJfQ_wmxNiz#lXM??S-YTrKKui90+uG_UIN_wTbN+ zoQY%X1F{(?*)t`_^|pkix*WUI5O2cyKGT0Y6-O6f{i0rNiA{DBnv4K<4Y1%GVYHL6 ztW9HW{&gDd*hPlPAMF9)NP^9I#^5T|h3UmK*AS6!86w?n<4Mjy)z%o3pcy0ss;TTI zx}I2#ryNJKMW8-dE5!5F%h~Oit$}&O1q<-1ZUbA0zj}5;M`QhK`dK9`*~5aB7O$$t zgtuDQgPYR%tgqU*M45}Y4X8Gq)Y399F`Dq%mCg_KNGW!Ir!uY*-)JXr`+4QQEYaN% zTAXR|^t77RsL1#sCNv@@>+zJ4p&%X(gfUm?&V`7G;Ug(^`SY1ccmHXF#mUC#b;v(m zo~yNXZORpt-i+z=qo4SCOYY~ji@$dko9n?Po_cd=^Sh)#o^mkf@{kPH7Y#Mk(k3Ql zlPsW@E$JPT8O;pAsZ#O-h`Y)`>&6}fifp+ftyGVSBh}r_|JEP01~+4p;T3EklTs@q zsldU0b=_HwAe(bz3d+Rf(c>pv>cB&8R&FfyhuF!imE!4mDk2Qa5ePg#5pw-(8=tE< zx_w0?ET7?&lV!|yRas=7lReT{M*~#p%kDZXo%%HnwS4ADEU0LwXazoPAk+deG{63K zqje5R)IIX0TOD_NPp?B5OKjq+ckQJhS`sb}uVWlnUW*JVbn??KQAxjTLu?a|)~gjE z*G3<#N{KuA>zu589c}B?`?=e6f1am>$fg~?F|g~Aw@Di&&mI?jz}W5qMaXXWqEB96X{od(w#b?C zque0#4W&s9?81lb8TkIL85` zx3C*I&i;+e+drJ70g3v~fcW`oNR~#n3tWmYbY0Kg0E*uopWV-cn zb7ziuW963I7#}#@>4K%UstITvH=kwC@??q4up0b_WH*_)h1~_@=Hq@ zS${g2xtxk*FmU_JVyz*ySySggP<$}WTJx0lX25t64CsjfD=z=?3DhSZuu4b`4@lL= zH3<^B7>cEVM?-(n(m5hEsVz&a6T?5Htmv~pzX>l`Df$}9HpH2|sK||{6>}%P&2keA zpaJ$NS+UQ*-{|cKeiF!0KFHp_-;}Gz#SM6SbnDj}QMRbc#hFngRGYV1NRFBij%8QX zQpedS$-$q{d%?2hwAKET?ZJiL`|Nm zmjK4Y+*Ftwu3|E)w0D;_pz_dp1|Y?7Syo&;({9>bTJ&s!6uw|E){!6JZlxd;G#RKK zrW40>R$PU5Y3vV%IYl67BW43GGB(=qJ-I|RO9x1smHY6jufz*&i?4g+Oh4YTm@JtG zBP_Ip>Ca%!Sel*60dAUbqb4_e)a!knm?=do-!*E~2Z+#VZ*+S`gyrK=(Ig88=UBsGQxF?3 zvE7=WTob=}7aR2G*i?+Ugz-~|~_c_YJ%t0>QJ03E8 zck0uOT1d|@q5*vGkv>+mUc<4tC@fyA6(kvQ*nVRH;2$51hX_TF02LU1VaIs?$fki#|#R-)xwyTsV>Y*GxGRzPNT zSVTq^5v%@{Z%n-rb-}m`LvsXn81hR2V;#3Z& zennQo7ModUz}gTFU6aiG*9Pe~xT6=SUGTFPNdYA4T_=SBWrja>9q8&%TyKL)OBkjU zNOa$W;=(KJt>^EToV(iOPhl||ncccn6@A1&=+JDS(CM!gvvgJ zqzSli&?k>BjSPr_tT-YEf+rrspAuWqMhZC#Gd<%;26xMfH0V@Z8~_|h1OYJHCsJ*p zhhX2$`$})n@~{GC27Yg774K6+T&id0;b;mS8!xCLB&Aw&M={6o8Qu}1KqN4<42CwV z1!F&w?etIH?lV+K;uLg2Q2B&lw%o1WK()*rG~U003tv#riXVZK0{oFhKgI z4W#9L_1Z&_qwTc(s!DEs3b!Q~?YJ43-t5VQRnu=>-{Qa@KFF|d(aM8UIOP_Lj{~ja zxN$h77w8RlbgHvKu&`f;HP?iRa~}`k39d>(8bUU9qjOOqo4Nx{sNNTwEv*!S80mil z4w-3#=0mQua_hr7|0APNeH@Ia`OrMWMOJ05>)+`%oecnw32{o{eH*GVs`YGR-22#) z!9;Z>G1!D^-&aWOUNbRgs3^9iIn+}Pc+tpJm+BLo)ykr1Pr4V7toZ9FJyaQ=s?fa( zIref|pei-UD~Bol=!ySU(wQh5|_#3dL(JaA+sOFa4Yzv1A7-v$#D` zz)LW6Q$q1D<7JdjeZTJhbB^*xu?|`0*--mBiDRR1T5LILGF*|KGL7A++3^vuk zs%41HMZpg@vYyNKwLua94yUkoFm?%_VM0<#!4pg*36~?7V!@tMa%|M6FAe$&t1Vcd zVfHP})SmT*TUUfB{nkan=76NVv6ZRZ6R?&IDap0+rtD15rK)pt3RXq#)ZrH0HHk5Y zp9b{dkmOXf6mt8$c#?@zL_16ye_=U^#9~*vPL z+POpBM2?1q^Lz(aWNW=N2D%R|Y_TKu-T)sao0YCVXW}p0I@ncJ4Cwl1@Rc=8A12i0 zipD0S?TTz6DYh|*GW}eX5Ej_zp#R}C2PNpS1^N_Z28!?v8dvB8qM4I8XLgZbb-RRa zTgVQm5hy;N&`1niPzyhIhI%nF_e1T!SoZ7B5ymCva^W2MpLFpFT{O)<{5tdm@MUuo zfBeM+v}b{Ckr*P4wAUGC%a=nr^NLMD4c6qBvS3K+ZJht%*q{C2DcUF8 z1BJHYHGmI>y>N@YGuFC^=sEi!PuGL0Qzs${VELTNuYBgg+ErS?hH+W3lm0U+oSk)N>q^7vr@j(g)moJ8!HCQWQ3(ru zJ(lB$TIH6rfjS`JJ*sICpJQ?z)RF^A)n_JT%cSytEMT`FHI6`=yalR98Ct{80mkng;o|MD2pCpVi^Pa0NVgpq0ErHl+&U*q>a3azNLkOH12RQUkWoxi6G(R-E~rhcX}g&G6x zr}VsjW1?qWGmuO|&kHfG%19WE-4Q#IOB&sq7X1=^M8q;*SMiD7n4&-VmUgE!i>!N^ z;mW;@V-8qDBq1d4)NY;JrQ1$9I6s>zvRI{2H`MQ}39FBOkia-|GYG6BX})=AygdL8 z9dK(rqa3+^-ge7Cu;Qx>Kv1&mg4+8W7;;uN#iA4C{>)g-R1#lms5e6U9~fB9ug_Si zwrU=TZ2iiQceNnAzR3*2!kESjr4w_>O+_B^rEE6&AmbyEXyQ-bFZGl0WqnrQ8E!`T+b*rh?qdN zX~L-&A7ctNLh+gXJLE5X<$x|_92oGi9qa&NEald{{rT2t9Rb=S7g;niZ2c(qp}Y+Y zpHv6UY;8e@ND-6gv_5S_f(b}SOD{8yGLJEVc1Mw@)+r$ zb2pnUL!-2um@PUtD*FM|qWD0n=d{u#wcxW?2jcQE{4pmPIz?* zDqkZKr<-)td9x6f&Fx5cD5EI#NiVh592icWgyZDQv@&7KN23HCUXXQI>KeCB39cQK zES3#6L<-CB`Sn`-2Rb-U-!sLEmRCIdkwllQS~%Y`s;4!mr;R1QC{kNa@ft)CSJbsf zziOI=_<-l6++)dN+uS^FJ~2Y*<$P5LSU#-J!_evL9yO@mX%E5F^RlV#N#MUwdUd^T zmA4gWGhPi`nw&}x(;qReF|+!%1r|JsU0_R+2ZQxk_k0V8vgf;l?8 zzwQa)QMnk%`s|ufy^96R24QxirO&>)+;XFJdvw}e;%Jo$tSLj_+MqW{C^^n&z(jJD zSvD0exuaQ0Del=byA-Q!;E$ zh75c~FT~SUT}4ur>|c?SZzXxk_G?1yZW>CjMIIDt;IVwdJHJY1=^DOu8`*|_bLaJ{ z#<@qx;%Qg_)HlDJugGX_z0yam1g;0~`Jn~fqIA(Fd6N12o8LiLI@V@>N(H^znuB;1 zqE!KGH#2*gP?z-wPo(IIB3yeDJQoLG(Eq$^p|0iPpU)7}_Hg!um)b5TQvM~&w-{N0 zpxn+XQ{-Ywm78`$=+Iu7pt58;G~0I7*?>I!NV%mWfsWTG*+aHjL*hF~`JvM`~FM^XFO3iZcBI z9D44qn!+?+;=D(}A-#o_5sn*o$ZNP~uGHOYxNZ7>Q3+;2hD+ocjW1XJ@3$Z)Wd|@^f zh?^Z!auTmT7M%e^6=I><@D%U>(qnvVTq5`2n(E3D9qEyuNY+ra>Z1;FVlkreg6wH; zzdQCDQ9p9fdhNDW>9fixgD$+FW#M{XsByDB0+eCUm?l%K^a&`9my~w4K$X^kN@R~9 zfR;uhxTdyPF@Pf^@K&W3ay{Yl^%M#G1RW-X-M;^UuePoQP-FzT!pkD9%iufx^26GM z?mddEpnEhA1p3kFD$l_q-&Xjdnnb`bJ4;-8zrJLXu&$ep?tL-o<-QFcB49)2(w4(B2mE64Nww)umskRMQZGlw072tt*h#|mjO{W2WmpIGT_L-YwMF5%oQS17al!KI~?1L%n1iS@lRfnc@9i^H-}9pbbLqhjD% z+8;^BG^Z@w_bib`zruMkS4KXEqE-N}%O`lz%9-l-c7mL*Y|TycAWp`v0O(Ft!F;o% z>=|36dOji&d%isBbc;xzktJa}e} zBH@y+VgEc^Q@=tDB?)CAD21ziiyrJiD??!PCpSOsy)5v#)>C^&vbV*_SNiQrA&ZnYpuydX*i9YdF} zC|g(?5DreNi$;5bD+hSAAW>Ht%Ht!PT>=IE;|Y*xDk<$b7IIoJI|t&_F>%aJg^eF?Wxodm(L{(AOWec~UeTorNA7W14>*i1Utfu0?TeY5N#R6u+eBVsal$SPm0YiPrFTnwvvC5GG0Zj&cP zC7wxGoUQJkGz6MeF&kA9XVZ|RHQ(wddRDc=M_XrUwQ^FGu2Y*9w*kZ|HOMzGd0>=@ zQ|iSs0Xs`ve8U*VScB3DQVYjOl@IdGo`eG(m-!#K)zx3OD%z|BmJ9y0jyKe=o`uL0 zqt^2Ryt;A}qBOz{kcE9aC20-0^F1N^@>@y#4ZA2aIX6`fA6YPt`_eLn4bs=GF zdP0w|{9_HXuJ|Tmgv=Ys%1+mrEjwo^3{FGtUL~61T4$CNixTqTPt4N}vW2o06MpDQf#ypn=+k$v?9n0h_ zsnEsl8^-5%Xst$B^`>g;a;=NDAo=5n=LIFMNrjjzPSjP zToUrHAW)Bppqx&azf`#_s~S2Xie{wU7z#rzYyYJ6giBi2$<~5X5cJ5E$dperDHQyK zP=|)2UbllRHdu+nH65MEL-xcYb%PmIyc6lYN4jq>XWQ@fLZg?N{_$gG+}t-t-ndC) zdYP2_e^`CFqbdP>aCT!E=e6;|_Ge7Qf9;Z5M7$H;0!fAz0J zi?rNdH`2_sErIHnw(vBPh*>I8rPZ9#h7$403RyDS?MQ3&^ct0UhWmktG+}9jRdP;1 z6uFvYFzSR?@ruKMK#PfA!BbKDx<9AJdTropo<#%V>{XwNO=a5PMop+9(QTQ5=WYRy zd%@Z6%csNv8lr%Vupki{8E+Hic26kOt#o+*t z7$?REX}#i6&(77Y;aVnFlRrWJW#A{AOKglR6-F#qBp$*lnwddrq*VYHlwXz)u|D9# za~xWc1F+-YUc_wwmTdWP{d)Jxy_nv)vi+Z+1Qw@*p5{{}Zr-EZ(Y^4$u8k?JVJArh z3BZA)3J`JHQyTyWEA@RjKtv@PMG9URdjCHRDW%Q&0;`m8Ja;#d-J|kEz$! zL4~+rHv>pVK2kZ1B_2dMXBCKeJ<36uLUxBKmnnc(GO$sOh)eC2H}N-N*WT;BX4uh> z+6P33tC-%iw5MaqXIF?uTOCR4+BAp0%oqXOAS2&cM@t_nI|jyMOBb%__I;&5;IMBA z*@IJ?7tp&J3is)k2o>pQ{^Xm98lhowcNl5bEP~`&zc40W~zR7TZo76 z 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 W?E*Vq;WzH!x>dfQaPCm{8-1w1EM{B) literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501012002-Config.rsc b/MikroMaster/20260501/20260501012002-Config.rsc new file mode 100644 index 0000000..f320ebb --- /dev/null +++ b/MikroMaster/20260501/20260501012002-Config.rsc @@ -0,0 +1,5546 @@ +# 2026-05-01 01:20:03 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz security=security ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac security=security ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +add name=mVados options=HostName +/ip dns forwarders +add comment=BS dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +add comment=telegram dns-servers=10.30.30.81 name=api.telegram.org \ + verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/308/f5b1bfb4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 21:50:02 30.04.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n \$LogPrint warning \$0 (\"This system has low free flash space but \ + \" . \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint info \$0 (\"There are \" . \$CertCount . \" Certificates \ + with CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$Name 0 1 ] = \"\\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);}\r\ + \n}\r\ + \n\r\ + \n:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list,HostName dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid disabled=yes +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=dst-nat chain=dstnat comment=npm disabled=yes dst-port=81 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=80 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260501/20260501012002-Diff-Config.rsc b/MikroMaster/history/20260501/20260501012002-Diff-Config.rsc new file mode 100644 index 0000000..31e552a --- /dev/null +++ b/MikroMaster/history/20260501/20260501012002-Diff-Config.rsc @@ -0,0 +1,11 @@ +124c124 +< add comment=BS dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +--- +> add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +132,133d131 +< add comment=telegram dns-servers=10.30.30.81 name=api.telegram.org \ +< verify-doh-cert=no +4444c4442 +< domain-search-list,HostName dhcp-option-set=domain-search-set dns-server=\ +--- +> domain-search-list dhcp-option-set=domain-search-set dns-server=\ -- 2.52.0