From 742f68c3acf25cd6a808629aaff6a447fe3dc4cf Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 00:41:19 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 00:41:19. --- .../20260505/20260505004002-Binary.backup | Bin 0 -> 269333 bytes .../20260505/20260505004002-Config.rsc | 4492 +++++++++++++++++ .../20260505/20260505004002-Diff-Config.rsc | 150 + 3 files changed, 4642 insertions(+) create mode 100644 MikroMaster/20260505/20260505004002-Binary.backup create mode 100644 MikroMaster/20260505/20260505004002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505004002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505004002-Binary.backup b/MikroMaster/20260505/20260505004002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..de96e7ef6523d92c6f79342fe6c626269000ea60 GIT binary patch literal 269333 zcmV+aKLEh*sF8CO90UL(J~wk82P{=HDNEHr9V{FG000O80004Z`T(2&Lm%iP!*+^B zZ+5qVc!f{oueh5TadJHZv}8ABsDv9VTrUJ2TxV*lW+kt3#sS-JXUyS!`=;Gj<*&ai zs(P!VsT)DWZYdD=fq%6oCdRW+A|Ht-f9zT@21k%0T@`=wgI5tVz+Ye&$5CsFtID}> zRwa;F6PQ#fNYg6*9y^OI<@v`*Xg zk^l+!yMAYSr4nki3^oo1o(Tr?dT04}E_UtqN1@uQW7S12J;CEmLu+s|w~0x$byV6)je|UX8Wc;y z>?)>_j}={?a~5100Go4oG;?_F(`PrTANwG0It?$=*?8)nsY*{Vqj}s@HdY{j$3{~6 zI3;SMSPD|=#{rJy1I=%Z44mZl0CYF=B;y>Eqxq7#CB`EG<;i_i%i|Hgk0W z$ESGi$dOD%;zrV?F&lS>S(kaU3H?-hXCC<=50Ct@93Px!!6RTou#<38EYYJcLe^T; zBX$!N{wai>c!_d;Wh%4Amz0MWg8wy}f~BYckoRd9-|KM#ZCAh3i%On?G3U`j`e994 z4!Z`;v9I2>bt0KMtb_=B|t%xBm5dbt)uiIDr^H z@Y^F1+bdZ0EJd=5dFmJ{*wdT>;DI2q=nPR*Cj9_+@~#NTOcJDaI$$Jq#zj#y`BHYv zl>2-FD)gcak{i?-yN%=3`Sxik$+C<$Ua#o6_T>kLrOUP;odJIpNd{_Trd*GQc1atn z=SUT?9>Q04baobTGa(TMh6W(ZbT*IY#bY8w#yE?5OPT-Pur&%x2K4!K9Plxlt)1y3 zkPegv@FhLHOlUVXv-N33t}BudLzY;#eJkpRI_4*aUGQiaP$&Z9vl$&>LXA=fv(c3u z2;@yiMRDh2Km?|kvB+E8Y9l#y`cK2?c8$1O}gGHp54M|6HZ%AQe@CGQf*K za{7trACAzanh;W9MH^3YaoFsP=n(=21TaO_(ro;J?&AwBGHk;0lE60%2j>-(80vTb zCd8_82FbiCMa0io|IjO~fJ&G!M}_5l;gd#U?=l z9P6RyZ;)y|!!Zb}n{AH020pgy)JJ+Cr*+-zHq^;_A2``11|F8(``%W}K=2`1Ngd37 z#q1JJ^tZB7@oqoHU*DPw3vIa>Z}wY_AJPp3%4WdFEU`ry<#yl<(s)v+e2n#gFj`{& zsTGw1tnL|b05i_40N4L{w`j+Wv$>PQ`aCp^rbgr+XPH`CEP^2=u_TgvU9IhiRg}P$ zsCSP3ke+xNz5EU18-(11HQ(Hn$#>WBb7qYGTHsUF1KE3~P6lpt(?$A%$d*@_3#c_! zO7#LOj9r73WKfJZ83z4_;?*z9Ap=ZSZMih9Vn+9YtFq{9)=2}#DqhufIQqZNv+sZG zN{_E!946`XoK~Pg>|u=X*recQX52A>scl^L9L_h6i7_=fEoYmwL)xQQscR#Mg1GD^ z4ln=AVP#~!+C|~XPC%ee)MUQug`3Wsajl^DxwrTYbZ0C8Rd~dVhgESzCt9yeyRre9 z_tSpwn7b_+oKkg<&I0DKj9ot)#|%K`@$$giZ8Sa--4U}6SLR|Sk#+i;XrbLlym(Nv z{sID-WBf`)lSqaUNw_2+{VuMC*;naN30Djw)F1CbGj)9=$&<$YNNq~LAj}Ufb{*Gm zK&M(xZN-8r*yyN8M7sYBcKm(*Dd+i$LNWvl@!H#hcC$%he8yl$-|D0jlpz7tD%X?=4#)F*ANK9NQ-z7rN>+X;V+l+_^}>Ek^bc*~QUna9(>sC*Yclf! zwW?gz z3kU!f8g~2h0XB=^_gw1v|oOn@vk$)qt3%K4%7K+}u3 zPF}ZgyWF40L~|L=%7bs^D}PFwghgKuG0)%*BqSI0pRrcnh%%^jUXQZP343@}M;Q{w z7a-Y~@(`QU=~YRIwmv;pfv4-6hehn8qaS~tBlAP$3mIgI&Hi4LF&Ll1GdA4Ma!X1N zPQ}*^xrGoQ^Js&r`@GW0PT}%s4hw|`{Qdw2Q24c!vA+>-7SCufHAv7G$Ya{Pfzgtn zu*Y~o@)HNGY|&^wSx56>x4xO|1C#{>kcpfGE7(7&5544I4MUy&=}AQ?Lf=lJgor@K z6-$ymo-zAxD65dCEY-HdGe72)9HZ|)v6GzYz=25&dd^S1Jy{rYDM5dWQ;Wa_Me_dz z@M=>>-pDEukqq*Zt`C*gU1QTJ3N}o^v3R8%Gj_uz_9TiY28D7!{hs`(MidaOtfeeo zAf{^TgFnv8x_X0z#{gOKAY^Q&wPF3P<`aBeZbRbjCj#Lcy7_hAW$RT6$M(?eWq%`vT{z!t?j`|TJ?Ja{%j2bnyF)`sInL)r_hfk2IblWfj&vn?U z+%t#Bds61Kl%Y2Yw7GFhIO$f{M|oEOMG=?Wvl&%`HUyg7LgKKmY2>rMz5m3K% zS7zX>8W=-El*(s(xM@O>a(>&dS6v;vP(*&Dr0}gzR|C(hDTy|d7wV0FpFOY7@h~5p z8nMCDam%*m)AIA3XKwMtfI9&1exb5ZrjrBfu#ufSZJrIMSSt5+hy}4Vo)%ua|c;a zVWd0tTDk(ihVCKaI)nh*y$rW#h^&FM{>Kkn%uf)^4grPrL0!wC!;Vct3-X3x`Xdq^ zS^yxj@0(k&{6IT!LEp{q0pP^yH1lu-6?dA`Ex37fq&`qTLetxiR^+eDk0exHj(F`c3VhRwMX@&ySmxyXChR?`M(Op! zN+dUg<#nKRcTy;xN!2SU;cll`L_zaIr<+W~2UPE;LU$w%;pf+}s4=nMNjQbRsk)GYFyg_4|O}eVd;obB|IJaso7C-iFQE)l1{`W zSE(WzS4mLFb0qEKkw!Bwn**2Y{K{f^W=@LA$q`wuZ}fLfUO{Y&Mb!Ou$YA5!s}wCI zPS3zvSMNLIap14P)qrJBxtVG2+A zxLKoVY9Pnvs^oE69(>VjM-fCjK~8cNR12(#(V5eiH`LV#=kGO=dh)X$J@)<{Nfufo zL&x^)c2IEMB`AS1k2gFCwHpt&nv$VM5n5oq-Lc#+SbYR-w; z*Z6S@yGDW!t!J1d4`;9vdI@@%!M&$rKe}H98-RB>gA*iGkDx77&VOMK6S;=_RR8ElK8y<1aJIw~(eLdu80f6u*1agj zynG$udEbS|G6}}~%Ram_;|>N46&_HAq}~S1RNmlRrleX>ioO=iDYn`iE1ycid50E( ztR}oFP?f^twcF2iz>H>OjdGr1X~%jI&UK0A3iIl@BK1-^2qGR3U7et)IS(jL)H}`)6J_u{}D$Em>94sNxPZ}n{pd2j*CFZzv?q=U}#P(;tx3?R>e%7DS#V?ss zWpVm|G&{sRf!Y&*)Z0l{hukD|INr6G9F`U=eKWE_&UtFC*`|tw{HsH;G$h=B1K^&+ zV17*g_LGxWC{3vtliPaPrH93{{LAy@(UIu}Cc~;tO{}b17ci+h<`RU=vL#!e1!$=x z6`hI^#PC?UGk{E;m#)a`qJQOr_i{R*C9@#2N zF2GEhbCXCAHgw~=aYuy3)ea8x*hhnu<2_f%v_%|6O z4*8x4CsI({J`;hkYroFh7Cirz)D3f6zy45(Qxq`4CQfYf1;pmI${57_uV#r47_{6g z_RSza{MK-}i}e+(_~e&^N{P!Z^h(W+Jv;%~A1m$6bTF<^KS;=4o$NQzC}u-^(^yob z)DI=+hd}W64;t`6?2N7>YHu|Txf2b!dhwoTNzFs$W~{^gM0;k+RWUh+*6Ky>Zqvu? z`@7DviWHVYZ_gARjMrwhc1o90#I!%uGV(u}Peu`=9uWe_>aryZxarC6=?%7OWq5yl z(+ooSkAea1HuL;+SHL6GFAFggK{$=+W1m=sVeS82MblU%Sxs^(Hvn=M)`A?%yyo-` z#P)JT-D%iZ*DqIQHLG{l3*n()q&a6Dh9kz`;TGthuApaB4%y6|qA5RK`$EFKLhfyF z>AY(nM04d%I^^%#Iw+!Up_*i!;Ow(TzBi1W6LesSs^)~LzvwgPZX|R#T|o%G(zN1T zXsxP?>K9WznaNKQFrqKAwLQu?N+K#a0g7p|>Yia&Y?DE0K-pu;haKRTU%cSeWh7Wi zr#!q#X<-p{{Bf11z{yqEvjlV-n{b^JOVX8ue#?&7DJQ9BifDR*%OM#RB(-O-Jp0IBHv2x$PSoV*@6v8cNQPssZG^7aAS#jb!^` z4z@CYzdv*K`Ifa1(NYVs%BWCtxoIzV1ypwK;-d}mM8AT%EZJk4DoDEpIcx_UKQGys! zH&Bd&hLjJ`HdGIvE9)tZT60wo_hSuE)CzoD@%6dM{O-QBM2PSzM- zHGpyD+~-6ejAiQl-1-nBSiV!1LA%kGqXnx?gdmbz4W>gg1h3+-DnztM9C!hj>ySFS zSTh54U=4zl*F{LBQ2y%MIrGIgjqz(LLh#1ed=q6*W!)lj_l+Rfn|HKLYs-HiU9|1jzQP&lT z1$#ZsnY18Tv)to*gcQOl)KksK|@}srLW+CiRL{%eXtfDcmk!jRSeLzx6Liiw75}>cTyx$WF#J6&1X9Z>LR~Gdk8dq`Ykvpi6iY}i-2}O9F1Q5ptt-DaGP@juq`7tq)wah+p7!8 zI^-eBv;AeGHe0_%aBFcFUOgcwhUle6S`HV0j+I4C38ydtL7nl4MMLBE+YXElnlpM& zudsO~-ElUB)typMN+PhwXk>L6`N+$ERY1sEhUg>hp*N|C3~_W}?S|P+ZPt#+3S?Rm z&8Zh8GuW>A--H0P#zxBA>*&piMTSCKNc+O5FYL;%NagMP4mT(siis$cxfE3f*4%os z2X+I)w@R>KB&?crRO(=F6xaU=AU`H6*PU1(DGO2!2_u{WfH~L@GF_u_+Ny6~dzyYLt?FPK@%(ttn&CN>m!ruEy||wb3x)5!%X`aE`H_hZ z(M%y0Mep-Piq-S+@unG3`PKFSnxMzC{krpEUIsKIf%?xdn+;Rc%?g@PRR;lWn9ag6ep=*uuDCGav}=v+YY* z@l$~(!bVaXQfzxB#MfhVB>y~Dn?~Kvz8ZpvLLS&IMK zAHiZ6Hkh#s#|Q(OW5@Bj+|(vJ(4PUuefvY53i{Bm^VZ|7k$%G*V?Cwc)`|CSpRCi% z1m6aC*;^!>@bg9&pWkqWgZk&AH7K7&9pqqa<&V91I{(0UT}}BcU9i3wTf*oC#6C6S zll`K5qyilbI>h!mc-dL|xSC7(3QPw)?fmj+#bVA>8&oLiXZ85A<{G0P#EWMNx4|NE zI)DGk&x>>-JH}7@odL15rvp_>Q#B@6Q*+0o@2O{@s|D)q9|)!N+pTR(aCuHxXJUHtm5vK*A+)T|{NDi426dmTftfJkm4filmV91JhUGGI^>*6dCAOO%Ax(QRwA_8|{(l{hKam zRER@Wr#TmPjXE~C^6&7gRW}|H4z_Fb-6gV%2jTw>OZOg+Ej?X2X5D)+)rYUBNkvcfm+et+0#{B_o^>I?>YM@3h907KO^mpaVqNX zxX)eVl^H*=Q^m6##|^i~-lG4O?655OuMs>X0+Rtt%K7$@Ow<&$N3Nf3Lq~UhtxDaJ zsta+d7&u9GK&I(OacB{X8KKF2FS*;HTiNa#hG)L)RwW_Y(eb4y6A1dom41F44e=vMO00n!?}gt($~* zc%QwDFoRfL9bM6M!KLav{AjEfRSYix)DiG|Zt42y>is4vp%xu)?ug z8Wa1px$zTs%V#yBI2z7340;SsZSN5TzP} zTo3-?R!TAT#sR-kF@>QP=I+I%8RW1vhBJAAheUp0>1Zjy&5Q|75l0VNrgV?GSXLFt z1FC_rn4RW@mW%8#G0i~Y<8`u|L-K+^W=fGOEg8CdUfhoJs{gR*u^rS0Ji_7d*q_^q zorYmV7VhcoM6=xi{`>x*`T!8D!`6uFxKIRa>w!-KoAxi8Y<7bGcDi2b z)#~SnFzHjky|{vG}4)}_Sm5S+ve=H za6@`dl&}c54HKWT<0UhyARfxKAtX-XO*3~Q0!8<~4&+YI+v*9?{6cqa^*d~r`WR$n zfS~>#7;zEBE|clMNqeX52*r&DVCY@D5{?x{l`L7JQXevf7fcfqojT#OTt|zEH7snW zVpdWNGiT7^neG8r$7ARt;QcSWa`0qgB8xBVdqBh|VoC}U4rm*Y-m6j4E)8<-l+ysz z%1Qd|X4!xv{B$u_frZeHbMbgIVc!{a5_lcwdMeFutN+`lvQ~hyk`^v@*+u0Cq?kVZ zYdT*LtG5a7qXF}4O#YZ_WADDk=e-ULgwp6Vcl?rxokRCD<5HJA%&>Rj4U}Z1#JCE_ z<1|i5B*lHz;D&0Jw)2dslAMN?ZYLoGJYtGarS(*up1Fbo*AU^6NZ~-wi5!7I`xb1B z5KcoSZXa&oOQwu|BAN-IPT5>IvtsUbF%uUCLMXaE6d5{hbRpu?7fQaKTi6+4 z;ZPKjZRYA|W=Q9#La*}5FGFM&OE556-BhPGWfl)`PA}8RjY0_X%zm~!FUQ7IUD{WI zDX*6=mQz)yo(>8dYn0f!^@j-;fb)v}NH*Ski<*oDvokJ9nXU}3DmZq7B9xA$4(q<+ z_;hG81}HndP9*$0zdWtQJ5R(lsN4|c(lo4~bt5RBQl#Bsf8CvwmtWjZXtF7T#b(ok z;ZKpZ4z+%_CC*~sU#@c_I@>I|vFJYe_}lkBkI-UJDm?HSL7Ns@y1+%=XcvO+Hx21?ab?V-03fU|Y`W}6P>Mr^{N zd|HqjhNSxb4cnxVW%IuyL^zXu#!vRA>QUuzk&!AWXoorS`X_E;1K%Dw1_Mvk2& z0J6mG{?Qj&+Sij05SMT3OeVmH`q7ue1(!IL(Vcum$kFbO^L4gO74|7&d06HyU$s;z%OEC0#_jqz&O|c2=c!KwXFuy-sp3#=QcunX5kIeBJ}2B10M< z`nf}%XUw@K%Ax{R#QLUX81;GL7$e2ajrp1MH3T%FEC(#UKCouABXP&F$=ozl6f{KF zrv*kfA(76rK%xz7x#+O0BMY+#m}Tnn?hobeQ;^afGn99orygx3?IUL2VloZr>Tpto zj@H!%Cv%pY0kTH1AV48r1;(*fc46loGoXtR^SIb@dx6kXt+TLn5c%XM3T8nIoSKk^ z>iAjO?WlArEdXK^Xh_bB1B7l;c8nflw`Q_VdIP{8Q4@^f3?{UCHt{)!SkNoL_VHI{ zd#=mLw^U=f$0@MU)y!32V#sI!m{ng*erBgph?5;u+3!}_G`4py!zWvRbykU(5-QU0 zW)o`S!;3av*q(9CW1wFe5+d+AY*srLxmywxW=Bx>q*_CSU>dK;*=Dk8M&c?6k2 zufsyRr!rI14pzNtjZq}Z$tQ~;WHB|hSew>FLvw~KT%1B8`_=QTa^ZZU66eKXFJY(% ze8Mxk2g3xoWKlwud}iR?aYpGjh@9-y!*S7Uz%?cK8{x4LPgqClYviRWFhN;&q z>LC&8tR^qCGQ9FCsr&_?zBMR!DZp~4bCb;5`{k!Gv4#AS3fnureif3uQUD;~skued z_6q^3D85?Z7z-ci_JHI5k@mZx>}^11aL}9Y>y z;VKSHpqoFFT%!feC%QsnN@c^4s?9*Cco=AyB9cy}c-IvDh|p2|ZAwa9TBNk(gI-_ zj3>?0jvcD+ma6z#pLC^w0jW%SdFpt^a-49%J2$Pm>wXo!Xv|LQino~-T4ySGkq_eb z!ANsAMZLMobx=ul6FyL`RNOoB==n)t<%a1zhc6AtCEZ_?^MekIHo2Y^+vM!o&Mov< zz>KwHn0a4xxdk=y`vV>lh%bPZ1K9cWUmMB=^H>*ZAdVQUadj%Zi6!v7rpcqbJ28A|-`O%9wlemn3$M zDQ{o&Un5YVL4SU3i48S>SH3nE)o}Xz;Uc=<)A%3Jc#@4WUR;_ehN!oH|v2=a1*QJ z{Z-RH-7d`-CU(~5S0Xzfq?!YUjqQJ2OZ}xw zO4iv&P=rXK z+pg!SP616FhVdq(jLUW#ZsjVP`cYdrifge-3A@&~r9hlw)MweNm5GK*0cs8E8Roj+~Qu+pK zQYQeJ#&&mszRv6GBj*$Y6A{a(>cKU%sW`fgXwxmO5q%P* zJC#5cRKMoe6AG>Jh$-`k8A~_0BM}pGZ(x3q`$PEj`5hHP952N^yqPmEI5sVH@FOr_6BD-?)S3odgSo+EUK&1-ZrYWwQk zaA<#l+=tvSO-0OrmhcP@G@oG&th3W>xgTk;#8p3)Fx7f|F@=xcn?RroG1(DtNB7ry zF;=2Y#I`&9_(f8@Pj+H#!cmL5^bMA4C;Zy5pp^V97v+2X$3~`;FuT{T!(S&msfble zCrGzYkcz}vv{FoN?2KBgBT{qo*a;aPHrLUQU^PV*Kf4_sXd>VclpN4T z&zT~f2HFCfNi3c1X>_fE*yqypou}lt#}CFPTcH^ipXV#F=AZ6<4duTC`pmLcI|VyN ziQk`Pxy(&R>wh!DbQ85vl96oq^@dR{+UjVa$JM?QMW$m|*e>H6S!_q|nt0e91qZCE zSO_Vcg@e0vUN*_>I79&b0FOYHg}JUDF81ArCV|9^E{N$y5!b$4aX$z}6cC?=7wy*somfitbTj$`-|3UvXjM}#flv&_>+tjPqOnRQcFOiG z7~$}TQ0N8kg7xyp_!wU&`2Iau(13_)x{1Tf{_DRP*@JQr@kV}ekwE_xFt%&m#gfH3 zk4M)K9e2cc)}O^yEwD68i9JMuEJ2c|xUt3H`LU>{gG}e7MwdC)v(y@MJYeOYuhU?i z1oPoNxtir#ich2Ak5ZkkJ;v`?IBQI1sDH=Rbf8G zLMz;~Pjb(kTpqpwjSOX1Pe3!(?%YCa!X4CIKAl&v4uIye34z1nm$k$`)}F?(>T zdxTN11aw7h=`v)Ig&)~{XC^t>GG=yx%Cj?_SM`BWAsMFN@^tw3T{!kkUp+@hkW{G7 z2fQI46euS7}yB*qsSI{8DK78LbT;{UNM-{;RNOp>>771^?5@~P{g2?=1pR>V!X+| z{(QwOuot_v%vfbTi3fEMGu9H$%_m}Y9+_4%j@1C>aq{>k59@F{AVIW}_B@OZcLIUS z+JqO0S`fcACb&ySNP|^L_ihM3X8IG&GHPo)C~FF2?cm+ETv&3E*HECbj7}DxS!2B~ zBJ;2t-Raxo?d|@}Oc#KXm}=PtVJGuLzw${Vo$f%HTmT!IEWjmX1L)^G>tY4XzjOC4QVbj!L-8z-K>8vvGMxl16c&3$Fi3DzX&bq zBi3`_QfAgy3#h!TK~x{JIsG4sI>X6DsaP*%ak3VOQG8he&|s{8oxpGD}Q|lo=MZE11ZdVI9r6 zrJjes?#TPoIcT*=#s;~`d#l>M(fUi)Y1aYPNq=!5HHb2`)I85TK( z6pXT!9x%?kD7z%1qH^iWk(o{CgbE@T`uWtSof}uW!lu)03g&u*=^sgto!P9C{eElT=^8 zojOYOoZj8Knvmp>0*3VCbVs|Q=%&xtQGPgQ2mBao)X@}FWpQMAJNLJbj6tgf!^s`K z^RBy>eJ~sOgabJ)qKAkwv!AxCZc2ZvF-}Q3DI-OgO?Dq$l;Y*trvi2inCZhOX%*j` z;7%gcHXci6J=hiJ(e7w7h&rzAJ;$y%drJPhc^xi_0bCe2#?MMJx=BW`3Z)^zVpo`l z;vMlR(Ed=|i1F#qG8=X%KlKp<<%^=S59*M{jZUo=1g9Wo0hDx#fWsMl3weI#Hsmq7 zpnewQ6;(T*s0?vKZ(8>gZ~y`ag+^Qt%F&NBho(dz;t6ziwVmzpzQcLHCw2xHVvW~( z9_8JXfncQ{4iiN(`hf*#K&ldi2R6t5sj(3lCEhm{?SUdx(wq-R3EazV(W>aCfj-6W zP}Bh-{E}}kqZDWIYXGrSC6z!bGg6zjI(G5d&;|Yd zVeSx=(K119gKqeL=Dpjo0^LqCc^F|p$o>%%PI_cWG^^F_meelxrF0pWoV!=v@%arBeDwx5hoL=sh?9-I6-=Cn zGMuTZqB8*vY*-w=sQ&wYKOOS^G6945n_!2LpiZTED!jaYF>S2~fBb?^pzIySs^A8( zQc6IP4NmVkNZlu$9eiG+>e>~jb{@P5OxHpuRs zA4!ArUQ;lWn8v@?OiN`Aa$5JS6Xm2eV#By<@>&++%zEwbgKXG;VZz4^Kj^6kc5v^6 z{^`1DE>uZ33P;K4ITnw@%fO>#+RLl4Mg2D2$0SyH4Ds*nzd=hc@-w|$1#E-{d%Mqe z?R|&mN2pgwNttLL_RRxdzoexcu&(q4mehdjuP0EAf-O!Q3E$EFN_Bpna(`VZ7r8r& zj-}_>L^wlhx(^;@KuMCHG4Hr8bs9lh9}mQU*llt}&7vy9VF(L;XzwJp{jG@L{UGqY z0DqX@F)$%*!Qc@5vOr|2y05dUL|uk%eQ~G@8DDdru043=y@^Ai;_d?Wvoz)2&;#y` zbU;2LfA!_5=@PU)uy-It6eWfSy%Wv{d~CsEs+z6{{a!i^9JK8B6jCkDc)*%U*{@68 z=-KvOkPoTkk$cl)P$1|@$oewb5l6q={r}-{%Jg>?-uJQaZIxay(KhNMdHqL!K}K8z zU?QB$)xvZvKE}-Z$u10;DM0r4iP~@}d*J}`6bKY=`iJq0rF|+MG7QBCV^$b&yFpXxN<5j=@gfh5k0f$|3+xL6k(F;!lYkoU-+Cq$f`0^**!J6Ff_l zy{AT3{f8Am&^>wq@kul}=UvkC2bakVV9%_KlFmz^`5c~Dfbvp~;KAE$6JM%hEZ0M? zdrDQwR$4Dk8WlzIHQ#Z!h)GRtwmeRfB>>Xb2k!ld8UK%jFWIS!{v2$DWkNye!QNa#>1;KmyQ zGzb{LxLIgbN6>5a>nKK9_80MgbAi#DNUSR%zt0!tJ)^syQMwu5yPbGgT(g6PPb|0hf;@#JwGOobo&l7 z-d(z96fDFUBN5z=^yuxlY)90uu#t}B*&_E}IOAb}=Fp386r!`CO5Fh+il>DAY*q47 zZM98)8gvjWWypIJl7p{vr8#3*y?1$)2NH0xIDT;(hRoaajECE@;X~9~Qt*O5T+5+U zB^A>I3x-x1+gf8VK<|L*fTa;^`ujJ&G4n~T0Hm%noPe@i?kkN;4*X9bZX1D-Mt`ld zkdTWCMA_41rYd<4lo2fs_XvCv=N5c1?d&3R#656V>1(!L>J1yB)A9tb0{5l`!4QXc z7d83~)FeuIf5v_f^sD;~PL&{VOSCa+HRV3Ji|F^QHL56&~rIioF+B6kBxN(P2D(Ug~I6Ry~M!*)rR4Hq)5t-DC~RtCEUfZDWjo#=>`G4x)Uu;;48rf{}&CDKHZu%{?~$QOk7n5Am$s6cs-Mp z9SHOa_71m9ulv|Ho4~#fDeG}Npw&H#3JEDUx!fyhqm_I1bXcIDP@< zT&7DS_=oM%5LL4uk=-sJ+_M;d33O^-XyBqEiC`oFy*o`pS17AEMc$7PgENSoh^C!z zRZ}4WMdy-)a~uw6>_{|1d0-w2K98j;802|7%}{T&coIFv*4?7Y1zOI5Jq+#sXCJS4 zu=j}RPXhKYk{ejPFuHC)Vb1~SGuBxb3##r^U+8^|a-0-Q%Z5S1tN?LKh^hpwFACYD zt%J*cU=@5%VtS9|q*R^4N+a~5RavWXCig~+n7CYLom4hL^R|VK0F@nR#zOpOrYP{o zs1ID847Ylh&WwekeC#0XK;mC*9)0wEvY0F#+qA#>NgyYBCsDVDc0ya}Ow2t-5?)n| z=mY4Ui|R56kjMv|AkcsZDP!{`%4(brPs{WCyb*R@z;;l735`8;%$%{`Z`$(WRkAPx zoez1B$cI^zsNgE-=;hNa&hvLBD<_JhJmRdbbZE=mJehA`O;qb|YW+KYJt}U1YJ(o% z61SY-s5Tj-k$DA;vmEK3@rOVwToLGtviB3xABO(&%aqAwo`gVql5VKUmyA}2*Pf8OLoSc&w@JBh~o`zJ&mh79Z1&bB~grlkch*KXr2Kps1 zZUpUJsLT!K0RHb-3!XR41Lcj>MuqA2*uu>jd8i01$P0V{MTQK;{N`k~m2^t(yKVsw zWBIW}D*d1=)7rAcu;QddoE2d~-KYGA{26WiUMtC#ft#jh`}7(%`C`fdA-Jgb`OQ|p zLE7)apC-O}5q3ZC7X)0^B)l$n8=V@BXHn~sm?3Gf*ZUT41@`;{8>YM0KbijO(_1~z zdtpbJzQ`3*P!n}r9(L3ZTfQtg1#ER}Qt=O;_46=hW_V);H;1d?+LtHCY?37d7M65E z9zQmokYo~f0ak=cdo9Xtrk#Kp?Ah;@b)csxY~ws`S!qmMmt#$wOE)i(^uEB^<|r*a ztEq}5gEvt^ec3z$DUo;1UFdp!D+e{unL$roI^j9YA`Bm4O8T<6CLD>L{(&{VJaRrw zXntMY+O+@GAbV%v4&|OIrLLrW(11Fg*b1c)h)|+mD&VhsB-4;RGFF@>_&>pH?8oxq zRsI?jd4eF}F>2)uEPtXs!`?YNe}#se`m7I@;IV11gSOc{^cdY{WYfB_IO7xy!`n%& zPs2x5KuKVRGiZz?x?0}e>AB!xSpm^DnbGMvoNyihHk+2>PwX1Y8EJ}y5>c10axg<< zuJQOT0N221j*I~RKLEfbVDugi{Pk^8?D7_5is1ew`;SUQ@}pR-E!C=A7GiWHZqCXE z2x|6e5$<`ZFTSRfaH613RSM@f9p@^u;4ypy-wv$FJ8!|(ejIVd=ubI7*TkG)wqy+t zXzK`Vhspw*Ge2sgrr&z#MEw(cku}ND3!kwA)gv`R14ro6lqpyh8;FdnIEzv+jp`gw zGkO%Lgvkal0e*n)w-kPMrOH9^x!}J=ku)#(NkO7X%<&L>Vrw?dIZm_s?3U{P8@ex0 z>Kax)M$?oJ09cu;9n4Fl66U2YPv3TN;yNQgzww4dQDQhnV#vffau-?vanNjaC73>f z)Jl~biy!6ab`d;FS?I-Ub{RKayeNX-Om^tbz3^Goh?0%W>)=9J%ja(L`J9Z}y177g z1#K)tiaELAn3TrPM zzyD;aqepHBNDgWcLE_?vqydSa3P%>lA5`Id;pgTEDo;0{;Kw0#+Y~)ER>r1e3Q0~s zxH~tnk6I?Y!l7OdxP9BDqAa}E&F=e#1=Ie%I=Epu{aTnEovmU3zEWsX4F@IJ{YWg@ z5cp!B`Z)Dai*NMv8aLAoa^8lGul`BA@z8EuE9I$MOJULXHI&VD?(bU`bW5!p>Q=lg ziFoP;Gl?FlMv+7^pZbc>W=cy>_bicV?pY=E0mfo190~}6@M_nMYJ+>N1Y}aE?iMWp z1zH!%!e7AUnkzyr(_uc|RmgEt5jS?#T_%p?y{o04vNLbAD(_|5lo*>-2=6IdbOczWxqyoIT1(+94EyfQj=?mNX)c$|?Bl?YPB@ytx(vX!y%<=fl?iJE z3@Rs;U`wom`Np-gkYmwe7P9K8L~iCVXj=)SJFAFEWA*R75igTxepHzit`zQQmnU0= zlx$|M+(bQ~uvF#EwWGc2PnkCJP25vv>p_V;$Kfs|o z;mX>U@x6A8z|6sH9pGbEd4rqtrgPmO26~qT0%;}JkHZbVjwi^*4-U!W!4^$}Vn{re zdnYXS&R?5h!52tx8C%Rsm^)4K>fu!5pS@CsI2ov78?K-QjvXokl&2T{@v-N1sm{x0 zZ(m183$yr2dHiR;3QF_rRrff5yqC`trG!9d;#j>s-5I#Urwk$e$nry6B?W2A-sg7u zkz93c;?(M&bs{d*9Lt^?V>nagf~&D-5@Jw*SlNQwB*g3`#yplU9T&(O^6l?>3N;ye zA5m0gj#?m>`Bsb6f9SU%L?fqxB2ZJc+jN;)fTtlFKaO~Ox8NGeXxd^m8wQje=_Ygt z<6p(>n_O0$MLSOCnZ9;G+^Tc9t|%@s=(p&6_{7i29WV2c?fO+l=M^0~gY0`Ymq~F! zn%+}9s_bBjUFwo`>7o=${>#o6Fopt$ytLK<$eYEn>r2HA<zLxTe0}aK+DZD?5EmOg>A)b`raoq7O%%)V zeuM9tY=<(-u}rC97F^rWs|6q;oohv>1anu$sDtqL5{A4VUUHxL7gp z;YwuNylhq{-*<|>JUMSUSu!iFLSe<`Ue0sa9U?E;)+=-KC^H~&2l8|3gp z%MAql$0VLTj3|m*qz;*K-bs}hh5W9aCNtL7Bnx=_V2L6eWumvnkd%v+dNx*gFhGEh z`rHvX)fVQ-$xBx78n`Dg=m;TPnqeN<@Vc)j1syVmTI;3@?n%@hLBO)gQa37=+yOaQmR8Wvqz;Pmf6Ky<;ffsAS#_W%8O zgg8nTj_!ALREJ(lA8z_x;EH`;O^`yyzeYr;n(BN9A*yCSR; zt2gY!gm7-({vRv)EL*x3rF0B7d@;~gh#chc*nU%%Lw=yF&Pe`rIH_(@p`TFFOg=l? z3YQHR$d(+xUdU4E0s@+SAU*Q_^+Jd|-ZkyZ;Nj;gfkm%r8w&>3Y2-+=+>Oysd zTE?;?=2Zxz`(#4SlYC(LOahm3XCKYb%O0TDEytuVt74XI8jc$XSYRT~O(Q-nsKU`{1iQ?d&4Z?v`>RyS}Cy zg+00C2A7}^SOe3a$g#>o5KkJFtjF*(bKCJ z&WVh;<-WNn$1NrnzVX(+%UD^oie%aXOuta9kU&&eBxK8U_kG+n#m}+l0(hv_!w=|c ziGxpOc<36U+C1B`FBC601&!eq6X>Y$taK}eOZX$pMph)iV9RRasB_)$CbCj9w?sc= zz|s;)gn9jz8%XJ1wX_CfcSVPzIvc%0M^=Rt^88yA|M~8#rwno^YbZR3uLThAU>?%q#36;9S;whc$61(AnpfvYl|A}^{{Mvcx_om9EqOKSqIhn5 zXi7g`c%J-cKCQ4LAJwGiMJVY7A{1_Ivt{QMiytwV9WIH79o%tz0U|}tMyMl!D61LI zy*;fR-Bz!was(OY-S9IOfZDBfVSH>lesiNaT&{%3Q3bc5oN^Uw{V&5C|AbbUOyZ_o zg@i+zZ(%p&e(Iby8i$k_F#vppJKkyS#fWnW2lqB zS)+CRB?nQH5x#m|LV*Zo7#gZo@`LYW&rY50@Jc81?NkYsfxk_Ml98oYvHZyQ7FTyP z(#>Q(;De_?oLziF1PF9RHMcIK5wt03JfdUKgaT?giuNh?qfnqXtv zgwbR(+HMa?TkWK=r7WaIR# z>XEdg1Ca&W&qipmNQ_!izaaPq%_@j^nk$TY`$c|;FYMLIJja_If;U(r*yV3|Mw&XT zNeRl}ws5)WClWooe?w-)LY}chl6TIh_&B(bDo)@&pFn`jA`W%3%^1noCy|ro=wp^{niNHxEUD71kvVk1HSsq?1`-U1i zYuJT%3}^m!w{y<%wtz57sa8Qd^V{ZmyW~W)!T)VSW)+NMFi{QKA1cdxI{%lSdSocPT)*e?W9IVIb8OD5P@?e zct~2TvQMoBNf?Jhx6=IE^>KZ3v;sINv236WA-sVc)CZ_~9Z_6=J2g>CoWY*SZg*YZ z$*n!I@#2W5x7SAFwMl`YS4w08cq)~Iy5LgCnL8|no~k*07>TbguqC)(2qRtQ!MXe1 z1I?fA&v~tqmA$l!7_05bu%B}#v#ks=`}chZ2AG)9V+i2~uK)b#x%v)Ke!f%BU5fTr z0PB7Lbl3G%4UTW{_}`_+=%Lcq*d5#Wb0;6 z(MTnX>X*^;06MVphIAk(if~zF^)Xg*vvzaM7_~c?e*w}i-|wQq=9(|4CnIT|P}!{k ztMlp#e34SokB0jaC5PPk#%`QEn4P|GnO<;m{AUlqF?_kvCtMq<`6ar=vj_`vUmt}* z@hjtH#za!lIuFuLQ=AImMC0z)1Rp|y+e*Ztgk>!oR zQ4-_2XtuS2zv^1&FaFV1x3Hl!-9bc^ zO4ado6PtP-15wiTM>&`{OqdQU`-AT3DSaoh@R?l={Qgy9-S_T;{0|RBAAiEDITJ|u zgcX3gR%C6Xv0Tax97$$o4a{o$+rol5q>VzVEn zEt@Nuv&qfaCEd>D4Oal6)OsWI&469v-7}pa_X0xpq%?T=2=@Kl*8c50^O}KUr`^LW zqn7$EB_~lBRC5c~b4Ur$V7Zz8Sz3pTDI zWb{>Pjc=&Mp6#5M&>KA6bB<+G-6|u4eu<9;q|cTU2j5K?~b)Uszp6xFWwE z#jJ#+8Z;`d5`q>e-*8RevC>6>=psmH1koqvTJd~^GvC{5D=!nKt6&XUR{s9r0DO%% zZuOoVnDQ?r){T#f)>)0Z{OKbGDt#b-rW{=?wU$aqtfMVUe~!CfbTFJh3t1ncyIDB} z*yw3vHHMvq$$ICc0m(NJ(CgZa!P}Ho!V)*Szv~XsM}`eiz&bTri#6^%ZZwt4Fdf?& zRwm(xa9plgcRjzrL@8!YoFL4|g}@GNiv%d4Z-RFslOcE6yje?={0z|8Ga%JMH;=?0 z%>fP18N^dLvoaF%Bo-CbZCcX2OQk~rHgySup0(w+?Y_blWXqVev5N7D8tQF>Mq0s4 zWU584u?iN_)*X5z@%Eq|Qd2{W4n_@#GFU%$id9&@Rj+S66zxXxV--u?NYs{-o03gI z6e&g5ZsAv$7h?MF;f{nGZFat~K#jNm;N1{=N!@}_NGvb*Puhas7qMSd=i`z}p5=?6 zf$Qy$PaOsO5uvL-u*aO9>}o&SKj^Tn<6eTI&kN8F6&$6mo5vpJRFgv0v>m@`#+Ps{ z={R4nuYPRmA0BMz_zizyLyVh&Pg3HcN!7t;9AwxaMfk3>p1G7c0$#o~K8s?8pv}=A zNtf{L^nM;?Z#=Sr6Ej|*;4E}Wvzjy|NQG2##zU?to{i;6-B3B9tKXGcnZQ2Vq;g)r zn25s;9tM)T%t3e9h-&WU$Rk8Cg=XSy#P#>!*^Fn7Ra`x>B_ie&%_^B2=fj4apy?YP zk}Aekpa%VIj_hsVxA18e2$1Qqq!Z>rqii0mWUuXbtYKZ!h3Y61?#WTGUjb7AqgaBV z>y4N1&GFH(^Izsc1T{X2dQhI$^!8Y@-lKRNy2dVpw)j8bz zBD-m%JMQbu)~za!zEfBH(j5Rws!y>lSn9@BQZ8*|fcLi9@UM<*+W{szzD}xEEAARqgm9o)9dGs^KwMyQx=GY3 zVPV`uNue3@6qmVoE8Xj3uNP9^Z42YP_paplCd4&Gr^B?}DxXNf;xoP@Wx_n5u50ST zJ#y2|9*>d)i9?rK@~8{*WMaO8rn)PWH zb36bw79elr#P@MH^K+}peh4rNYBXfIbdvcjo5jYeDrwX)Op@L$j)F?S-gDI3er-xp zL8=JssEX&{CbAf}pVr3U9tSt-rEdIr5k>$;aiz+~_NCH}bx{5~bVD6m8k&OQqM{jb zonwHUjMg1)-ToCw5FxMKb5{+VKIGz83N((Ff<#@XpZDK!tt~0=F4;K<)pH?9NNaL)|3Ot)31Od#2HbzGhHTy#|m({Lj5pA@7M%YS}~Blk5^Fw!1lo z0*w$b=sFVFSzjN~`t|;7{l2RlNJi3~&b+Y|OxT|9Y~ixhIVM|%G!+c1aRD+K*I}l0 zNWmmQou?!Jg&Mx**FXZBZmEjwG-R@iP0JLO{hutTRikXWD5!wQ$$xsfu^E*DYLE{VtCxOBia0 zK$HYkN`)>ixv?i_3z`BZ!3di0{SZF(d~Y{&<>q8jIc{eLbhAuAq6 zT+LE?65@Axm1T^^eB?g{u^7nj`%&;z9B=4I^5 zY45B4L+ZPxbbrjw5BMmm^Dd*dE11oJ9^&Yi|N5VEw-yj4+Vg>(cn}5g6f~ar+`5-U zxWAbWeHv+p|DgT)Nu2PXP$0_qpi)}$r%YeFn%r~#q?lOIq=ttt8BE0j3_E`A8rtIy zOI=J>4$EV8azCAWtrMpLcdCg2e$}P!MPVQmfZYuw@n(*GNcCd*R8!K-@!j^z=WV7f z)le52LCXG6-L}lV3S1BaIkqaV>WQbPIiIC^URSl=a0Ny{ub>)%w$Stqqz{EliVyj6 zn>-#XlZuP8;D`=KI*BhuA+a|*bNZ=uO+7BVMr)Dy*xR13#wS$Aviv4Z*KAj0^udm( z3nKA~uD+E{-Uk@JDl1zWgb6QQ@XEK}DF@oXd>`?%yT_gL7I?TTqTFPfg=q&Sa0_hN%)Z89 zxeTV{rw|G9S;LC)@cuC0zEV9Y3?gB?Ky5yTPQjs*NlIG_{rhfN4%S10(=V)9rT}%|pyeLN_ z85|J(a_)$~gNxUyc3(gXDd^La<%}QmF@3dzKYQPF12q2*xoB+bCCep)vuSKXY+Z1X4`nW!|6`U}k z6@?9^mlDJlf2ll;Ik@zOZbVT9Q|w+O_-LKVM)1P4t z4bHjzth(}-t-cz8bEH6tC|r^s)CaE~8{9)rEz0v>4QK|*!X zMywlRlAdX-Q9hX9`+F56+7R7-#FkN(rD4WX&FXt3@)jbdM^|0D#UH=K&wPLbRp*RdSq6 z7vF_ID6J*&zGT6A45O)ZVL>u>X;T~ z5709h7^~0%#y1#S3m~1YAy7~;3*YV0p$QAK9LX1o_bLN>fS=@5eg=dzqd+qd4|g=9 z3o>8{qWeSUqjkZ~!k4PxY`vbGa1ttAd!*UaYqTgZ!$;U{jUlAaC#_0QSvnI+rs{3R z^Mf3S@?<1t(Uil9xBfv=YJIO z2p6PnFR8YxmLazo3p))Bp_12|cKAAFr_hjS8U@?gy=t?2v8pno{H%1TpkCQc2_0N+ z4?wZ}T#|3nvjZiba&El;WOLTO5JLSigps7MVfe@yJ;=nhWNQ)#WzN$Ik5tIrV zEIaCr-rt5R#4yQWpIlh=P42L&L{^&5I3#7yJDJbb0Do%()3WFV~}p=uvMvjXUAgs)zKdGKvm}zNW5wKQS~><1`%xLP_MV znt?0v=xl|{TWq`iwglr~0A}x*;Yi8FI}IR>mo0pinY_D%~x+9aXx z5Z?FzsgUdsWVkv!0 zH0!do*0j99WOQHx_UTs73v9;OKWwT93xt@(7EJm$&!%;!+3LR_pmOT|*aSs(GJ!nB zS3BXLf>d&!gQ~`0#f9$R=46lXEy}a$mU75jb^OC^BJ_-c)&YN;sP>ot>8w2!D7xOG zpWJ+)357AUHoiP0Uc`C+_IKp0hWL0hbBCa-MqT2F87Vl))8{^A8=NbF_e(;$Ji%gv zk1HKwk|(W8ifPiyN|)d9y!-T`4FR#_rhyj-B1Ql{(We;inS`~0*aTki0&QTrR%7IW z={;-}X_cY7^gtvdtOi0BuRT8o3*sZV?A&~0?9oxH>B&*1dHF z*jO@yPVc;!=Kj1DJ37^p4GoHFL3;drDnA`kV58Q%IFbya7*RngB-eW%0nDGC=n zK(Xp|f>(v_d8(op{&EDdg?~xtmy^E~z*QT8>YgBHI%mb?>prm%XC77S;;vM>>(tq7 zHnr$?_l3958gtxdJgSqwYe5&uoDe*WEkEwi9hM9}mmpg3GG7`vA=B)CS`gS>L4?8M z*vexR*6!%%FigrersXh|R8EaRbKr@;W8a!SG<0oNvg1XpHO}5jePTdI)R~W;K8MF& z`iO-+Uhsuli$+fS_{#a-G%ZggMlqTf)hqBVtfy-7-3(AWJI4b{{yfB)vsPRmemBR z7&}u$?s9>>o?)OD@tA5LJ)0=VZIH|>gI{UfHt4PWDsM>t?b`TpP-vVtmMd6q0+C)J zNqvZ|2cpG{sBMK#3shGx)Q&K2trRhC#@e~tW#tFSb-P5mLlL?94l5oRgjE!%)rlu{ ziXP2moNM5_L*OxDa1U3>r5s0cl~I5uX_h>amDni#SyGTTuJ zvQ-X{WgdKV50a|=J%t4z%So{c!#i0D2Y6jzn4A>xuNL?!3Uhr^F7=b81TF$XozE;w z4#<3aB+tN5$UtTn4>3K0l7wS>75@y7p=QnMrw@W9+# zmRk)MqPgEZD|bYi##AX_>AN-_d>or_{h+IHc60BqsP?G+w=cLsP105DGm5>y7pkjq1 z*`ILf5Sl`ZJNVJFZ3b%OUqGW~Q##y0z!r^A_6q9^JV1a~?CtOJ(IJjKi=^x&(lnCD zV=vPRu>sGC^DP<=MckKJ9P;=I*YIp91-{Q2Ka=Brznn2k}^ z&SrYyBbL_dy&Kd{Ldg>41(XV;M8dzRYD!RLD&fq1I!*+ZzQ&3x48{v=OAO_Vg%GRP z5Q*MYTgIUvIP$iPn7+QgD*ZLn`|zhFTlaw_9?n?qf;z<7jZtlnPkr49FP)Rq`a|g$ zxT*f3MX4wwKQ(5hm1T1KaI-Br_&*QYkJ8@z5lP+N{y?vyxliI{ler@H=TwX#Y9ZUt z#S);DD5&efbARPC%o=GZ$#To@pmgE3msje3aa96Al8JL|)NT=#P8lMNNGe6q$2Aii5S9-E#qo@MOnQwfrrNLEN;GL>Z@0dUxd5Ve7T`^`=k?RPiw z$^&^r<}>bjBaaBVor|u#ezLRL1#(dQN<#gvI5mUExpHgbORE`DXarm-CeyqU+FZ;_ zZ%RHZGkR%o!%F%@_vNWvrdq!wO8`-OMo#5v7v@w> zqO3QX3G2re4u73juMw&1(5tR}Sl0wwyKs@%wUfq;E3AtW`515bl}L81vm-F%GUwhn z6dB0-5-a&sB2a&oBy48MfRWFcEKEpmJxwCU-A*8zh3r(eg{=|TaaX^s^ihgmjCakk zd^atVt>A^SCLk!gBH21|Z6gRA5DS5|GRrGtYs~sr(qM_|Oc}DfRYx5Z(dmaja0iODPRW&mqV!PU0g#OdXeV#y+6( z8ROzrYtv1{9T16>(9E(iCN1SG6%cMDkTtFGb7=NrPlMH?$%j;mtD_!1+kX-T8?QC7 zuD;^$&1d6xX+dTGP^I4cvakzQlX2JDB~X=ZH-)owkIPYZWuDdJxKsR|)f;jho^8St zLDR#PL^2{YMv8x{=g*QI8uZyG0m}~`ITZlcgvcoejry5=@wnvicVrUa48e(HA=^~V zY_^$UMjeODe7&J>&+e(dctsLYnE?OIOVagI&kxHd6buO$o;^jlB9%zP>;y()pN3z7 zd(F;>Z5fmU`|DZWV6Je~#^ArDM~<~>8CvC@g1S2oZ0q*JqAwTuqo+5b0$!SUKb35z zTHIJ>Z4u@Al{0liUl z>~0v*=isRTBsSYe@tl2U9CM+EG%!ob?xIUxvnD#+Tk&BFH})s&$AWrYqwM-?Cqm)D zoO(0q@VIVIebU+l$WC|usTI=%;ixwAqb1=`8=hOBh*+0U2F&Ki~ zO~6o+RJ{GP9JDmS1cG$+rgAk^8`+MZb2PKOmREevOmDb&(jQaT$C#azHq}`-==&hV z^i}k$t4|=Xz%bsqyT_K(4@JzY@^gDm4YW>^sUy~cYL_4{K=EM0#<~45$t5i@XW2Gl()mgS+;`%< za=jT(twoIQHzNgTdnRSRzrrx-j0R)9&e_u4=a?=a#YSJe+TrZP4pEJPjX;Txe}DmC zh0A;yPX@bRA7LCMIv&}{#M^z2S5kS73OWknVDD}%GwGMs}hco8E5m*eyD&Bb}sAGb0 zF;;kMWjhX_)}x=b&l2tjA)sMZwaMZXcCoI>;oUWR0gU7^L2jZ;sVkzMDS$R)$oRfz@QbF7)wzS>VR^?e9V*WyAU;y*lb^|!(X2P;PT zMQPYFES7<;_OU8=ul`X$m+ROlO>u|SK+dmI=a~QO>T2b>uq^qtx2IHpYh0ocnPQ>m zzjrZ~XmKn4&ZmqPH&YVz*ERCixt>IK&FSavZczdprm6&--w43t{8H^{FztXyIs-s+QH7wk9`toiQQkm5- z&1!(QXC5A4~XT58svAyIfgMm)ZJ=?ZE{W zMX7kMUAbispxcoZ&|H=ssO1+MZz0gE=KHbL?s{so1{AO)c!IdcJL4@@oQ878Q5hoF zIMuPo1zL$rQ3~yF0A6Xj6K}eDJBCq{MRb(zw_IMX1qRF~+px&VYi!qrJE5HfvzqH= zqu7J%RqKW>D0ja;f8!(uiFFwF8zGb7G*@VWED+h^UkgnwDsyhcRr7chVk)thi$An@ zPmR_5N1_MGo?dJkST<~N_>65fpVLCT^C5HIlR#hzj~d;^*3bhkgl#&iC}P=v$<)R_ z4corA^CX%m0-X*fDv)Yl01cVtAJ1jQ)Xba^zPv=5q4ELiyx@CpD(7zm?t$6NA3gGiFnxJl%siJp(V~N6D}7rqGM16 z_p52g#*;l6cbc4|4>p!E?d-+i!1vTC{OM4Y&v9$|IMep<(T6X%yX`ft6LQc?_V=ol zQ^Xoig9oK~3dZtZUK5A!^vN%ZEK*;W;|R9&A7gsaHOQx2>cGx+ind+y*Bs)_na zi}D3tHkba|W!LXH=^I3DcLrqvLw%K zy*k4aTZ}j)q374yai(+T4|@8du^iDp9dyY1{9$((dXbY$X>INF(k|XtSA!eA#5^TV zhJ`S4jNifE-}`3AVu5HcWI5aO@|(6BpRt2qKw_6OQA;`3w93@w3cx+q=iGvbC_W^V zJ$WG^G0|bk7rOb%VHoF)y_ExZ(xtHmVdm%)><7a|kL-{!zT}qy-}3xysoPC%Dee0L z=HKzJ1=8Ekc`hm2=7pb)tcRQq=w$fQoMmIkxscu-Fn(cw6BHyI;zIU7Y@N7+o#8sM znExVeqLHG~Zv#@2?uU~NTs$hJwpy@gPV(_{lkmKpA_du!4QMh#SI|ZNJ7Rs!Gx`sk zvud19^?yjZZcXgo7oUB;_q6U6!u4KpAnT2GfPQ>Y&&qEf590Q`HgB)ilsKA+f@+{i z3B=Q+vnw?pjQ0BrAVJtO9>eZSOLYc;l{&7a_b@BVq)ej-&Vx6e>V$?iya9AR_Xfvv zS=_s2S3}HoK{QdR6iq1MLUKHWv-j7pH;fte2{FGV{iCR4?)m4-8OJii>1SGp0H+N7 z&?#4kSuO0qbGX_rN4@*OvTbhZQ{yDwQDA8s*4Dp~tave+;9bKZS<&{=>FB)UVRC^)%L+fN?FQooDC!4d=$!HCaWx@0DL~vcu4Pj)co;Z8=S?$UL_C zoTi~WSlIAX{v}Mbo`>im&e6U_`i*lx--?wSq?UQnq~~&ly9Fe|f)+Vqr~|+bJv&ll z+aHa#_M+NnDn6}08gCL()tI}kcnn~~kKWZ`OMj5C^Etg8>6Gu)n6Lxja7k86*xqyk z18E*Rpc?J(pfR}EOw(Rz^_rMuFTmTU^H_ACfa8mz5sUV$Q9uU<9bZ8L&Np)G5&U?t zI*tL}O5i54qSMexhfo*qpaO`*%i6J5daywbmDy{)pOX;e>8Lb!B0rT(pE3GfqaTt# zPLI3A6#jz`sxxffqdar|g+0T^p(tm7t!3w) zyTX9qugiMW;)*DqZ}}!TWXNF(lK#jSmp_%t=D~ywpNgZe6ikzGw6y^Y@=5|d+fVY; zDYFU@tlg_Z`y)XeB|5ZATrdx-kFH{!R?o76CyiU)v9H3u7e)NUFNqiu-Z5tUz8nw;k0VhU&P_^8Q6M-kiDCT3!7Gg--HP&&}^|28->_FE5XW|6LIL^oXm0*VU17D7`a(br z3k9=;%w)g`9oh?)aj_KxE)af!ofud_J|Nt4Butm=OO^lP}HuYyu$=No;6@MNOqvI{UDW#S1<)f&P6@p)3gI1xxDrB3Dkn6>@~}OLPy>oK%`{*LI0edTu#q) z+rhu!pqumFW!}{Dg2gT?RHO1)+zx@dr5;8)Y%~ER*2TB*k09V#ftvh`b0alO;$@fk zs)6pnId!!B+}h8PN$HLqLb!23wF%Igjs8f6ajR|~EOU92EiONEk-NA*wfGp|T##aTst$Lpo&zzeAkU&h` zFSnbPY9*J}B`XsP>m;|ElOWSpUOb6oxu-`AqIr+}2=1G(3rb(%#lhb3(&<2#E25F- zOTkk8`U#li#xY>-<3@5U_E9Ub`l^UgJ8i)^Y-Y=(&WV8$>Qt6^y@_0+J+>*HV~6L^ z4Ek(_hm<#^^#|_+YBZCkh_*859<3`vomI1{nlvcmlTH$mk^@o`9eezn!ul)Dh?l_? zmsN!DD0L`%e|7saa}>uMZ~i5W$tTXSa*4i;yLa0Ak07i@9@})Sm4A|ch7RB;(`kCI zwW#kje#p}@Im}S@E zmVo%=xbC9ETGEc7BcbuT)E(K!*P)zoK+;K*-fxRzHJ??I@GMW?4H4wLkDzedW_%#3ix27VwB&B1eFG zA_C3VxFoW#Js&)0>up;*Cj)91E?_f_@mPJ(DT12cL8zx<000dlFeOi5XUGL5RePtR{_6EobeyNII5CLzcW%DT1 z1#S~w@+o42rTi;RLGLuzGyBuVcgb)Z4k|LHyZRm;NSvhi8*UX_)dM`C;+rgVA=h*_ zqSg3DeWVS95izPzjW+cSsvm9*)d7mt*ij;^D%#0Kznx4t%@=zplNNU3}VJ_feMjeT$yG^HPRHgagXYeWncjUXD1bo-P=y20@X> z*x+u?`y6JFdq<-+eiBBqiL^c9x>}C?XB|x_#=!{MD<_vCt`&7=VnkIg^R3>3ryNOs zq-zmKCD-3WuxXpDL)3hZ*#xzR=WcnPn3Xiu&HxuUpjFd%eblqstEMiZf68X97IE_BQQ@}{7?deJyeVY;tesI5{7@CQZTTy>?87^!7x$X+;8>Qh)4{ih&O;1_ z5|20h$pQHrse4{+mh=IA11{f+Wpe(*q4&-@COKmRETS%SGZ7RFCllHR8TwfvhEj;b znAEC&+m|ZEg>%?#+7J8D1W(Z;B=6@P61trAXu&%oR?h-E^j8|=_t{@u(9O+3hjmCY zJ&{7MSn7{dk0RYa6qz`!CD={Vj4Ab!M!=4?Di_~!O3hmG+917oeB=+5#rSI75&w8@ z4ZsCh1iaPGuwwYxdk%tHclg4*ZKc(&is00|ho6W~g2vwOq^2h&@s_a%JBfSl4B|$V z&}+I@1?DAe1LrpfLH1;Qoc)W~2a<%YMZ^g7Ybe_cH86}!?FBUYnN(&tS(vMzJM%^o zztwLAEIr+K>avNl`9tMcU#dz|8{%HDu6U#3f9K;EvooGJl|fJe!B9=k&^O&xoW;h( z7s)CM7*K*6bW7$j-fnA10}AYg_+!!Fu`_6_1~`6**+a&=#a$Sp(BHe%aeQ(6fkvBYEfRY<>#)GV+;6up5YUQ_jsIy(zkCy6y1tBsuA_p3FEyjm1tRj@ojc?8`^q%;7MI$) zw?)9$<0H;w#sJ1V)2CkC-+=^hmM&`p6(g(dpuyci@=Z(rfH)R@5unyRumr9`@8g5#zxO4dH9y#)kMJ-Fl!k=h1dBnt(=50e$R5qj@vT?24Uj;A=VTA9q8tOp$s`rWft>p5c+xjGMa7wpsX&5uC}~ z)d#cKjf{EAUuAu0oZ8E-gv4zGaW+?_77j(|jkfzqMJi3YxH8uX8Z4w{LesZ%~<$GI<|Q zam>RE2fl{*X%x{YU|oJFCJOj-(fgCa-KbEIzch->azD*io9-1EBLLUW3Az1~+5?iS zO5BSm7V8j(#uvK?q%Lf1&%j<{v|$k-tU4jXx+g#x_hFCzyD>u!Udt+0*Ib>&Fs?1i zm-r?ypMUhni}btgj$>Ho7Jf+(vEb;a*3*Ek=S(T>_b-c5Nb4&K^zMm2S3?Xp0W}iE$>|p;5eqdUlwOe*7^3eKqy3&3)t7=W($fFrEv(f|L zsOC?S1SmjRQBBoAFfk~2wHEVh638mH)O*S=w_!ZJ+^&NthkX?20K$(JVuJM51I1M} zIWe&f#5@H!$_bi+Y?KTv8*-4qAbR50AGtfwYVZWZ<8nnDH(YQ|u1X*@YOuQ!hQUAy z6=M^C4|s~8S#q$5E7_Ii>p(^ivQNrHEz9w&$8Oy2nT+ncO>w z?kj4EXz}nWff^mz4tIKJ)(T_PRS!LmJ5Qy8-Oehd-!f_Ly+IVJ`~!G@%lkMSH#7OX z(Nsc+>_8_kkHj=M0ZUTPSXz$JTv=LmgwM3_^<JPDD**lKb0oKd#Jev>M z_*LxB*p}s!AEa}%4ZYBc{-o52c&N$O%V<(^=$V!9g$v-6rYdgygCB z2QGn_jyWFs<$#8K-SI2TwXK%Kqi(`uVH}ud+I3DvG>_7DBw`<{hFE^SJY#Y(S80Jn z?ues%U7@oL{B4eX`vfKFigigW$@9TB8{g`K@Xa}QpaE6(K2&FuRo^V0HHJF7j=oG_ zC`PtfzF(av_0AUYY0!X)jdiGtd;R|FF-}m|Ky_-cLDl5JhfI1!D_E*c(Q}2%V(!*g zhL|qMq*$_>4;J>E9qZ7V7R-m$i>xGuE==DbNEp~3kXkpLb?gsA#lvKZi%=O?r^c!X zQTqf_REd#-xdENxOq?=0fJeoYs$5R3k|}9-CXYdA;t?{ALcqThmg*OuRrc&VNH`Pcbgi0xw zNHJ^U zyh#;L#AF>X`|0$B3fQQMlS(W33^42`@M-1hptPl_Y`$7S)-*+-nqW_9hn9f-Fa*)zT`bw94GRv=;A% z&{H^~bA0z$)8?~%6Me~2CPz<|Wl<{2>>uWV8G7s<)EP%jbLFQ3f5>2>{dd+5ZFt+W zG{h8(lwwIs_$lO}=+qwdJA(L6J)PbOO8!!&$N%r4e}!Zo9p~qYJ%Y{(B~s=FIM1(4 zSyt^{?IWQ>Hl=E2&`8YbDRo9c54&MwU*^J({H2-v^~VQawT2r}CjKHB^e3F{$2~9` zV|f^mrb7+4Q&&qRrB+$0E zpPM3zeR{D+A-r0IePBnvcpWFbc2~h22O33k450H%mTDP_4A&fGQt;nv9ouZ!zYD}1 zuTMy`F^ALYUlebUQ3MZ=A#w9%F@x7M#S2$nl684T0VTdr3M={no7ZXjO1nmJF;dd~OMtEuzSiTz;*l_cJUwz28@xz-v>r1bSQn zs4i5H)e|v}_XoGog%zS*I{Kn_XRtqgG8fjU%{+$Wg82wbGWv#uaE@p9D`eg#*`6X1 znX2GhNL}HPQByICLn;GqoMQvA_L~}o?a!|-;O-A2N_6;Sl3~QQ107vmZv?|{Oq>3d zV*v@I2KVasxa$twZc8X*+(LTQ=yeSyB?%jsRS`0B?mlD-cCqJI2P-_=G;WW23kXch zpVkFYkymwLW{;6n6EveVMH>OEZ|nR#La@e-i%)_8VL4MZdW z;itEvZ;4WWS$K{{d30%Q$;VH1JEhBVtV(t@0DLsj3L2qZ&E|T&y`w z8MN;Z)Uo_UlEAB;bEkyUlcZHQ^J!k!G)x~BTu4nN@kxkB<)hL-gJ!iua2=BN%-@ij zC%=ydoS{g=yAUgNsvvB$Tl;K3f4eIp&m;QLzZvdms>3v^Dw1Wp)*7pxXrn6p9 z?y2t(7!aZd;U{89>apBNf%?0))mM_fYe^KGRoxEd8FJjW&2o=DadJeZc3FTjGQYPZoy@HW^SkQr1^;`aM|*w&yZvPWHb zSq|hy1-h%Ko#B_?%YFmxn^blH3P#K(MY}IikxiPQ9soY{I)e&+##OHSW0ZLvxc+Q) z*utI^_TZUyezEUzdAd^4Xa*zy-Jm_Qeu((~O2D9DF0Nb}?}y(x%IhlBh@R=KUq{DP znG1wRM0?DD-?emyfWWwO=_5~?sM1?_U*yxJjj<4h!gSH1>~ev-sjL9EqvFIBSUsXP zy3$cT+|z8|Wo8>$w{D#HRhfgmI5Gy!>CAo)8+I1`PoH^qOSz2dT&5bCvV4BsR$4GP zVxxH~ilW{t-;c)u49EdV0w6KB3ZTUXoVA^S$7@Ex-o-x3$u-uB2PUTFA08>P>XIWy z_YnK?HX^$(AvRm@NeX2TyC)4COE|)vs*+O`3M!izqKHh0rHBwAKh8dyNw}Ax_ZKkE zAHUk=$G--1SG=|jva{qQG+(8VQrB%pCSq67hU%C;eA+|Ww2u;1NEExJ(7|TvxsTqhS)a6w~c)~lvO||s?)B~x~KR~ApLn=?UnY|Y?W-wX#BZ@ z^DCj&)+$@?e5#}atB~#_<(N0NQflYT_jm;46u?WXFU)pK&NTesLbgE zH}|*Ys|G2_{qB%E{U67jNEUa74kMC0G!jFO?*3ZCY|GHy2+zUX$+YIU`Iyi~mrA|A-?Q4QEWjd{I{Y`pguPjOcjC@y*j&FP_%c1xn2%z0iG8l}>nvzXq z<-3>O6gN4Ka!SWAyC=ktidu&y&o#W~m4t{x9H$5dM85s;Dtz*Hp>PhJw~cMU9OE{^ zs4+ELD&R6`P-MQHJKYyZ4+1d(nJ_GbE@^C}95_E}qOlc?awpB@Vz|N1IQWVv3@%E3 z4F@;AN^A5P8E-ZQLfBQ&cwlpLaS5_GtmRO!WDjSo+~t1gcBHq z$Rpb9o|Gml0UQ?5ntGrEx5Qq(pW&q>zr-33(N=!-*wJ#CdS*geQrYyd@)BTX0XuMO zJ5Iy>ntxYTXC-4>6Zqb8`FMW=H`$9mD6Zw6oERWy3dKMkt{m*b?y&^>6nwmfxFs$VEcY`Qje}eWwAC ziW2i9tDJIN9PvsASi<-dz?EsLfr4&Lf%*1(tS&nwE6?67$p=_ZGDqAO=d6)G9F;20FWXy%62Yy8sS*%%L!ZT-60e}DPk_nAU zy+x(G>rX!BOSHLR9q1OVCP^&A70((8c&?X~x;R4z*5IQWGdXw1&&nmLd-ER*lfWg+ zyyWTFUBs5A+83~m8GX;Lgp+-avayRX1Y&C^<5xM{Y44PYEP|t$$0tse=kgCpbDnXN z9Pe}T75M{jvA4L7MnHhp;{AQ?JDm(-s2B;Kw{*?S3!?uf{-9!z-3;hk>YSr&cCTk; zgR*8^d8sI;FM|_L?1Ogpw0U0bJ69yFWsw3Cp*eJ4GO z*c_^@uSpKJflRCL{;tjRfyrIS!qYQQe%nDb{f>|xT){28^_e+wBRFZ`zn!xqrL|Xe zXjdKz1B(@+=q<^#3nWqA5U>P6PWLJagfZrubcsBu4DA;v2|(ANNT7;p=RoUsi|-SlIQ}^OYXPKvKrX`m!hCAt><2uK+eJ5x zbA$|2jN1Whcn_M~%PkPGrV3;loRH09wn)bp|L|+#B#|A2g(qybgcTJ>HD|6}ug?W| zox`Mhov-FXtcsY^4xN+obFY7f4k5$V(*nMzge~7)QeW}DTybY$eU}3+!6Gah6daVk z%M{t~+}-%sFr$+Upc4vswzH}>x_KuMZi12wd}JZOA+xv!z?XH%5z*K5{t@l>q6#D| zd#@!8pDpY>jC2}1Wla~cc%VRO981pRI%Wm}(Dg+2Jo<<)3>|t1_v0mxWb79iC^uD* zUCrdav7wY;19-p;4VMb7^r9^EqM2T8(hj1!a2CA%3lH|VLT|+<&s7nCEhYZcyY3Mn zU~JUSp-e5du>4o{9uE71nyC{1w(k4noH(9_9f>`hZG~@Dao&%1?|nL)W!b06>-(Md z^?)vj!)|%mOv;zFffu9uC7&{c(yZ;0d&Lg1MX)-^aykGM8J0bv`-X8dExufBAy>)a z$$Vti{O*!fUVH~e~J zb(yH%?x$`ySC?fIN%~e3zNkYQ{NW_RTjNzbX0WMLgi!|5vB@3LT^|A0(?V&>yH~`h ztE#V!;k~&p1&iOESz|#DXC3>|P_psslMC{Mx&!}HC=aJWJ!I^5ImWFkx^PqOUM zXKM*>GsTFzEaNm66&fpYfv-A}eEuKB=rI!Zlu_<7cx{g9z8s5|eMnxzJ0ep?@RqD1 z)LLafeR{x|IB0*^r{w(xLkYDm(;#KERORZb2Ytz~9Yay(2#fD(6%Sk#|5VFEz6gzb z!>vlaHl5R8J7<}ZC2U@#bCv$zUikgr-7U(50JV6anyCul+Y)1H*_UVKZ4-g&w=)-7 zA!=OW&z&jp>c#_)s9!Xy+mX>l{{mdPSAaGFNoCu{FhV#+M`dwznR>-+x8Mj1sLQzr zKHo8nxs&;I6=<6He{PUs7$o*HICUjd*N0B=+M6PIePMONJ-7ax8ND{STE%XPwWEED znyE7Q4fxv;axD!-Piu{$kaqLbaCAAdCuUv?5|R1?K3iZ7H-`DqFbjqmFH!MN%YM{#fbpBCNlO5n6u5R^saM8EAJrkbt*{jLidx>UrjmaXOOS#TcU3~@)m zl+4C0Us|atWxC0UlJ!lm;~iozMCLAbN=>CD1>)=XQ9bLHZDtE(af|u!^x` zNL^NV)0?ZH3=fHJI2=2@2Qz&Ovt6R-iJP5 z*a|5|vl(y}nu^)hVsvQ`8{34zFlnRZVsqjWRiK3|rAY}A%YjJ3MB7*2G!Rx-EABLO zOLe;(Cy|(BeVOs{FD&>^OV53_4O#QVcEz>#=_OVU?Q1k~fFtml?C!)-W>Ad!Newl? zt7C4$e09J~Oj#|au_*0%?&N-kM&g z`4;|n`b}p{9o1WTqZH(H$H@V26SmB5WjlXWzmA`BxX%7tWrW)&SAW`Nu!B7rxAYPr z1#`#;WF(Q;80Bj(rb0z|Bo~=YniC=_aHOCuqxJ@U72E^%{^QT0LJ;L=3@1xiA-^E9 zP?@xdH<<(UwEiga(GJWcTMH{^ZD)_xs5<8SESFQ&pdY?fW?l0P*S}BxU4u%*^?50szCXLH!aPnmW$qr^IWDzhtNF?F&Grzq2z;ZA(IF z7L}3}+wiA9(Un3a$fG2WaGr{12vM(U`6QUHdOy`;uB&M+1N#djOml9cVq^+zN^7HL zK;h0hk;!w&Hi*%DNn7S&B%I+?UuiiMFpAE}1%UbW2aVTqnqGsUl1737duy`0Lp!6O zEK#TZSKiauQKp*}qvpbEUcHpY+$S}Uzw(-iIz=$s<#bOk;d`_C9vV++p*Zfc+yzE51 zCRy#ep;#^vnT9wT;Y;w3(ysiBSL*N$f>JG=;=RMoLY|s+*hhiId(D%(AcNZs{>^o> z3S6b-;2Zii$J*e`LMbR8R%Ov#un#tk9iq8{+&zvp0$wwY2q{wU;1D7cGia5{;9$2N zMt&oSiQkv`@7>qC$MJZQkG9SZTkzhpqLFYXVQB0#U@%w&Tx?B!yoGy96&(plTY4Ij^QGXFFO< z1$f+hH^M*n&~rM@%81zEL*NkjJC(Xti=FPGaZmf0-DY~)^7|xX+}2dQBHX|SBe{c` zqSK(G)WI6>8f>7Bbgdz%P-<>76Wo`aHwiRJFKIJX<_|VHmTBg5IQaqfKft?O;b^!q z8{yFiJ(FzK*#Hb+qX2ExpXHkN7P8#MrYHOOIm$I*dgx7+<8)I0z7_?a_;rV@)aWFL zekhn+S0poHakmu*ON?Imbhc?!=CY_@AmV>M+ED2l%wyZFb$t<-=6apREv+scI3)UN{hnt~o*~z|6 zyWH-N+EB9>dAciX%((6c>dpi{H^V?(J(db9DH=qf3pek(ud(%PZi3$Z6sDUSFc^}L z^r64GEN_GehbaY)R|L45let2pBRD2MzXz_dKX+A5-_k@HR8y4jV2xlrqBFY zvLEUFHO^u5KZQXnt(z4V+bdA}nRiG3;dusxa-Rn0K&TUsh%Z@iQqUPDI}Z==$J7@z zoS=7l>P;8=ox%+_^h@7Cl9oY?PAUo~gpW_X29Z2@h{RnP7PG1Y%O`OZfVSb+5=zM8&o~(i6qC>H zqlt-BzI!K4vl?@+dU~$>UP{qiJ&y0m1BXi%qdx7G6PJAJ_zy;Am3x7I)TZ*Z4!bqX z<{DRP)md3hn&gqi>I2TX$eq~us=T8Rb)}XQZ-DKLqH_dBh4{%mVzD4R!IK^7SXzQ2 zG}ytxszp5;yoySbJ+)SwLT#^8t0eg5ZorRWdyTx!Ho2jmGeVxHGJ$vD@>Wd+|Na@6 zX2AS`i-{f77n{eU*YuTP*^utE`u5|nJWt&)duGos-2K*wb6NvxpCWH+;Kw5R6H8)0 zeU2OB)gs{RNSTBSag;RZ0-#?mGy#TACwhC2^h*yA3=jM1pCI)0Y+DogWp-fjc-vf1%=`3)!NJdFrS$x-! z36Y;BpSK0gQvxUW4RMb`N4tQj+Y2myho}$vYDB8$TmKTDA#$jH!4j&ybm9O!52>#G zCVGz=tCG;(z2x#I^8Udgr(C8E-1*Kp`JSa&d>y)}@!`R-P>F#mZIZ@A#c z5A}y0;9a63if>UZmEhVvS3R8LW?3tAZft~(E7pR!1Q`ulH}}mT1P}jW$1l2`ccBFM zn;IyZ5PPjOl3A+-2!2B+n?spexcu*35zb;Pf>XyOUAneUDE7td^;1=7=n5~UJ+?}Z zbeBAh-~D=Htc!i?d%e3=;Vz`mWIzyJ+9)5YdmKypxP_2jE&}V)>KL5?xBme!hH7Nc zmF-2;GXtMId$c-oyz!uy&>GbpTArk9ZppK^$Y=t_OH&_6>Tq&OzTlE0&iv9NOjDJ-x*C7?bc@W^*laAzFm2NyiPm}|R?Gq%co zyNIZKQv{U-WzK4zR?j`VJ5n^N382-%s^6&X1%jGD zPFVjVJG!F`d`B6q_Et-*lZl$0vRX=rzZrsk!vm9d9;!xw<|NiB5L-hh+z}jjhMl$J z=9?o$-KVxe~Ozm=R8mmG_A#L^7FLJ=Bu|ozL~|G*g2xIU-Z4v-*== zoMB3w)?U}dkZ23+20zB6Ss$w$@^@Yz_`EA>jli)suX`LUCW|kSRyJszJQ zT(QeR7iyt9Vl9%n1YOAw>hT%R5LK@rHkIxZh)P_j)5}r1M51xm2^EsW8w#ojjYBN! zWYu{Xuc%NI3hi~rhv32a{bZZ@Fe&Si{6SY{_}@2PNBH`;w6e*wP2|lm{AUb4MP3c$ z-v%7>tIL-|oEE7M0xA0U)Lk zf>KpI20GgjgFMxCDHWHuwPymQ&o{};W-N*r46T-c0<`qdOUq0*Q+FXM#K@5z$|90< z(o{t;qbXF?KfcAkQ0hSH3qwD*=_mE&*Pb*L^~u4nLN3=H6Wd#B7O<(8g>jK8yY87K zUol8>tw!|}J^%^ZwXM9Sq=M{z>nd$N$<1WA7~W=7$u3oRdm+V)v}i5OqFsZ>C0Try@#kQi_i^4$Xuk_= z{~XY8Iy&oZqphU3@jBCDRRJPIP`kRNT4VSZ+~H39yNYiHYc7f^Lz-0Ch5eHS2ykyX zuNzf|Bu~>FTFb1~5)f6)?Ue!3^0&PGfhN#tvRkOKA?(q+-`QC9VL5a&(k9K_Qwv2< zfP%5MT+Hb=D=9=?YD~)iY>Ync%5`q0`e? zlKOkGGIYUd9W5{j(Fht)uWrWO91Z~;%mm(1mMm|)BL@Pe3(m*o(7`8yAY2!Q&`b2r zp-N2Cku{xAKv9)!dW9one){v=BL&E`jNq(0JJn*`Zldxuj(jKj6R@x*=~ zTUlK1s+y0_t%4!uiE1XEnIG=OYlhXb{w80t;P?#fR2T`vn18%Qq4RFjt=1o}a%-+r zB&csB_?}2%`=8I}EYBkvFzV^bbtxZ=k!XQXHd6ie!2Q!gS?A`X$|gn>vdaTp%ylex zNO5&y!cqt4P81+M7sR9Qx>3lbV}slme$7Rh8O0>)OK%0iGH2O?HzC> z-Wrm6*LK#2zt7uQ#!}E~%kXf7_g8ou*k@Hrn==WHqh>LaB@U>p+etO7xy*J`YAowL zfi>7j>eT#NRsS=a9aOVs<@VYfs*ldO2)L8C1%}8GLM`i#%u`K{z3+Eb{x!+_ABDcO z_?BxSMciy8r$ADMJ-PSCcyqCeO*mg-dl9#}2Q`>P^)HQS3fx{Frv9r|VQn$YeSEJa zgNXxZI_EZ_e9@B#;%9N3KTe@7s|Fg7w+W)}KxUR?+OyKsr!a3hTo_XeZD1j*k8i(C^J|tbQuZ|F426^-_#m!IzBr{)^QgD@@-zmV2bF4CGQR7J5MB{ zV08ES*Y&^^4^T`y&_VovlI@2Ff(2CO9`rVCsLjIke>WM>JZxP8b!tL9ejP>ks6hq1 z3TS8(?QeD1X)qd{2T|PrH?|FbIUkuLvUSrUh6TUD6%MR@Ws=4c!0w^>Y7*iX_y%K( z)zFn}8K1?%hb^j%S9qMa0PN++2-U?j*s+k%y8Y3^u|E2#B9kT^uUVBR%7wh~2dFX}yL-~4 zp5JO%Ibfebn$W@}fCvi{u(WrIBY?f_EJu_9-xw7~rNM0jMRw=p=#KxJ$OoKR^DzgN zbRqEP7BT@_i%dZ!x7Tx1>cXT9YP+R?b3~!A9Vfh0kwd_m6?+2!R_D~EXy?|M!0Di*Y}*^fMer#e9wi|)()>RRnMv9d6e1;xKm+$-KgGvDr@_) z5X&p>hXR;x3|IGv3P-8_a%n8t5zObFD)N&OE^h!rF?*mOM2gR+LYb{7oAco{u)xxjL@%;eI{_bi0lA@i$b*FK7rh{T*A7T!o>YJ>+YgQauSJ8W|f?^q4+ZHO)ChV%=PXA3kex&6f! zVXx9dj#iRmDSB2Eb(nTl8&}-V9qPU!<$NknW$bE8Elnw!&oRF;@pHFf%=v zO;wbEvZ^%s_&$#2>PO}7;zk9k%iD>q1~gD>D!_$CuIJ^0TpO4nyrW^jiv3N(^N4|o zi{#Xse%2W)V{a8@`wLVMOrBo>+&!4}CJs$?I;FSTud}0K$Ak~{!x7D~PRF!Ot~D== zLM9XXN7*{o1ty+G4M}B{eB+-$&6BuqG~!uwBo?n8tY_m@YcF6(N2c7D3rX)?a$4^05%dq6`gb%E9-hJ( z?#`Zs!KIa`Y(G>8vEK7dNN7B`Sh=N?62LqwF9S%(;n|HDC#^`)1P(B%5n~L8nXfB5Y~A9?q&Bl+TyMp$`;qe(Otq z9Ue*$f4>73I(&;`PH-0S>&VIv%-ERCP3IE%_X@RdSZLZ?qEhGjg<>lrVJHLZS7;Jv zLIaSZ+@sm)?c++IdZMPS|DFh&I*{z<#eeyGpYKGUaaQE<#cWREK$ zRKrq%IT9H+fEI40!>@2`1uAy&B!wYmD}fc@XR3RXPd(n>;Y`i^=P>cHBA-lqOArf z#n#<9v0ywKGv{S}aH`-eTY4$t0$ZBA>FnL-RB4_FEBa}#J`|P<;toP6pgJHTpuh30 zx#^e)P>YpAR}#h^(!wny>q35o>)^bsElgWU@!V%{CE!YJ_XhEllL<5(?inivRLb#l zRyCD2W5vj4`=C~PQCUWLHv#0^(ZJ!A0y(nLVh)EQ#Z_P|yMs)*7mryRk};}vHkMg& zLk;K1=;@|L&Dp4(sJb?4J64cwXset{DVkT~aKbCa1HuLYl!@;O~}n&P(hn+q+M5|zY!Kj1sMe1VTwjZ3bf%g#nw0w{_%TTIls)$(v1Ew%!MnT%?ij-*(2p0Y7TOYY1*U8`N z)=|)}`+}h_xP!h@W8=SFY!g|o0>VTrsr|6=O%lIzerlvSwoIBLcCp)ehr~=U4qHd+ z`)h~u_LV5>4)u3fxxPq`4G$U=$Ug~AhGqS>%xnK9#|-j`KwIM~EAU`@i4Oe}9#w=lvt1_>th(CSGA%?7z^S42ZL6?-R9WWT>IIxP7WJ3|uhA5a3m5Zbz9n zFtI=%q{cUtcN^;-*GR$AoOFYX?g2dF);|14cJbY-CxON|v@tY9jOc;;n8Vgr5lk{PjQ#e$ik zfU$6jomgg`?-W+CsP%^Z<-agWzztCfP|V#75gr~3!}}W4p24uSoRzj4fM6zMU#cw^ zknk9jbMi_V{!yH|CzDZ`bFBL42erjn6bitk+u>uTm*po45IPxL*_;C6sJ+op*vXH) zDjY0O9#9?fZCxM4hd@MnwU=h7E8a>r_Q%lkvq+QkGv#Rxb-j8_<-G#ch~F zytx9+Hs9i$+x#6VPoTmS%|CTj4CPc1f6w5eo_7;V#Tz#12_Gw=HNxxV!T`;ve9I2F zcFm?iJMy&}a`J0<-@e;L6thpfSp%Ow?S`4FHargA+E{GFzS60++jmJApn<=&;KGl_ zM~ah7w3t$cY9VFkW*U4sj&ql$p0Z(+cX&C#WHE8icwOZl%_0h7-&O%mX|@a|`jai) z-fX@!54J20RzZesL#x?>;4XXIwy#CK56{jc2Vsg=FwVQK#^O(3sZvR+2jv+Y86X2s z%K@GUC!Y1n=n{^6Qx~zpD`fqSA&MUqOmBx{${ytEK9o^ITMa<-+j(5ig(KK!PA*{06>KH`nljzam}tI!9`G z?%gby$bxTsNazux5*BQWd{bjLt>P0@Dh-Cnbc@%^2K~E=xYaYcZcThtJ>fJ& z(A?24_EQEZCU>B=3dHx<7xj#Rw`%1|K>gKPd25@y2Mc8dA8XM}bKv$TN#Ue{k*^tv zD#qwhl8fJ^X?994Q7fA*R0!&T}ktB~dy; zM!6-2{HftIge2T%rJ{d8tzzIQRyNNs|21?C1*vbAUj6(l0nKgLs6mwzmMqW%K{({Z zQf^HUz`HzWfcil)a3+7Zky&xNtn56Kar)nwc{nv%L%KA( z%R{rM&6Ic6+at#?A*_1@8Cs{w=f71$txq;K!KOkZHpLnc5LcNK2CS9UCU^0Lh!wxt zjiJhnN)Zn|lweGz#cCC2Qh(ydT7LGKvP@rFJpxTbq^sSLymf_=f zQ|;J7AZy{)KJh{A(2C6<6U%k|c6r1wVkp%diJFnE2{TkIkW0R?Da@ZQr$D~yuQfj_$%LdIk1pn- zmV31m=a)2J0xZTP`D~){lek3qnNJ0}OK|O7u4YGGxHK#fE1x^yq|0m?KBvIS+xe+t zDAGe3K5h8EztYjJl==&-P`zn%FR2UcFA&H2wQSh_+AE^_ zxJ$t}H|G2eke$1!x}ALcTZUx!uY0;sD_!m@IJpRM$l&iCUJ`c_wv216oc+e!dIkI5 zQ|bz|jMtm?lO`oS1A^GHeX^wOoCRF9=uIm!`q+b=`GGvq?C&*Z8g|&)C7>D2?9;R9 zDesqy{E36MupdvJ`E98SNoWOOd3V?bbbi!nuO_DGB@%E*+-(|dD_VeDS{ma1ejaY7 zz!1OCif@vbGP}}D0HNkNJD0azD>2suplP?tj1wQqbD2+^qF}Du*;>s~r4|hQb&M5$ z4A4f}HJf0=>7hgoO)P!UWA}TjI}D`H`5tinc5$@_Yv!dTVma9sD4uLyR1b2>Gu1vw zr;2`{AwV3TG4)n(5ZlN3Xg7-0M&M|zei5WsY#maPC?2XXZl4v%>BK{DSUpIRe?Pm{Xogq-sLVlEL}7x z_-+0N`zUTArR)9kIsOv3CT{2uOSWfv*B?>lY^AGG9dErTlx`a^@r-#6@u1ilDRi>A zq4PamRkWUhKOnEmanQgu9Z*CllQykJs_&6Vg9+Z^6KCvQ6;23hxUC;p3Im&32p0tv zmocZvP&#DC$yYM-OIIITkMMC3_{0bFY8H(tY8jXqU9IL~I1c0#L=jy+l6z7WoCL=59g5i~YCKx*lPif(VFL}msBs$`tP zTW(Xw|FQ>(2rGQfEYot?`cE-iIf@3hL-1^@Jq9DtUq$t0XdD5#8%HKFf8-T@O)js$ znQ3&^>X?dKZTUU=?r@G>wv}TnKLToLANciDtq)-@o7@uU?`v(Glv*W@r4QOo<)oe< zrvr8Z>G+G!zqlb!Au4uCea^&-JfWoN>~C}kR@A>{dfjhn|LO@`4V4Rkh{uK)W)*7` z@)4M14TAM6ddtJA57F)(l(O5+fdWzrvR=P}z_kl#MZq&1a@xf~&FE*9Z@nEXHTJ;y zGTe?t@eoSsCX(sr<3VwjnP&Fdw{p}n1kx7~FuH@;Re7qC+pf3%k)Sv^Gar}*#A?M= zx=`J)mq~+LEI?TCF9i`kE=^R2j`pVlB>mfDNEeMB{p;-6$6kGh5T0Ku%pK2d(oC`7 zDmdbaWWNXSib#~aDxJ|;L}FOf934~saqiE_>&a_?c$+v)s&#c7alpyPmQo+8SghR` z{w|@tTdSaZ3y(dVVQ4PPX9AD8eEitH4b-^IxjG$uys!{q7vUIkF94Sbyk8ayC{3oe z1Q--VNT)XF@khT#Wyx-FpzvDpqX`|_GXrxND;m@0Q9_(<1;i&I9$R}&hVd{Yj0z`T$J|Wmybl??A%Uljcw!L48&sq`6isY@kM7=_`wQK+v>t^0L zY9gc+i_LIz)&y#5{7B9V_C#D?(&{uX+{A7=Jfbc0{^!J z4>QP0pN?_$McpcN92Z}>0D!h)8hqw5hyzRq|^6JT0Ao~xxGt+&3o5B zsADxRsRAOLDpm0qMx$kplx9Kusm$KkbU z@ew`19fo=F4qwP&3BCs~c+95EdwS{N`39aZ?c)4q83+PUKJL0TkOrm1MmJ;m!Cj=q z_)-{GM&cFSNbgi_uLv_rLqX8%xGGe9JB{7y&{3MQq+Cg}n`p^+khjMFvI4LlG%!(m zr|cH(N+TS3t~Es)I|q%?B@`N+Dnn50_?Ro+Bipt_w%=8h)dQHWLE8Y94L3Xxq}d4F z28f<*t;9Kz>ScD!J0Q{(SIvim-7*>h8=cx4#bemtv{CC`=kpPfzdPHLB6yz+)&Or= z#|*Z1ve7dt&R$|_ihVcxXVM8XiIFX~S-AJ<=>R z=8ETgp57SdSOqEn&M@0*R1ZV~QVaCSG#sZ)io4TJSiAu!?yS_>n>qAckurSTSk66> zL;cVCU!|rpHr^NrGPBBoNoHT;hcXM3t|8Bb;b{nK6+t-s<)WT`Pmtqw{f&gyAvHda$D$l|tdC)LK|110W)mzzGyrHFW#5P9+u|Zgn@d*}I+sI4^Mg z==56IeGDKM+bALtPa- zc)a<-hQR&%1&u9(bGQ?ddA&B2!LtgGsC+&?)ta4;@=B2~E#NlPuBpcAAtC^~r9v+* zKc!senQXDG^=z6P4}9z=HKXKgan+;v9F+Zfj=`gCKsM*4Z*UZ>oCv;8h|S3bPn z)Blbcv4s<`KDS2HRgE&=Ihx4?<{2$G^f|n+**!i_tIvUVJuly+~-WP^rxb& zEsK^g6b11lnX6O8TM!>Uafci9Mk@Z*tL!N{t6R0}+vQE|qp7z!ioT6nWX^%N(a;7b zW1mwoSsocGd`in;KU_ZHW#d{U^jtwihp7PnKLEgX^Yhtve==mg;LG)V1CQtksE}hv zHf1INd~r7GDB}UE9Qc!9>+eMQT;C z>|4R;FpRu3LC1XS0P}FvPa_Ne{nCfR_l4D8Rb*`NVChJztm zEe~p@*Q{^A45nwPHr`~d44B?U143k!ns$4W$PtPuT7*Cs3!i`_)4+*FpIPY4k3pHf-#5nc6;asWy z=%+(fF7ef-vY*%yxd8gMDQ4b+bYaBPq_5Mm&muWQ_XK#`W}~zEz-^&x-3KOLRQgxp)fOKNOKnnnb~2jckV?>ilB3FQa(RzDGZxDN)d!x3xr(>A z3Sv~dyG5_ZoYE-Qydi(k6p);O|Ecu0Z6qh4${9?Hmc%#iOVJafI(z=cH#eSr`e^?Y z`W|@Ou^=_t0`llL|8}nI#90chS;IBpq)-h~`151nxcYFiPVV0Sq1dwEcl?E`9#}X{ zMmq=$6UIF;{qd%ezQpZ(T}?s~HShp27P)(^ zCPko=g2lNDE7`D7u>ldK>>8d(2)RyQTWW!dql|t@va0S{e-P7i8ERjg+(O<76bVOo z`yClbh%_J@=3d=H&nMkpEyFr01rk@NV;Y7d@S(L?F^f>6^oay_KreSDo;F9OY6&U@ zh_;Gr=57`4Q(?*zUOHzx%)>m=gOYTvvhnVmt8-!CmM!xUVQ4UW=SR_4x`FFqU8c8) zdwfSbnnD6a%@qQ_c~q3>b7%t9_FV;KZYQHI3zHqm1x)k+WoLa|hcNw}S z@l_56Nc8it{-7(Ahv>h6^-@C!{R_mt^|Foe(cFsXsdZOlnKmGjXPgTK#j+D@&YI@a zmhPFFkptGX@C&qiQ}bVN#02lZVEtn@X^K~!7L@*QcT&B-KpTpQdcd>}UD$CU7ztnw zcL9ZvqBn?pTf0sGv^3uqW3Jx%kNC!tj;l31`X>to-@F(ZY9>mEZSQ`vhYpBp=NU!W z`qvBXg{UR|!ZC8@+#=$xh;&SXH9e>Hq9IUM=w7a$TdQGrT$|wzloF;bL{x;Xh-qaX z@??R{V&a86XQ^NzIj2V?S#Rc`V;$O2qP}B8_^e)g!}fckB{i;+OiSp}b~{TW>}GaL z0zpQs@9%Y2a0cnVNlJfC8g3>KRL!3Y3ADEJmnm^EbZA9^y|++8he|6Gc73jnoQe;V z=IkX9YFbqjz3sMhb}1CKE12rcBefb6Q=t;HgA~ zvoW!w5DiZLX(W}@u9`tjl3=N!MVbl;qMoU`$r+|u&cmTBiuTt-twbaGnFY_4mzVx(*(Tu26&S zAQu;Uy0-05gvtRIy@XB4Thj z`QM2&HT!drOqB&`6`d9`U_1V;r+@ava!XaX{EO!WP8^}%GIyM7#po6a__mQJ0b~62 zVkXHoLtW}4S{d!y-jCRh9z(;jVA>{Y%-~)Rl3}`<5#tV2z@S)}Se<~-nMeWuFS-Q5 z*n6giHq+yeK{E@zU(ltL_74hu-Ir6m&@`$;u5tmb?{8Qco_&f(^lJ%HL$w08o|CPN zRw>Vn+ndqA!;Ih#woKXcj}SuP7x5C*iOoYPdDnllsmutI8Af5nP4~5l5;dUv%jeZB z4dsCX^kva%_fN0Rx53QM##@^rRMk-^ADBMDntO3^0VJd#lfc=ig*)y3dg5~mcA0^V z7}pMqGTJVnu;mUz;_ae8j5wBwgDi%@&>V*l@rh}eSuePgG0k3}vRa%dZd8@I`_AOn z(eH&?Gyh(#+-XU1U*8;CzIV@hs~tP5hdwYRCLExK%?Lj+Q1*3xM|}QGfVy{)p2aJi z5(q^$vy|lU*%WLfMhD&golGJwVJJ)clQ~CNS9|Md^Pe&@{deHz(RwqA68o}!BChHe zjb6EAt+NE|fC%C+^4%|(Br*>xXbGo)GU8#1I|^zM>~QdLsFDU|0F^0lsVCY3 zFhgtBKVw9{i!qIx8rKK{Bi%CLkQ~sn;H3=$yX*i3{q-L_d{iJG zUim588H%e-rN=6}R!P+wK-`~vDzOB9R;s%}ZQCY9#rRFs38rYB>>P?*yhWW#Sh+|M z#P{KoU+Ll~th1S$90ttm$2m?42l-`zW$y~T&2pJ&IUmHERYqREQOyzl9_E(h?BnG0 ziE`};!~S=@9>=x{kf>Mb65#B@oQjo`um_}54{4Z>(zKlOTgi*R*%zgT{$G{ zLrkbP=}G@SDYzK+WI_+I;%LT^oBakZjjC#NEAq_SBLjK=YuC5Q50r{5$SYSQ%<1Tg zR{t)3c(m)i@T_lI9uUsvbhR3iHz$A6Ub}N9u+(Hkufhae*Qfm$Oa#u($5(8XWGkks zn>j{u^I+4N65n+Y9&b%F-Hz`b=qHh$Z4mqMYcOtbZNYjr>VPqLG{Rw79JPGj=7Hiv zPkzbZV~Hdr&gr2W!^OI@PQO5emSN^59=9slViG@);gh3*KDrUX=P^2j6PhyfZNM6v z(M3FkVWZPMg5*>|T)x_9ih~XAt5qT* zeLagMoj>n*{+!BKk z>#dp3jNr5O-o8tp=mWz-r=+8#48CUqSxT=d$PG%mT*g7pwUD7;4TtC1jzyPocR~WKE87DiT*rtbc>?U3~4XKqy?Am&G1nN6-?SbpuMIeD^|N za3a^C$&6F^=5PUXIHTv)7*-!{z5Vkur-KD~jXEFvES1WK5B_Fv24=yB3xIz7%BVEx zCRaT78me*C^}gJfQRnIeC}O;P!hjxIT~Aj@xfA~$XHe|FAn}9qg-i^l$dWG7u(F*N zcKaP1ZD0W)X{D4cHlKz)i4!sLG5%*$1Y%x}(*~@v>NKq3ua4`^wleMFO6$LdNNHfb z47|RVsTu6g#c)Rr?|!b*$XtU%hK?lra@8UW^oWKA`ile9Lf!tmZW!E9;>WTW%K0sY zRnXSJBO;q_Y-nvccS(2rfpGlr#g}yW|)1&~R1ql!SfxCt&I_|DK znJ754TF1J@H>)A8=u)NQ$s}sEhG$L9Olh2NRPVzF4Jz0o2&}LJ-D{5~ybc|n)QC-l zjMw|cfL^6tpy4kL#V0=Hnt}{xGTFO?NJ1WlN+#*SrR7geyo)h!1H^k7adhw)I!b#S z-7lZeJqc?W$9PiQ7DzfS4h$b6kVRsSw8LGa62m6*#W@#E3YS-@?DX9SgDa#-nGrfz zH{zC(t%rw(Ht{I3OsKI??h5?1kj)TEj?BgPbUAm)7`qJHhlw)xqcmxxpDJ$<=BsV} zsQpk=m`ZJi01_hcHfGc<>3DmT1KvxZ>ELdiXYIXh10Aeal2w z9KR-C7D!TEd6!(W_Yq~j{1}@P?otL$X9duMD`7*h-d@2mKD3$SkB`ymINw$3l-3^Z z+%kTUHCy!Ua5@EDpW40QO0!g7WPe{i#q*+XxT&$tfc=AV1JbmHsbE(}(B+I>d6EFY zUFWuYh9t){`l`d)A|uNcrbF*waLA-+WNT-+uV7r>efYJo5xG+N&vII) zwqdnk4XW;XT|=wv+iCA%2`b_%hHl3K8vTqKlFIf_=n^{x>1+)$+6 zPzsp-Vn-D5*M+@gB#p<5m7Q2upjJ2Z_Q(m&0-bpHD$+cPUpf7ROr+dS{>Uo=CB+7}*?Jm@sw(sLVd!be(7F#OUw4PGu- z?xGWX=E0ga_^rzjN7=gM|H1p9y;vsMXFXHmO5(H2u$z82O7T37($F{G(vr^2oM))g zu$#EJR1|&@s*u*)w7-Ak<~8l5B>|{5?*>jZy2 zE6sNd7<6_%#a)zFNukRqT$g zj``b75NcRf;6n#IXseqiuY8R;l)4f{wWod^cHnCacP8a8)fm!K(hQG)p}}X-r0)T- z8{5fzH(i;8d=#$;vmmg$0hUcR2Kx6dn^qXH)MlPFtJ5(&#h;~SYtXl&#wIfjno3_H zQLFPX-2BggcP|3a5Ae;pSir@Dv2%|_Dc2W!e%8`FF2_o?p}0H=#)u5Ar;GDq1p~x+ ze&_Z^Y7|G(QVY0sr92silqi?b(RLFq;a|(kc=GD{(ZBPv`+okpqUSWf&_w+RN<2`nfkx3|Lb!54W9$-^WXq^yg#rdO z&6;)R&fMy2_?_dL4J0-UT74X!4WP0lYnc6~p1W80z&2Wn?P`@HkdO_xCZ@G>1ck9} zG}UHYxe|4p&ngDCX!`ZffK=NK-fdk$u{Gl~P`>>NtVsk4m7~f;Hyn69JHoclgMvYY z)!m7Kwy3;k z6FpAWbP0R$TfaKB?Jkr-5>j7o5&%;GFq$|*$Ki%#pMODi z!SpzRz8$5M9VO)NbBg};ct}90Th}kk5BghD+pEg-8X23DOOW&Q;R9~nsi2i@O(doD1G&{-Dp2$R8o8Xy8X4SypT3jwF2_%t|ii#(9jonqW2! z4z|^Pa)eKu?RwULtIW6eG>qrUV7`7*-2z4DoTFuTAU=nHM>h(@c40?jD1dKiWs)wU zpiA-QAlKaK_ZJm)4)fM^gW$$90cm7e*fKvJJ+;@G8YfZ}NG3=p<`{ZU;|Y86VMy&z zK*zYK;(f!8NI(kV;e<{+g!-U=87Sq~h}maMZW)$Xx>Tm_u0TVGIh@_O^Vi&;w2-do zA;Lh&cGh4^!`Z{s6J&E&rMXp|?6&eN4ggtdz{@f?sW+n{ItT!KP=(6GJtaDM00=CDu)^mrwcv!iI&()Yma$(uPvXet381Sfi zf#^DdFw0F*wuFpw2Pb%enPWYp_sY5AHdMNrjYT}>8L3hovn%PO75b~tdp_m#)Bx)% zB<_xSg}p<-U^()3?Rjq;)o?eEIX{ct`R5%gJ$q_+OS8E3vkH_xwcjG&z0v4m`|zUk zMZ`6L%cG<27zAgF8w!Z62Lp?g47fj4H5=L->H>riyAHezw#T$7yd z^8v%)6pO}#Vf(g6BPH6v*K&XEHRJmom{5ksDh&N{^jGkCw$HXK6D)EDTU&^-ub?ra zY?swTx|km2^C#egdorau{B9$F56H0*`-8)%C0O1Du!JQAn)OjE+qfl)J{NX6v z#imDH#e4Vd>yNvMAn!nJBM|_wR3wL*oYHdCFt}#VyRcrs4<0dt1;FkrG_nii9scQx z>jRqm03LOauB@jFqX6Y67|j;eO?<@p&V-; zG>$@cZ>`d!reSP!r$ep9gHMax3|oxVWnKHF5>+5gXDeCaSh140dZd$=7F_o@A`lfo zu+6x!(H$LRes9l8`fTWWL%xzkt*~Fx9JTEqXu9n)Z8G|=22>+rd}T28bMtF3F$PZ; zq@ZD~TteP}?nCtVt^};h!2z?7OVB`GvtpQf-8f{7(&aNpKqf`m+oYmb(UHZgX~{EP zorTJaT_B8Dyvus786cq%ZSGp1+3wTI2hdwei<*MtpW zU7gOg-`34n=xv^*ns^;gjmiT};v8W{Jnx5<-u`?(?{7Yw@!p@I4!i;~y|NJ9&7l0XGOnWfM`cPi8S33+y`dVGr z0J;Af<;X7Z*t?yN=^N{acTt5_7oy_w_v}T;(?g%c7&j;BdoOh4h+kJdxoX(hCnJJM<7HV@meld9H?~c8*w=n z*DxQ-9X-@sL9dzzN7D`^xgf7fkw)Q}>p>IqVL({TnAhdq2q3exO`UX)f|jZ%SM48p zg7_Qv8<5kwg5dhtWqN~p&+9xG+q6VQ8U>a%6-D~IF?jo8LrLYo?Va*%s^EI*?zagKaRz8IIC7qj;5Aazm^cS!D#=FdBzb}9+@@Ju#KfKQ2Fy@4bj0yM zAqX;#aspnqYp=h0s#;lw*^ zDt#v8(dfI0uiljDWaCypLHo3YwoUQ%kr(bvYzfL{Gx5Wob#ZwhIs}pT+l#p2LKVqw zNiy~kct2T3IbCCp>LYxN>APFBoKV#->Np1aQmY3_4wctVr!Ja=E+KO!#?;r4-g_hc zx3(YSv1x~9Z}!$cDDaebwu|sxjrau0zt<++n1^eb_YA|?4NF*EDG1Y0q}8yFy}+pf zbBL6_bx@`JXNX(!WKqlE5f;k_itFDv+3N^B3d!X5DtxiJHlm$00Qav>Vy2S;@SM3Z zX_SN-z)*AF)sE`z3Xyv#7IHwEFVHQI&|{2KJgO~W-v2@{wxfDKgo<}DA#=#eAoE1ZmD=-@vQ zxH?pbtI5^&(hzmbPw3HQO=O_AHWRk%xKap9AqxmdZdQZ2y0JuuO?Wl_n@;W_dvTOx;jB27c;eLCd z^Q@cadynuLC)JsZ*OYW-?~5&-A2m_BTugP3*=qP)I|$ z-x)y$P0duet+$3J#GPCTJD)AS^r$>R>-*;I)jcwR#JQlkf!*>%^=+Flketl}vc)x= zQ!hD}uvs?xVxquoKC=uA1JPEX~oOs3!sQHgZP*G!pyxmpl~#@+ROLOq0|X4**F@prr3I%#z# zY9(_;Yw;-2-&@L-?ddzfznpzUtqh2rp~TYL1c-k%b&0>1v;&9_eX5^mHk3|B8UhOq zDnm*az0=QMJoiuz6~VPF#O=}5;Ydi z21thfx|Q2l&O=(stWz-q5K0i7`KfYJjeH#j_DMCD|FDdj%=0>SSz$!piD#lXUMakS zDV&5CpLMTUOUSdFo^sm@yaqX>XjQbgTI3E>8WVXk><=tT!>hc8*yuCius&m~U}3@W zq=v=L->GnuerPSgE_P5wVs;Ew4^O_Zc~U{%3gZ#-0~z#gWZFMGB9?l~E1*7uv4N1u z=@t4$sKIXRD>l2B{pMO_z%ps&;n6i1pS|0c4I@&k<|=7=vcDx90m+gAWEvTb$prR1 zwe>HMz3BUq(R26K*#qqQ#tFK9uTOQgkEZc6{7-AG;y=i7GD98?OS|tXkVOj`sd5L3 zg&AMqspz}FOxQJ{Xpv|Pc=tFxm90aHvV-zpA+{BkiJ?Uj4a5l&QV9t zdVw1xP7l5Wv9wFonu#%Oh0|&mBA_zJmc3W9hYH0fXk%9#N!Ja~{@aRmWqPt`4JIGHaKC^YxB?{T~t-)79<0@a}^;xv&fva>@P&l(js zWp9UUmDiO^NRR;-Gk*UV+6CjLhLNRA-Qts?LSu~&+1nhxJkTvFIAA4t>XH1NQV(hZ zDm|;V(QCUA;HE3p{2VxlDq(@ujv-7crMZ^~(RP})VwQfCs)9Y0!;lf2_5MTBa3&1S z1QsXj?G;D2eC7>-&?i%i0n9FFj<*t?>#@%eBJeK(JK$vr{W6bDoigY@k{p_qGZlW8 z!Tfyw&4yXO6XbA)1LHmX=qm!i|d@+^hBaMY5hMXB8MD zXl)h>ntQq<&3VE!9p}#Gi0z+U3j+Wi@>qs6(PhJkk{BJIU{3_K%_UKhocXb#Vh1;Y znW{ZksKmg75RSz*#!KFLr5d!GB60{MB>@P=o7zQK+?3gS{5ODy<)t-urk(hk9_Bo% z^VFde+Q>_llJ`Z}y{BRFt-H}^8Ytw3zB?91u~IpIbS;XvID)7@felDy(#4e$5l_EC zhU}!W0~@QfiSBL2H+9i5u4PJ9GN|I3JlniEU3{K|)tF(XPIZI@AIE`@+pL67u=r@L z5b$bsAnJa98k;D;Qu$j40WA*y!gTSxSURF!c8I8`g4B5I5~W|$>y2LK=b5D;2px)) zN;w`mmEs%;loW(xP?Y^hq!>;Qz8akKinCz?MxNNY)Q-KsQm8&M6hDYAV%Xj9JD~nY zlKYR6Yh{L;3YD(llg@A+b(N1ef8Rx~OAGjcg>WAtADo~_|9xcMSljaAq*qwLd=@v$ z5UyCU5rKK`HwJFxYRVAfG86{||4hONFZNVnQn(9ORm8*7Ob4EnPntrMdYy-7v+{2i zvC)`jwMH#M{G&tQA(Zzx%hw@f?SOSu5q>gmfO7NJ3}pa*#?OoN){|K`_?d zE<{_t?L8gJMl)nd1IAp}=cl^}mOEQbTh$}@Gx(6tBCS`Nv4$0fg%JgWEoO`@bGvoY zNt1-5bN|+S9V#iDXwtEhB6jEKcWg)|9oh9QiSZ#XkHFqxzMw-@o?u(v>@#zq!feiJ zbM!>#Kx>3tcdYmpVk#Jk_uH710acas&BK$I=+yR1@L5mey+D)m#l{0%i-r^Org<1F z3m5WItFo8nB7&~gO9V;l4qu&i1JVgRBJnh%B}^-&?{|Y3sD=No9CMr;1N?il;mLnD49*zVyAjm*8U{8qhh4|IJZ32v~r6TcW2_)-Kd!SOq-jIq& z+2x~tM>+BuT@HCP#~;pWAJj!<_+UwKP*LipTM)8q{`GXlcD_lPYSs^s$kex^Id9h7 za}sjSXguJ--F%aty{!@?;;}kEW`dxU{XZ6F!~LQ8_J2M_Zpzh<1#W|Ep~xYH*()*Q z(TkYEaNt%*3WCJUZ&_)5ia%Cm6kQwff5}R^PFD*%zQ@@B+Wu&tHD)6J_iyY;gs0^ING>t+l;_r| zg>38XHDClraQr&0yFX- z>YN+XX!iZpy(<*m18Z#z`Tf44t|>vbdT;Td7=z;%p4oO_KIN~%g56$o2Ap*s04WMYx*N$ph~58-Djum00KpoX?X3DlBU>^~NF>cCMhy+qOGiy_lEs z>M#rJneb)OuD}{ZI#tFa=WH);#qHoKDQCVWvB^lM&T78fI~%6Ybw zY3t)fZ&60QE@%Gh0GJJsNuqe+QHO^{k*;OY6HM49;+Rdj60t2Te^49SCUpM#`_sRN5?0^lW@!EB$BJoljTCcHl$^QAiTW$0z zZO;)lVA9NrzQ_s#BhL*Q(J{O`@6Q9Q$<(?GXaOpn20kXXt7E^`~Si@Y?*bjwS`Ycn(#hPP~BORsiF*! zc*D-t-De&q)7VeR)+SRabYCmo`2IncSqgM*MX3R>#|WKZJHefWBY!29codbLiAE+KFS%>gDeX3JvsrK3oHa-eEnF-K zllE^EmWu3P)P(;3T+V?5@E=VzqUJb}r-&D!tS~&9#pvMw@&@l&W<?u{G<+^hahV}^-HqSJNXC2n)~X}Boui*` z;YMgAwie^8L@9?9(hlw$efNk&XJ!C$JOxN;nW(-k?3av`2B0Opk>H5cq9i^!H{3I! zH73dPrNS+G8`g3nJR`2An0NLfl0TTX8ael0I{3>VnmSmZyMm^YeFW!0#M5my z1TY^;4c-tUQKSm5`IEZLyB9ZIR5$&uG{HDDxUn$@^kXQWz9)wPsucy?uNh!JP4s&Z z(Xj~2gI8kw?cauVQ0hlyela2Mi#M}DH>Y0x8JZ(=)Tt?*e;zDD7K%+R;XjNuvePX} zhP`U_m+V#abS_ckY?Ffy!OQzrbxCO9VCD@#^IM*~k<(_aPUj#El79Z5DHx&{>ToUQ z-r3Z8DNC!?HVjwk@NhNgR0ownP$H6u0;_dEDFzm0 z*Xo5J?y&fo-1H+`F=PR`9(0k+x+yPf7non(t~<7wS>(fDQHUvvHc7*P zQZZ5ACnh2zeswAHvWjKj!5@s{Xi}Bfif)RhYO8V+>}!Ax93>eVg26lFmgwbOJG zk-RD$+hshyf3R8JR38kya^pDZ)ub~A^Bv*d7GtOc36wOhlTOt#vJ$DNie5{VK`i}b zfd@%eOmA3&vCc^?)3L}X3A`dIu=YK6d^L1!w4GioyqsuaceMwdp5eUkq^$^*LT5lj+uK|MoKk7%5NvZPrITy8(!IpcGZxmbW< zJ7DI(H?1O%a1suOmoU?0!C5t_zb}&Y^6B=JJlf$gB&{`X#NwL`<6ZoAV>;r0{>CQ- z6ehv|Y7J*iwGbW>(nyI9I6)gRy^wze?&b5$YkP5mC@i1L=ThzbnNZUvnquxv4xIg0 zvjM-FXTlMJtA_ketv3v^Pi->nJQ;1U@yU5}#yiXuwpqY|{{q*yX695<1O3HAHoZ)> zZesPInhXC_PRUPbzi9@QLvyMSDUm_ zd~0gN&+J@}@zk6>G*)bD7kxKcI7D5%2R(*y@Jw+zB?VUs+-zh4+mqb(`7f^CQFLGO z481M?HH1#%Wo|%pqm6vY`>#bqYuy>U^O+;Zrvv`GT^m1cufNI+*NuT2$ik#9BmBAgRw?GX}Nr$3F(p#$sM`m7<-@1yQYF^^) z;W=itTST#H;Op#iY8kP#OG8ty7en7i(!;N*$hA&B`62afDY3Ua(csx*o690q&tO=B zL@QrJ(nCqXUrgwY3LYZgZA?D4XJ`YI7p***649mGdLY9=EniLuQlX?qjOf8<@+Axn zz9ek`)$BLa1;^qi1@Xx6JyXlXNL;(fViv8I3*p?0Y2yK>hn06dwyq@a-+~kXOQ#$3EN^>LFa^C$DgnMSv3nOHu}DC8(&yKN@L(Na z4kffuw6-+X@{f<_^}&bIpWig!9+0tUbay@;+>!7ss+0$U`g};bG~?rblgSr*sJ=E@ z+h;46E0u8)i6Iidd1w<{q)Mc>a6F=SNR2F7$*?>`R%E#eCE4#_)Oi568unQR~Oq3GX$9CQrxk(4i91Og@D5JatD95WK4!`wNWcO*&>8d|{^ZYfb9g=^xO za~^Z!EDWG@{{xuDOU~lQNg6{Hg9t|=Jdx9XzYO~l@Nng zLZC)WZO9Y)!TX0UTPFXkVs`PuF;^9_S#Ig1Cv~*ufKo@YuuxgqMk0DYZ{&qyXlr=3 zsF*7z0U5kw9HVuQzRD^$NFeZ7A_UY2y!cB|LPo)tc7CU-eKg;%g=UX;_8yHn>nf7> zDMgKlcSx_`T1Ld1mk@}VWU0Ij+Q~Z1EghTz>-%#(J`mNPnBLC4<%b84g88) z1zR2`JwHmv2lW2v;IHpgJ5OnD1ta0v5Sfg`$dqQ$u&=ANp61gxch(m8HfzOoy0(06 zXRV*LyuK2Ymw9yE)SOk0Ppi=k7608BLcXZZ!9kkWq62mY=SQPGF>rx;wb)X@7I!Fa45ulrZPwlY(1a z_!!)4r@(vd&y|%fNOYt0|Wixst`tiw2iNPVY1DX(wv<}AH`up1x&2@`V z2m=}|&O(~+1*KY8jpM;{YViT>hRCFHw@5~6Ygjp%1|8pEik}uWJKO~UOL^eJYOPUH z)3v0lwSyh!;%XZWMewDV&hXbj?ZPFTXk`;jsp$dLGH4u>Q~EE9u<9p6FU zU3Y07uZ~IvB6j`M=)>ntdowQI3`P=-&OD7vU99MgFGCybwu( z*PPH(Cy?tG)PT+mG$s7r`t9zSttj*0vPgG)8Mzzd1@-YkH3wL5>oiY4)Qswv159bo z3eUzj$$ze@ITY!{kVpOMrng>Yk-OzOkDx)fT!`2q!YGBqj-f|-evLzSdOl#V3xcB( zBH?I0blvsa5;C`G#VAQH_G~`_n6yb`Bo+-daAP%bUa% z!soh1AAPhhg}}-@);Xd_N!x;Ji`Cb-FQh>|ba|CM4%TMyZ(pJPRnr%hpK6Sip9=gl zvKX~HvMhO5cOZ+!C#ii5(3Q(a&_c95EIc4UJy>kXMzY2}?%4FRrBQFQrqh|;i!Kz`gmu~n|>*4Na9;*!}RvN~l_~0sR##=7% zfzap^P&vR176F&QzATU4(6*r*jk$W^zDmPU9>HQ0;)745V^KbJS5Fo1TiDiXF=JtS z+ajJ6VmMCUBmb!sa24W>)d|^tyjAkZKrsp0-GXbfPEzuitBH(b3U|}v?Ke|+I##`g zN~)x+{;bE;oBX{29ii9yji+e_Izqw4^1IeNQHX|(@9{dDBrn8+RbpUq;B(&3(H7V{}k(qc!GCuM0||n0Rf~oIDhE3({L1l zzQ`@8Y{PaZ!%D`f=}2mC(+o_trOT?6&lR22xYqIE-g$NUP0B+tX&ioGw#^X<#bH1w z)GG*fc2c(&gN=icpc?56TzdQ(tDUyUEq$l!#uc_`beKiflwFpypjM8Ti}h!mAUC`U zTH7S%Rp`Ij;`8$b&t!P)%{c!JD#V z)a%qT?Fxx>9QQ^h&v~@5L3cy^AKu?>ZY`g7=+OfR8OJ_I&>*Iy$2N!Y#S-6s^W6RUuxJVzr4+EUT3AD>iPy@z1{34x&0u9_>c7$f~pUXoj*m7cVeSuU#| ztsCRQVu+%-*wDtN@h4yfQx-=R6(77rkrIRC(}ZcJ5kH*tk|mn;%_tVK&?+#%6Z9Du zdQIGTb50wRpcJz6dn>_4`()8R_!*yt%%cjq%eSc%X zfR069<=Zk8O7vyh6nB)?#0KJ2(KpG`Q2)^8)K71V7b6#QvP| zCD8)ffxb(Uie&#Dr{hvbu+tF?VFIT>N$hK2?pP%L9BoNFA3 zL~Ip$%C?o9`$dC1oE+WLg0P=f)ww+NFCY9>!GBYrW@f~i&w%;F0pr8aUtWHiy-<)V zam%c#F*kE`N0Qq(KKvAM$Dcp`bQr_88Kf_~f%=eznD0i;KXq3nSLOh+EAGZ|T#!E# zZ>#b9s3P?%(9huyDYH|&3KIh>=l%E3tw7MkBm6r&1$S{?~V|Hh5*DP_UFcfQBdvWs2KO4WU1BgeFHddD~NCjn)Yq}e+5?xR64Q`Nu35)~e$ z`voZ2Zuhv1>2^K}QKm)=pLAcDLYzFK#RiLl+>NKUC^j>QKkqsD*x^qj>%-Bc?#7V) zgBJV2{Zn>i6XNGTKB8u#i??mldy^<%LxvHv5kOc4~RaPT}clIn~#t-K+|QK`yKYJygI{n9)Y*a0xxJ zmp1y->ARAo06=yLB-%9{Atd0rvuQb5+=0-*?BD6&k@M+gGqC$_8S4QD|Cnb0e_M6A zt+3$$vT6rny8YHV6N<*3W7}ihB$<)7h$L7ecX$oy^Wb0xu9>AVK43niR|4R38ShQ@ zDbMm@^5Au2NTd?9uPzWDXWbX^{2aO=%1sRj?q~Hct4IL+PNppoKktQ<(D3Vt1$`m6n7NxDiNvqx9*)dz# zS15RpJXHhV-(K{SfAKP&&!b|r2+0STOgT)yvhdi*@9rVP{C%z;aAiPQTSGRICxE`& zh&8RfEWPt?IpBe^nENa|23e2|;HP;{HZ^h2`B|+a55pB)Eai%t^T6jLvJvN!q(;P! zJfy!}NQ{(2W#~`CN&M0bTl0^$>dHS{B~@Vb{+<>NZ(bjz__g?{rEzvUu9Dm7I`p#w zl>cRf35{X^L*NnnV6aEJ41b-rlVM*9KONB9`~5*1n#z*FLxxB`_dK3z@8Pi-yRet+ zMke$5RCTm+k6Z8kBX8uDCBf)r!pF%n;?$@g)bu;%)s&wp2tpNh3#b3MY9vH{`|j{s zjbOV{19EHD(;)pVn$rFpQw!aaBO}kOr$LAv&xg$HYy9TcmjecK4h@C1^;Tslk39IP zp>E6=t!a(ICxBtmoS9+~na$w(;edBfB7IA1jc`v=$I-rLfe-&CaAsFg)Ly%Mo{wwB z3M5FV z%`4jSBdRC>UzL?T@TYI8Asx zSI8pgw54jLvnZ?(gL?M~GJNe4yhxkS$jbFCkTvV@7HWc2tzUR5BAM8{ol6p(BgfjE z;Hl_S(Pxo20h$oAMW<4P@9ARSg_9EmPXWdapBi6T_vD9ROe8V~EZExH^HevkuyjUE zB)awEgoa1SsnW5Sj7Zk9L9CCcibIMj&_gg(4v+^%b*xREy*z*?9(Y;aMDGUp!U5h| zH`ufnTrK{h=gjt$QI~P=urIX#F*%sS_|Gn6UD zrvGS$Q!g%HGgw&tSxs)*!jf~|)Q=W7bEq&Pme(Qcr_gt%iAz5# z&AtDUqS*xUKNM)6^~&1SNAl1nc>aJ8CU1>Y0=cG{``Vs`AxV_gE0Cv2h{?eRs0CVk zIu0W~4xm4T@3g`;@0DWUeGJO>k3!PDVuiV7QNo%`rss)%0Xq{k+uJ`b3Wh1Xz&Zbr zoOzfNA~cnY?;egc*PLd>1J-%*rH%;$?rCypm4-!Fh+@lL@yVe6qupcYR0lV(2;@~t ztT=4$=?4$0BzZTEvK*!6t!Jt9A^IhAv6)Wg&`M#+8CjwoO_laclBDO#qCGvoYcF0-?Q^6#zdDn#I$v zgUJfhwGefz!Q?l_c%w&g!3Pxy4)kw>rP8|M|Djr`Fi+iIFd+Sf`aL41_fF-7gb+Wn zbLEI(+`q1fybS`E+Mm+rR|O=Pn8?VbCUmo}fz_CqgA?3tx~-3NGq_sgqMdw5TxqH2 z>7x;!`3dEqL?0aKUpSn_@1S!{Kmq2rUJkGS#`CJm;}0Ahgv~@%-HehgQ%AZ!NfJH6r4Qs`2S-ObfwAoPylc10?4(I(X zTYBt?P_ZshAIwkZ5pNzz;Ic0!ZvNU;Mx(kcZfT=D_ZuNrqC7HZeRAVMep$m~#C|9n z#bs$bk3G%0VsQ<2PbO%>SsE-HScPS)HN>JR|(NYM75Dt;i(pGKb zIUc^8CIqFFLpmdKVjLHI?P$CSbh*t|QAcw(;I~*uH&v3Mexgvs6nzoXA15jay62zh z3%*w{hB}G?3Gl6Z>5w5%FfgP*)6YMb*}vK)#tBzqW>1`bFc3mal>Kf3oLKx_e{7R9gXrWhH7n2?vsO$Js$JzgT^vFegU2?YsfPoQTv=j z(l!)bg{fZ-uG=Ex*9K>Gn+K&i7o+?FKdF-82O|Q;vo?OI*LIAI@PItvGz4v-=zI=r zhq_Jw26QvzIYb(j_{n9-@g)HdSw%fE@jpL62}zeCLK+n(rhS@Uut{DTfR*?Pi25Ln zfv0YjW+K0Q#XVK@{hPO*XN;SQNjt8}v(JlGme3d@haDUOJpeG)JTHCj*J@lnkz8Ch zV3VPHJ}n#R>kCCDpRj@evOM#@tIm8(#Eyavp<=G=3)a3A4Hd4T0q#_zrPFGa5m-x%Elpw}0L1>Tt(OwafLF!re6K`%zI zt3Fy(gB-cxX2W8M zYe#}))*f2DcHpeYF}q(#3bb{MSZF&;B(68vfxcLe7@$ZYdFcm_Jg9|puhJeBh*Q3W z2!&!fI3{?z2Vi5yEm?bem-4F~$unrXV2V7undbx1DdyQPBp~IXN8zkjLC93G#ltNs z>;wlo7Z&`Lf^B=@TyJ~ou(i*bh~LPxfh42UR+cE-+T@^tysg_M@?kI-T0huF-Qah` zvAxm3gl1XXO}YD;U?X&wtjs5iZDSUWBs%h|S`os8J0XM@x9_vaXp`zp6a5Bzlt$Fv?K?471UZlP}@p%cNf9y zGCr8+YuRH)fH*iZ`#dTja5Byuok||Us!nPF>@*Fi-81S%-a{_dR#qO&=e;-2IcpPt z@zKdZ+sz!!NS4@~3B_;jd|kht&HF+5Y;sVo$~oF2xkcZ^e+Nd0wk?q-1v}*2djc{o z3%d}*GP^5yOFfgtecqFdl|C$;j)YHqINt}-q0|ru|JUhsJ`Pa8wx_3ZV8hn2hA`NQ zBtqN`#mOWz_yt3IZa`9bW%#Z!=}C2UdY*YC~zaK=*_jO0-=Mv}EMB_?(7VCn7pEQ$CAGF660 zRq|7)fF`V+w=QO2CV~mVST|ApvBZqQaENh`pIoOE&8h#Z%B}eTy3wzHkLP67YFE^K z=D-36wshfdqhP$4B8IaclmT9=7gq5iV`+SLvaO3_XMmrzHqTP%@3gl6leG_}0625f zrb%KpSH2aTc_gWq8FNo2l9*@*N3YS}LA> z#a)R5+HFSX$IbYDN6#DH86k?xHdeRNY#1K+gQ8Ggpvo4-Qn3q#$E02moF4^UK) zWW~B!$Ie(z-3l6*(TQQsr2Uq0EJEE%;oT!Sm8Za`I$AGMV?Y;sJU3vZO-q9E<3+Zq zk0Zl00>FvdH8R^R2nm9d90LK&>hm8a%|jILPoSHtN#wVW_oyi z1(`O@C}8)mMika=z2$Om&C_SZoNQ+4^ctkF;0Q$VEDX=7)D|;eub!D$vB(e&#<}@I3!m30#ZS1 zAYrM2p4_yq7x_KREc$*UZ*Do`xP5X5BH&WHyfdWWf8VF}KY*kynN=E`Eveb!VZ9*xv3Q9N$~tSqBM(d1a9ccyIBu~MAV{Wo_+zgQqhS1v}| zyr}wrqR{eLmq<2;p~*G}AhIBQZlV)s-MA8koC&cC&!&1mM{tLr`YfN&+ZSsYU{@Zv z0n_hr4gc@bhn>~wR`X5Cea#)N=X@qNcATwu|EL}($T1>pKY^_mWG%DlvtRJHO?mS_ z^V(TbYv6A7;WgkRZlNsjL3~DT8aj&NHmM35?VMxQ7*JahH>_~&2Dj^LzIAEYy+dRV z4qHbXUZN&V8&2yl2@G|nJ|I^%g5L4(JUNbRy~U_ylZ!_+vT)-zp=fDd#T?C45_H^? za47Gu#HaO)xxh9vEF8RO2-~;cE!uCa!_3 z{lS8bC2>t6diS{Cm1~R(DNoD?Dfc+9rAWYmauVKV)IO&5TpbasIV+qCR@R-jYzfuN zim=np*3JJ#h9tK(`M(9_w}*`Cy1@VEKP31@Ba!0yCiH* z>DAOyleei4H^}XsoyE1|8ssN}S~x6HVZM!y3_qR96Su)t_1EX&8_+p+Ya}DAv#ijX z!_rcWkLSHWv$i-r=Dm9%Fji<@g5!28)WSiLHy%2QQa%EXjUwm-nco}RSkN{XB*moR zELB69%^fye$EJQK3u}+m!t~BcFV$8>9jlXj2nRNF7nfW!QB{Es4_0?>?dxzF`F#9NTk|!KL5OhRIl-eL}^#JvAaGGHB zGgk`pju*d0V=uI z?0wcJ-X^wr^93#o;`*~<>fpxoufL&V_4F${4#U!xycs$9I5=76{}lfx@-qzEdKot4~Ra3TL1ID#mm z;>~V2zKxP+vSlj@okqP-f{4;Bvs38nHIWlfGTH8{)yst(pVOcCOzg;Mm8s$td`x{ac=efh`asG8wQodi0hNS+=S)}6P z7wkXlux>MC7%ki?!*{x{=KFQEaNTMo#~Z`?8y(!Hfff&e33i%gZs@@8_c*nd{s}qT zX?6is>zt(QkKR*yh|`vnGh-9!;FiJSK$cd#2Ml0))(8FUx^_OxC=jPJ@>a>}apW12 z?}wL=-}vE3G-wIDdM8?2_+X{CoHCRcDG5Ox=#ouCJ}ohS1>#dA>E-V|r?-r#LM)s6SPJ76eM2?l?6DxLuiO z1aF+Nnqa8{$3Eu=LtT`2OH@Enyi%oKyIl}@u!Bbl6VD>AF(M;*_7Swb38~2TZQ(ln z0&o(-QTCF$S$RSr-@n&Bm!I0cb*&9SaYttGr5x@U0Z!;7q4B#ZB6j|Xjw{#V%mY3%dD>k@pO>tyfHfc;F-jYy(z+ zAhovsm`BQQ88=s3vz;XP*3XHZml+(Z>`h#J0h6>834I(OeCNQNk{e&2hG%q*F5jQ; zq)zdq;v0BnEq2QE8*~U99t}xX{6dSNf!eAO?9|+9^d*=V$r1&g7>IX4+X?R1J3f_H z*wu#8+uSQxUUwkBZ8>C`6gCKibCPR$Y6pKi?2`4nd079@aG?;nWG-RbW(ES5FNSL| z`_Rlk*#&Taa(x!F08xS;1%@TvGy^?8Jrh0Lnuf8qyDcw=IN&jKur{7>j+7d(i42oo%5&vDS@?O(5(X(`gWg%w?7ge9a-y=YU6Jy6sH5Z|$wxUkihTU8 znmK;<7w68-Lak>CvQOGL{oO@WVJ{wg2ETW zQ&&v)z#)y#+&d-K(SKIL?1h#&3XrBrh zwngoiRjbfIwIbCX^92hx^-x$-Fy)4hT1fw}h#qL1p4P6Ug}~XFj_mN+r%dMvcMhuJ zJr%b!y|R9S|1A!V(rQInv`Nqf0E7uvK?elekg$7x!wLeO`x2o!TC{k#+O@)4GNscR zWJakz8(yF-Nk>fA3&Id$0!cDE~qcNWWUa7aEVkiqtq$h1Ku`oQ12ei zXAVM^n>J3n{7_Gj)4Y8MivEjk_2whM=VA-|PSsyi9kmA>n}o1RDI}1-Xv-|)xH~Q` zz`FZ;;r6UR&XbOg2i2RQ098(qpuphXoq^n-fm9K%pkXXf5m)^s(m+D#P6m+*PH+Cb zttB-mM{#4RR%XPndJUl5ePSwpA;k8l+jGU@BK*QM?0VFmG2~r{tys5^?GBDjIKrTp zR_-(UlJadX%-3p%Y$rg9Rk^Nh2qLpA_^&%^6aRt3&1iO3I0DvYh;0k^(ru8R;SlKd z*jArn+cCl$Y z2=jVJw39el zRp3wT_>UoHaWSjugKP~%`Jk278>sdsjx8CwdVbO1eBwvQ%`WGoUiH#3pzZ2voUC@K z06-}nIQS`IbQmSQnB%R;hrkfl|BS`PR=K-)tliCCtc&Rv1V$Rm?w1G%odYbpMf}uc z?oTu0C z6$)-{31?ehsF>;yH4;A>RXMS~&PoF|%HKXdGA+)tkV}V?_W5)+0$04ryTp!MHwMzx z64#g*$%pSB##-pE|0K;mu}HuwZXc}@#3Zn1_J1Poi_}0QHejcDfm8NM>IdVj2Mf1? zL)@`j96cbIUwVp?21>(KQElD_w6p-iR(4bd`Cv#iA?fe53e#`Mmya?q4u4*iFN+C9 z5R>P&+}6VYVFT5tW+96`1a*urNR2K`3DU`nv5mG}Kb97hU9EDp|DeT|xKMz(ww8eP zW(s*1$1r0!=82o;vo7(``*9QM^oarva>w_DP)UTzR@7ds&1M><-3a{UN&G)J4}oBm~U>4 z@id_@qQy8gmeKz{U#zB#zYdac6|ASu-cn+k9r&^z=S0Bkk8N)Exp_U4F_g1lvqB0y z%2L4Xa5Fii9poIs7>OgFk%bL>k62?@ z<=n8F4aA!2d(2TGVF%HOEjGFQ#RGouvh)5Ix%CY?=Ew(@i9CcR6VWv^nSM0XAivR=J+W~rv#R|k>7Yq73Hm&?! zvvqR#`IR0x4o>X35joWj82*VjxxNbFfbK32;c^g7AU6WG~i z3EM^G8RdCt-NE!o!e8Kb=+xj4=40T+@bebKY)CJ_iavmwFjm=HQPUE>?{2k0?6>L5 z)`98`88v>gr41qenr+{UZO}}dlM2J#Y8R1nSK4-tLWij?-r?a>3P{*L2oDb`vt|gQ zJ@)NG>Bs{w?OEJwTl-`oq zZ-MfSju~eCi9vh#b5_4lV9YG@o>P|2SXPCc%$+?)zGSjju5^To@;yHvi zdl&$W$}sW7X-F>gC>r4^Cm=n47U(+Y%3uc)e>0p=VY0#lm{of=<0^4&vRpvI-><^_ z66+4>CY|BNillQ%o_l#_mewVCXx5$S2@KA+FpZEHL{h2gefn;a8&#r6dj`Jc9sS4F zwAybD(zfeN5`bK!mnzi7uDKVyBq&9k`~5TNu2|^^S9o40 zF7!iY)_Kr&P9(3S(6BRKQEnk1roH$cwk3cx9ar0=kYafzxg?Q=HQfGcef>_4HRau+Pj;tuqh%xMG|j?x%+(n@Q!=z5s;_qRe+d z*eOP7`a{#bgWEf|p7lyOo2 z@pqsQH>Tz#Vm%QV!;#uUr9b!+Y~p^ZqnF}g0hRj^b>h!+mM|yxoB=*AW2cDQJ~8*T z*O1pH0Bmx6uoF*-85-`t$(BtI{w!^?7=?z`w?3Zb77%Y=@)zai;1`ve?F$wJVL1eN zP>6JL{sK;-p1dkUsdkGnfnh@}0p+v|@IO^Ub12{3J*J?5%5ZI3#*?YO+-N9-W%vgN z+GJkiH4Ypj>Apo-CzUkE-Gf|$e?=+)2iNgAE_SioBRgbU zQYlD0+Ie=Edg5IQ#M9HBuI37e`6}1C#J+ohb8i+OIG# zW^jEJS*-1EUjV06@_9qR8}T82Sm8W`*l6{d-#GQlt(zqMFoX34m~Fo9b(RX3dZeey zY-}{H+c)kNwwE_lUR8+X_ckLNkoclV${BE&Dx6=ZRm_wlz)sY$2&3tt({TM^+ggBfssVRf}ix>l+^0S{R!*1(=Fs~hzR3iX#U`A@A3bo29CaW%(XQ~2Ga&S=7m?!#6LKI}iM|lSV8+*5b-v zKb(OZE#TxF8V8q%Atq!s&Ox*;^N#U~JfqSLWR0nSb)<|eU$P|-m z=yx@N1;FSnUlaWqECV%1m*9uq)+S$RDpgxIvr##H(Mx*OW~3_x8qzxRL+rHeV~GISlQ}dK|N)>DwPPM zwQKF%f)uAcGPd~T-IZLODuaa#W@_g522#T8bE;f{v<`r@8lmS&b3JFohWIOm-?hWnU?(}MvN_Swy>G^}^ zi7#uT_R6XW0y+xIc4RDyvJ|jzDN5p3u=g_%rPCIuGNN*bx&W4j8S=lNJZC>$goNFh zKZh=9M0*B-Dy)b}n@F45*eHU5t7=YJ*gN@uhiel*G}gTJhx&MKUsl4K3e=>VZ;n#b zCjrK+`fy0uIk{ghW1e1&ZY>qx<$M@MAShC>XcTfIQAT_5uN<4vGd1m259wRJ<8k?8 z`5=P$C;NT1VB>IMQ@)bcZBuu*^#tc>X=%tzP*u9CT5`bHR6`5Q_mAL+YZKk+{s2pd4q(6X{-(u$Eu3M`(g2 z{^h-<$;xO1t7yaCcgAcqj1G_9*Hy-v0pGL{viEk2mKZ|MM--XU>v{alW2v}n|-m8Hdc=#k&jKcGU&ee0S{fV+Ez82 ztu(g-%oGQGx(aR7+6k%(7YSV*;+R;N1Y_D@DxeFwizZHT``b|alM{b(ZntR>!UP-! zBxCXaE%U_ksNAu|p1-Iu7ZLv`D3i8o+7wED8I1LH`+3m8;!G%H9`k?^aN=TQ-hqW#fb7D*1*UHPI(@UqBG8;<-OV*)dsPh+>9%rJx zZuv0amPE4^3vm&4#FC!J!GqfZ0}8%eu?mQua5j)BGJPm~`?aEM zRG$oBi-~583-h%?`p)bf@SR(VrC<*+-OO`cKzI0mg>lgIjvb(YZ4KtSh$pIu>SOy9 zx=E9k;?dV3It2{duK*NHvSk?MSPRbTTn_9+9HMkS^El8>dBW}-!D!p!m!}FPjiG-B zP@k)hh+_9Bz`RCw)F;M7;Rb+iVb9Ru+gFqyd>7Mbo+fTB*wXD1+F?gT!UT*d7Zff* z4LkD;D;RaKoP3${*i8j_YcV;Sw^>~Q~j1b@tVS;Ka-Qvqc&lzu$k z79VK~PGfq09b5?jQo^jL^k=M9k8g_@U=w*O@bRml-Y22UVNC4d^>!2!Y=ek*G)$VJ z_Q=3j*`%3j7dS)iu6ZgPd(8ZDtuLU7R0*#IyhZN0JUzo;wu=A|+GYwK_DW-|%Ztd* zX`5w%@Th%BLNJY&hNi@?67=gjc#%!VDd01mP@GMOWz9r0`P$wfIoW+=4~QdKiWx5p9ZoEA zYMBoSL1*n7zas73AYFw^@sb5%6$n%!sh#!WP}xM1mBw!5o~YZDK7ij#{hwGe?_Q1& z0Kt{@p;4;YhgWJlkSM<|ov*SnSC#)=6fe~NP%b{&ots}bt zRU>jyw=%SdJB+IRQ{$hBvZTL!Tqu{OxxdJtFC$JdjECC9AunAqE*FixRE2-dvq0)L?}Vo}uRKM~Bf) z^_jfl^mV3O_;rRgc(+{lu=;ljA`O&xm*8WN=FKlNt&bG*Q^iWiV=+5)Va&q^4KVOnnuEg?Pu$I1r~91T+5?oWo4*5hhvw z!7iQ_|A>Z039N8DoH-?jEcA5qaMC7+rjS8}jtlPiFfnzR>NM+XecSK+4S+J_ftJN* z+A$+mLmnuB>&9g@u4Quz_h7Hxt_txnX?)B+eT{I3W2G80<9f_!aACP6^)Y&(Vts((9u1(i%M> zjcv#sUr~Yvob$iHxyKOCQ%3&@W;=FNJzieQ%3sMT&oCxhuyT3<{mNtp@_|3zaI;hi zFb+P}ytrNwxIz@sN&)(t9Pco)gPveSqkbfNNWcmT2D9X^Z8r-C`}^e}9lMlZjnq8J zwOySlWa9K6fL}qksRkL5Ny;08t00A^z+Zws#`H{GuM&ZJg0a&+G6h>PKnRXvO6ve| ziIr9v2r>1M=l*GzQtk|>U&}rfjoM_fWX3_dwfe zc8oL#qCL9KyN~Axy2L12e^R6<8EM0=h3A)NY|>^vkVKo zKin&SADj|`)VP1zIr8FTso85CXwP_mSz*eY3Vh$7Zt?0i7zMUi@`)LBzC6{&q0?UP z_S~b!@~tl*iD-+Zl*hQa>n_!n+ujxtZSHr?VDpTFxYxmE785jbpiAfCo#%8bd=Y7A zk(`L_&Zah0P4e|4jv+T;&h#P&`8mvq+@(H}H!f_+(E*h^iF(>9|h1E%2Nf3vTR{nyf>58#&!tqPX>R z(vuc+71tINu}>gO&%CqxEnt$yyMpwnJ!{qI|I)`t)J8alft&{$K6LTR{4mjMAoFXOLRKI)6)!ll>jjF|&)}0Q z)wxn`XNY{OlL1ae?r!go$A;|n!zWgtnVfc)9B5!nkW~B1)W1JNb?70$?6vuFUYs#Kcnh-SRQrsBIm0pG8RP8>{c%-eud38*$ zL;H#C+-TK-zV%%2+<~J;*`J62!D*4cL%ug{Sq%?7BW6!g8c$F)Y}h{ks`%sb^h=4p zPZfy1m^`niARPNHk!jvaUr7I6NZDtf5k-xGlnynvC4jz4MKLd4HmA^it4dk!{Zbd7 zI>ElpuuQj1yul~5O=ySrZsZdUd;XIM+iB8S_3`%1v?O@OnM+#h4D89-EyjavBMgK8 z1ssDiN<)8eY!bj3nQbmkdY8J4byU~=$35`!UxYd6SfTFZHU9YsfuljvK#4#1Y?E*IjO z)(;B6PT5-;Wu73omz!}&8+{Lmf>DetPnK>b`hR+g?8eV7num{j-$8DC8rpyL@)j;S zQ2Ud~H?oCBx9G6VfEHyY-!1hRs9k(Gy^d-RFI0A{hGCXN5)R>D#%-t+9om=t-$NbC zX(TawzBr@@4;QOsw~bnm*aOq8$>iL=2KKXf%*Z z?a2cqcURF3Sg))lxWsl2yJZ5BQKU`kwWGOu_6pvt?9Q8s5?#+iH{gb#r4BTHqGFh+ zU}{_#Bs0p71>s|gkYLaotse@nx+6WyI0R<0tm+3=L92`WK3(J*$B(fPOEin7A8^2_ z-Vhz8*#^6pL6taR>E;zDMs|ir5$<)e3gMcFZ4gQ+i7oH5?$U2#WM`pUDS6t>pgSOpQ`u!xkg{8Qy zN)tWp&Mr4bwZ|5j;Oa)WP!9>2_b1=Qmc!ICIUk(DzNS{Xp+vur3|K|t7Rw5V(@u~^ z#Ug6mV&H~7k_;y4BV#XPp3*56QeMbwD!KSw4_oGcaJ!i>Ygjeo>PXSs6gXt&yp+_l zzcfzW0L+Y7k`|a_N3@o_>b#75Sa|xD8j);`dOfW5KM`(=2yv*T-j+{Ucx^n?sRw*2 zZe^7V*kx35QURkErpg>}>K&6piRjF5I=GTddVvcsVy}-Snp6QkCTUUZpLhN10*PvD9cN2MGHattf-@CxD z`(Q9T-Ay3=(4sxbGp5^b+o!2*eZdR#J5HznBGcC=-iCW+RL22FTqJJL5Ve-6) z`Cif*&P>`pExW+@@+;8Wvh?P`Hn_WVz@Qqcmx;;^3Ra3Tn7*It|NmLSA~hUIa|gL! zk|wY7a~CY23Vs`$)mS?cG`p|vEjrl;83DD9(F!d9{XOZ`+Isvg!t^n7;(+L%7a(rN z!HL#}`TJvmdPo?Ram5wCFy@5vNezE+Fetg{JVrRj0jG zQ9fane4keMAdzgPl^YMMVPdxVhu~2LxZ^LC5l3g=v8@Y7Cc8Iw1MRpAWE>FA*?YTN zWKL#N0JI=HedBGK(>VK_4m=f#M!-%4HxC1Meptt+F4eJw{w}P=iUS;7nTXS~nBjFx zsrmj-BHpx>PlbfW{wDeR0heE{tzTv*<+1kPdAI>*{b@(L#jpF?eP+- z3@Sev;;Es;9W)`T%E$K`@2V#(xR=mBFTr-zFg(Y0N+Xjpgf)&;lv}~=kw%A5M8&@6 znMHL{jMQIS**(Ap2Pl1T(ivqX#>uyKPe#(6(akFtn4KFaxVE5#}>5k zd79g9WIgya?9J?pst&?>oDeQ~(~llGYv3&Q1q}37rKQ}6)On7tcG}!AJeR^+sBZ}v6tgtc>yy^Wsq#N7)QWKDdCtw^c#*{(HsQ-)8?v>`ZeTPvdkrjvv7Z4PjoRrTa1 zn{{_J#iCsz2AWeD=_iBQoEaXjgWP)#k(@w=bRbx%sLFsqG>7m}Cpk8`$jO@{<*;hnEb z*o^yqnAEc2u^uz365fgt_cS)sHA_?Amo^txnYdVg<+Of^Y=G2DNjGd8kl9cS-n4c9 z8`G~&_U{LW9gc;o0^tP0Emo6lRgo#>1sT%OmaY~6Y=ha1(16swKm$1E#MRNz|itsYfqQYOO zZqc~LlhHe_?_M^8nTX|3xlGvB@(!9MPBv;w!2X|C8VVvIy5rFMd+OLcMl&`c(%qy} zagPF7(FtjIv0`T)8S=o*+{YClN|&eEqXvY}FsF@LsKFcIumc^%h$Ml_8(0;1cmCGL z5$4j3ngGpXC0Nu+}zPxvi*=%}vm;AF!sg7f8w2A(qmu{l`2Kvx^yg7SU|6Jq}^Y`#0 zaGjXo8ZN01rAkS<9h6=~WHn~kgE=aOft(!mE{yVHxS&{9O7I5sj=)0qrHzm;;_yok zQMao|vTCO-ZcgPQy=3v!1H0vy7Yp@Ri^&Db!mgb060lun?%hV_9BRqu+4%|e`VR*? zC&X=9fn8!fjV@FSyk9cVAlDP?YOpe16M%X2=cu;7&~`$%5k%lDMs<%3c@sH@3Q$uPpwwKg62^UBWFt;sDjSi2+Je3-=_nn0AfIK+5ct?C@Zra8 zbs5o0_~4q!l2(B&X+vE}MkRCNhM#Q+1`F{rymey{-3yVhy4!t~2%>T5a!z8``_;?xs3p!> zV~gPHzb&Q8G;~+lyH0RJS(7(#`lzGo%ug}qFiW}LYu$v7%K4IbKhsQc+xXbJz)Qkh zo)sl9DCjQ)?*41`pmIp^eSrC%Zs!Na_E(FC2@k!e5u;apXHZ6rMoIKgyG|l<{-_k! zgamcgeceQJ4|ZPIl1|mtt1RIo2?A3SK1psGg(kK1x}$+3Dh!z7|TGS%(@Kp-N@CP9xEQ*=<7X zYCaBr=*{7k0A^+JlxJa*pQ>fQxd#Daz!T z)j^x1!I3G-p8yQ2^ns|3%s6l!xWmZ5OEZZ`{#|RK7S>`oc?J8 zyHy8?bH6cIO0g~@(q&Y-ljwBO%5Jg1RM$hLkLZWn(K?_rlnJss3vn zp%+(V;PET=O{e(mzjBuK?;9lBz}URsc_%P=f%*xm3c~E`BedXxB2op}h;BN|VP5h* z67(5f4&(?Ws2 zx}!*w|e~1EN_A6stME>ARAV%5+T}rU*{waKb_DUdwhYXX%uJu=&(*T1YtQOD)`-BrfboFtg2dl03`>h?&sv3wmy7eN;qo!)i* zWM}4yGPT6NyVxQ@gjlII^RoSmL>NSvm`)8=DKp7{zbkB}yMRKzyEIh77Vd-VzQld5 zT+$CEi`=A+I((#NkYHWSDr%z8B4#}}v<4M~SRtRA$ipuk?DY_lcM!hN)KJp<5_aA+ z;Lgg$DrtKLEf1zel~E z$mVn=eNHsvsPV%)!XRKDS*(6zo39vQv9^r$ukgqw#d1D7j4Jfz#81B%*ClLkAb3eF zs}qdC8ECASMh>D6DChVF9&q2FAF6-K%kC7WSbcEfKb;Q~i7v4+x|I3bU~rVbGX6kQ z9=(Ff8hi&LGMTQX8VM4^^>mE4a-Ie(1QXPiKm?YHRvmEvf|R%bhy%R8yYvA(MB8&l zN1B3IlTh%J1){}(_~w1)*V^YjUG5?iNq+$+jt3D!VY(NsJ&c{c;1pcEXLku9wimI+ zWQ4OaQ{kQrDHkQ?y(i(AlEIq&2jv^%h#L8j+_@ax_q0k>B*zs4+ zd(c@MNgmZqAyhk>1{B#GF?uS0)#oFSYQ|gtfGv6fTycV@1EGTwRy5DDeBVNyyh7E4 zMoq7q@fJ(4ZViAuFXos~KO>C`b#uKmAyj z-4G|sEEpB2u(aI)wb?#6L=@vT)lwaJe99k}X``v5bF{$ot3%_l^Nwk7u#yRN><&<7omLk@Obw}d9UoG7er^uxLG1F4v?N!3R{ z`Z6?DQpWDmG~E*`k>$Q*X1(l*X|zRCGb{X#Z%(Y7xbe2hqoFqO=(xvRYLHfG73X>6 ztX)n6HK!B5|@+DpYy*6emG&pM4PVZ)!KblW|@kx+~Nt1vs`0 zw`Vk2Mo8|*s>c-MWY<=7m2hMYcH`UVe2By%kVBmy$%w9uoe@*{G^v#nUY?->tR%Gw z|5Vmne6T(aUyYaZ7atZiQwX!{EVa-KD=%=`1JmIx23I%}SvZnwJk|6i>Ersu;qjL# z7{If~^On)BMs>sY04X|a4sl;S6D6tree#!g_NamljpiVGIg{~_@^v0Ntde6V=gjZQ zP>cL~gE{}HKYdtWmK+=$U9M0{n4CN(ev&;rG1#S`3UjQ`vZI3A7vd}}A>UEiT92<) zp$q$t+IR$g`;4aeTlhISW|D-Wp7~hfGNKg+p-{Ya0RxG$VH2v%L%(h-$Jh_l#3@3p^wBi<`q$i5E5En+XBpWKR9Dbp?w(Sl%Do8 zkHEYcN#hS_vu4Hg>37sawDdi(*Tq&f^$b~U3Zml41)fa}boEGqRxOX}} zJM0WLf&`epAhY*H@D-9=nW!2!q!ItWjDgP#U+?crQ9LI0!Xc6>@_8m|#qSCIx4^2j zp5a10HyfndpBZbwT`C9+P*cuwow{A75J_TDdt1`jvBz~ZVVk?}3-nnjpp2++>sogz z?w!qkQ?YnO1(S;;CgQORtTg_i1$W9f@Yxf(X*OR9pB$IBXWcn3nGoCL2V7*McDuU} zbQjmI$3cy!<*gNI>R$eyYZK5fQR*JIJlzm<6l^y!TkDZ^N42uLySPUg6%ya2g-Z#i zeZ3l+w!@gZg-{frvYc6k*7j9Drsgl%Z)|h6?U9H6EC`71*|6?}&?!8*Fgh7z#_(qYsZje#Z%a6GN(E> z)z_mbB>Io{Uk4q^aA-)0lB49k1=>rHbzq?!^N+qbd+woZv%AjR>eOxf;!KCtj;Rh& z>s&;A6`=;=VDDUU@u@$Xp>r*s{VM0k@tzS;QGS9!v)~mztcSX~v*sCLqPg!i$A|K) zG(4Z6|1>DVHZSj_O`X2SA+v>{Ww_!XXyT^tuX_`Cd!prASa`9wvShhP()%1xKknVy zp&zC9EU;o%ddlS(kJG%<1WdE%TKCu)gHZ=7n4(q(Qx+9(X^Rvf-=6Y=NV6Qo*^Yfe zeI)Zgk@iKF7bRn4CE`2?OPp^)mk50hAlcdB0N~ZSEF{Kj%K-xrcwqyofgXy5mdgjJ z1nU}vFpd;njaBfvL`q^rzfj6jC~*?F5qlrQ zB6}Z9sr;(|tg^ukF#QoZCd_j|SNEO6_iJuAi}n{ld*W0*P}OKmL~_ktqg5NQ(yGDb z1s~$B0*(qcz^i(cAkzj}#}$wm6O37=WxE5zDzU;by#{v*zDc$W?CoKmk(G-=(loRTal>EQ@d8f)KC zKyC;lr3J|(9=hCL()RQnqYs3^1hXVCi7Z(+acp78bl{SOIV5~v(II39pNH<9o`Cm^ zITP8`@#IVE8-)Y9?5i+JXQleq#DL2Rp~C6evo!?ir3^VBr5>7DxSObc5BayfJwe$1 zgTaqlUznIZu-$5R5)_pPO$k(oQ!Up=m2@`vi{B8x?7UNhzfLhxWoCI$Z?BEb8>=g$ z^8Xs4IA8ZVBv)`K=oZ}sLz74C;npEy^;v!HU9ZenOkhh-zzH_ptrdXe?kGs_h!zue z%|x}_tIpEZ3a?P|dduu;MytFP%>_wcUfYib1|#?SMy)EB`&^0#dOawr{>wW*ldc_z z+cs#kHDT!&kpPxFZna_l3Bi%@T2x&+y8(&XFSYqq>VKT7bi3r%TV5Ce@!^~y4$dW# zA2b@}W%)v&VSUwzhvz^Uz^}p@Y9MXF>p)!!ICI~;(xNHt$9iA^IsahnTlx@BK~B)u z4FC$~-p;W=`jfsgfvU66{aOC>e^KC*52|PVNRU!y3bNJ=uKQ#Gz2pq%jNgyK_&U!GNd8?(_T8-oG} z0@2w`id^9H=QOSapYKibxX%T?=Z;CmcShzI^>KQR?%TLvB3tNco}5ikP11v7TwvNj z^dS_bqgk73mTJS-ytO=}7|XnIiZ=t<<0O2TohcglbFfC&%EU~1m&~?-{{$`xn_!vH zGA`~eq%9jOsn9_LeA7+sY3NAFr`G*yCIYm0sdnWJaS|!4<_@9rd0YudA@ptzw%EDcyN- znP>l^;+)@yCW z^JB!T%fhCZs$~f{R@K<>@p-AR7$*zLtJy7MkDfZs54rvHAf$Phsf9$e16x2W6X0qa zShN>`0u|jRcy@^EWr>d`+0GD#w=0R-@Mo;%33$M-wi8uo zxFN%ai^cAaD3E2GNH3PS=^j+lkYPV~y3!7ec0h3dP&xW| zi?@)m!~5nobI?97@{FfM&{-d(XbYivP%(ya9Uz11OL&l`t^&=nwMgB28eG8)mq~SR zal3p%q;@1I8J+WPyidWU6B=qm36?{r&u^uhr>4Baol`pD%^7T((6(+kNfxAZKCE7Y z#|&g&s-X`4K49ksUcb*<&XILm7Rq{Cz-DFoAOTwmK7?YC9%u_}YN}~}NLa{Uie<-_ zhoCvE6d=|)lQ2MB@VPF?QVYE8y-((-b2e7Qn%4W0>%L(g2SB~1>*4h^Ks^8N?q@CU zYE&~VjjRUO^ko9XO3wxn{kf!BoaCfH;)oVN8f@KC`nC7-tggTT?<6{>Aicywe0t z$%mdKR43iCk>Wt8vBw~B0V2}c$39#u#CNA%$ia}1k=`Z%_{lJH$FviEnR270GgyS4 zQ^O=yKaOOeT+TNA&FmfY79(*O31bj97bexPd@Y3=g_DuYHr7F<@;ZurwjY1yX#gg1qzc5||)GxBqZ7_U=X`OK~J#F&Zv07r%w)(wL=}+$Xa3SoA^!Z@2-%9Nl{Z7hbwMA_pGOHs{qBcB)07 zRj|~jGivo@%Zplnwn|8CWr!{G+lt)vyElvHEo@l9W=k^&|EMhrkP34gpHzWHTu64> zrF{<)ym%hw7_*B746iRESYQOY3~zCP6G$6CdKWjL2iOR{>ikTSnGf5J=tPuhU4m2QJzbA0IJp>7BkM3|6CdsV zt$tf)KGolPvXYKarorCijF2Pk79R0L=Eh11*R?1x-WE`Cp$RbdKO8hF`vg93A`Dtb z`N$0UT3Z}(eh^ypck6njh@<_cmm8vGfRtMy8}hD4XD;Ta3GZ_*!-q&_hS1+Yb=6k1 z7i))HuV&Dmgh@)iKiN2%Wmd1XUTT5k-wQE4X%j&nSlAM`cu6hcz#0x@QeZOJj=}X_ zjN~Bsr*P^oSJ{_O8$D&-{yQz~YBY`}XI9uA$DJo{jdHuH)}^B^QS@FGL_OUTmB02+ zgw%D{hLDl^Zif`%WaHDCO&fIfB+%}M2g741XC-dEGPu%nb;(YL_U;VC>%a*Pa?W8> zoK;2bv-?z_6t`j9(dlRr^WDep>UZ}nMd4XIQ_x%9>?J|A8^WPW44Ls!qQk*{lV{y( zt=U2}?HKjlTgO&(qFP>EX~NT#pwvkii(eIs7?pojv1=uN`4dO$>7oyq=9FwG-Zq>bv5=91)!q&Lr%s2`-OnoGh>4PZk1@R_V;?t8iEc zdC6n=k2N8A|E6T?HK+w2?Ayh8(Td}1z0f`_%ZUnqn5OH^-pGOzVcoQtL3pDRf1VMH z%X1Xf<|%Z?o3w5NUOtsthKWZM{z%TY) zxI!fk3CcpOH4)O}Mr#WCJMPyU>6fSf+;?5l(~KD8;_=}?x3W-eB)}fLI)7~+6924j zjIA%kI2G?FPvI-Zf#5ZtJ6bllDzp{C!LB5PH}=V*@7E1L*JQmnEQQeP6Bm%E2ujcG zfD|Eyf4rrIT!*1sn_+JhxkOKTbuK#N7i=@u#AIatifzqAtM#reRBxs4tBjxdeEN6J z!53b&9QK7jKTiT$3{fCGyAOwmjO(W52!p7fSI{?w0|yTfwhpMgmnD_ItE#~5xcEB^ zA%3wa)!e*>ID8X1TNWN(&%^VkKkhiE7@IgQ&0BL!dtPEcn3kvCA(LYn4|+-{#A}0L zMGpR%>NW`4bbtkY)WXRH}StV&BniyYA_-cjC}eadiGr zLaG>^(fN5rCYU7ke5H@L(pPMJV;thLiVn(s2snF5S9VXuqUVJTnTvzJ8u2};P+7Dp zme(zg`NsLADPPCvjIeY5+U$;F<_-^fH^SP+#?rVe#l8a2cBR)n>InoDPVQLT`rq)K zBqT~~B3TX%iGPYxtk-5xU$hFwxpp^fk;m+`{4BjNUhP@|>($x*V!}wn#DDGeqX?Fg zbe_)M|LZ-%@c<0B-Tp_PZx0dRQF5N;2tq)&$4=9iU_4GHl%fN-!{2dALbnP9qA*;n zyB;Q9<#1)Dvp#(p%sc!2Y(vr7xfjMV@Z=Y<-|OdHmKl8Rykio1{;fq<{t^}7>h2xZ zQ3C1KT_#urx8Z`+ndZ8|8RM3#yUHl56$myBoafW!c~71)ry;Vco|lRfch^bL4em+& z6gNb@fWyl7yH?CnD1-U-)^v9ae<4OZ18KTZLCh3M(}PQ37pAoGGLeq94PtKr2cm?o zDVPtnUIywKY#pz(mtf@Wu-{JjN#pb4z(;5+WwyMCDs)`88ob}O)pXn@s8OWXnjTqH zG7*1B0Uw=X&}k^~$5_p#v><}2JSh_C`H?l)h?dRJMOR~P^L%}i(x1g^8isUGC6C{x z#;b06Kb!GWnf?;Z%zX01n8axaa`U$>V#lqt!=++L&~fAlD0Z3Z z0-A@#HNX|@9cxoXZ8KAPWkj#!V({1N&;v}*KLK=JVacA&5#Bc}7;H_v-C?Mx4Fthl zciQNG%WytBPMht@@@4_R+@kHmD*rF18Ztn6GJTiZLS@R;M;I0)ocPyg1xKB2#JQ9Y1DDdlw#9%9iEFDIbWK?r>aB*yX?WRF zUL~e!HR}HFhF9(ugCFfPj5s=Qnr|@5?wW(9jXWhZI=DjTM60&tp2ICOYh+BDC(2k* zJ_N2!v!=E|;a8wJ=_RsjjjSs)1%E21J>q6dgv2stFubk2h@quv7vVfHeD_G~$O&R^ zda>+SGk*Vf)LD*J*_geK;5qR6Fn7Zev{$d0X`6xMThlZPv{)`IW#3qLa?bnw&A{kQ zwd>xl4aZCl4A0%AglGeT1v2~)IEPM)?I8PzmU-W<<`-JX9gf!%b+FF#y*$8quZ>8e zAV#n!s)v-$gKpzQq@L=XBe}{f5`U&Kv+6ATPu7@vH5@9|eqQOzW5n59I_O@VGoI2o z9=fZ(i-UtE`a@g+yXw;;+rwTwtLKvgAdS$AB-#m$Q?+g@#bHwyOJ7&t2R&6{w#qGb z-X4!q}?=iYZAekyK)W>CI2I*k%uLvQ%-}_R!;8j8FCD$nXHm9zfaG92!0J30|YzTXtWJ>(K5EGJx_0e|kMJ*upnEwdg`sRzyEouyN*Kq6!mn##DEu|9=S zomm`;slUXz_RooSTKiVByL1D2ydFwXX^nlpJeF#NXXy1h_vS((iIn}T?rN2AKFkT4 zuJXs0dvr<9pmZkgh&dFiO1$aLD?6U@?GA*`=s=fYbcv_3#UvNB6`)<_&8;|+ zv+>1;l8-}A&qov-t78M$bFYUcq7$koHXRWwJB=QvT0E=b%C)J?lVvCJyQ$)HhOiev z^||)m=bSKEL$ktzT~tYOxb}7d!zdcD41+#0MjzY%@xj`FDQavo*~BzJirV(v!YsTk zAD%VZ)ZwQ4XkD9oql>m>7V_={!BWms# zUe@OaiR8Z;?#`-)1}67gB-eA?-@-esQ0-mc6L8?;8Axk6h)QjddhpizJ{%jL=Oz%i zNVdoz`#0=GcRHzT{{;KLNCj5uU_q6n$V|NZ1GjVQcj}PV5#)SD#B~|LQmhmOeUp$j z8xd_Mn~{mvLLlcT>3ze(ypYkflD}`M^I4^jO5pkFr@@X4%b-67-sqGsOw*nC-z^d5 zNeWZmICw_SbR{OG#PRb`WG|ETM0sq)ooGAru6`w8pi$t0s?-JXhTf&f|5__q)HcB? zVWugX-4uT7h7&DkPrvMIhWf&X=b;c`7!njhS$cT7p@)hhNA?~jZ0R61r$RHEr)Wp} z)$8Dg7>x|rbjpM7@UDW&Ye@}-7m7Bkfoxo6w>4a0ZMDMymy8GS_xjQA94^XDj>9?T zTpy@@z@-snNqW0aFg^e4w_Z#`H+GK3Ca~PrNDG7`u&G?KIydD$pdLJR<7!Gax%^5| z9}4;AVMlW1c0I;&SLPaZwhL2!pwFuTH^z-OF09nD=Pt#}xdaB_Czw3{t}ZG+@D}Q; z6(#tH)|VL@+8ZZ#DQ!y_YO%tKI2hwDBn1%639U(74KE~pvF~0By0C&d4-l%52&aK; zg)+k+(wc`^%|MJFEPAB%AhMrsa|+CnG|=#gNf4jC%H2^NG@g4dfW01X4=r30n!S^8 z&cwx^kuLrY;JDhXk*_d5jV*S;cmW=+C3_yK*p-tYuES<<3HYY^Uu! zi=!|x@hHXdv(`bu)y`bwEcV{HJIAZ*q8WUr?*xShv6A6MP^4iL-%|4zj%?@2k~TTh zOQCoqh$I^K#A~O6)}E%0{qxkSRYSjOA`AH=;*K-<0RV?RrrkuPA5I@I5U7OHo6Wf8 zH>AYNPIvX@e;&FGH8aF=KLt`kc|FjA@rt)r*PeGGCxEV`f|q0 zQnI{Q+^(w$$9tPq(IAsT;N42YZnOk@Q=V#G{gl0G{~d7Neohb-)`=p`sM_8(Aopwy zGW!%hMGKX|r4-un{z}E(5b>=q1N4ASdj>{3{V*AmybB;(;~!d+`NF!N{^S^o_328Q#Td7!!~yMYc<)mL`0A}M*fKxwPJc_n0_lG z0s}+J?dgeO^hPeLwQF5IRJ;YIJCzYf1Z6L)I8JBH_Ft;LPhEEfe?+9V*|1^teWVrf zKkeeK#G;Wd!9i52mbd&T#2UN9pr8D$1ow&Qs*w0Pp5_b@Y-H(!gN!g>3SWey#4MDm z!PNjHxzD&CCGohF$0YtC8klvfcIrVV$>`v2Q^*Mm=Ki&=$TaK7dI~#NYEM+<$?aPb zff-ooEnoC6YYOS@7t=Ir!>iX2XEzkX`wLu83nde562A${LWd}Z?KRNd$OrNyr%}0r z(#!5s)u>bICIHvw{?s?W(m^}d1_LEO*J6CKE_N6HyAb1ACk|-ANhoE|);0rM-EYMv zWU_FdNl{A6yI3wSSWdq91hZ7Q{eIyqg#>hMbXB@l#ZkUOl)@Kgq@@bJIi(O()+-xP z5zK)}$9Y$Nsm9TGu?(=1g%XC{j|3snf=2IMlu^dZ_EE>_PXe^GKtTpYl3iNAk9x*b04l$*(VmEfTg8=@e5dgxDNC$XHuDc zc;mq`YFecqRSgv9H{mx(GU?Ofug*bFwl4R`aw6iKv~rIcfJHb{7c}Sh$caubeV;@z zz~&%+RZe|vvN)IDAl+n#Lin8BCxpBuzEK2B9TjmTj1Z_S$jz1XTbRBtPE6TGezAwbG}B&#AImn6HY682IqEfKdV-}9TF zHnaZ?urJRIQ1o=!-=__n$rkFMZj-Axi?aMfm4liaf~`P|j=w6LpJm2+S>Q>!j)qOQ7B1QU0om%XdGB)EFJ9$QOtyA3^M zVf`9e>!;EY z$Q0xbH|I(3PM{_48gP@aIATm=k73=zsjtMvQFH?S6B%uSDvKa1EyiM!ABiP8D@`d3 zrF7-JJ5hh)iZQNaWmsHw;zTaI!3ZqiD*rVyUZV-OY$&K->(eL^g5J6nZ5Xgt*cEsk zev^XcdAv}ahe?ys{=BPxVI%84V#hbq;mN9fvVOX>7SdyMH|$oD)ifF^_z*?|^0dM1 zwiDsP95JC-1|v6KwY)Ko`16EuBC{IQ?vgXc&+rS9S zdq(UHI<8u~OPD?NH_~F4vA6S5E~E_v8;|pYd_#Tp4w?>!_80$@lz8nTA(X%<#U?-_l534JslD!k@(i4W7di=h zD88gw$uv>lMbNH3t2F9Q6Siy0LQ8E|F^R@aU)S5^6I#qyaGyjqvv0v?i$AKXrt1FP z>LD5>{e8LhYuP|fT^1SoC9M;DT|8>V9LtL%!F`O79Y}8SYpKiqjha+>4fOeYVek`@ zP*)t&W+O<~KLNjaf;|knea)R>bk60+p91Q+x6`vyz+Vo|rQ1Me!iq?1YFegqw$TKk z0|9d_H?vq7+b?U0dv#6+hRkdkUf7y0usf{J zVaK&kZyi!9hH|4XA9=q{2bbDwRTh=$H-S>Aw|hn}_{I}grw3ak~&a?3_VqaOR1D$weMs`N& zwElIoCk(|<8Z~Pes9O>>cKKm?A^*wudhb-d+16YSu%1x{x6EKe2+M~w*Y?c3C^BFt zW=2CCZ<4AQAhWOz_?=C?&&8EtM2vKyj~^Zn<^WMjv*~kCPe2GWtZMacuf@K^&~8@}6_2yK7v@)Fzq0CJOLHop z(qFWWnobD3-w9?Vuqm%SiuVpRJ~-;w-L}ksBiI1^zN#Jq@eB5Q6mE)AMBo+f+w@N*C>_UlCVrrI zfs8wXW%Cw7SB`P5C=p4Kyjqz2>m5|LijsBN*QFU+S5%dQ4;NT@S>tQqJbw}&S59g> zklJ(`Pc_@WtS7yE-f&niqq1{xGpiBx$Fc=>FnFevkXRs?&Tsea5RN_*Y;IIy)g9O_ z(WWpd(JYTy(Krlp>x6~Y)#^BvEwwVoacFzgek7u~?*qc66JND53nmKI4HT)dZFr)% z&d0JT?zH-+D%)|{tH&?RoQmCG3uvcG+;u{opV~bbQ+BIuMc*&<$C@sn1KVo$h(8Nh z@Nyf;=z4?_HNE0FyT=Ti&qw$qn-gZkQPTANf!L3v6)891^mAH<)cHG(U63HNhW<|n z?qNr?U~3?f(l2L`hqG0~dz7euy~TIXM_IRVQ66fEUDDIm6wnq(5q#k^peZhk)TpZT z^fF_KZ6$t|2SU|w=%z{U{-fm<8v!(zwG(68wB{ll7nH?vph(Q0I=&tw0>OReBA#Aa zoUjM{fXMxD$$S%Ic!bCYZsThUVfFi)N!dmoR2~tJD;3irROmlMtqDAOli8To zBeHvG4?(7cT9Q$5uu7RmBAPms7!XC;a#m&DzoC5_^gM<;4EX}8o^v0RFn zM!m&VeiD&%h00;T?9E6))5&k1^B!%b3Z)NH%D*Iin6F2|0>iq8=9zGyTOzi5BVH`0 z(4k=gs4jb(UUfCWg|1b%*#O|r^$==}@8E7XJxu!eqComEW5z1!l&h?~E_fRjEZf|6 zI${&fi#-yrRgYANi0LApuW|;20MP3Q$2j!M`dFz^*;?@`(UWCqCt|};ylxQYVgr1W z+Hh{~_IfVTNRjo=9HD2oah}{;oDy_&Wd+3i=u~fGL8y+N>Kt37i+5m2c#NHB%i+V$ zYZQ1^wUUWxeyuVJCv4V!U1s?4c8{CTJT|o5Ey1w{)8&y%x3FAz>>>Tm~gqhs`jBVuzOrdLx&p%`;w7{eWfWOe$rIe`tt&r zul;h>3jI!ND%%P1x_1u&ck8Ve1HxWVK3=h9VfK|e-L3a3AZplz7yJoF1{hO)Rc^r~ z9zr*eE+h(7G}o+~EUCg&x&d`uN-fcNj4*G*kN?94zA9uAYMCpO(p$A>PDp(h6_dGY zI`lzgXuTUC#o+bM3wJAyyvy4jR&r!Uai`eJ7t9V)9?j2hNnHqp<35zL%>Ilp@oqOF zW*D*_G--9()tmzrw`jh$R4~#Zh8Bn<6y$CkI?#f1$X)dO_jk!QX5|={Hq6wYc1Pin z)=Rj2$>e&E-WJE}OjI&B;h^JqzV5(}p`~DaT>7^?6`?uU`OTDLRs$49&|%a-I9&rT zlj@eaRZ^U7%f#7+8hX`=Ch{i@b@cu>KzJxgyQOSal#!l&xIp&p?s`}E4cH-sPaZZW zl6=(25d4PhNz}EZS)j2H4g#%Z(ehtW3<41vG)GYEL(D-V#V4Pi;RsljCah%sx<8}J zlu5>!F#D9YTp=LXl8`9^1X^Q5|f&*x?Pg5M_lfQf;f|_<2MIXni;) zqNCR`lzn)ME(ky&F1s$jnh?Xb?X{c)1}i-v<$+8Ez zAp93CyX{s_y%Pqt{RrM$b!MV$%{fYa4gDm?*SbP`H7hR`TIR@L12P_@MRAh5bl-7-*&glIZGTQT zBv4Wq|BO~o;G41piu#DXS#na?#>nRMuSzkWP#?(z4qc3(^xFs)+}yL2B16-}BmaFv z6wj+t021C`4=#WnPBN0eokiKF76zPP1Q3uq)Wo=Z7hF z%siOF44m{e4OJxNh^9jjjNs@!M{WMZ; z6Huvj5iwbo(#vJGxnOP@D<9|1Z&a_S)syra)ZDDHo90{CaG~Z@`K|I<^$nxKhQGQB z62FVFza(8v?=prZ>9gvZF)mwTA#~+k0}>tKK>k|Se46mr=1!^U%Dtyyi@yY5hkFBY zS(qToHT3EzK@qf7HyW(>^Xi0<2eXu{YEh(&h}2-B&eJPlGIID*uX(R`$gYarm>s7e ziB1k|ZQ6h%F(E20t?xo{EN1!L_UXKWJfbwP(Ijt?7CVZU4gDpKnrQAsuI_G(Jo+#x z2>V}2dqM23IAgkK6H8gbK!oW<(MPYMhb+4C`5vi=xZdxDeHDV^nEPi=w)XatzPdG@ zsrB~kPZlfjMmiz-mX8lHfl1WkIY|t`wv#f(nv!LRw5L#tBI)WGHH90<3{1+q?ZNfU zZ`_u?SRpYvX3Zrzn;i(lTObZ(8ZM;jt2t~z5&nr3U%8q9w~u(XKbCe#EOZb^7#tnL z|J=z51cL%bP829$2i-pi+0GlEMHi;ufb34C>oD$K{od(*D{wZ1m52 zLDVRl?f;GMayYV=H7)CWCQ%pVwW9ayS|7$~Tv1!yGaPgLNLafnBQrE&GgpafsqKta=2vz8~Kb ziA<2ssm`p$&7L)wd=QY!3{g__O*uV6W&XV^T~rHoum%5pmMNZ($=&FT+BZ4^2*c>r zT~QuY+?GeFbj=8y)v#iQq7>@+j55J~d<$w}H3bzesqTrpQegtkQBjA^T+U=2@_ics z*yM+eSyKtGz~l}*^P8da8~#?5lE4HL!fu!mvyGt`*y7lZ1Qf!j`su$wDV1Sw?lO{T zlc@?cA8`%eNE>*CzK#JolX|llFcGz=ALs$Lg#v@H3`v*pJsUw__fU zxz~S~@xH3@-Yl3T{;<$9a^tlIz?~mN)$LxMJ^@KUL!h3h=r>f*;j*XQ_k$}n(|r4j zSGSFpNgQ)l`NeCn7Nj_natcCH#{DLB9$t@%wJ?F@J;C`}T0lD#qlEF|hFqdw!m?z% zez;9vuCTN3^S=4C(e0L{Nh=D3n$axF9sW|e23)=;a&SUHVxa<=RR!oE*Lf4HEs(#l zYcyq4t2$@|@FFag%v%KS*HDiC$t*$SI+Sfg?Vr~LmXKWO?`jhIE9#RsoJw_{P@Cityx$}J-7~L4kU8k+!R7}Rghr$tW1*>E_Nxa zG97)ZP;~Pum(3^W97$3!8azyGm(`^R+F$zY3UfWC`bbDnh1zy8}i3~Emty? z*|{J7J{?R~xwNTvhFAXXN-fD^fOt~w z0@+^_(3VD-rQ}A;u)dZ;rq4RArPAQ4AqPZnquSeriZZ}+H;|Ij4fG5DL4fFuscg*1 z)b+YjVzS=Sz6MIHMwZYwNbj_$nSid*QmrA(iuy0%1GU2FuU=>-rHWFpnF3Nb&dG$m zE$5YISKW2U)Bx)?w5mOd#m?AzAZ^#?V8a2gF2t8u^4dGv(tU9XidzYbX;R{VQ+pB! zo&ds$6(ua;@->Y;LNGVeGLcdhR7`cC7L%dkRNfLqizNpP&Azz1^*M%`-Exs@J=LwY z=pf~kAFj9b&#y(#q5@M7Zbg-V&@^$B$_g%f#;d~eXU?yy z*W^=d?lQew!*3$!2RP#@jL_nDic02S=<``ozt*aKcvdoi&tk(hLd#X_W6;L<>J7e! zHu_!&7*0;R>VvGj5$C`WZ&ztZZxeHl#M&^38yluX7aA*N^B(R#f|c+S)|cXmExyPo zqgbIB(SHAudH&MW_aL|8X+ZrAd)4CCg=c-b*Z8$9HMyAUW{5*HGx3|EA(#%_twIQf zNJ*8LRR2TmS&k6#IyF=IFxfF3cX&5zEjgoc+4A06SLc9*tPC`8S<_`nuqOdBEv?yoha!+~SV?E_V7>E7og*#JXjuE^T-{1ZGb8Q1ObS9G(!y`Be z0t~O8-wFlzeq1XV1}_{p{q8_SSbH8`Iq=sSxXoi*b##R6wmFKR2(R; zY5jJB>IhYbaq-*RyHyyjAY5S^RL+{oXEDvt4CW03Qy9P-FaF#OpK)CRp46V>r!=xF zye7WbGT6Ta_^yN$kEx>l4y=FPz#t3Tw!exBlw}zBSw?S}=UfDF)15)Jn`w&`JCa^7 zlJ9+kiIfpB_n^1?im<`hL9;Gu_I2ewQLxaeS!}SU-JiPsMGkdz&9=?=4Z@So!G-}lUi1%gx+<>B7 zHv}utK<3~s)6@l*@W zCl9SVIBmCwQ9CQCRKqjJsfAbQ8&y;fNOd!!5FSQ7&P%*0^udoHnY}6Tja=nArFYJD zssXY5RCzM)!pyH)~FONXu2^dNoVgJe_75JCy z!hz?FX~_@#hXP-iS>3iJ{Z8VuDf6`8;V``hA{*|O zYCCH#4lg7mJb`OND3Ahlak4XiSxFShn0>exajlf9)8dm_=V5GhLRUT7(c8-M#M?WK zuvyX=^hK{t7AVVQg@o+M74aW)vk?>g z)-2Ci>tT|(EJnl7dRJu+N;-_jeW&pUGLsgP7%KVyVF*_XsYwbJR&F=8JR{u^xxS-u z3ROW!wDgzcCWA;d&|%|WVf@Kst_@U@odA-dsHaEx3{I7dr|POL^2H~p0!%#7`$oI(8QbV= zvN4K^gla4xG6Cn<1on9@6Xoj+G9$Cm&$4Wg$h64S%QV~z(?>9*;Z15K!SC0eZJBw{ zmX*Jn8rh^fdA^t!7QBAqREefJ@%%c|^MNM)sO%O2B#o*+%ru3Za2ui>TFUWS7Uy9> z?8!E>-zA$AuB2;Pu$z?$c$=8l>fX4YPavB9e*@A!5XD8^RW9(;LFqDJ6DvJ~QVU(a zLncLME^XtQYTONR@(rJ+EryA@>x3dVEu9xApffJJCg`^Oa~6@fU#3I}QrvQDd}S9PwvLcAkLNpJLR{(3*@gV=};jyKx0 zVVNLrT*{;oF+11sO~Clq159zaQ9lt9uA4&lDsXoQrUIPpM0Q$nh6#6>8FY%H1<4@J ze}m{r>`en{kVE`5iBVUx0y7ibt{s18E8s~UL7adXDCQyzJNl@58@~@g6o0IWp85d) zKLEf~wsVks@(wQpr2Ni|r;d%4&S0ONW4HDlG|rFUQAav^vP!X4UL-Bxr1@J3j*5iX z6lySRi01SO+ZGqj2z#4Idm$_yTQONrD1S!_2QgOrAn~@Xl2nPm^WTHJVxYRpp)KER z80akt;EvIIt|r=pe;0l~hkD{L@LCU9ihzW(JhJJCm#rAx4^Vo6 zz(<=Tyf`_14zERlq&q-n2`C%+UR&xn%7H@1zoe192ZT4U2Eo4S#PVhEQ=D3yf^dvQ z0w)fPPb;r?46p93oWVNu9IZRg{9(*`A*Tf0(WpDO+StpgKhBiywAxD<&Huzvy~$1a z;RPhA*e|DtOB;TmPKn>4>icNI6I2W+ue{l77_Cy6Isd&w3fpgG!D zh6J6AVEr5B2ihGS5H&h!7?A}RW=-BWrTGu}=;yRF5b{yZiGZJZbrbLJcp-4D1Sau?J0LaPFh$sHp!_%9 z6|o>-62;H18r;L4EY_$SOEYblvK+p>Ku7-&i#^#mcoQA}r~}#PpsH#FeewKITv^7e zeeg{wAA$Sc(ci+;{U4S)%T3!!T%&*K>mJgw-`23UH9cWX9ro(cS3CiGG|H{o63yt& z>|<#KXEa&z!A)I_9RO?p3YxN&D<{Z>1fEhr`?JA3G%|X`^L@d9bUGwHO`}1ff z?Q*ekD%e%gAF(ZD03jHZmjL2FO1Sm3vgz54#Sx=>4OF)r4P(88NsCW6dKUm#N1AJr z!7dm53m-$sYS&a!#z7{931FT(zj#;C-U8MgARF?ZaZyJL{tt1LUzLU@BsB{n@ua5MYX%h_)_54`jiWjV zX9%k|BS~a?HyB(z@}28CElU=7;BB8+;DoF6qnS7!;*3k}h6unv5 z^^|G6tmnImqhO|No5+fp6HHf{j5uKn`!h6oPxSc7$QO%!-&eX z$Bbn~jfFW%H*NGcPy2pNQ-2+^8yVm38eRYo|BWUU@UuF+IIJ|uICvgvVxPsal>QEm z>R?yIK8<6d_K=s6&(#o6cWl->@9e|VB3eKnpPpAA;Q;IhiN4g}0i08_iOI52vAur` z)onssaWp3;AW(NABYyM*No~lIQtikiZKMq>(K7ZDL*!!d?zfvssnHgWpr)OQI~9V2 z%;w}QHgSigml%ex$W2@HEyH8o}T`+00P@` zQ0`1lVDBH$EV}XKE`eACalUzep_EB`aw2#=Jj(*<+6XJx+zUbyPIVd(v!3^Du#BTR ziSCQ#DA(V>jV$E%r8PUO;o3E|J<&G?q zVosidjJ+2U1Jz|B`3ZKcV51Airbd-l8<;=W^s^wms!^90K2G0W{tK))J7te9_y2a5 z5@IWdql!~7A5&JnCa>*C0Fv8j7Na8=G#fbfIGccyD1dE5Gl&pKPEU?ff;sxOQ@^3p z+0E@k4(eO{qI8vx3h%4}cy%qC>xM46sRcBBE##Yta598 zW=@L6*$`_noQv-tZpX(Wd_MjT1ceTGhascw=H*GnK3msh@0gw<&*7RW7uM`*^^Sl) zDEaLl*2;WHruT4^|4{CXFZ`Dpu=6xrsIdlem8cwk2=bmvk3^(I3vFSxW0}UibNcqt z!MDtB&Dn8+C>04tP#6e6tbgWj%fFAqK_A&vt-21a$z%_*?Q>Jn{ zx@&qT3Wb~@ii<+J5ZeYY0Gc_W;`)@d&Bd6QjBxYr9C1B+rLSzrh3&%nCt+4=)ME>{K_9(33q_ zop~&XOijOAKuDT<29{J6Unlbej$l z-g`&~!ve@5c+mYGfn|tqoDwuG2&T%T`jfNRmknc>e$w$fB2M^?!_|%gNm3HhrU+aD zd>y3tc{g;){?1Z{fO*0|%CeJknb8`rvhneF>I1vae27NvEAO$sBw;{^DH6k21$7Co zo3%gd6kmGwg;uck$wrkqjX=p$*r6w?UVR#UmQu*Vv<{YeP!%q9$oTx-siJyB!R@f} zn(ZL8Mox+^?`(o9ZXR~+jrm9CuD};G$qAOLGx(-D8qp^g zS8$xD*CmHK5Ihlv9WX{#IT0WzBY+JooI9t!QUJFg(V=r;yVT*!Ho@SDq$()& zOimMAa@o~_5vZ{`WY`Uv=xNe8ZR085tQa_aDuT%~n`YUW2{#IvtM6R%7?_sDeB_65 z6OPkQz`b@YL4^BebV(EP2aGJ=J|Hdjbf7uYH^aq=J7X; z4>57ZJ$ORm{7t!QD75f>u#!OIKK)!EVh`aQ;Z!C8`JDJEzEOt*!R9Yrw)La=90UfY z|M#mYS~-8LlgCz#=z)wquCkiZ3Q52?S%WSr>ar3ebgJO2L^}62EVZy}?MT7irwa`+qoZf zuC!;2zpL79O~ZG~-$+fjc2JY#G)82w_U^};(&HadKl#cgVCmawE}TDhK6Put4W$)* zrOyn`N_UpJw}9YNloi2Js06X9D2v0jp~P)EJizTzPa?~YP5{spu=v3aT2|6H_N9SP z_y>(1jHKck&1PLT+IlFnK5-xyQo?)7iE2P{K!8f29w$vdRW+nTSf(Jgr?R8(7d?#p z@ac9Uqi9$g%IluixeIfxDKSZO&O+hBmFGal{G-u~FYrO2m>m`%BDr8!=G%ZUZRFsS z^P(aE#4Nik4S#4Jh9AP>ZpTp@B;fLfTm$4f$wj#jy4UheLaF4i?a&1MY6c6~wHPM~ zij9gSM_0!L$|)n?%5Q46=2S(2&kzJ67OT@0BW0n6TZW^VIv@0OCK#6a+9*wx=b1=N zC>pYFe$4QYZlDc303O5)j{1)M9_s5qut)jWg*{`8gQAhFxd-#lEVQ4(qwF)Vh03nA znYMVN8&LSRH`$jB)g9jDmP?Kh6a`uNo(i#K8|OQf7CmgmOBLciyRkLAz)`>mQ!#|D zZuzG7B=4>O1bV5s4D6H^9rgI(s5d`1r!L@%v~0pT+wyHwt!t2I1Ysg~&s+c@GSEcE zQV>IqTZi$~oT`!d`@kv{Am3P`41WnGqaUe|y%~(YlwWZ(U5lIbZF%HQ3WJMoMY2(h zcM0+zuCbdRD=P8;FG;j$LEc%rJxp#nb7|;~QV}BOCHCo6uV0mYK0qByZHnt(4+J~9 zp|F}#B3lr=335>AJ{>|PNCpA~7JfXQH*d*hayD2KD?u_wi9S*C;rd3f2?wZGdS76M$u&1-t* zoflp(zhYbZMs<_*aoH)AiiOwB0+sklHgSM!%aLNO?-89K3`(e{Z!h+HvA065!EyE0 zfi;x`!5$x2WK)|2G;DbrtLvCso#CvvXu}IZ?aBX1zV<&W@OWYvqWH*GoCPi@nEY^xy9OBl zYv1htEd*|=6$VdA_$~_6BQSFn-vx3$%M9Ck0kp{;w%MOU_2jmy?bxR6i>Q3#vp-gKcr zTM2~paL+0ljBj&-L;{OYZ6lq6Qh>xUEZ zU9ZDUkG%b6?M&o*70b@NUPpQc;Cn!-e#&-@(=R#_HKDd}BxR{cY9Kb`)AA;#0u)75LBa$R0??BO6Gs-x9c zji_>p2#;it!k~tt@S=4oV?y-k{)7`!0aYKdZT7s>pdOFSD`GDxH>WWqy*9;oUGLYZ zC!Mv)2(7)S>|oJ^SUtpdYRCrtR24%%>76bO2)K`-Hjh zU4N&@K(2k9m;C&luFvX=FSJiKx4P3njJby+l?b+%DlCkOG@fwct6b7O{L`#SdeS7X zl_Yw#TI(=olf9ycTrZ~O+DWa%2iVoHWby=Xgu?=C7lEOS+-KjLnD`0GiRWjdMgsnn zSc(rfs6ar*fjT^_2Yk(Zv(fLTZ%tb`eJslR7`kJB@>2czXCN?`ITtYEi7mpPJ8B=9 ztD$xX-b}Fen$zhel|_nf{c6|D8nLo}M!hRvlg+zJvX-=%R@%A<3;dydLTT6DN=BjK zFWha6-`rlO2AJ+Kq*-vL6Fy~;fXj-obwptBw!LRGM)xgjJGwnbUxn{`$%y=Z_*7br;H zcCA7{v&#}5_n8Xr1Dn8TYES~6Z*WDy&tfyh2f~&b(Bz6ay`@5IFiQfUx8)>RQ!Y=a zAX{%OF86|rnLIWKZ7rXwki`GtnmETyaZsUXWPKT?k-p=12sZGrAuPQ>bapB80VPLw zzPcjy1k7=ISHy)1pKjp0`pY2@uzOdZo}`!j>or}X3#gqisgN>m1|d+8wSOdVSC);K zDi0PSskL2NHjkp6%llY zonCW=Y5)PBcv1U-v3dx)+&EF{Tl@c(KUfV$*7+;|;?L%=B!N<(h}MhPQVw zHBxQ9iyAEvy?RIw#>F;IbjV;y8-~zp-P;G%vt2Pr|9=_#Eg~Dc2P4 zPhJ{D=r38{dG)b1@Nl}t&$4z#wJoxnN-e&Lh*(AtKaB{uo6BeYzoCi&>!(QC8j*f< z{dK?LCV7!Z41F68%OUZ}E3~xVdCz4Bvm6!3)nS!>m_}b$6DXo##SlWj4xluBU$EcK zTYV`zB{fLW4GIY4YZo{a2gbxTXXzun?G1m3Sts7LFcpmWb1znt56C)bd6xn1TP?9| z`hDoU;vdS~@-mVy4KRq4hTn(5BI9obJ41><*Sijb+|Rt1l1VNPfV1hiU0{RWOMMx_ z-jE#%=+qdH0Wr>yDxO%f&PfMpv_dHHHQ~|gbz;+fZ5Gsp;cxN3kfIqXs4;OR$yM%0 zhNRCz?iA~;gL`B9;YZQUu5wIK0}V0H6*U{`-GkU?BVQl9d`9IqmENPBhXz#jNo^vK z3k-^x*uon-Kvu>7UWk;kqiT-}XuHcDmw4O>Pum9(vRwVO#GEEzN?kZbwqyi5(K zKZiitKOK$;_V!n>s1rZ}HsU(<<#QAKRbbA}XLdt%n&8*T=*Ief^Mns^{UB5_Y3F__ zE%7qyg?)iqFI;MO`@GFI3(Df|nmWA9O(=e0p|4Z8k?~~tpo<>O;MM@Fl;CZss+zuQ z5P5uX=mKNe)VU3xL50dS&}M1UTa2LrAk)2Oh+^^MoQD1UZ;f@yY${`?2lJvBEcFhZ zCoV$w3{l(&SKx>Oc1Tp;Po}i(O5HSR_eP)ZuK?n>@Q0uw+SwjWtf|WZ7HN-Vi1To| zDg|1xfa`L?uvfJM&$DjF9`uvlSaVWut9wQ@kSC4CUk1uMC9*iaf*LBeacB6wwm7Lv z*W=>#rVZ063kLq+Fa!&_rCM>)Vf|&{B06M$yHU)8*c`*#VaoSqRUAZ)OCi zi2|j}10SjoUG=!x$2U#J{eg>mH8hgC>KuE9TTkK3TjGcW8Oy>_8=WAtDP^aT)jsDY zAPiPhvbOyrTOQRHKoYqD4=!^*VN;;OE+4e9SG&@-pxRe0U389qm^^XGtQ6?*w#Q-Z z>zzkE2;y?g?YO=pus}$DYbSlpL@Vft!N@hOOGIp&l)HBl!O zkqHnZalU@VcvxVi6?ZH_HGzZ>Hzy65v*!qwOwOUjLu>^5j@K#hgmP!#=npOXq6GU$ z#g8G3DOv=?)-7=uMqE^0@p3#byq>%4_5nL{Es78A*&A`V)etDbS0(=N?k~|NAbNcq z#{lms95Mx#`v3CrTq!prT~~aZ?kx&FttM9IuT^l1FXXa%DeFJN@uE{hgAw>oil1;O z^vO~uIh*FK$1TRmqL3pSRvwrdU*E=Leu*-nW58B}Oumj{;Lsi(%F&{axDj_?wNOn< ziJ}{bfk|Dl7h9qrl`a;NS`x_G$~g@kyBwcfg~x=-W<#%*B3**i3`MN$V-(rCb}{9#}S^N|Df|c&U(qZem|jY^zDd}J+FT8cmhJ{ z{7cny_cKHjYMuywVf(L?!#rS#TRo_}bAdSGG*i2?fVo(Nv}S>P^~AWGXLRcLRTFNg z=mC$1kh_#Kk}+T`hRhK3tvhhDH&|rID(^VbGuV`FFS~VS=uvlglN#{YSgHW*>20j! ze{zxhOPxQs_>-m{6!UuE(mjUhs9g)cMs(PUCwMNB#JgVOPI!vOBaeXeS*X zgYuCFp$vIoq z%I?%?pUtU!E|SEabyliK3_kO?AGG$Es25A|VThy!Mc%DYs+2`f_w47wpj|6?&qt%V z%Q)|y!$7XT%8*a*eDq#1Jvjp>FP1kV{DIgbc8__qM>Mbp_dF8Jk2}r_##V8|Ip0ck z0!y>|SQ#|2`GdWM(a7{7Tt^O1JOy&aZ>mfbAK6&3Ke}zAC{sQO@`E#dIY4lrYG*@P z9NeZOoPv;6HxRt|t_f6t*QXDd|HZ!hi}YJG7DL5#L=HT|-N^g76}ul=AMh%ae@?IG z^T7c_pwkI!#}rM?he@W2fN!Y#V-V$**e6hRkr)z&*#$ZMqMzbiZNil2vTRMkgc7!imd5^zh z95CKe{C-<%%XI%F_Be3H8;DwL&gyAt;8Yotz{V`v!1pQ)-Y>Dr3=AT@IvzpRN7N!9 zC2uo=KOUoVs@ZsA|7)+61sfeRAdh#rHX+XAgiW3x>!YyI3!b==_#cR3 z?|{-xMdYjy)0_eoPjwr2fN)dmmGFyql2Z~jWw>%&vUbPt)dD%ow0!qaV`U4;AE%K$ zOChcg?sQveQ{GMO!*UZafxssO442fX1u!`Q^J8Qz^QDXf9cXrJ3b>qna_tQ)~S+)|Dt7W-Ci>uc_`M(TLM^L&r4MVxDU#0 z12YHg(#;%!hB(WkhifIyeB~pVgBwTputzaRq_!S3RDj#Y0kVdHVS+L~dfs*B(J@(( z&GRJ}oK2lK{dHWffO*)xofnHH*+49BLcCMLXykm&5yo<# z4FC_>-Q~F;ylWJfn7h_C6l55x-40d=Jom62z}tWof@8NijJI1@%>80!^tm~d-1lPC zTGJHYZ_ZKO!j_Y8b?{%Viu2S(53HPr$e6bZW}?V!AAEoMo-7ORi6g0W2EySiP+=n! z*`ZdM#{?eEMI-^`T9Iid?Zn4*1 zrLP8nf;=3tNYB-#nBm^4B`EG$lyG+spC$3VI3cgS#hc24;>ZG3eFLA!sQ-p3?TO>; zME0gyJGp3iD}0q2z3?%7iF*Bp88ODYi$xb;*X1uDh(q_THRII%Mwc9J_?y#smZbLS4FrLjq**SD&gQNo=6DQkQ0R6I^IOZ~irg zT5Wm`f}MV60#<=sW_R5a>atDvz#~Cbtcr&M3^{XfBDr#dxx1!&kUhM_(GhjP- zhgqJxGNcd0)1Enz}*xSjU@rE7X6$Hwp&yFC7wnZuSA zD&(GDp-HaopA~sg##;22t+6{vizVU$dHVq3yrj>2O2bh4LXTbh4JB`Oy=CPIXPAhoHl z5+7i;4P(O`M~8FDkn2sFY2Vtn0nx?RD_T@oVFH9v-DRy+C{6Nkrj^h9xpH${kSEeN z3W2^GZ;IA+<=YC9pqmxwy+^fv0VCUKxs}CuYR5Y?S%NUoQuGO%lvRymj`(^ABv0tr2Cvt-#qX z^U&}j{nkt1-nBjhFA9xM91+=*zd)Yoiy_v1j%erYOar@=E>HXBvU8zT{+V>aa7nBd zd2uSWzIx#p?n8#wqGGjPu%XK2L+F!|oZ?bB*O}SBDE^s;O+0Z04P3(-<=yOyHWQ=B~Z&DQwd9XA- zUgEWJ4zZKZ#%oLLtFC7)t8{!g2nGhA@W<)p=wfKd1t#VHcvst{*;?LSGkKlo7o3=b*D;-DG4-J_>J0rKyK&^YJgI^R`Jt=qd$#a)QY)LB(V`!|t>LS34FzWud}&!-}W33%je-Gdk1E<1pn zEI^^sCzrLM=ZgF<(b+V>@KDMYMcnro;Ey@D|MDepbnF$-D1Q#)e3@w7cxqNCYNM{3 zM1WN#EjT4VKL&p?L6lKbf_NQGe&-&PQC(2o(9U;XfaHJDMF2MmE}$^_6TbB<+~-Of zl1{2U0^YAaO7&zclRxpO`G38+aDoP!X48`^Gj%ZX2Y)y=Uj;r(EWQU|Kr8BJ zg-&VNu91QXKpCiwFX~#8jTG`&`70TblmQryW zHm&wBC}2DE{B8`w%4M=Te}~7S#zpL(P&2bJV!a3-s%~q_m)D+R-t6nH2X-mg7c)?O zAdkS~%~>te@ssTf#kHIf&ZJ{cDU!*$21#j}A2Z`Fj zKqQy-$K!qfaqLYasjDj{xIVkcie<=Z3d&Mw? zOKXDMn`+Z~N;le9NUFgjLf|a#>`AxNxDs-_^l-a*;8#1jC7ja+jEe@P?DGAId6lI| zRvd}kiJFLJyFs`_da@5eU1;3#`<#cOss2UNkbRz@NatGz)V$eVaAL0b;Wo=fLHg|a zUBIW7nD#^Uy%jAYyotnYTfOZVwu8aE99)vx>2W*jp(AKT$!XX|bry9C1jK)-O|6{& z8Rw+MpM~xCyAh4ts6u8GM!m8q@BJxU@X3fibGW49NeG6wuFz;LNcruF{KXgRlzShA z3H@0wxuhFn(&?J`<4CyrR9`R`cc$zHubwg#GDrrkG8byuf9kZB>-U;{{%^Go=^;Gt z?5;xmn*V6vA*gtJl&6c{%N^N|SxspAvI30ixmsH z<=L>gzrS^P22`AdpX2fC5@d2rCA!7Y;1>2_IKlmGfQnIY$4;kBGht{31vNL||VMsT~NnT6|zHNHiaxEPqv!bV?Y{`M16DfugX&Lno-6ns@ zq&0zgH8?#Gkx2VpTamPCPS)h8nyJP_eKS^e>Gu=tLj3y(b`w@fEb}6ONxNF)S6uTy zY6OZ`UOkpf67l%zz2+J~o1fY6)=U5@)&CFp*j*e=Os_;V$zxJ#?UW+zn5J*tVC?TAJ%$dj>-rbBMN%KN+x^y&?;WEq{p=`j7P900ArQ{VyR{4Q5 z@SkeYj$w+5Q6Aci5y9Y)tj6_5QJV40>=oq^)}~*U%*dQ3b$^59HOk=skzl%JIGG(~ zbnaZkfSo4jIAud4WI(MNCZ;{b%0GS3Dkki~?&}%0e+V$)>i9BfR|7o0!;28$TgMXk z-Bg})TPk7n>>=d@rz!wXiWY0(E^$x#{{F9vX=c14ts_x7(S49&`r~c=gVk*evgTbM z^-k^AZ2}myl%jeQ&72oKzneEy#o^oE2`a9(7j|%1yJ#CWId;JCbvf3MYo}FI#n`wk zn}3TjOZ5noV6zgs4ums^FLl9o6yH3bz**nmpW{l{<-25K`Y5RDn|q z2D)plf)sK13suCW(O5U+$Gd_2H-}NeKtvHGIs-E8_$HXm$!T~HG~%%|J2e}8j0#Ah z0gNFN!n}K6^QBeKW2YyMP|mPbG;D+G{YU&Mu>dYbfrsgaUd;xxeeQ+_C`(U_HId@7 zI9L>L!MA~8e3ql#_|LuuwuWG8bu*l9DVeS^&%`JkNz5Hq&2;0`0NwX_qUGZhcg0Pf z0kX8Bk0}kCWt|_dxbYdo;1$5rA`ovkz|}B~89(pYzD1p~`9V^%5Ft{65|iXWrp~m} z4X&Q-TMNTo#x<)Wfd|HOmS(R66j~}MBF?NcNn;{4*wKNfgwM3gQ6z)azmGtYnkIZ# zAM!vs)!9XH$RA&zxT`cEHP*Y(kcai9iTghAo&I|YLCYQs{etAO8uXqGEZp7zc)^1c zV<&LA3}{jf+%7%x&6RH*JdshwJO!lDD0sO^LKa;YNAvQA&gC8k|QvR4mYnRFS2 zE>>c6d4*CJus;%PHUF9DoCF2mzF;in!jrWe39l!IB9Oqrk?>X@T@06BbX5ey;`!F9 z)`o6ImIFVgcOTg1zlpQuKZZ%9U{KGYI&~ zYyp&gqVVKLODP|73#>|nUs1X7e$><*Vy7ySe#z>Dp3SikJ z6Q{Wf>bv*^F3F`KEK}m)5p&S*G3dKXPsydeVf6=?Vx3edp6C_~$QxQR0z z-iRN`V-iI%$_=H0YJqE9*lczr08Gf!K)Dj2|8BEQ3V1Rix9eUC>4e+Cyzg&1nBwS=enxEFXJ;h}zA*l*4% z%MWpB;DTZzlQv|-PPvgM0m}u{)zFxI&E1;hv<#ohSxOH?%^(V(DNXR1gk_nodR08Z z-fb<*rLWas!`8K>v}46Ji2WAR1F^LKwA7JR_kg<%1r*cYn=0Va* zT@}<_l64P~{8N$F4ymg!R6TUJHfWdM8f&KWm$#%#Vk}jbx@0M^TEnKd59GzLTq$11 z#C{y=2@STX!<7-p;<#kZLdodnYJ#y`zu&~M7sRQ4RGQSt&hC- z?Q1&4qL&p0TotO~RWPN8p{7s+HSo5K#gF`jwk>-D$adp4thn6b;yC7Fnh%-Wah=sY{ex znCo~3j4Q4z(t1%Q)!7}^Nee3yjtYnR5qeWpDk{%!!om^ zBpjL1`Xkc96_WyD+$5T}T}YwAq(s6wTgfSJWuJL9+S+Mlua4&fpRTQuNhnBR!$rvt zS?%+3ZGYty#9h{Sn(eu&I8Y=)$ex&?4rX7dn+-oe5p(r1LaEqp zLM>UM@^@hkky(eKMq3Uw;L6bGY)h}4HdOi` zw!S3WAMJGq3OAU%?$Vw~7?MYelq$G&6UsPpn!yGLB1Kv??r6Z zV=AXnFJXfr*OS!}&=}oUkCRypJk`FGSHka280p{r>gFUb6LheyLxiJsyR68D;OyWvI8@~wk79C~Z*m;Yo(O<-SvSK52GL?6Q2eq%t~?#Uwm z2td`oG~B_)4n^EpXGdQK6CEMh@ydfHs+CM+5qQ0rI>jmLp9-b!>I)l6xbGHLx*?CwFTd=E7T8Z?GxvK@~Cz&m^PG@R)bUd7@7pre@f6YCI78CT+*%v%?%OoCN0o6}38tyiC}lp7#b(&WN(` zQz^{Ys@;5eR<6Q+Ja-D{RFNzN2YpMuut1|r*>&q~!yr=zX?X5oAeU37!AkJ3JWOx6 zI8|}1f@8`TAX22|rd^fjEC5E|m^p;p87B|o?H^J2UCGOIiwjcqBw5d0c9zXB-K6JS za|Ac@YX9=Ahlfqtuzu9K6{vznO%wmE43^z5comL$n1yW6mNR-xRJ_l6_u!xZFbD5e z*ZG7lR_Ie|u}UvsU*L)S zVViri9DUeU_%~Qhj*u}K{IL}Xsj_(l@qy>^OMyd;YAYCmZ^45|+&bt`c|Jzu$BG4G zdyaC~WG;v&AKHM45@c5uwXVy=86v<3_*+~5FOH6cOp$#2JgA+i2gbt22Ke~Ow^_bP zF73S^UNa-Y(GqDn@p%tKDPUA3v!_ylS+-|sQSo3KQic?EyxKGzP8|t7pRor6Z2jM@ zX43zl61y0#rQ{(<=)((?t|YUY=dLH#vH8h8^}b=e`It_BRq^*M=w_k*Ti;)=^UjdU zZFL5X(h)2-Mc9hVYPQ;=cLB2Ae@W@Di3Tp@>CQUzS;8G<8u_CbY`<^6w4XQ%E!066 z&r?8s$~VXLiR^bP8k~FD@brA+ z{er`mN~)FcLU$iUq0?fZ$n!Bdy(%7iV4r#?C{uMt-mb;j_RCIftn^h3Ov>fW0sDr6q~ZuO#+(Gzp@;p{mw4b+OV7!TSZj6D+key!-!SLixQ~puK^e;aK%)%UpGggR4wb&>7^bJsM52ajSv}ZHYktzy*Pa8)N7lMZD)H8j>DxQ1uoq!8)uo^|anI^o_nC%d}Gy=SwvzyGxNJ@@q-z=%YjIw2y|> z29I|q*&mq#hDV{MKV=gkc6E>_V-gxw&q<>1J734&Ih$PGCk(x&7dYG->pO1~R**877)WW;CY3)r85mAT51K6Nlyn<0(Aea*_9ws{mHW-Vm?85@H17p< zdjLjJJk`jxGs7#e@jR=Qu%W(_WkU7j#)X?hQjiy(Z1k$<0A6z$0+uO4JsBowkgt`| zzR--Ql$yH=(vahKVrF;&93{WV0M1!zvwNOM(6(f)SQO>OjQDo<`6=Q%pjqo39;Z8t z=2PUSzkY`6^gSxzos3GaB#MQJ?ht#AYkUS!y-PZxuELvhHCR8XhTYEbK(vj6fO)7Z zv8#cvw0EiAHRMVz4xFmB%sp4WRV6nk1_O-x?Bk!_ry_h{u8B|hsh!Tp_b?G&ka=Gu zwe#C1R3UY5&*ohS1*f2cJkbwAwhs_|II&xC`0|R(NjE5?CZ0mA%WfJq?WZv0e_HY( z_)QAZn|(Nqz7KuV|KnY&`bXoUqVwoo?*fQ=AQAxG3u{i7O|RM)+8|PR2)Y`A7gel$4(#TEY{W z1=_Suu#wfY z@o$Yq`n7|GGszu8*mKqzT7~Om(_D1J2j3wE#L^xuGq}j%y*}4mTChSt$GX`^p;m{4 z!7ypu%nHIJ#L&Rw+og@;8I6jQ?Ty+NlejA_TBDGeZHUvx440N=GORct&H75EPd&hw z;_c#d*8xgzW7Smf8y`?=nI=fnUj1unc+I9oOxf*8~r} zu9s?iZno-KDM%{IyFXO`YuIIP9I?0PumM?r@)Gj|FUPRiRSX9up6}5xm&lWbHdHpQ zXhe*Q<;>n{Y-0RVQ3i2rvi5=Yq;`W5xzf*2SQ=edEvDa(Iq*qlcJq^lr@L>_TA2Z& zwUhI{ae*9UqhE?Zrnp$j^z{het(K2_Tgnq{sboOs(n(>Gh)RMeMGJC0Xj4bBg6BO* zg5B?2!KqC9j!_Vv1B+jxlzf;qSz^%ikPF7`$Z;6A$@m zlcW|yll1w#XfIZU>U`8dMQvwVJjiU2@ zaOg)T_w1F7*3DKqNz;2<1Hr%^c0{aR73lRMjp6qkwrh$Q=b;BWtqPXP>+9;FXig@U zTUe`a4e0Ar-^P+1eC3ym472V#Mrlo;Q%YkB5fRvm)qP}KLOOuZ9m++lO!}Q->_8;FmZ}p#nf-eMcFj6b8X#H3e}(WQlhbQmdGM zltBwnJ~&e2oahG* z*~hi-mjw6iph-C69OWYYd@l*Q<)A#Q7TEk;H#=!?9L?Y!=fABp9kopTpj!!;1~Rh0 z8?4$5qrn~3`M$awxj)w-w`gjzD*EMdVeD>0&jR#5;N2m6g#2s zV#>v~cUI90WlrgjY&(WgeV%0_p{{X~jS+CV?s4fB0^~S*#Lv$^Wy*vbZdx>a#73Gp zHoVTKP@_%zuAxKpSr-tA+V){;#q4@UP>Mo^gY=?SoHY&IAtx3_=n(PvbdDJoHcNCS zF7djY97XXh?CB)R8-~hHCSC~gb_plYshJ9!*}n*a@a;Gu3duMnHkFjtx!fUGvuo*i z_ljccGq^=xN6v{7={V)fby!ALnDIA+39kV8JJfXfdRBRljwuGH=#$N*CD|F%a)0&;bKe zGOHtSYc!<6ScD4HkYxzn36iR%2E1$~WG%Mv>y7#2>lgq8azCi)%bYcDVyiRLZ_Yi- zeQO1R2W`HwS>`iILkDix6V)-6x2yAaI&I_TYoyYBI)NCBGliT;wvL)M(<)E%H-#|e z#F*~pnaTpuwK-gS9n(87Lz2r9!jaAKM07oQD_a3hvn)Hw$Xc`@nzjFG8k5&hdOOlbM8uE@M~ZwT!xv-~W%*b5Y4gzcHW+O^2{$4GY& zrUX-$mI}@0kqr(M%1}~o*e5O>D)1hbaWN~jV{)8|5G)CJ!j3!#1-z*#ODEj3=q5M% zs^(#S4MYOb`Fv^is6k_Aoh~+Ol!jl41e`S0>2*>)mzjM%(mIv_h6ctTA z>!a2gf`y54*|aLV?MEoK4d7E)$QvAQAkZ!@9Q<$2zQpuQjyd~rhpO+tJAaBc*}$)y zHExc*jq%jEA7I1Y;QtQ;C=70f&YSgTPwWS;*fZ~X5 z-pEllQbW5-)!epp+bXqF`m9-mS4@5nJ;VJo$B(^{ms?wBBy4=`mNr4ptF1hd$++gn z#U;eL<1A|5m*Q&5E%&5mH?H@h&u;!(VJ|6C^k71Belmpv9FBO|RF=RdR9wan43M_Y zf3eP3-k0}z0Lw@eMn?ZK{o`??NN>8S{2M!{;wDb2^yOaui}}Y=%vX7Q2o`yFaaOiC{rdO4sC9k`xfi%H-z*$tiid~j=U zKWt{z5|#b{%D;I@@+@}9F3u&c)1BA+?GyK^?I|;BLe_1d$S81jiP5O3(GCU>M9*Y> zXddu)3&#u?hwK%y zt5!lTj-P8F<=d@L(P44D84TWFmdy@P^Yk*7qpEpBVo&r^+r!#Qol3O?F^3(S-Z?#nNXgdbN zNC1$urXdrj+v$hUb2gp%EUKK~vyR4D6VZ^>H04H-x7Jv4=Y{XIOAGac9?s1oOW&Ti z>jG_->y+ilKrgB}(YW#e_)%ps#*v+ZjB{Q@AsXWk+(15g_0TwwJR+x(7kY}pYjqjz z0W!wRU6JBegi)&7_QLv}j2CLW5#IE@X}+{*sqqg>`mz%I_ipLXpJ9UeqA54LW#p^G zi9^7clMnqi%qdUJ86pY^C--B4w8LKM6R2^msWx=U)wg3|age_uSq-Eg*12!_4Q4$L zsjeQDlOw1Q@DE*^ple8{75*p#i@UT0d2uj^RT1t~*|dgf*0@~Lg5!nd?!4w=g+=xh zrGLI7#^_6C^Uy@)Yke+#Iq3pPhMoEbsc=P{>hbAw!(RkGBhhXyR<|+KA+FwnX>r-o zy~g~^X3LkdTeIT{L6El|0U=-jA2v8|wuS91!Ng)p7p&mKF4&23I@S&6p#v9r{+N$gdm5 zc)rk=rxnc4#U=$Z$ur_<;#={YKb; z_2I*8EORt6gZ$1Jv!-%^%OkTWf$t!Q^3;EBoVq7ILS|Lg$L}+Gs_3 zyO6aB^6NS9-lYqHk5Ybx=tQ`SZnk297q*w58Ypf_zZFje#wcqU-ezY_3rmNV{U9(w zzeO;Kq(p0&*%q;?Z37cw+dQui_GU;2&+Yk$jGPEPo8Q7O#U5PqHMlO5;HU?$g13`c zCi1fCL>{%Hb?^HB(0K|jFG{UWT`&$UZ@H(&FQDXTgoH0sE87ge#z;_$qX4d5i>T>G zS#-FaV?CjvzPvm1$H8p5TawE(9b?2G!3X>^ptM0^5Zu^4OR)oTxnPZhdvOA#v?%R+ z-5ofA9x{l{-6Zd_H_T}ZJtUUI;*o&nC?5QUco*&zF#cF+I1kfQo<~0IcHhfn7;scx znc>nqz0p_Rb_;083$m*B;UOm-ro8EF>gF(PKhs*qXA8>`Q>bwavAUzuL=YDu(p=3F zS*7FvTMsXUwZ5>>Izs*1r>X~CbFw}8C_IId9cEEQu7 zsuBD%ApDQ7G}xaERhSh$;9?fh0W05MgYvAXw*ps7p=URGO_<$AOQ}K0>M%t9O{axD zNa1NRMlO_LM135OT0LTPzSg@7K+(<+n}05Wi%D*#l{TvZrF<3o)D7To%_kH}fG z#(NAzRyEP&^`TDZ0k0nJ|2*Acp}VW95^J<8&~Pg<(uW{?aM%(v;~|VH!kK*2XB27D zmV4Pnn2u&^fod|7j3nM{V5L~*jPW1#4i{FHKjVu=9nx|avcuO!B(VALCGDs6`{#z9 zL#MQle}7jg>!<@U@V#brOp!G1Ctt4iS%)&|S__E^)rai#LssL}y?&v;cqMEB{CUeX0rMYk0ft0WH7t~-D z%@T$3;U_{3%h(|+}$QlS_}t(vA)l`SwC**CNV=onv>ylRPw z@BcX3^{&t7z;hqf7C8WwG^(kwk*8vsZ`#AT7AyjE5WO?EF`MaL8}JFZ|JisF$v1=A z!I0cYpiEr}2;0XlMBL`;U3oHPha@RPC7v?YVbzdd~ z2^Jzpx5qJZ%CW}&r90F)wVCcMZS}#<)gX>82Dii8?cU*2M803^u27fD84KJvh(G$ zzZ;)AZRd4 zpX{1B=8n&UELD1xzt!NJ{br*k<-O(d@3E)>Kj!F#H1u|BPi0KOxwI;=Vs)72G3ffE z(VQT#GJtJ!5tuWs)NWZU(+6zPIm;ebqyv@b`h6peVl9~>S9ZA|mZ!D}vfjho_neYg zq-@V?b7NL7(G<(OSC|$lrYkKWZlJ^Z8lgUf+IvJ*x1peu|LbH3?aOg#I%j2TcNpFr z>~bmU8Q)QcFU9K%v=cgq_!UK$O)s*L39M6mF|f7Vfr~BGctoS&&~q-X_3r6oPFCs0 z9UKkfV)=CFLK+bb{Eo>Sy9Q1rFltQ7e>FvVm z$~Ah?NIMCq`)o4joi6|qY}zj&U4RMd>+_Fe-8p&7T+H=*O;_-9*+Na*`Uz202=84Ng-Jh3)`1I<0bj^$Z=hh6!F~+rIqf^Bbmc zedtA6-k6D;Hc^e_9@9iRcQ*oGARLzMQxq|Wqxo_Z_kQy22`h9h@E^==?1T~F;Wi%D)Q1{2#5PUR$^XBLCMa9AV z*T=!Kb2_`LSUemo3X{EOkjU&qs|2lmoy7Xmh~>a*cJbBR z(wO-e+=1Nu0Lxk#FP7D^7&O0f-!H=YR>LgKalbqJ0^ac@Y`iDWL|cJ#WPZ1FmwJAq zarr%)9^&0X@dPmKrsUQwsQ7N+x$LZQ+vg^mfU9uvyON62kNzwZhH12FJRZCnKl~j^ zk~PXEwf1Xo?=A!%pGt^zVlj$O{y*~*x5+8UdwR6IQZXEzJk(rP<)aYg%CL7`v}O+% zn_jVZT+>6oj@&lk*=(+i6TRJEZUrDB7&tfOx+$0Q63G5whR3vURR!8cGU*+K%D4^n;C9R!o0bXs)qNU(O=w3?SGe~3Lj`T!7>rzC`4;R>56 zGv!c1W!#a=b$v`WP$IeL$~Q{6F5bV^!$|b)#hS*rorYy*I=6#0iFQW|8R9o8CgyrI zP6f&U9>Z_UYsB(pLy2Hj_+a4K@RDVWh18*UzM@Mha36dL0@s@18=9sQvs!D+;k9Pp z5+N-2qVZ({ZyHi&yYjX!Y2?kS1n`^M8aAs9-PWW(o;dAnzgtp@+g1BiU*Zv|LD}Kh z5dVPmb;KnIS-S+|h`(ih5DD0NB_=`KHiUmLcHAmxpiN^g2Uy@Jd3*Vvbr5m3Ba^bM zV&U+gRG`9_xps~HI@We=X=)}p85w@7s31Bv%!)AgM|u18;E=#@MS5|kGUVWz1v+{c zPfrg1{yd#LBZ0D6J!dvnyJ5buzN__N(UdRM?Cu#}OeR9(Yq{}Pm=PchYB?QH>zo** zG0;{S)C4f#FpSy!XA~qL?6+d%tH{m>4|u?)bBr5vn{{+!snRu1?-rDy!k3zt`G|epiShPZhK^%;J-ywH0e~2%c=XQ`PXE zh1K^%*=nXpwsHwiIe1$j{c3~KsZ59g0Bm19(iCgW9+3_y@$?9KjTqaVTr32ck7UTe z-;yfX&Srpz0^l|@78bjJ^UI-{E0Jaln}AinwkAv4VeZ5`oS(>0KwAT? zB27%y1yk@HV4BukQ)KnWp|}`X#D^3?3tDm}zc1C{ zO}s4*E_uboN{D1hJ2bIp-qgL_zi(r`t^=&-;7-Hy&efQBpksz0^%hYQsuW=!;>{T0 znB%ai;VP$rE9g03mrwWAlBHhMhE_|kFdbsEwYMJvbuq($}e2g<6Lr<+iJQ!S$%7I z7bqPiEsvo3xM~{4ljfg3*IJp>Y`~|GywfW$TINoCVW`jB4x`mRD>kK6u#9pr``odO zScbYe58?Y8cJp+YV@8?JVpfMu=uFLfcpmMbhhl#TBcE?*Nvg>46|*kNQV05d4?`7; z80Y*9+ft`uq`(|Kj!!mrQOVo-#rW?~9I;RaWoxlIqV3`hD{_bUcK3V-5Ii;*dmYcF z2QF_ms+!S;qSNFNkJs(L)&L7MGGOM*p9ifwz!)#HGES^Ggx2SGubIu-w6kqEsh3q} zt$%VsyZyIt0bwlLEn0*a(#P{aa;*u2O^$oH%Fe@X10_(WWSaX;!$M^hd@jT|OTXQc zj`k}Ikfa5OMpI+)ta%ohA<-6U<*V3ji9K? zFpQ|dLYTEcfcf)kU@I6bP;c#yz~L{hFfm1krC50%_?IVeU~iK4B+99*{|`JL3x!Or z0e<{8LSH+%SXhUZpvESZ`5>WL<{>r>5*>#)Iu7baA1#)!bRZw2A^%qYACD1)4s+>w z)}UA|vydj1P{ozcw*?VazgJfAM#M%ezGsiZ8UuZdzV~{``KFOqNz|wUwX+yU^Dtt} zF^ROe3&bwMsrn(gZ9m%kEUUG=fGFXq?xHn4)#Rpq8IaXx)ubot^>ttNV9UH8OrsZ$ zVFjU&r}vPMc+4+h0De+mBT`C>w^4ZLV>8Io^5uJasPD>Qf5P+fc8H zPHi|C`*@P6X;Zt|+qhW!cl9s1AIeaTcDYvk5CWR>-_m2fHORJwMz5l516&cOzOYw+ zcGzbG@59s3a4HPSdkNPcDa|EaXVX<0<6@<#%NnH;b>5KQXu!fs6A&c;0>Eh~Ibb(x z>5j3WzyQC~?!5Sf>Jn^DPgpOqb=g6)2(ba-Q+e)!E&FTus(s%6jQd_MEFZ&ek{Qn^ z)^K@Yo?@2QluWu;Rn-k~-0)?fP}h^wsak4iN`p+W)id*RS6?xtvy4P%ilrEObs+hf zJK=%69q_Farg)l4<8mMlIZ{T#6?z=~=O@IHW#;G#Jlh1#njO62eu&P5C_n>!jsS5n zdd6|!V-d1viu`xj)MNz3)oNwg90ugxB4P;pG;E(SFwn0=+UU9BTvNl`c|UvNnSc_9%mHeI8BEN0uz-V>7EH4SEml^ zA}kbFMU*_dk8jWw&1a-nq-phxSU11+S+~2RzJKNoFbRSNDy)QFRlYH(1#?FU$yZCw z$VxD8g*8?0n$vX-K9ki$+K#Hg^|{ALbWV+PSh?#zCtr(A8@P19>7Xk*gNled93j_s zP5*6+Sv-J?-Xx;5u=h>QWEt{tz2Askkr>sjk3F;ntP$CbKP9ug%2$k z33=8}wWzWZ18nRP5j8t4Zs)nZy9+icW%tgzbc{Z7C%jaEx07*QR0s3x0SAca?|>ZKg%IgI)-y*$V+L=Ba^Uh)CIN*5Y9k2d&f zM@m;m{8*lWtk##8lZ{_a%p~lN$c2;6t?@pWHN}L%nc8O$K;r3t=;i4n9)2<64*y;i z)`Yc0(lM+AR+gCG{d&UD@io^e$?yfBsDC2L(B#m5U#~Moh8I zrOep|`s6VE_LS=&%)k#PVrwm^7SBlm>OE1KhkbiveSkayn-2w0n8P%xXwJ5AdolaR zIogu-yN*ISog_VGuC21-51_R(ad27^IS?X75f*F)LAQq0chtY1y z1`;OFfDvq%rmiFZrviYCdA=%k(`8}_#xJRLy#*Zff2;2=lW z)LFZ%%Cd{js#j7^O``jznNN!LqthAxS~3eDm9U74DEb-e5(P#g0O@52u0CJP6P`m1 zKGbOs-C_Sy5PRra#=`wu*w=~qy1<~bypkw`|BJ0QhJ|&91RWd?(T|e(Y-{kUwo%y&jmw)xe2J`Y4TaUNkGh)Cqo~q%(-FDc zZ1WMagSEs!zpHUdv&i`)8CPvXMYj+reQC~mSKEe&em+wK%=?aCw#CYjQv}-T8zq7k zf-OlUYMpr#*t1!F#Nt|?+M0)2I#3*|V3y~8@|}t^|E*4@=pqm+*Fi?4cjb@ZK0{-7 zU_mDZ?uq_5Z%U}9V$F+OH}mR#c9MWaILB?_umJe!2$ew-=nnpzn=90lUnDu`vWwU2 zm|@xJfyEC>wl$;>*;yuhG*B{`|3dn8TOVN-Pj#TL@O9D3K)8=CjQQTRb~m>JTFNUWNu%90cDZ)J0^E6gd_1gC2oSm)i%3}(7H2HJUXs3G&NjFtSBIlspuQU8^ zA5Pz_k4*@^{_jWHH8tnB7vykHq)lr_E~rVFP?Y?qj}&ZGklD` z&W+U~#{P{P%ggf2tO(Zt;n_UeY?rq{>eLP#xw1G(Tsl9a?ONM~1$xnz(Hh%Qo>0y` z0gHZ+R;nVpEEykJsNYw(`7k29aO59$`QCR7OmcUU3IA{W>+q5s*kXlQjPFvmEak$; zPB#C!>avtVc`;th@8v(X#tO<-+)%eIucS4%v3WF4BuvDGC!*^ec~j*3`a%F8&@bU1 zA;{%#egzHvS=xaZdV|n|yT{JdQA>2jxoLyqFQ+qtfGeYxvo#iA>;SQcT4RiKCq)Uh zg7VJ{Ou=S1(F9xDHKo2NMwjHD7LaM{iJYUyS>pjtx+HC&<@tKw02{3P5HI{^7z-*- z=6L19ktd`=6hBFhZ5$M{3BU!1P{^`xB^!KiWi>fu*tdC|ircmpaGS8P;3|VHq8UYP zJcrhQAe(NixWLn|ex;{zQ<`1P3xIU0@JP!W!d2dZE*Wle(buKNyJKUnKzIL8*G+hx zR3SbyFd?tUvN9=0eRG`BTJirxkYllFvHx@+m zFry!cWpgonMdXr#&ULd}q|j?bqN?;M8EFUK999!yl&H`a6f?l}1{ot5gWT}LU=w-O zdfs>0Zb6-*^7NKYS3%E+M;laHRkV+?YAb=qSuDL;hN!l$l3iqj{ z&p3lkom)emnzZK&zo)fE_1jYAneuP|E9qdNGsbjG`#wq0r_r-VMA4=35(%1kjscc^ zN*|jotyyCbxHDI#Wb8rR-@&2|uIAtAi05#9cH$4Ah(vSDO1ygW&wttO;LM0h-i~jc z0&@K2WwPYF#5|P!+S;fvm0+cry{%_ov1q*);>E9vTxg9<3{z_9+Tq~y~!Q5oPz0IL*sQs zo)&?Go>oP>XknNb>bw~PJ=s1Iqw@lEP++=TrCgJL@W*0Ug1W2rpkIG#*8zDWO~Cq4 zPV=-42op|b=y_RvDAZ|c&bAI>d>L0O?!nCAi&cLPmY$Np=4CA~)%hLsOIx6i@$1?S zrWM7Kd1wb)QyS};AKq|!f&!APkU;)bDyAR>ZQ?_UF|W)yR>tZoNe0T{;2MGJ>h2*R zZ68KGr@8Ym#H0a?xgy%~pCB*p56RKmsTmJuhK+AqwY}C@g~;X;|k``qldZQT`KKQT7OjqKk4wh|hLlUdFBBp(C+$<^?MYG$vQdO5kq@fLb^pmRR zr0>`hwmRIP87%bd`E~CD%WvhKa?Wk4*mVw9g>Y3VgRz@W!xFMX1@94I;2}^m0_?^Q z95E~xD4WklUp(?PYbM*=J2W+lJa%3Lgpj4{O=>=tKd4@jrLsJ8=qWh33R7=80IJdJ z4jXs66XC=-`s(};0*wfo6oo#I5lvAMfeLPi9u~jMft~51{t3nmHV%ZuLJ*$m?{bB@ zS4vjUd>xr@B*(OuL7YKq@(7qwrhy+Zv~7gNQ>p%IjYY=D7B8P2uT#K$yNq{Hla{{f z7N-c{*OgN~3{qC|Xh9eq% zaFC@fnCZglk5>~ z#1jK~VJpZ0NsFO{$FIU)O_?obkcL_LJYk$Lh9UOz=u?aDk?8)m@(F zhd~#mVEC?9NvYe8G_9I>ApG-4%`h3PD}Bb-t|EVT0N2=x_v0M0^K&@!_B$uHPc&o{!w^+(1LSd&;DJ`;JDj7QXsFQy*8cT}zsh3TOt z5E%JCA5&2oVwXtszN}g>3lOS)yQ0L7Bb8R+Ia6Yg)E3N^XWkZnabO>gVxA|nX{oyN z;xLqz;v1Lw`rwiOiqYD2B>-`d1D(Am!l67NlB{1)psunxT#}}L5vfu zwrTopYjEiXXP(lM(6K&%>oMNi%fQOsd4T&X@F|EAHBGOza;jrk@0|dhhgs4Lrn^p@ zBb)!EmrY=7Z7w4KB$|%=ON@7n2^`<2YsJ)y&{unOxpTyOMOEd8xN}Iars0HT^5wQ} zkw=8J%w8hjFl^1CG2`;c*!+Wj+#C%LmG3^fYb9?Cx#J!aND0z{cYizF&CZ+GDf_ve z=*_36yq-t(u+J&^!ofAr;4(*skoLV&?|80>z?qK|Jq&dA9p2=oA;CGTu2;0LO{_e3 zd2b*Z0)K4tmab+Vf!kUlPWJHS441&0mhs9{|Rj4cK(b^V%^QuGLr#JBv!|=Yug&+Q!NHqZZ-c9cmwWrdX!HdWrYC41p$w-WjE! zRduW#Fy=JsGEK{dDpjS_7fZ~-_F9fTdfbk4GkuW6mXt6qF`G%j1jQ`HGG&-4xk4;m zJfRtd=uFQ7_@VH6^9ABlTr_NSv#l^8c+u-CgIxkA08i!1`4XEeEhvDLiT?KvL@He# z*8z6ICTF5M%Y?HewDZ~YwVn)+DO}5STqv7*QSf|7P{!P3CHF4&eH9BJl)|ls`6n%q z4PfV3M=KtmWS{&QL)(HY!KY6u3hvh6k_KP+mhM$S1OJ^7+|w%w5m<(NfkM!0$b zs{2kqKw;iza&1eES z(I;|*1;)0>x>4=Ak7sVZgf!yaoRFtRq0Ih#$q|CVu~v94@+CTcD{)N>z?5SEcca`*&Eq$3>idUpgGz0z7DP*0MJ6@t11Q2w&gl^xIgG&^zV1#3fkhlKh<)OmaEa zTR^FfjB{Wq8#4oy1|i+s+@sWB1l0@3KoC&2(5X8+84#U+vexPrk9IDWUDxwp^UgVS zqyWoUW}sG>;QEku1Ft@OTkvK3(e3gfC7k;YuQ)Qd8B}A|e=_OnE{u~Fj1nWPp|I;( z3yO7c+`#egJpCSn{N0o87#zeN?T-I7>N327PCn*f160kJH@mn z5o6mRXh@>B`Dqi4v^k2w{Xmsq<=Zl}0dT?Ce^Z>3-}*t~^C&*?SXC@5MI;FI6DZnJwJ#QH1q=rXo?1znw?=%#ucAfrmo3nTcn2n1_RGOG{aE60r(OIMWf^-iW zm1)!FCZ#9q9A`?y)Xuw2P$pUkTRbLcg_IGmkbD7ay4ib=vZ?C7M!vU3K3tdOj+avS zuXRM7_lI{YwPvxMJl#L%0UUXBji+t`MR|~A^scow3B<}|p}YiM#pmlvn%?B3tXHl}l5q-Ix0Aj!132pUdzZMc1s2;7ckI`8qEqHhU3@HI=awMqE-CX1+Cm&zpL?-zYk`R58fD+bF+g0iFI(9lR?F zSTMlZ?F$^>{R$`=%~;B8qe!UklB9T2!;Svat5FvpfGHV?a%Q0zcyWvCe_r33NCJV~ zk7{tOn6>8+Vkx+W*pWyq#wuB7aXo4s|spX$=M_)Z!{nV zeo}x4iL?Ui=Gf|Jblt;l-bo>4q-%s2$~)j^fiLV$3w?N~S2ipZx2MSW1`%3npJ&$HvNlgWhh+dyzziY+z3h%tM;~Gw zj{{SE2ntVcV9uQ;_ z$KosHCf3}KBM{-{HyoNv&+xB0i6-EJM{-uP;*VZ5Y1lpaf0TC>+ z>4)H@Vcc_;ri%uEOMx8Q){q>!pER2B$x& zUf1>QI#+_xMQruojP|8|s2e6WuA30IiyMx^|2HD|oee;20c_u}H-Zjj3TtPRw>1zj zT1je8j$9emqP-oj4lZG6MYtbXD0V5vf4H3bnrFH$Q+a1w=i3@mY}OtnX}HzN`(=6n zZquYg&T%+&C`~vUOk7GK-thyK%h(aoAX8ToGQ@b+s@2;aPN5YE9bfL! zTx9??8)V!V_)k|WrVe^jJA9H29uz_@4D;kFP}@>(v+j7Hjlr}Dh%LiAbz8?-q%$Cm z$QlqQX+Q{=EPb-2XaHu|a=`l{lfU0$I4;TO?(?t*uT~td<~ifW#s_7yG1q4-q7E&# zVu44<3o{RUWzb+ZOD(`FUyHtU+>LXCe910f9h6oWcN!lAOZ-Zq8Ak2R>E$&RA%M$X zw(N{xV}DK4qz}DbP!WU`6*>4!gU_=Gz7huUr*(wb0fKDrzK0IeF@&O=goQ+)Gjfa%k+5Mdv}dS_wF zdog9T&7+M*CP&BmKBOOX3n)Qb*R#xs{>H(Izmfy*P1MgYjtleaj5sK)#0MI$YA1j{ zJy?-&1h4Jx0vOuj$g@Ij8x`EoX>UUp9`IJ zr5J==issUjE28V9pHiBKpHx~ph`+xgM(F^{NlSEn zU$rVJ>zYmkmfF!mS$Ogxw8`8@OO&uQC7P!b?3@^#^mYExudf3ryjKVa&OmPg-GZ+6 zfFrzhJC)5Ljn@BoZf{}6_>6tYl?KUXJZ0mUqkpgaiy+^#NeBVOP5HSN+EGyuFsHD) z=}k210fDOw*SGX{ZJ7ZwN0 zswr+s#%aMb%+8a1m(Q1ogtw&sFA^;b0HH(-u@Xr_<$vy=qetT=rp7-KE6<%7q?KFV zEj6rfs@8+4mxgG9GMd8Iq)V2i=On|H6zx8t7DoJoQ+hjq)~B5w=NKL6priCUJ&eNY#+ zukUE2Iyk?K&fNFBl+@2559?&bXq8-{a40&Rwe4E;Opa8m`hqejE&fO{D_!E> z(7o~SVmt6+pP0DXP96Hiib~WLczeG@nQ@iOv-&Yo=mf*8kNVt}M`2Q9|}78Fh}6Ss!N+dA^%+>debxO#13Pg)hLP%mi8;b z>2{TayI&fdrnCFjv}n=V=S48s>IY;}|K&z%>vqX~@K%^t69B+@nXmuihzjEp7X5P- z;mrnm->7@)9MYxdA&zDzk_!MyP33g@-CAlHoAR3ezxXpdggH8k5%HS{5A;7dyv;yr z9LYXcXN(co1RCGaRX)ajZ#2w<`NZ-{Mp5l@Qoy~o?_9gcPOp2B@l5PC5HC$NR)2MK z#r_U3BVXZymHy`4Q)MK>)+YF{)dG=-y(QU(qZyH%>T9^PRmRQf;ZU45uVJH>Xl3RL zINI}kMe)#R=@P~T`S?l!6>Nhlz>p{w)HM;ieP?LKUi z>>Obw3=|AmhjYOKox{;?|7>sXPU()jQ@w2EfNCq%IFSMN3D7uM{3Il&pIU6roDd<6 zwZ~;6|E=XMHW;AipcS3l1BK_J!EN4}1E`H>%Bwk`nephT(Rz}WbxZ=Tk0CvT0DUIY zx-ex5dVOk0Jq#k}9bc6kw8!(%A99U#6g(ry;IZw(VwyV1PADN&i!V|d`%BlxB12Qs z%2pA$Zj_F0c7)HxXA3pu2S%{M*6lCdf`GRS9-z~MTMpWa&G$x_>B%B?3>dO z(X<&}svQL8p*p48qXv+L3z!3S28m1RruYy$xB%BbodAR2F2Stty}!l79f^+l5{vR zjBjYXqplke2S_DXSWndI1@yy1NBbNOZnconb5Ei2|5sV}hn+snw`FCpQf?l-LgzPI zKveGEPJwrxRRQZtjZ3gMQ$b423J#f2s{&D-b`8!c2PK<=6GjcW9`$5^kF4+Ag<23k zbQ9+!#@~D7G&E#NzHy!OWDB~N;YSecF9j7Ql=d>)x|kkTb6q&sfmYvwtfu?LP#PT- z4?7VQ%tm$N9NwM&x@?Kjd|ih{ ztU!}6sid(yPs_X~5Es`sWp@EyObChQ=e^^50L$R|7ZMebhC4WF>Mc# zWtkcPxYh2fRg?K!J7<)!I{@AERluTvC`@_W0kBP6Fz~?TXY22pU~Ag<62E zp?s6l;?_i)g6kg@40W=G6S_qN{4JvNHIrTevR`)ho0%F zF|R&kDO6PUs%$NwLup;}f1CFQk7r7dS@*+;&DiEoF!)nn z!SfCy`4bv;ol46hK5STSCRu%g34iuy-kCp7N$WM@;+zSXXRA3%1+u1e*-)(an+fmc zodtmVSgU8`gp*y8r@2^l*5JItvvI1byiT!U!(v}bTy-5KVD+N9n|HQ9W+~$b(YzZB zQ~43Lnb1S-C>~XU*G0420s!i_%uA;l;S~`tJU|%Qu7R9adXbEQ>HaJ_OPX#_7$< zqly`vv@%cH!$0wkWAI{h8A18dVx-u4llalT;$)~M*mvIs=1c7{6A4s)>(T2aV)AA~ zm5*gih>R0Cb`zLxsZ{O5ad(NktMsM6^A$3@5{ zwp|kUHbEakI@Z0I;|{}NYDtx4Q31}yCk53&Pz0C%wkH#Z{L!MPZ=p;{W+-ww!Jbjz zuC3T($#Qdglq#pPw9ja*LL+hq+67-uo56lYbC=R@Rcx$*y*gOlm*$xSfDp@6>f@mo zhE;EpKl&BT*E$dw5$0t$$a$iauLm81lMjgVV!k#@B(SiHACIq_>R``8Zhc%s;Ks*M zbaUKR>+62B7xtzq#Bo^d+!W67HdLO}^(s$E&+aDTM$6-7;hq;<_}^bFi;I3&hS#ZL z9H)b}7ilTrvt43P@xz6?G#q?-VKQcjy{LFf`Y_s{!{icwn`e$V0s_=6skq+M*p@NM z-tmP@PDyC??;zy*D{|D;_Km#w=-T4Ir&tvti8c+rTx4!9ALN0nIAJ4gkA(Hn4|`+< z^@s2+a(f}^i!F|QN?0(rCedj`ai$?&8B(QG9vMxmdXBauU{obyl&s#6DS*xS8f6=2 z#h$1GW$t10Ron2P8`Lu;+Ty-3tGbaUAW}lh&h>1#AjO)%@m`xhf08A!kcZm@o26^| zYx`dvjS{+q3fQhwfX6GMet1h?YxozF3|F5JNdEo( z7XJy1urnZ!=sA@l2&^}e|K+Mqh^eXX)e zG|cae!L6gFxUf^C;S?iGT_r*3KzT<%SxnIq45zLCEGw_EWq(^LFFeCBzy?x7xvRcH zautT0g3t?rAW+F3nMoiRurdlAo@+BsoeCvq@&p4BDzFR^jwgI`&aN(;DfGwyK9*i<{icrGAj-|JwA)p$G~l!Cj3Q)k zdE7q_@a}nPLX3834FZOpd7}^&s8t&DUN1gjYH>2u-Qo%?I_cGqeY-80csPqb))n2Y zG7H1WSage;A>)692e03aOeEb+Sz5TeksEtFp!tzJ-~^M#&Iuo3CbT;%w-zoSfo915 zFx4qN_%Xo^b)=-r$m%!JUZy?5(ZaVj`}_FLJ)1SG8#MrbBEaNp|BM7xG27TXIJLUL zhc8#VWE3k-ljVv+i9jsLYFZi_9#hKEV&!pD`POQj5Etv}f8Q(tX2S0+CZW1N1wqOM5 zoH_cfcppIyMNMQqlBR`^s)ytpU3ZU^&Bc3hjBcexHi2Mv0kyGx`$j`7Wne~Xi{BAe zwL-e_t5Cy`psMPwXk(KK_k|cYy6>Vs&tM^2N+m&Y^XY6YL)W&07vVmT9#b&*yhZv* z4hhD#HnCuz#6iVoPaIOOq~QTW))=E#L}TxQ@WWVPpt@5fKDbw#&idbO~;Tecc! z=Q~#=|1ifRlD?FIErt~CQ8 zC4ApO=#ctkXx2T9AVNWZz-fdjs93TiprQH@^ug0|Rq!jmahvyiGFqrgy_$7fGGc+) zM@5Q6YZ=`pfKu4A#>@LV3t1c}Z6!5k9pllgcDzroGVh393hNd%huY3ELR8$g%+Miz zV$^Z%w8mQpt?0fNKaG~+>hzJbszT1!FQ8GSWVDOU0fQyU6zNGlxK;qoG0nhX#e~m< z?_Pj#Yn8~ezg0?25rv+TTWM(`&0utIpq{T!Qfam(dv?B^xjXS3N8^Z}_p*_jpZxB? z#_ZQv^{4N!GCPyrl`V7FMl6FO$id*}#IM@w1H%r9BDw6)wh()bA5~Do+cH?d|?LChA1#nEIJ3Xt(d=n~g3jxr}-Dk1($q|;AcKUXN28Kv~ zDm0qG<)J1H0G+Se$>;C0{pHN|!pKwqy*G?PA_a0Q46M$Ca0CG|2r$MzZBQisLRU^S ztO{CfGelwCZIV0}!FB!jh%&qY0{>lQH175BmB=exinDG7hk7DU?wytO(bKciPbOu3jY32>3$$-kQo4gpT0TX_yR#y{AKo2t-JL9kLn z5@%@Lk60KFexbkHA^hu&b9oj^WW}=^;t{T~M&K*{Di8Q+#;kz<2$wQX<<}K_V=?#ziWMvz3ZHYCUC;EF$K-u-HffRT zwb6H*at&1~7pNNJ&STG)(aO{S4{U^Y`x1;KlaNQJPR=`8y`%BhW7~HmC03OR!{YM; z6wmQx9&1worQHYIIB&Uyqt2c~DZmJl(picVobSF% z!)AxNip1DEH*fSauxk3rtW6WPuHhthvY$u)bRK7BE~l3myqi_h84RRBb)Ogbl+w)? zESyP?5n5VGyWc*>*g(kugSiPt0KU)i|F0HVc!S``<&z z+GcM)$gEiS!YH11b$r1UEqD2Q6P^Y0Z-}oV&hc0o@ewDhitki5rZkiY(v}NL%U)Ya zvjseszKSVm{)}#wLLtyG&Q))XZw~}t@`L@=4&Y3aIki&-T8CKsJ@J*Zb&;ktva_^5 z^UseYT%7(o?sf9KQ^T~|%vN{9SaIA1(M&*-T`F+#u&QbRaf6B1MPG#O!+jXs0vor@q$#4L< z1glfWzhkjpKdgr$QaN=~20+bri)zsPV5`g8ERUja;7>QKS9{pC{O6(!t0heT14!lZ zSU>>!)N$%=ca!Bt(Zc4W!QwbO(;!=X)m{l1P9{{DNYlpfwViUXo)tCSv`tzvAyJR_ zrkVDIjk-yW)r7j2-sv^R2da_?NLN1JE0>HT6Ez1S;GV8j*qkHzA7$Ot()2;#s~@cy zF{|jvALrH8HiSmAY1yuhJ8@oY(2t*2&dFw;sQ|hNh>rNqAI#cVEM3MbaBY@G6Lhht zIhmXof!Pk0VVWyIQ9MlXMS~H)o{n)$?zy0my1n8Qjy|6ac!h$0Ao;Ix5&i~gS5e39 z{`u(Gs$VX?&);8~lL^=3%Gf~PR>j1MLs=B4j!HKImi%05Di@Lk zMJWr@<5jrsZBmKmK6@T;CM58p=>Qfx-Fms0W>qPKU4uYh-n1T>8+|oK+HF??AuoXK z-ieroGxV}DQ@H+Gm7Lir%9K#m(z~+;++&^(j#!BJ4Du=1{r~I}Mf^BkXPnP(17==O&%G+)*j1E?1V%Z4ux$TgEs# zzqc?fx2j`gMsD{GbCoqAXic8tTGTX}aEql3b+0dKHG6wWz{k|ppReEpx@_3Bh?QJ@ zo#RE?4n0!eE%fvWZg9|6<#`oAwx9E9%fE)!UV*A)4@AhdH0gmbK5_bexbZ)OPg^#J z#L1Yf5s3YY>;*P@hbn=b6 zf)-hajGC`0#QI0OHTRVWD>Qk>H#uW(&QK9;JAgfsqA@+zZy31xr6b|Kc!fa=D>qzX z83NyblBEl>f$gtU-7|{tJrNZHxT_T)2@8tZ>RN&h>U>JKq8w)M zRpMaSE!&(iO3BO#y#<`{w*Y@~uV$M={MR8so@|h(kG>K6gJfAs2FK5YI&UsyIzqjp zmciLy;*^|TTn-&~YpJ{lcz$(=et~`fQOVa|?l1-~7!_kqOnxe)3%A8c$tR{+h4^Ah zz?{^TCZBr9D(;3FVXlY@l2el<$F-MNzB{xTXx8+zM=tvX=r4@5#%L>f@MD!MU6fWG z|Leo3eRsulSG)SLbBC{5wAeZzM;nLs${N#n_`g-o;w9mQg5?1*+FaOB79kF8LrZ<( zvw79=>c+WuKa2GmpTUT9_o**ez~QlHhPybxb!WA=OWRk0!eZ3;=kIfp|15@E8nA%rt~1gFxc7Ep|Is3q zIhuPbuFSP5{#Lhy!qPI5M-0KNuBTzW`JgL@oTDPrS4?K{%qY|XzVOR>C1ycx$nZ{_ zXYsHSX?GpJTqe6eJuHOdE-&uM}<1{Yoj(>)t%sXW8+bX+7q-@DUEZ2l*ED zXhPlSq;U7riBYd(EX~ehi67yG+Svzp71iRO@%j4k+nasgIy@G>m!Ty5h4S&T6RT5- zu>RcVkXg%T`py}u&Td&OOmJ!u1WC1m? zIrY4S;~7fmwY(vJwx9Sw|M28>xb$GIr=TCmf;qv3e;*b5%tvlx#z4)ZL%xg}&pK3r za4^`gnfcio7;xjowfDPa1>(q{H}P0*Y8unstBc=5d#!w|{W!h#tTp9_{cXr))<+p2 zgaaQ-5SaK-7S*B6)`}-~fTaXce4J1AO|cv>j81HTu6k#rju^<0@j7X&ixKnJ+rcwZ zo#dOpL(QN|>wNFMi>}+d>Hd4BnZe_W(waeM)0PTVI7<{x?!Bq|M)Fw+##r4@+j~iw zj(`)4HIzy{TS00sb2~<;xQL*siL(*7Vcjk{I75NCp{4}2#3hJi-^A}J4l zHGM0+ovzrt8Z9Zc+?s%=+fk5ZNaxC9HP~@}!-e^w^%U8uUw-aIY`}TlK6LTsm~7eb zG`8Na$F@Tc3Rv#Q|F{1AP&$um{;96;$HDUlf3=s{8xlGwcFh~`WWi4j2_Y^UH|btC znLN1wQj)&;u?pHp0NQNBmu5$#GKhvwINH?uVAP&>2~I1AxVcEwJ`;PW}Y<$M=wNPH4)dqK$Zy-d<7GKd%Bek6K1(TQ%@l9;F zPPaa@LL1xEaU<>KUyHTr7PJKLiDF$KWE2G0XK0F*EkmaJ50XUJnnj~keFgXq1k>4Y z%r_L%&oUkwdcW#w7+q0!nJn*>ZOtkKGH;{vAkE8~ZG; zooy0OtX0*vpgunHM*8kca`SDpMTlhFilTj;pM8NWRAgF*LKV};|Fl*DO(~xh2W;40YYF@LJsx9L$41a?=ALR_z0tjs1<4=T2+y z$@xwrGvVRu*qd1waP;WRf)~%Z6I#~}XHvLjjmMdr?t{corop0$CCO2D_2Hw6gk`2H@fzvH0(;jcDofT9^fE zET6*6LV;cmZ*V_kWO@^#R|Rp|f^2q0?7n2|>--VWAXYg1VIvD_9uzEtD&`gxNy30p;jJ^h!dBNF|Qb{=Qm!~ zcZd;e&)=DY1KdZ1HMcuRu4>KESoZohGvbVaTcLCe*(+-iu4N=DoUW>|DWvq_DvpyN zIwrj=>?jZm8q_t;`f9(0bESJ>v7#k%0>d?hB0@eWT{S(w+3%RO&Cj~6-3p|$gs zFbpR49Yz%1!yHS^u1AU9!#2DYLS2u7^uTq2*bO>Sqtx-I5ma+pjFFk) z-TI#s``~t{=xzYT5KA*~%S56fkaqgVC=2iWLg>bDhHBU?k$QeeA6%_m{8Q}frHRQT zT#eEtb*6ZBaSoJa#QruaF8AYiq`8AlU?TlwIybyR)?JL`hm4_dEXV*E2P0jpJX-K=$`pG2Py6divIj zNycfrt4g}GDcUeLloTNgbW1D^^}m9Lx5u0B)V|Atp%HX9Ot}+5DR1t($WUN7D*{_- zgX>1EqLqYX-)MY|%%gZ@hb*S?3TTN@CEB+Sx{)24Wd2{3O5QI29`=j?dnEzd2kq`< z0h4daWiNzI4=xZb3Gf^?FONCYv3XEjR^bnjBUn0ncCyW z2C9>hD$3V>00!5>JvViCSnUvF3cJf4oK;axvoOu#_-j{sJ|Zr#p2_!u$NhVNGEB7$(6X!R9`hvEr#=OjtJiumkFXy2$j<^IKsuI#&s?dQZD z5Fe!qb6KwTDC8T}M?+1j7K!^{i`CaqaUqHjm|3M)FKrUs2D}10;+Aho==QLFYv>(Y zmPFfH;_h8M@`ml|hfe}Trst4&K9|gir#BRHTiw{H*&Hihy|!3+G$0SDK4IK7M5L?j z_rUcE#eLGMj+Rn4z&j2U@Ti>yjdw=5m}H59v7%S>P=7j;vb^FHoV{Rra0L-}JCU9-_m8H~?pU<1>D;1OUl#!i7KkD+{bI{!3 z1urr5Jd!u6Libw`4@CI>|3LsW&B5VoWqD+<4th>7xVZ0VUYRMi(?z&PlA+tbcF>u) zDCZ?GdR*t+K`AYRv2*@vSPFanmsVvbDU5lJ32?YID|?&+b>PQ@4$%m!@(YZ1|lKKb$IC^b3*{Zc+O zcTxjICm*KNPYhFVZSdo&|`dDiuWN9ILjS52$&Rd9kY7Q~@AbVj}wJS4!lPuY#~9Fm09|l&z?hAjhWc zY1llV=QL7kgFL{c=V0Rls?zBGlKPmyy9@+jLS`El=~bkNgPm~4BjQ5%Z+1MSU$V*I zunNgUT?t(K*m6kUow&H!FB`5sub7UwT9b+5n5-efendcSkU(1yf@HjP<0zLq|xD!G%*ZTxftp64*D0;Y7%BFpJ0(8sI z!nKUJv84Hpe|9ywV`ri?JQ7e=YxPa&(Q-4#2yFWJ9-Q_h_er3QXlQX6%oxBRo zLm}?Wy1c~jWmg7RQtRLM#w;o?09nMw5_;D3+IJ5Nr;nFB&E$a`+UN!%^5>{5vbu45 zBM9>&J0V--Yn1cA&+obY`AM%5sW|uD?Mg5fk*xCFA6;7&o0amc(%qzmo$MV6)IC+7 z*!-TO>_(eOW2OZ9D5qAS)m@EQfei+`y9kf)x#=||hvv(Sc&2Pg_fL`H@5;*Vitxpm z9e`qK94QEk6a_wWt-D7V!L>eUq18kgr=n+aDb5+FQ8^2tq$2od@Wdc@G|>Qr#^0z= zB8*!)+zZw;U;WPAxYQ#wF)}dInr;rvbJ_0gBI>QAaOHy1L^GBw!Cf~yxyUT4syE>Y zG0x{42G*(_|2DA|$RS!-vgp#VfXSZjIt=*Jy1kA7n*XP7|3PG>y#nhu2oF@1F^!-= zCreM#-Nn$(O6&Q-tzv`md4aLm|GjPxu-FD?wxEe$mqCQi>$XYXHSriJPPxEnRVQ1h zx;YtAOSuH`orr)tWx(Afv>}?d&`LehlPiAS;49e1w&M7AOQcjt2F3XHhgY2xnRpdu zZkfpoex-)tH=`Kvyb86ASn;n^5`vCvJ^tZ8+-mEfxHD+FcD=f?2$h&a;Fbi3>a*@2 zXq%a2y}49rI_tF>ti-Au6AR?;w-HH_fgVX?CXRjnN@1I0)Xd6@N5shP;?$@q-cT}f zp*?*bFF#7AZCZ-()c5ixJ5Bm#a{C%pc&f~dj&epEnmAxx%n2c+_t4gY{xiV7@m=U3 z6PQ^KPS;Ocx1J&y&>+;vx0{mTTkQdSqscnh0E=1C?qe?c)eClWwzxiIi2 zeRw;q#qB;TBWIu*iaspODC)%di-ty=d##{Hf`;j;b&{*vRWJ<1K9{_e&Q82?Pji~& zN~btVJf^XNTevD*(e>*z{tvmAIL)>Fa|S9Eh0;Ds$38uXNh0G9JYIh&T<~pMaI(Q6 zwgwJ6fyI`z?7Fi5;O6nq(p0UMi;oZQx<#($?8TeMq`DnF)b$|fQr+hkd>*D&QE-Ee0kK`B(!Ll!n6 z)1AA9C9$4ymT+_fK|ARRpk&P1w`~^)^S-zxYr}^~(YyuqarKuQq>*rf?+at`mT?i) zi;{!j_3l{3?U_OHO<)b#!t30|xtRw!p?(zOeLIydDC40apqm4k@?q`8B71CKoB;fM zg1)5c#56j7%2h2ydj>4zBTwfz$JP7Fwtn8pTfm{cG&^g+(cmjpy&HY#s~Ke|Tku$P zeSO&{I1*q%0ca(WqMAPDal~&QgPUqgJl0c9I;6A4;O_>6hoZ-eV+=#D#=J4@$0b zOc~wISG_7J$xC(MOs76T*x!DWcMD!MEl0wC5WC=LxW75n;On&7q%pdzH-z|AT#3y+ z)oMdA`7zhXMtTy@icj6X(Um0RZ0BKI7{%Kn@OSTKx}v!Q?AuMMRkc3tX&fROEHL$C zC|>vKigR3VcjEMajOwv|V0hiZ2A{$1$~fEJKSDXdiCVh$^T`v#^u^><6ASjvR9NBS z{h!%rkHWrAbuu^|t9J?n9K1b|;tcL3$<%z7{gQi0uSibQffxefYip+j=%UumMd?7u z*2K$}u_tYORVp8$MTRHk%xK*3jGb^m%oDr;XL5Lw1wf4%J5k>-m#0B+F0u(L7G+?@ zxQ1z^!Gcd3tniTDQKfrnkK?4vTfr;y$zwxENFmd1G~-!FPgOtuXaa3_1>v`*avGRt z;k~B@e^P59iG}|KAoNQpL`u@VYfM`d)e`t$s?R*7A&_6dd~RXAt!vlpxk)US`?_gB)J(=hH*hso#k65S_}0^K|;^6 zf=ZttS^F{!F9A&#S^TY2j>6?@LKYR#;DOlSsxEPT5rt(3)ecx3+fqH)m99!U83R3U z`FODRXI1>=$Bdd1y1;CS3brRQN*X!H$gSeDVHCTCCK=Y@F$f!{7=$jLRc6sXbNLV7 zN5F1Fg z(I&SO@vCv1sOosMO>Odt&boaBei3FdyOj2{*e&T)GFT(Fl9?g`Mvjz92YOuy3~!~iwY_j%4AdfNHFlLUv z2YX_bTsK_(N)kU=CKDKB;KT4+rjhR_%q6tz%~GxMpE1YuaB$jQGy86izrm zpL>pU6iFh2M=8F7j&?IcJzlWKCHyLAm(@ErvKtT?V&|6!xKoi7Ck*rnZc6ZmQOL19u^fgxJPzaYse@1Iv z156L&*VPLmOt8vcTDtE+STrvSW>cqoo}|t_`=exZNG9U1Un4Jcl*vdhq{ zN^1v}LBpr7;5V96y2!GNMkqrV`)8hWs;0odoSl2Z$v-q3KJGb|Mp8L|z2#XO`hk(k zt7MZ(7C^mG_hd79#|byLgG>?s^smLUImsS2KSYdx^}%c+oiQnlbd!BL zFhYws)Dk+zQkXUR1_o%z$x0`tOhJ0m?Do;FdyrxVM#1Yq-a2&Kg*nut(z)7f#2OyHv6G8p~=w`b1QOXOv|~~pWuG4!Tesppu`_yoc2cy75(-rj@3iG z`DuxDRh!m3ej?}YJD3!E=NMjZbSPg0m2)Y#-Q)MDhNvsp5wRr0V+@K5=%w=K$^%1A zKBR`hm7 zIj9AhtP*6J?QSZ8moTvi(2JJuuG5?g(4H8~;8rAy*;N(q*)=ZRhy7p{1r^xJ)z+oC z*8!r61q=~-yXc{II*%?E(-`lmdz55(QeJ=mCz~h;MJN;jZJo0M-IGUn;&Q6z;N~IO zW?<)xw3B!Aib)sg8Z%r*?bjw*2%&Q2>PK*2-h(gYC?)5B5bY5+Y6ZXBng{LXMsm#z zOd>J-bc1xgrfL9?g(*9>d#NuA?+`H641*8$nSpDt=Uy8szy$xT z(8RH4nWdE|yBpy_`Mz0|+BBtR$hQf4hs*Ic`232P#lU2FFlUe+#7=2LBwb$@TI}2| z+AL_wfLo;uFl^;R&^T7g38TEbl+|{6BOF$%C;HfA?Y=!A=5G@GMjUT^LZ##fZUr2$ zIwvD;xud&TO;YS}n$CE1c_&Dy39F1Bz#Q4JWp{h^q>+sV2!A{TLjW7shk~H<7J7fG zDX@a>MARaF-4E{)X@dHe-_rE|H1-HFi7ZnCJKxJZpRow=oX9igo^`kv1KLb@9LHP` zFVfmN#B~@QTW3MMDuSXOExn=rEbx2dI$d838mR|_ctS~V`_gau+hC2N-eMCv9#;K~myU&?ZW6(JrC@Qg zfqd8tmTi_*1OGAB-HoC9Z`iplt%L(Wa(OT95As80xtg*1(5%E+FNX0d&hU%%xNq2slmW3 zq1$UNPV3{TOSq`?p?9)v-ws;Uv5R_U)Ngew%Y zSk|nPUeCApNNpZ9xz;nwSEKLs#^24){=v;W7+&I)nV%CqJ43Dd(Y-x6$&&ima zWqIeIWul`dRfhX3^3Tq>C~{!%2teuAPAI5@w`GfX)BwW1!n}U%cXSo_{d!MCoCs4` zt|r3v!M%WsU_&|cLLn}B$M})Sp-HZ}AG#h3Pp#3pbaAXrp)|$e<1fn@B)4rXM#s6~ zdFU`PE?$H~B=9nj7Q2>|!<<4Lr6`1?fegUHg(7?NiX?L2DWAa?7MO}K1*v3b+ z(Aw<-7d1q$V>6VEa`Fb9@rqb}_gNA8{UE1&l_eh6o0Qr{i8bSEqhQ=UlRi=8tU|l4 z<(A|eU~dWw{2NHG-C?JwsuZjXYDa!x)>S-XnO@T4CinRv4@Zb^uM0Z+ROiK zzIv!2q>$heBrV*K&HcwO#G*h*W88g%2BG6zyVK@*CwQaSHyojIhIcND&Z^r66rWOZ z6dm_XmFF>1Sq}eX>wkXH6&R7j@W9%fEkmaW{IT3I|8FjdjGI#LP>cfY)o>P&qG+2a ztXCu)FD{*!uiIMOLDNG7g~W|dZ+e}Dh^Nj)4GrAeY6tyG2x{I_3xuiTSKSQx*K}8m zg4|C@=nn0Gml|3jy_ZF(uA1Y#*)#LY&Karyvnw#VI@~U1qm zl8`%^S%qs5q8Fowg7HG1OwAt{UP2|PLgLiT>2iW$CA8O;hinBn^m_hD1Jq#sl|)&k zHQ3V!Y#pZ$Cd$UvD(~{oHzk`L=kVCwyO7~>=(Lkv+ws#cCxHh!{*sJ0_9UE1!}mnZ zTL$X7;!IJwQJc*|SDw!}6L`q{?K|M0YXDk4h}= zLms};;`2BRfq~~;=Y5Rg=1K-_%eGMH+}!nOy2dP&YKz>2**S~*7X_gGI5k~WyD#s} zt2k96_CBa-oLO1NfaG^xtQdDzuJQBR7oO}-_wXY%h90ZcdoawG@6ibfwIU$0DItF- z^F~rfgU>#oFz~Ga%XMcKM-MPj^xjl0Nz_3u<}1~WBvNM=M5lx*Knco-_fukM4giYk z&o|&IuBuk5x%cUr=nXMNEHCELG=oMrgrZ=2t^xr8*+9Gn-))QXl3N&8=68OJ0I2V~6s#*6 z*da6va{T9C?IO~2O@&HG!!l)c4I^P3WVp&5qdCA6v5$_dP0;VL6sEZ@5qSs9G_~bv zUTA`r92-u7RwdXsS7f{$2uLETVD_G{fe}F6FF9d67p|8|d5HnI=Fmic3Ff&AmE_5as5-&vW zR!yKxdmDYZ^%PaB2D1v!_{rTb^BoWF;$U|!)uHc0!|wD|$qkssZ!vDB1nIJ7b*H@% zevk?MOsoqQCDE9e(j{7Zp7!BK4nD~uy@V(YFv&DI%N<0`z+uzvO>UnoioqMbM`g|j z2eT_dr;6h35=>V(>M?n7equp|D#v;nK{dc~Y#ZA~$n zFA-Z!v3m6L<(qi+K(fg&+U-f;YE%gej)#C#>#w(`yTW(Xwwz!rx6<3{Qb(i(i#g|K z{Ylw^gt}qjKzP)TY`+f;LC?uY$5|`$M&T;V4kY{!y^xz9nE5_tVd>W3A(d^w8qVWOvXW3~doX@4ss8@N{N zN!wVDBrG54jv$>a&B0s}Dkes^N?npcnP3}FlWao&cliok$&7W)UbsM|=x3n2^SU5D zl#B8kR1M`BoS10j$rSzF3ON;}LqgTrn)?dx@Z&za`%` z1nk?j7mNDAI6*&*o3EQTW^a_UcyiuLaMuA|#_7Ol|6GglxrWVJN8t};=>S%X-_P;9 z86Xlv&cd_`Kl6UPct*Yj6cCYVV~t5en{am1r)1DJFI1V$N^_|DGDfnDtwNREgI+Rg z@F&WGO_k5mdK|!;BPlh}83~JZdW`(~G1Bck8@jYYPJ3mkFru3c7 z+iZbWS%%HTgQCfUeez9J&FZ6+oYwXKL3g>KX^jN087CbhRJREVf>ni@v6gcSdlF>P ztjYE0CdQ{n&h+<0S~wbuaF-1Y>8Y@wDU^*e&H4`!!#oB8z8stjzy6GjwzwY;e~x65 z-0$SC`kM&6KX{_(eSCkjxX4O_^9_~fXx#YSICf@NS{we!5zT&;YA35P5pV7oy66Kl z;6*URC+pnCKa3Fn2<6e+0mTw(HT%pB$?>^#X47` zS|)GZ4u)7Zx1hIljezk?V4IRae!@`-Mvk@Sb3J3b3ki}@>TtE$CUr5VQCY_Sg zVbL#ApnwUmGxs>GLNR!EsR9!NfeLZ;_V9)S);~#o21w{3BJm);esX8^Yqr>SzC_wR z92oSCC4g`8M>LOlU+>R~4k5B)D2#6!{)bcIu%6u-WWPo-f&0ZoFg`ruKSKn=Yn1>* zO*`{Kg_lb%&--EjRpIocuS5fv2<4WZ?+P~EeN@2oC{hbrnJ(;fHo+l)t|w&*u`pXD zaA+G`&OMtrcoYNlZE3x!hHs{Zt~&NMe?-jZ`rlEolZS>E{8Bfiy}sq6p9G%=UZGcH z(t9(*t~=@N7$#yS76Sxphp|~KS82K~xB6K#bU6kY*28eh-SWX0N9{Q6mZ@<{qtab> zW2fe(`=B75za6_54^mJpgIudP6EM0*-LV^4CjSlufT_ND?Ri3kz0q&(G43W$yB5*i zw_%(DE%+a0B28`blMfX?g3y|_rMj92rUnDcfPD6~jiy39LH>dy29R3!6S1v0aP+E~VWa>W(z zbremKqz*=-`V$n*OTXAP^u>H3J~NkrB3Cs(`AO7?p9Mx1F|A^qH4aIG!xq5%+WXH= z>+umy`EH&$x0lU;Y$b8??qQl$?l&oQd)$ftOd*`t+WXm6#cEKD75T;7I*xjWdzX&(}G14a6Fs zb^k4|@rDC0$a$9t5$0Qby{A7kQ4d$D>yQYi+EXvI*^Y^%*6SzwPSU*df3PF20P;&p zs=!u4XoCeCJHsA%(r%7;Xg#|7{zi^`{IQxWep|N^`J&a~o>~a=vQC?IP*x1YhQ$-| z{xPj!2k^9OO1%UKg3JIDCmPs+WOB%qK@P2}40DUIs5=T8ChO4yG+Dwln{HxNrbkA4 zckQ^oY*1Mosg~+in4m;5oJ|dfGrmGKC$cOr?_5d$x3%d|{7RaRx#J~Gf&X^63LIaX zm!AuBZbS0y9WAAvHc`%T`kWGMy^9|J2vJWz2Oe1Z9 z&Vz=&+lN9|7Ae&(FwS4Kxb+QT0s8Aw(Jm?xvp^?4<7gFu=u6Z|Hd=1idunnTP|l?t z>NimpJ2G)2&ZO?qCBNMUc5BISz!{n@_Oi2OPvj^nSw(MTA)$2vk;)1pJt%PCtS2@A zdDXv+Ej@s%rINiT$SIRM9UY+^SE$PM${26b!x(V$>^_Vc*VL|B9L==HA_jMfbw)If z8SH5aWh8VAG(!mzu9&B^rZi&xcpG*iv%_+mU-b$5Mi=6mtmyvaMj^kuj+a9A!Z<0g zwdyKpITq;e;)_!?<`SS_)8wHy9-`?PYuIz)8Cvi@h>ZO;)b-ukCj-Z?QpZVxHAzCV zAp)hdOpGqy{8QRV^)hJi^%)DVHC~AwLC#w++as4m8`?|Bv#-0NirC5aY=m-@+E=1+ zRz%mdhxir}NEe$7%||-j6)=p`OJJ-l4wp~kmY}?p5||@qC_{j`MZ%qvNs51F?)H&$ zX#~&{GDmz!pCQR&m}>xd>x~~i#Y_`qA{-}Ai`IbvqnGbF zo)DNuWcD=<$E|~`v66plMmOkzAq`XirFX()74(8)xDd&C{k5!nPoi+BrF>c+ci>#0 z|1Kb%tL_t1RSX-x=w%2)NFbnlQ)}j`$g7NT#t&V_h1A2T;YDzUV5Vx`?_zZi2F_k} z;1+)m1PTK69~jnAP8XePGB}IDE=gAKWm&DPh!Hi#a1|fBFH1H#j(oaSI2&L`8JrPu z4-1^J%3-y_%*!__R}Av8f{x)TeL5KIZI`o)!WRSI)~Rg>%x5@CVD}~PJ7`L|4K!(@ zU725%CYui9l|k>kJ+j$L53|@1R6*Q=2YLQ$Y1g)eqm|Kf9Y`!`ig>7X2ks1uZoF>b z18*Ucvw~>MHV76BIZiQ=lQWEwNaV*b21+-)W4=3jM&upR4?NH+m;{jN@Qj*~ASV+$ zmw06Dd%BX-9aMNst8zhBa}mQP&_Rv>yIC+ zB|)trBg~yPbaFrONSS@kY5-c3#K8YpVyCR^? z()w%?*uNoeaPjR~_j@p-)%wnuEguGTox^9?@%YV?MkB5|DjyCOR1IU&5Cl$>gIbU4tUX`43yWO6I(lSU(dgz zrL4v?hmKin?0D6jUIGb};qhBLz~I^6*<=lGH6Q)MHe)q=Elm2r zFlGr_@om7C6_PXsqVxUg@PB|2^1&6?K!jtRg~vOajA`A7ALDP4%IqF=Lq zwdccXMQaQmXe#1@?bLiAhy|$7FYT=fdlks3ZF06s(M(>nq`m6dyE*T|nzT+PD!xQ1XM)e#0oeF{?W_TlBs0Stj=}&_4Hhwmatcuwb+#!z(X#Js0HR|^5n!L%zM=v8V(lD^|+d(mJ=GAgiw7klPDzRt1RVAT*FbB~tIt|dI+(r}rjwGNQ z{z44QeYc7^JBA{@Nq?QljA3p-(tB68O*FPMPwb1L*8<9(jy#_(8O50j1n2Zio9uXs;||k^WEW3aZ&F(*Eb}(jbtnDr!WjaZ+`qB;?s9i(PQTk8 zxcRp1__3n#7N9_i_j*egX4TazP=JujgTO ziY~!>c1;gS@j5qk`N{%>djWoW@>)m7Qiw?&I1pQz#jFO`+Z@)07{=0k783A1gvR7@`_O@>63a#Ff!xGq5VJH;Gl&C$+RoH$TZi;#6a~Z|rhR=aD8&#o0 zLnjFGT0|Q{Ap&|ss6nLEbGwBJv^2nmg2{a!#~E(nyFEoKP;}c^Obcr&HUE%r;9r+N zD88#MjNp!4eMpodBEBy7-o36W`dYcLRcKYK$3HNd$CcjgYYBxc?Rbm31{idqP*9-M zYGiXI)71T+g9zvKmm-a&Yh?Vr1@SY(xXom9Xjo%_KEhiR|HcBch#p02v6u-Hq|q4a zm*c=yL|BQg;$0n%yCbgHK-ta!pE!efMK(CM4WmaCMLKUw6jjJh;_qo$L^~D7VIxG5 zTi@0uemEfe-auG{pfc27#_Tai7Tw@B^C&lZ-e1&J>{_5^jcMA%WDlKHK?1z%=joS! zY!pw$(V^V2;9(AU$3tIQ&6(i_xHD_HO%Ls*nN|HI_abMy`wnV?v(V74V_Q#73iPY^ zptsHu*kuJa(b7TH@YnMh@&V2sc+qoui&9J74e9-URV_%hY3Cg`f{zIq`9Y-4lNnvR z)V^6`_SxlGx}|Va?8_yC=y61|qFlY;XYAdLAX75@+3oN(%FKaRvyKh}BQ!2$6AVL* zGtq9P#PE~tO=7!(075TUzeNW1*u9q8E5Zr|10My{4fFGi9(q!t+ zxu2{P2t{dt?fZZryJQo39J%WhXqRxT;FD?aE{~qd_T_Nw1 z-#X-~rjXJA(rStr8)hduI>pG`t^m~1#EsXh32CX#vn2iu9L#N0&|AtX*)jdky4ZsO zU3D8`r>X_L@(H;8Nd3tVM{;ZTTU|L{o#D&&;ZBa(EKA7Q9^G>#pwjXu2u!N#$4O9^ zy9ZLPcIq*PFiJ*V?v4Mh0m3$&T89)luXp}zCKdmj`%SSC9QjXt^NwLj04^#C^6?}S zY0VUAxa+54)R`V$>^bpk!K;D#>_owNoEWUQ{ezcKEd9MOW8~RPgJ~{xQsS`@>J%)6nx=$6O+Q=z0MJb~jl8D5dHx=diBChmKht?^*WwC$H((fJ@gt zpF?Zg;D*kJ0UM$E*I+aQ0YIV60e6?jgqA5V4A1-&^mkJF2XjT>6k#jn!G4b;sT+u` zEoB!cHbe;6FTPA@hwE7u(D3Q(t;sh54dZ#Kjk8LLao7+h;PHHNi{4vDWdN18U5r!%e0vS9f-jHMV0XvL}P0HfVj zk_#9^e}2VTX*+mMCnalD&$X|I$VrW^_B;1wFRj}=aO}MfeuaxsMNO%KTX5VTb1YU* zRU!Mi=*W}<*!e})h(G9GigFKyil6AtMw)1MHLwICCcih8Vln0U42c^KyJOvaWj$Ql zA(8+LR(4Zorl9|G>UC;# z8;JYFO(x_LrF^&D%p3cSAgzJ4aHk`7j=%>k{Jo0*-4W+k2WFY_O-2dx%9gFV*S=`t zv3s*UpkU?S25L2=8so`yBqA`j7N=I=o^A8Wu7~SVAKpcfrTH5==XL ztuCDx$1D|L5RMmI${0%Y2A(fAR}9j7mb0%tc@8hoy#4M)R4ZS3J^-m?KydX^1pMHy zAk^Af2sZ~ciZT{+f2Wi|RmUp!x#z)PD9^44UC-`=6NFS8%_fPf60Lp+DeGf+!ky*( zA}Lg4{K5;q$^yJlet~G56a_m_NYx{Y#wxVWzgkbtZh#v1$l6R%^Af6-0a`rE*sgkg z%}_?=2#GQc)QBbb*3KS=#T{93C|lReVH-hay7$`>I!PYxq~`zataP^1auuBba%=FV zx7Qx<&mrgzLO{=O~fx8g}VHbg4J{hjhGUBI0BX9x>Z=n)q1J6~l<8 z6(ma_Y}6Qv;(qlNDJdFI_y~}RhiOC6JstF*mLga#n7!YCYdz_Y<%&~YkiqpW95{b; zn3|tRus$N#l{xvv%mQG|JVg@U7@mF!hB4H0&J6Y%_@fFYv1$k}q+wUKp#-&Ut#}Xp z>rgU`%Q$`!mvb}HeJ2Z-(`~*bS4Z!TgiF{X_qSb!D%2g4H)km3FkgjcGe4j7yK3f1Hav++U*Y+5*l8210Tsc^F&k)sEmX4bFwD!B=1e6}H&_q9nnlsks9es0a34FGfgfVD>ZLP3wR@D_APfhiJK3HUzOb6?P#p9^qgq%h?*WT zO<|C#6mcq5`RdX4jq!}YqGxNx9j)(aJh2Ie&iSwD_^_KGCmXElHT zAazGgmD@Vv$5;_%iIGoZIEPc60;MG)uU|Rt>7{xHuLiQhyza*lTWRGx)lvXlWbn@p zUc%3WRMR{@#S@ngb?2!S&+SnT+A*o+inN{*R*R*~x!=VQHVCp?*v;@JxnaRYG3S(T z+HLz&#Sp_q-zJX$YlP%+Xx-O~X>Z3I@SCbi)b&Y%!|6NhU2N4v>lcqk*bqR<5KhTR zay2=%x-KT)N%%zPl<1sXIe**Y3M=9_+e2xmjN+nUaSnK)p_W?jCDt5|ctf4(lZDNO zr5DE-QZ!9kK1AX63<&(a2mV;10KhkoE*JUO&8ib=@teRc!D0YA=~X{glau;j0TtlO0ZSk?tFzqi&Rqrl?gI&YDm^JMsWQ7Cf`*t=Y` za7XRcS>3O7ln?Doi|GgYgE?(@l~}J z5O|iFUCn$Q2zWwflbW>aoR_SHm5zz5E^BMu+)&HM*weF1XE<{A$os_exK~D`ZjK`6 zg*tj9dtgQpTV$!~jnb!%c83Oo1-R^VHgGj!_6RSdEl|QkSc1@`N>sanftTFf>DaJW zB+3=(h zd0w!6{FyIKKqDQ}mgO*Dd=Hg~zGf~uKtvpY;d_&DqxH`dA=cRU0<8TXce(fJ-%{{E zw*fcfNsx{WT3Iv=elpA$GWEHQ16rE7F8Qk11V};ne~f?c3E^BhT8HBpD^HlBcAl@f zh;DxT!k{3mJu%yNLm%ENavSnJ*i?aft!Bgc9<0F~1j6eI2DJ*GrNBu_9i9&Ol;4^DNpE4V~t(edIR&S!p9wwr2-42*rRYqEy zVjpQ5flvN>$iEP(Ui&IgTpUZ|_UlJ7a7FTam!v$)P(^HOk|VI9R%}_X%O2^hwC30k z4V8ky5cDL65Wg=+_%i+1l(pFWnfS)&T34;rHEb3xny z4^(T2Mg!Ut-Viu7!T@WDKJY5Gr}BpF7w7H_ zW#{kJjNv)8R5N+STxu|D(mwMI$4&NcX8dL3Y-~xAU1sWy|3`9^Rz5?sNsGxTu|?IP zlP^;{Tju%Z{4t`4Q~~TPocB^swrGUV&e@>z0ZTVOMZcN{Cr4zU-R#kCQ;Vgb5sztbmI(5ls=qK|?d( zl?d!`7N0^X*a>ZpPcGs+}^#1HU7U=|_GgX9=aYw0%oB6I^oR` zLQo?ez++i7oa`5;9(haox~+c=NUz{R59x-UPo2W%7$gWsq$L#K7F70s>|%)*^#hFn zQ8&JpHuuJC1HBrTIVbxQdB^k{!DELXMM6l1$;4J%GBtc9Uewufq{~t8ep*%8PxJgT zZ}HgcaZ}*5pJ%sciIt!hZIOFNwM+g+mYe%$?l1Fa+Ze1Rly`>H(91fkqO$Y>&S)^l zD9Ad52{sWc=QJa|R9(LIj^Ng8)Bp)?FHN1cOEbTzwGU=ses55Y_?FkS5q5-9<9}BJ z4lPpYwdEPs9>^i}*XYv}aR+iPUB)Mr=dzLo6WwWvYUsj;nW{w4Q{CsTi3Y+W?L(EhKk z0?gg@2vkj6`&TMuIt${{?uu}xblz?C60}A-+267&rEypvm>wdvm|GZd#pK|9g1Bpx z)IacIQ6tSr_+~r?>`O5!TYZk-#+o@bb+yVg= z)4}I^sP8>cO4WOQ1!rM?yVLm5Ov7Sm7xipH(h#`5+W{j4KTYcGC~7H9r6afSBIWFVTtR@zKp6 zM@c0RR$m-8r(Xl^eSFL6Qn`eBG{~`WH*C|`OqYRQ<9CAgLDf7WTTMk^cSQp0Ha+0s z5ZMG3e;Kk%;B~-3_Zmc;m9BOCFX&P5tC}KV>^RpexCd`_Q-*oJNe+|aTEF%yH*Jd$ z6R!Qr1j3hBvaWs0x;`T9tX(T&o5Mfr1OusdC}sQ{=oafJ(9oSHc(Lj$rAe~ZLA3rf zW9hiAJ;9TlKWJhsnx;Cys38oiA^Dz|SPNi|dh(y}`b~z$zmU;Pl`5X5I*MvzO#`aS z@QhnzIP%`WX>2QUXC<9!zcR?#pL$YDvKbr2FnqlO#vkC-%>+8{MUp&!QtpFU=MG&* z;-%p(=1;F*q^6I#@eJrx67ZC9qi2DY9i*sk(*$)m+ej{#%X;4FW}pv(=K)RWm3D{n zI(2{S7;y(^PAB+43_t`d>d3>V?1*dB(oJr>!90E)9}cpS^@RpOiqp9Sb!I=#5UPZL zALWt%2$7ai4*{On%RyQYl4-(6cWEUM5Waa=MCNQX5k95knEZ)3g9m1Mp$p+<4efp0Lumd%`&SOFQH>19dRZ^Wvzb!&CLfpiQ0S55Rp@ zopw(2^)?BUVR9fZ4kb8l!YW)ur;2g1*=OtOV7X+aKmeod)R`!AQ;G(MXQGEvIhJwAOD zVkx695qzw)dp<9Si7S(RgWHf^Va?fIGp1qGM^xq5AP*=0V2;I#CAghE4m__>Q1Lp- znyZ>ZSaQVdhU3R)<-1H!viVVgV8o@^o$0YK^5AO5-h^BDlZ96K8`&+eOS#E&F`&f+c4WK6n)3nASBuGE3=aWG&Cl*oT<(`(zr7-l3xhnh#Lt^%s#CT4>2 zCLPTXXMD&Wm088=M8Z z;pM@b6!n*GmrRJZuol3w&G#5j_4~xr7@c%jm)P|-g9q+$Dfz)~Ta^(144gG1Bzp*C zyfy$LBHuHrhIi7;v;IsZjK;|$qEnXJ+3g8C2JULQRGu@7)Vku1Zno6~3UkXCt#nOe z06NwnVEzisDSW8mhrrY~8Lz`KNIV@V%LCl_v0`7f!45Y}D3U>T`X2KpUdjzRSMe6) zTEpqNSn&(RPGdlxh+2D~FET()qq|AxOMKXaWh<}i(F#YHrsrP_D|LKPO3p-+pIrpY zy@QLuPPepN$zw8bx&-FRIv|zEw@YPRl@`*y2P!mWlNe7bqDj6bt={!t+^)z4_7oO_**zACKirxNC`O{$YwAR-*t`Tc0daXmcyGC9}#SU-asx03b zLNns%&{A4%*)=Kx681y&g%1mJoK)257G?C|W`M7HU(&sYar5E#*Llj9&TaoEP!+KheB+s{8^TLjkiSulw>}Go~Mv6SI0U5-x zEg+{5gb64DQ!_c7=yv9IH7TzKipws$x@ESkV}2)vs2P)qMRT-foG76_j0lF77NZng z&&Qk94Z@Y&8r8f*|D;T58a)Z+Huy*L@0S~oqqd?_|4nzto?;eGoKX?(ToVRK$esS} z1D%4E7Kn#oVK~ZCalkG*mK~O3P&7M8k70J6t-J&#!Z>8le&T)oheU4M-g!BjdwXs> zqpRPp=#dz7SN0v6dJSpdU0={>089WgZ(60U7cc5;>31rK1q;iO`U!bvlY{lBg8k*3kl~ELXGoeH~9&<-B};AaRFj|UQo&9^}f&MJrhW% zZ;86cTvt8L@L7jAU(>k16)$3p>M%YtCUSm*9IS6JNcH8>xu;OuAe3Ej`j805e)koy zAgz=YwePq96tnpetV4K)xherfe2OtaHJXMHe+#0uYT27^%SwIHcCgsMq*{4=iho@o z3sL-q#z9Oig>Yt9R_0`leMqp-Bwe~hFmgC%n3?G%-mHLtBTKSxj4W>n6Y^@F;H0^1 z$x;^#h|xpLHU*9ZoKD;aTQ$$Z;E7osWwAzPrVv!%h~t|^=T1uW1V|HrbywCJI3wgi z9@vb8>M@o-A8?i*S|AWn_T}Qy`gg$a=;FoigNu!^76Y;aE6)wjd4P-r@i>0_MW`<1 zYtJiCJ`{>!%Zp5#MG5}Lw_M6eNt1ohV>?R1Lr);bTQ2V7Ka#)e78rqd|4+lDlpYoe zx}GL5lH10DW@+fn|3enJm?8nwSAq;$9AhcKDk8mrZzBXlMG>Zgao@2faYy2YXs&Ya zK7(B__*gM(8oXFoay6OcC4kz0xiaAp)yN~Ro(eejG!Cx#Ctaui&)_@{Dh9c|6t6nV zDa7N+V{s!kcPhV&3jtzW%GiSD2IarD59e;8wm$9;d1tp6nl%NOF11YZg&KqRhHtCc z2y}6K5?Iema4}0x!o@!|BlMiTQ=^7B3w0C&U7OdjGP&j!W~T6ON?PvY@SV451s8)t ztfF`qE`GTzp+3=674;l?QSKKf3osLAuOK|7TYeM)h&;lv7#Re10{MS-uj4v%^Y<3x z#Q(`Zf9iD#taV-Jh9-TOeAhLoY-=Y05TO3`y-R485IDj z0ejY|HEY61%t!qkd_d~~P~xt!MXLc$!-)r}q3ZN(*=mIXrZZ)fl06^qX~#)?C<_QG z06cVqRb~9r_`c`xAE7&@@0y%| zHiM0gBxy57Y1MX2yOw66rh<|ADSMkMW6_mxl6kcGhyzAaId|h*3J|xV<-uaqaP?j#_Ys;KiqNwrkz*NnibST`wbO`RBYazDG=>V%G54UJw|S)~?ENl{ za|ZFjOU!_!J-hUu2QL`?nJ;nwp;5UvkAS)`>YiQXsSJOvDFW)L0Rc2nU#*k2E@z5g z(G=tS^@9L!Fvxq3SUu=@-O!}V9(kx zFwnazj_2Y`SUEo!Jy%wb{woYf^h=W2cuqgG>>8cmJ(_;jWm7#w8G?TziN7>ley^WJ z(v97ZHPk&r$v#gv=erdEQly#(s4)8hr^?Sya5McG&2aw~R2u32~ zTvUbN3EY2k4D#!4+kZG0b=@Z*@rUrq`mP!Mj!rS2#z-K)mLoU zg+0#(`AgEMiXguk6k$3z^~y!7J|cA^bytthRSkVk$jaJCeh)R9*p!cMu@{lPLUXbT zx=A?@8;malR36-aUJ%^iMTqfaW5HEQ2k|oo7F5BJ>xtAnZN~>^lr7dcL_Gdru_kZ?B?LkV;0~x^(CKP$ z;Ywj&?yZUGWax9kkBrNnuX6xv%_#SXz|)-Pjo*pw89=bF3xzpkGC^2s>i5I^g9dDI zxn1Sv^np35{X&o&DZ{Uf!-(8TTE#dI;`XyjO~>w;Fs?BSLHsq|?I3Ud~D<_FToC zUR;R&Z2B~$6t9I4WAco^8Uf~Hg{5SM$V@oL)wH#a?I-5$K~Bq&F6M`e;f4iWWb)H5 zwqY4P0 z4od~`VQ1af0VX%uGJ7@#YBv#8N+^@Z^o1D~196M~dj&KB;u`MMuNw?vprsV1Z z&0I)9D<`-_$(;qT0Ip>E2WlK$r^Y9|R{?RehiXtTUFf?}?-njEt`;7&hHJ##u);Nn zC1oi+F&*{*5Y53A`Ai2`j1x0yC{B0AhG45c0^Tcc(CcO9;5}*v2`9LQBESUa8VbYo z3)BSXhH{OJ$$J+1$ot{)dyGw#5Cl>&Ib`hL#DU%y8TSGOF*@^#42(08`0;Kq%;`QmO8y!|p3E(bQ=X zS8K1@381LLox2q@Zq=b}2yWt<{raqeyiDo;TBOXn3dF6|elujirvr{tYav1P(8rl{YmIalH$;(AKyQmyZmzmeiHm=^ZM}WO=U`3JW3^s_B#f;eIyPft z#|u5r|Mj0;1gNZw*)yBK>5F7L`};bFkbOa#uUOU;8!1|~ewVhq6T$od<{1G?;ud%$ zsvQgEp64(OG2AsVf6p}@PewL4l!>yV%vO86@bb>mTSXT)v!eaSW4ulHHOhP29(2&> zbo86t>&K`Jzbx=>L&-`3RWZc={{T4kRu$|*<1G&UN)9k7TN+nb)Kx)P=x&`**gbq| zms}8#7UJ9~$sGfu`4u49;{`0==@*+f^bj+Ijm2 zBA~i{#pDYv&z6jO&zIi<4p%aI$50n$uxf?34jv4~Tmz?hT-yJ?A$gjZIu`nYp;T`Z z$+{DCQ)j@?Yc~)=cka5w{lru4T$S;PAs!3c_^mFuGuH3p*6~mT1qaGj^E%qCPb8h} zipks5XFHa;gF2OuURyU;IkI_>i~gak3@OS@5tO6ZvdNyd!?ukz&@WZXodKdYlEIG< z*qFTywl-p>{Q^SUL3-TZ%WL^}c}kz$drPTJTbcD}Q7F<3!0XzU)#cBYuS(V5;wPkw zl4#Hx^!J%fpcRAzL}4-n)Jy@P+vboqVjybfzj&fS!ImWvWilY9q{NsRCgvU;3~~t< zW!5tahQ3GQ&rsclsp0%9*R>UHyZ|5?`KQ&Da5h+j-JMNcmN?2f=cro$*W`1PM&N4B z2~!IaKUfAEh&T+iboBzG`1j-!lbNjIs&KR3Xk1()FDu(z6Rx$=?}_U`^XB9NYt8%8 zb>o$zcney9K0W6Amz)}#n(;?5rG@k96Oh7V^7rRS#~PV!A12`#HYp82`@JFC zwETNoPI({fEfpGP3GFdx8uQUj<);jJSegZ?F$yUpx_a{VP3Z(B*NdoRNcmM+obyDi zx~WQEuBofy@1;Tt60Fg6^AK5fBngs6B+}+vi6EHkqd`TG&Hh9?GDLpjJ!S3KLKEiz9=s zUrp5f@ZLyyvm)i(xkW5_x4bmo`D^Cvhb)>q_QW`>_24f^D&Dw|^YGNAMA-cy?~G49 zwRIbiKNiPPB_5nBB-nV$$j(h`R*K}70!4R#nfF3|y1hUDWDr5q0823SGGo84YOl4d~Y7GBXY?b+qyS$YkU<#cIxPx8b7!n!@# zG|yUw8GF7MG^=}5Qju1kb>AuNi~ffyn!P~}QdAt6%EG8X_v6y>#>jI*ETfAZVx*{Tsu?NV>y`-CSf=Qt#@JXBY8^xTT@v~hZwMpuywOB7FR`W_76SU&K3H3t_Od8M{*<<_q*7alRe}!kP z&mI;|A~TP2&uIxQ&pEc+NRE{wY}3b>lp@rww^u^J=I+`xUjx*gZNxv ztEWUmEgh{DmV#Rqd6=0PEl$=+ogUUhZh{dn@Fh1&h*y=Qf~VJRHFI#x76dm3kCa59 zZuc#owNB#^Un@Vy!cMKIFUdHio;XKDmJ}fv&l|vN=VhWU?aPOE^pnj#J=PH7?{$k0 z-RR`Qr~G;ka)Bc7)_MXTzxZHz=mGn?!Lcv0iBd6m=}kk_n~5h2(+-_yF&mXa0_1mi zSMLZ+EOBr@gur2S>9b0QvdQX8ixrs5sr96xR26K#_E0qe=2-Zo#jtIup}h%}agZRJ zuxw6Xh*CIbamL3iTbe|ikl3mA20i;AEDnioLqcJaO(IwB7p-}?awNvQN;sCQiy^Jb z&~&6@I9To{c(r}r^B)!S0sNxTW^?lBsA80TPLy4ZoPN*~HAePTX;^z8H?729oH%h} zuLAEXC&Gw-Hs;20?x4hCWBwSqx9E_rJR}H`CY0MQs(;D3=LG{(<10kTmIuD82nYoK zxq6&jeXOnc2tR$A0b4!%(?O5vO4HV&)%!QP;^=}B+R;MScLrHJU$`Sb1}#7~NUnpX zgAPBvZk=^1TeA>&*nAu*pphas!XId60oG^g)`B!IVJ}o%`WSS315`=;i%(Ln zs!ZFmIWV89vD-2g69p9RZLWF*SK9P&5>&fHfyiI~b=@FIpU1(&C71_`dQGN~RPd*| zEDqWRC~k{w_gfnmWr1e?>_1a*4GaWo0Qu#Dp7s+cQ3BW2Ta zd1|CglKL>eXPI(9go{;bH3u(%Dg08PAD)ohqyCi{Fe$w%L4V#|IzdGXEgIUBJ^(ST zeVEb+Ix{5HHBK9CQc7U=qg_8_6mOzvos% zRf8JY*iI>wT}lnXjLZJdzKQmhEnhtXx zzWCNHy+>Fu_HC9T5O~=b43L%e>o#7jnCAY`nC+AHa>yVg5?j#fFwVQd4^^DA9OohD z@lN3o(ySF2xwlk$r=;D*!Q!EW(X1w5eIWR4Rw=K6s%5n^D;K2j|%>KZimd zJ3Zwoqnp7qW%N18-1p0<*zQYh{N7yr6x^#WK2*#p(~fDz&tVX3vRVxLA=n7N|Ca$O z1L=Bo$4>F8 zPl8)4(&^m) zCy78AKAGD&Q-Q`m3L3y97L^(hyvc_6)DiY%8?U#4g`OH~X^B3-4AuM`{_oGYs&$k@ zWB)5$#{BYP-jLh5R$Oxg99qA|WlVJhjb*J_tWsAchlSv@G3fR$%C2rF?apHAIA!)G z@gH|u%sR|`c}jCc<2Rg&*>%Kld_K(^ZcT1${vGbz^88KARKo$Ed<7kzK{@Fb9<$H1 zjv_EyG>MX0r{yzvrMhZe5=u8u)wlpxghDDH2$M~>K%hE+0{vp<7fyCdXMtCO)o+jted_+z|AMxfVSbRp4kE%uHO zEWI4sgfB5HW2xzrX=-lrN)}KJy6g0{3%^%vMN!|;pVZ)I_QcvsmDT5zmz%sR;MFYs zZ4zTF4y|@<*#DP+Q#&UKmAu4BaH#GV+VGVXPr7MY6s@0x|EXAX<;^A^> zo8$y*L`0K?k$G&8XYvxsoZ1>oj^=FX1x%CSe15mw1C|C98S?xra(^vOhkfW2U2t)K z&@z3>F_f049Z#moHYfe&{fqX|2z!OP=}2=jPNnj+y#pLl@f{Dycb*Ofq9}Q_u!2GNI9C0pS5EqFZ<+r{{ZvyMDkbiF)=s8 zj~HOq%Zf*ZGt4U@VFXt#7%hIMQYUyZE(GmlMgiQ{iSQ_-M-TsKgyDRoL>S1FUvV8Q zL@ycM$f6_5gXZ$)LE$CTmCT-g0#saWb-^36g=3|Ib=-by?@huQ?*b-#2zPU>ljKkS zt?`$h3 zgVPA_Hmeovh(jy3NcFZ>U9eDlx(B#>@%2l>lMyIIjNN9s0uP1|233k3>;XB{hx`xi z^?~}8{+aAYy_+_?U(hIrObE6Az*SPpwaTG!D;;uP>V6?j_t3WLX$R` zAV9Kt2-E%mXZd!A!qG|8Ee#3_5d5d?05>ap#^6iT`qr9Wt>+=-;+KyM(PtG7sS!)W zCgU=!%^p+@qgtinWQzfnIs3Bz`TL6}HV?L0-9ywib>>~X|L;B+Yz28@fbU4lQaou` zKo?bM!@ms7gLsneavFnReaUfRWa${~LaVKkM80O$Cx(Z0^qozECSp7|7@s@q$@Hu5 zAA*(gEcwY?%+-$3k^ZDgEycpUXf3gX>S6Bf`f}}*vd1N3T5^>OV;L6W{#)SIgU8Jj zH-Qs|0_B!3Lluu7n@TsFHCH6(VBvH9rHDu6RJH93j$^AgJT>btZ9q}7YD4?l1RlcC zK_s&V?7eNj3aZ{kla zmq_1KXWT!zmLQ=0{aZ1}Z2-nc(}7*y29yZP-^@h;aNm}FVAc99ykq2ZQWkHNn5Bcf z7x%ev-*?cql%dHl7lR{GVpZq93F!jZNqRNq6c=F3A1>)PXeh^2UU4MJbUU-A-ul8F z0zs#OxeokXaBGd|>a!9#nN5^i^)k$eZG|rlQQF_TqBjNE_YHw!5l-D{9v-4v+*@U< z39Ih%{8t}w23rKxJqDG~7E6z!aHWrH^oh83aH|Z)4Ogl+HCH84m_Lc@XV?7pwRg?h zd)Pt1m^_vYyq@ts(9T1Va3QPsa0k5_%kU+*==!!viC^3QQB?~d!dN35`Tdca)bcMT zI6g6J++VDmBJc@~Z+5rn>4Nen(@qq-o~=d?qpdos*EQDVY6&H@a=@fp;)Y>apA)=4 z$hWsfIi31Rz&f^G-dizxEHPNwJ_4K^<(}vqu3v=#37U4&EXmAMu-z^vBB%V#NSbc% z_1|V9=@nFkO~uNLP|eQyK|(!V@?{b`8mi(+gr2iQz5Bc4IPE%!Yewy?V_*3r4;Y)9 zvlN}9?4mci=THC;n z_~9tXZP^!xHkbv=LGmq*mM2&_y=cPBt7Si>pg$V49m7;pr5{{UVjjB}DXQ=@k`@x;E?t>s(-MxA8{R zD;auUUS(12&uW-ey@qGYHe!ndUy7G+&pWo3deI*6Y0!O*5beA4LZ}3A%lt<%f69^_ zIJ0JG&dCikt-dN|sSVd%{lH;X0wCL5x-_MONl+34mZDy{PhLp#Ja}9kpg%5&Z1G!V z0K>9ziVj?YeSVP;eRuaN8~KpQ7dFauubV`C2DIGkd};$R*k2LJ=pbi%{(O&gNbqMMK$Yzk|1=y%{Ri?2 zs7Sy_>v7LoDOaQ^mD;!x9!U`F~#g5ms`J#TIfe!Xyc53NksFS}<@c&_IS3*gtg@s{j@15woy# zZzUs3grhjC04pc5^fIaY?0A9H5x4{d!@hNrD<~)8EfUg9c|QrhB6}_@uC~2--G;jX z#*QngXUMr2W3V;&~?{$EVAZIqZ>&9c0QmLd91v3^a* z$!4u#)D;%Nl!C$93uhxq*vdeeUBJhmRv#yfj9%inPiV7bJTjDxtPQX5?r zza_7AA1*>l8Wmxp_#8*1s8nHL0R9H;5_hzQDTo07KLEhFHy|zd*cimiiO+6XrOQ+f zw||Bpy-nNz&u;`MxPIZhlj%kjjx^%o3wVU}cYYPSLl+RWI(whO|6&YeL57`6%arHg z042`;Cx8UTk3up8zMDOIj5un&Ikw-VurEXI1BEW922vvH;Q*!B*TMZ8F#elf&eIUt z9_gr_w^wC^Eb}DRuU*5Zkj7R6LecF9$9q~kd^*bRs>-OwE>hOa^RDbyr#=AlBf;B5 zFAKqqyNolrefR(6u!5^Gy++nOrkBRIi>RqsA}z+YFIxE;0LYE-$|V;_4;eo!tpg>~ zGWj|>$;7Tb$~Hu@$+oB^Dg-2!^?|V@_s+JRVaUZ@zd>WpPqHu2FIg&^lq~8ecO*Ke_-!6HAs3lT%xO;u(7v_ z{J^Y;iW=>kS;gc!V{L49$3{2^u|oJb&KYx!d~Kky@|KgGxYAUVQZSUeY`W+82pV80 zbVNTcgjY&%eKO)+=`X{wTMC3FM>^a4Tu?43#W3cNdVzRAEl`rHpEqutox|X550%k2 z>6aoCU&3IUv`GkC3;4$;H;>SDl;QD3iZ88~JDFy-$*q?PDAX2wGrK;&!Bz!MvZmdxV*+I??gNC*1R89I<#~g84@U8HSiiuobQSc z{Lj5eolOChN5mB358?pL7u*9EH?*dXF^+|<(9Kx5s`{WkP6MFB5#$~thog}48^rh` zUe9NB)Ac=yXKnPuFe!aHOm6w5xFRpjUw=fvjjVqMD>W6%?_#_3xrhji(TO+_wp zg%7oJe7$QX5~S6j8`yB{{28m*lksz#UZ=&_z413wXCjkej-ykqSgYEese&maVET=> zhdH|WFow}js8m&~Yn6>RxZUj+GS~)& zk?Q<_DfVJcIR=M3gd#61@gGdY7vUL!v5^%HlD}s{*e0UYbX|GxqO!it6kf&GlY1Y{ z1=!N~7bZJ&8|qv|c4Iqttaxc9!d-fT)xTP(>%{>*npEC_syc9!*Fk3%9!+fuvFXEX zT2%qo_1pht>&6K>BQD_qB8abML303EowJtsexglayhHYF$71B1qw~}y9Znm&XCPX* zhnMpxCK}}p4SBQFp-%qC8zjE=tC1Qmy7TD=RI{0x1cScZlr*jv&B1dH-FYb}N z;}%kP3i*%=*52V`Fn<#6#XCq3YU)#|)!JZ_E9ACTa8e0^C&x&J2MHa_vZLQ@6r7XC zb#QE;-5FBh*xL&n>3;)NLD<~t)nejq;@!=T+y5A^3|S&BeMJJNyns(U$F+9|S7hYE zqZEi&FfcUtSqk^q5*QAuN-3_|WsG;_{X?BNgKt#CKXD`>PL|6g-VmEvPGe%j;)|z= zyTwWWQn9*>*9cfgFLX$G)JcQ7cNbf)eL-8C?8j=AL0SQNmrI>#BxVv6UrO~~!(ysA z+Ipae5;FwfVS!xa8i@*%HB}d1I+^!&6O=Ut^5IUMi6%&I{0`0 z;F{3_NJ@XGNO$)UT?+@qAKDa~V;t z7}vtXD@;nDTdn-xVMh`LW}+lMLDWx#4cP`-;3g-LS&gJZ?o!pm6OQF47QTZBoGQI(E9Fd6^i4~%~ZvGYaUtJ0tF(vl#mq`dnw{j*5 zUT`wk*`d65*MOo@{EaasFva8om^@H%RQS%1TP7qeq8+ZB2(Ei2-e_p0K85fQCz_b( z{rf)e;WGSQp5+;lvNg8@LN^)XeT^8UlJHe2XB-l9Q;6+aP*g4Tq+^KzGsI`faWum_ zsP5aPvjsPZR{b1$X#$n9K4d8r@OnMA2m^9H0A{fF@igNh&A3#f{T$JZspD8J=Xg=e zC(4U>LcjM3m-X*m-WS{T9?Zex+6p!CnUpke{{I9BGn)Q=l|3dIn&D#THK&cNwiRBa&rC44!8m4KB|AHGPo_UOFBc9 z8wV4Ky1aB?)7p^VXw|)=C<2GxNed0NXah-hw_ad4BFR+W^dS_EZ~Vt|ESb1OjJWs) z9cL?@0RIzmTVQ)E)(N~cW%EL>Fz1yjT47B8Cs)5Wi<1emPo+IID><0On|_DS}Nrh5nK3*wGOM@(UBq-k7g z-BrWzfn2n?W54QXHb~JwY5#Shn_;D5#OqEv6R8>Q<5YyMG!V=p+G-pRG_lTotr*|M z@Yw%yi6Y}p0~nmbR|{chSgSutu7E;FF|hb|%KSCLc`(|cG4Q(X17W$Djn&D00_wXM z4PtP}c1N{C^M21IRGEXRtbPbTWF>~@@%R)UV_Mc1rw8JC!z=kA4{?|&+hdPsDI-bN zW*0@c;+kUeU1xEME?gF(U-p>xC)dC>F`!lq7Iar2fFlH`MtIDFHl{(*3)-*gH` zJMp-zj?2~T^v$jK3yY zij@9Duu_lJuiJROnn~tf9WKSKY-hA7CO`)^8C^Glf;_!S%Eu=CQb&Tcs)XjxHE@sw zqRK3Coy}bEa^PW!3=1Jxe zAkb_&$m`QPapR;rg(ZmW__LrxAsitlZaz-|($VCCn0jZ7r`R?f*B~e}eNznom z0C5@|uGU!5hs2t~K5`tfSLGS!Vj37<-gCI(ecaa5wFa0@M+D-8y*mm7sub#5N(M{B zk*|^~eLOUA>eu=M)8tOj6Zt zqfsjmkJ<}It&?AMbblR?;3$RM`S)U1)grlqhi|~-og$gSO}xInwnadp2KeOyBU($b@Y=qQH8MK)2TJXP?x2pcW7!F z6zj}tGUoFod^!ZV_!?j(oohkG)=WVW^CaVqfTUPdUMR>hq`9uu z9mNOvA#!k3RRUhe+-Ng%6axLWkQr9t;JY~H+rNZPw{_5ytXW(!#InlC++U`9r`U+| zA=C`vfl~F?Nelew^Oo*bu`zCX*cK<2+RvK>N&Yc=m5r)svC`rAtr%F?2;!r0RdH`J z^`-%=H1zBoE=-xOk_-n^^xj=UJT)uwl`?s3b@7g8*r1rxwgK&T=4n$*7ZI`ahV4>y z2~)p@aL;)|6CdBX)q%K|W7PS(ktQvxj{Zh-NNRZ_O_Z#fNV?zP;v5B7zzPF!k*948 zn(%DzePcGUKbI{o)(-`A{x`Tke@eY9D>pdv|4h9Qlz%BY)}pMQVlmU* zS5fZUs6n4Qc3YsqIXu8`qn-%GMmH-9V^HT=RGdNgU|MHRVPSYM4^ULnoFtGj-fBbG zC0ea28|8ZPnFGz&1){s6(YvtMe%Z)+4XF5y5e_}GcVEtTWjx@da%?(irMHr`2EWc{ zAq#DBhf8y>_XUMYuSD#y2QP*F3I!ZQn0&QkP@&2?C1>$>GyfAbhx3h8Q)MANX|rRK zd;+rhMRhp{0aJKTRZ^NR0HD-|Wgb5L5RJGm?1R6kAX*m$TQ~z!HDTa-py6P-P;$eE zspb9(Frph+=Mv#QijSq1L0nywwe#wxY9qL&r*NG$`{1B(OIxh7MZ&hKXxtiwHMeG% zjQ04fu%i~J^6uSk`_c96O_T7=Tl7O(Ir31M1<_Q>M4ZO^0t!2HUdAiW)kBe*&&Aye z)yC5lJF!5Si>5s9cqzKZiRP^$lJ08230 zk$1t?VTV01M_I~b3mU9{b&JY4BhB@NU?xzs+c{L~^t=AW)WtZ6l;YlU26HM}bJhd) zJpM{jl&)2niYr5}Gx7Gd_wfsb0e7_cjzRoqiS9seZ22=L@pJKf3I%k3TBA1 zu!WpSQuY35huvo!Vf)M3Y=QR~YNQN(eCe&2BF39m0tbpkpWNm2qi1lgDxpnG2;T$0 zBdm1BMa=jpG&lQr7SShdI-J|Cw=xTjLdv7*d*@e^EJQbRr(fHwb9ZZ2WdVBSP4fKL zPym^OX%Q^m$^40MOJRiMtvY&;K<`8(w4<}~vlWg~b9ThLQ`96L5^g#)oQu5*RR)eo zq_{&nl1bhPO(D$d;jwrZrLZYxATUXcy13kEXbILGu1!U^hET_{fO}5@*Fs107{y=P1kVGY3XCSZb{xtt2z3I9-A=<2$sz8keClIWW3b)PNz~rrox|OE*vZ`vhW#-il+6BAa$B=cwi00wk_hOmK)>t7jY6YY%t!yVT;|dKF{r*+Iy8>tHy!sGd zRsmtrY>;a?7&A6`t;+kp`L!L|6+DhTZNO$_xEXye)MgoD>RX)BHd3nVi@ zML$%&Mr&h~cZ8yJr~ht6O54Fi^5c)-SWU@?N_(b}2Aok`vSSY&4=iRD;Sp+%y{u`9 z=i@&)uqH|+pFk{f(-OjB<}c_jXaD5jbfJJ1tFDM|{2T9)m^Q$?2B)vK`Fq) zrSF26fPT2up%_eE#&*M8QQ`>-PbDLI2+OMcbTnyg>{(mbIs>RjCv_x19inLXH3vLW zyrp@)Y(nj#5K%vrrc6q&)z45G=W2W{V1ep`IqmqvGEMddj$o|+lrlpo=mBLIufxcA z$L?DZ+kT2n3b-LpuM@ht%iK{K09zMgwMEWDC*$bmazQ8xUC5I`PY(r8Zv<;1}#W&0jw_yz= zwvTEEZL&&=CEOxys)R_PS^)%TZ!NwYu~|gfwu+I(wpMKNkBPH71@3F^2J9bFvO)LW zy+nv9V5REhSFQbLGg@BP93;d;dOrD56wK>GQ<$^1!6A%Gae(-<#U0635Fg-{^o%Ok zEp#&Lk4xo|ZnQ8}nx^V-fP`^X(JVRGl0R~w^ZT{V5H>*>`Q7E6sr^3`gSC z4ByNyD!#0y-1-3L;>O8>BiQ?4gq3#>Mh?rdmtD1c!~&mpvALhSLRxj-)6g~`8)g%h z{lP>;>aJF0n$`iRV+wSju+?+-gT|?AwD^u62&?&{VgZiI$Y(dH-qce*!9y+3;Z_ykMe(8mwZatQ!Yl(T5 zByRVoeMCP6MAbp>A>yFZm1 z#U^GHi)|gMU*iVkbtr3$$Dyt>ts9Ou`>kuQ^vn@HAAl#Yzt7>!0Wow6kB;y=_L?ul zK*wvNW(Z*R7^Otg@CY$BKr%~e3z=3U=O6GIY;dveU-Blf$8?o(G-}P=3CH^Ol7)FI z+cIzJeV0W0lZaGkHAC39av)>S9ZBx1>5|)ius}O-t1ydv?aaP(GPL0crGzUf2L%z# z4Ed-n*M4g?D+L@HDUXwz(fOU0Qi?as`_Rbd=0-0ZVaaemix6Q=oZFU5m!p3cb?|)8 zgH<)oGoq1Z5%XP`%UOsijhXnxasPO|k-qtoy*t9B`r>tWRN-8R_eehv)+42SKB{Gq zt*FI(?OS$_H;OSa;RMZ1rnKj9&0fvFmSQoy{1Io8W)0x5>aDb);y5BJ01Khb@`w6k z+^p7~k5jllxtEz9@-lq|f&&y8EPHzE&)rU3-Es_6<#((JL1p-!3H{!M(Ib@eKsR&w zt0Nq}11I7-a`^Plax(s5XR`F^MY4#fF_(imbQUDByU`p!8tvgwF%S~wNg;Ex-TStJ z9}4TGxk6=;GxA@$%=amCkiF6WkR()FjW`U?caQ_UsvjT3yj8SKT4+fbe?-%YRDkn3ctw$2rYHzWLJ2?kqV~k^VZKex8hQ-8BelndSDfawg-IeSj}^G1dQmr)QQjG!joZm^ z$WdY@Ibp^gyl*YWn~P1|;hs%VzdRhif>_b|A8^DEDRT>STc|oRGkt?2C-UnCZ@@ArgCoNSrMA0VHOcOc7f~qmj~;mZONS1K&uRDi19SMs6Rk^j{)Srf zQv14JE1b;!D4~3xSSL{&dxk@^BUH7@kOeL#_P+niN|u_uM6se{e+E~E$=(pVAgxG= zNRsCV9;XYZ#0(Q=Yo>$CM~Lk=2}T@i}IlCj%s`T=Pu_qRE-!o z#URFNuSdmM2Vp7O&)6Y1c#D5E9=zAP+UTyoWmRKkhpZ83|sx1=4 zKvNaM9^Ent>gH9bAG%~b1`~37^BJAOB&H>Go<9EItwjXeRxtc=M%m{7@kzELWu<;GNy3fzB2R_9$c)|h+B32@!B5( zq^FQOWb4v(t;E!gM=JpTqHH#XCM_QFKrG$Gs+_1#DUJzU zp)11aL$7>>*v&S#YDHI$TjD<%zFI!9aN|M-xJky6NMSX`pSzUEZvgGk5Kb||p7R!6Yt#E)w%Dgfx!f7l5i6GBe z_BA^D%{|ou@{3xeO2SWAUYyaQ!CUWMrssJ?lLvJR;VT#V-$>ZR+tiF427$MqTZ2aQ zPX6uiG6xzZ{^zIiTSJUIg62V)&a}w!V}_PBD<0C;lm=*R5|Ld(=; zLujiNKOm?np^hW49BU z39m?@3}33nlHSPO@}G=HS_sBLRf4~f2J8eSRIkJ3=y zk}eOM$k@e_(CHDR?wIcr^3zGv>Xs<>2t0Ff!}N{L?f}dim(k;T#jMw6fI&NFJX9?y zI)i1=DXC&E(5Sd&E;2ZmjhX61XE#f(#9cKb!Vd@sq7%SA>y}a0Jd^1z1+{a~Utgg6 zSt#*9#fkjqA|?~lgeEF&dX6qx2R^a4ZH#`^M@c!%;|v22tF|gwXqe43#Zz1=^qgY? zl#RyA=502ZdB9OoxBg zfVF#cd@Wn-mHAgJy%CLIAxu1fU}s-R9$-DgVs|1Zz!mLN(E-P9bF%ir0WCsJd1}nz zdP}Q{90j%r_7d+NEJ62y^5;hfK)TMn^ph_cMobM-KzxEd=VrIi2y>nPOTnzT-p6H3 z9YWRlFzvBGG@_7vUt>Xpvlwi$t^zG;xi5x$CW`SVfZzFr%0D&4fLLqd*e_#cf1wL@ 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

`fqct@anw$) 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505004002-Config.rsc b/MikroMaster/20260505/20260505004002-Config.rsc new file mode 100644 index 0000000..b679f3c --- /dev/null +++ b/MikroMaster/20260505/20260505004002-Config.rsc @@ -0,0 +1,4492 @@ +# 2026-05-05 00:40:05 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/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 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 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 ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/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 wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add 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 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=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.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 ] 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 +/ip dns forwarders +add 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 +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/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 +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \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\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \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\";\ + \n#:local Script AM-GlobalConfig;\ + \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\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +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 comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-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/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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#/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\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 false;\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 ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\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 /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\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 comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\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/611/a8abd15c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 00:35:02 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\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 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 GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\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 ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\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 updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$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 :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$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 :log info (\$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 :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$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 :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\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 :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 :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 :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\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:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\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: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\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\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 :log 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 :log 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 :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log 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 :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\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 ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$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=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$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 :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' 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 :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 :log 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 FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\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 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 [ :le\ + n \$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 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 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 ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\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={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :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 :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\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 :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\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\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 :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log 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 :log 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 :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log 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 :log 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 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 VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log 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 :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 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\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\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\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 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 :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\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 :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', 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\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\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\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\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 :log 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\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\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\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\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\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# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\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-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\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=3\ + 2768 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## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\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\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\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\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 \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\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 (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\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={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\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 \"Every Day Set Global Environment Variables\";\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: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:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\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 GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\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 :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\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" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), 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 \ + 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(18dBm), 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 wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/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="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/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 allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no 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 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 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-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 +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/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-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/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=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/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.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 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.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 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=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +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 +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list 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=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +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=reg.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.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" 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" 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=9.9.9.9 comment="Cuad9-dns IPv4 1" 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 +/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=NUC disabled=yes list=NoWG +add address=10.30.30.10 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=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=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/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 +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 +/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=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm 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" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat 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 +/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 user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +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 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy 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 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/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="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + 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="Every Day Set Global Environment Variables" 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="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/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/20260505/20260505004002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505004002-Diff-Config.rsc new file mode 100644 index 0000000..aa8ff99 --- /dev/null +++ b/MikroMaster/history/20260505/20260505004002-Diff-Config.rsc @@ -0,0 +1,150 @@ +937c937 +< \n:global CommitId \"main/611/a8abd15c\";\r\ +--- +> \n:global CommitId \"main/607/82ebad5f\";\r\ +940c940 +< r: root, in 00:35:02 05.05.2026.\";\r\ +--- +> r: root, in 00:05:03 05.05.2026.\";\r\ +3215,3219c3215,3217 +< add comment=\ +< "Lookup IP addresses for RKN list and add them to firewall address-list" \ +< dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ +< policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ +< source="#!rsc by Vados\r\ +--- +> add dont-require-permissions=no name=AM-RKN-dnsLookup owner=vados policy=\ +> ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ +> !rsc by Vados\r\ +3240,3245c3238,3243 +< \n\r\ +< \n:global dnsLookupReady false;\r\ +< \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ +< \_true; }\r\ +< \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ +< \n:set dnsLookupReady false;\r\ +--- +> \n:global AM-RKN-dnsLookupReady false;\r\ +> \n:local ExitOK false;\r\ +> \n:onerror Err {\r\ +> \n :retry { :if (\$AM-RKN-dnsLookupReady != true) \\\r\ +> \n do={ :error (\$ScriptName . \" is running and not ready\"); }; } d\ +> elay=500ms max=50;\r\ +3248,3263c3246,3261 +< \n \"telegra.ph\"\r\ +< \n \"grani.ru\"\r\ +< \n \"xhamster.com\"\r\ +< \n \"kasparov.ru\"\r\ +< \n \"lostfilm.tv\"\r\ +< \n \"rutracker.org\"\r\ +< \n \"lurkmore.to\"\r\ +< \n \"dou.ua\"\r\ +< \n \"youporn.com\"\r\ +< \n \"pornolab.net\"\r\ +< \n \"crimerussia.com\"\r\ +< \n \"telegram.org\"\r\ +< \n \"api.telegram.org\"\r\ +< \n \"telegram.me\"\r\ +< \n \"t.me\";}\r\ +< \n\r\ +--- +> \n\"telegra.ph\";\r\ +> \n\"grani.ru\";\r\ +> \n\"xhamster.com\";\r\ +> \n\"kasparov.ru\";\r\ +> \n\"lostfilm.tv\";\r\ +> \n\"rutracker.org\";\r\ +> \n\"lurkmore.to\";\r\ +> \n\"dou.ua\";\r\ +> \n\"youporn.com\";\r\ +> \n\"pornolab.net\";\r\ +> \n\"crimerussia.com\";\r\ +> \n\"telegram.org\";\r\ +> \n\"api.telegram.org\";\r\ +> \n\"telegram.me\";\r\ +> \n\"t.me\";\r\ +> \n}\r\ +3265a3264,3271 +> \n#has \$Done been initialized\?\r\ +> \n#:if ([:typeof \$Done] != \"boolean\") do={:set Done true}\r\ +> \n#make sure previous runs have finished\r\ +> \n#while (!\$Done) do={:nothing}\r\ +> \n#block any other runs\r\ +> \n#:set Done false;\r\ +> \n\r\ +> \n#delete old address lists\r\ +3269a3276 +> \n\r\ +3270a3278 +> \n#force the dns entries to be cached\r\ +3274c3282 +< \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ +--- +> \n :log error \"dns resolve failure [ ip - resolve ip ]\"\r\ +3275a3284 +> \n\r\ +3277a3287 +> \n#if it's an A records add it directly\r\ +3286c3296 +< \";\r\ +--- +> \"\r\ +3288a3299,3300 +> \n\r\ +> \n#if it's a CNAME follow it until we get A records\r\ +3291c3303 +< \n :local nextCname;\r\ +--- +> \n :local nextCname\r\ +3295a3308 +> \n\r\ +3300a3314,3315 +> \n \r\ +> \n#add the a records we found\r\ +3308c3323 +< ess\";\r\ +--- +> ess\"\r\ +3314,3326c3329,3331 +< \n\r\ +< \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ +< ={\r\ +< \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ +< ptName . \" is NOT SET! Fix It Now!\");\r\ +< \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ +< run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ +< olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ +< \_start-time=startup;\r\ +< \n }\r\ +< \n:set dnsLookupReady true;\r\ +< \ndelay 5s; \r\ +< \n:global dnsLookupReady (a);\r\ +--- +> \n} do={\r\ +> \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ +> \n}\r\ +4155,4173d4159 +< add address=149.154.164.13 comment=telegra.ph list=FuckRKN +< add address=194.85.61.76 comment=grani.ru list=FuckRKN +< add address=109.70.26.37 comment=grani.ru list=FuckRKN +< add address=104.16.3.81 comment=xhamster.com list=FuckRKN +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +< add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +< add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +< add address=104.21.32.39 comment=rutracker.org list=FuckRKN +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +< add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +< add address=8.6.112.6 comment=dou.ua list=FuckRKN +< add address=8.47.69.6 comment=dou.ua list=FuckRKN +< add address=66.254.114.79 comment=youporn.com list=FuckRKN +< add address=185.110.92.40 comment=pornolab.net list=FuckRKN +< add address=185.110.92.41 comment=pornolab.net list=FuckRKN +< add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +< add address=149.154.167.99 comment=telegram.org list=FuckRKN +< add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +4452,4455d4437 +< ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ +< start-time=startup +< add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ +< on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ -- 2.52.0