From 7d840b41a801d1b75321ed8c8713f7c21cffc790 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 2 Jun 2026 21:00:19 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 02 21:00:19. --- .../20260602/20260602210015-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260602/20260602210015-Config.rsc | 2667 +++++++++++++++++ .../20260602/20260602210015-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260602/20260602210015-Binary.backup create mode 100644 MikroGig/20260602/20260602210015-Config.rsc create mode 100644 MikroGig/history/20260602/20260602210015-Diff-Config.rsc diff --git a/MikroGig/20260602/20260602210015-Binary.backup b/MikroGig/20260602/20260602210015-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..3e6641032a5041497a232bbf88173d9e91a7e20c GIT binary patch literal 164162 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 z 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
    j6EisTrXTyx-6^a`JSY10hF%LZsV2q zLquq*I>=X$A^cMG!zHFK0Ty(>t4QN1^zkI(?lHeH z{JPaNEqsxNV#8OForS9PwHM(I1<`tYByp@l+(KP1Bkz>?;feFoFR0)y!%{evf0s&4 zaxQ@Hewed>RoiO<+%}gwTywvJvf?sV@%Dp4d15TU?*X%qk`&id_^VA&q?LJW#FRWF zY?%q1P#d8#@voc8a~$+X4Az=35((O|$~}${2^GwP2*o0Rp2^twXCw`n!A~;=%&G2C z?;_18e5Fqoa{K9ZN1?@@!%=1&b#uKd@a&{09tpJSr$dQDrTfv~@iEQ4(Lcpb_6a>z zl}s7D>*WBQuD&ONEl9kji2!>BaWuPLrHt$Ykb0pxo@563=`~RyC_>$jS_y^CW{R0V z7qKMey4uo|Kc1WBcjfnCD4ZxszQ39^F=@cK& z(oDbVsLK2@RObR5`3mtlu%bt*+%CpJ%fmTR9kSO(%~X>u8R6ZYY)wA-bkq>uh(+2$>5BG z{>q8?W)~mHsG6qo97_UL;=}!vHTHvJStWm}=}tr8UuWW5h)26n|1~fzwjI|#f7A#B z3Q3>jp1tbicg4HY1H2?W*CVzM#A21HO~b+UiAUsak64|ddJ%Mh0VJ2d%s2DuquXs0 ztC2U4nUtEhs}FC(q9_lS$rO$*w+b0=VE@WFxDO?+D>p=f^F)l~aeZ8%5BcX!ThapZ zM;=U1tX=wc`+KlK+Y};LLQ!so#(?3MCs_L4^=0r#NAYvTDn2fg2g(GXl(ZJk3Bo0I zdbV7dgST5fs6vaAo^6NcK4!#FD|Hcz11jnnc^_78bdm(8gpveY)dZayDfa|5*Na$T`B6x{zf z5v8`2TcZF|YA#>O?vsnc0L%NxZ0WfIzMu+FLUHs|`!?L74mb-mboj5O*oum_S0|AbkbFIEa* z3YjG=rC5FlB)*ZX=Wr{eR8SQ5X4%rST9Wy-oAB*DWK?c&t?m&qc?H881#!dM;N$Qg z&&)ECV{p)fby3J+p8i4*7EEYW^es!L+=%6KgW$!x+8jVyu^|Og-=67*6mtaI(%xgA z$lnv7;j$tdv4RDopIC1c&VyW;x-)Nqxr(UvHbrHOdEhkT3;Bw;UW9ykiyE)I9}Ow0C2j7x0x!k(JL$CacB^YzO=Rt>_6u9urGMjIcX_+4^ZE> zsbdE+(k|tYO;fb~ZjoHP$Hbn2=km4DcMr3JBc^IYB|)o`YyC8^6GBi;BCcmKJmR`< zP}w@LZ^ub*wI3IWev^U2LzWc&vb1N_H^@s%ifO+vzV=*P!+1GvAACmSgKV8*E;E4y z&oVt9!}r?8rXD>VBHo*3-)IZtY5ys_@G)^c_-eweHaBNU0|0-Kj`A1>(h6BuZ+2y# zk_Xj{oLy!W6`!W4r8R*Yadm4I_xt16WicAP4gyqgp-!B$XDRnf4!fS#!%%v{8Ge-V zSTsY@J0Ah!@@(?RULe3ybMC&{vK{hQz?tA8Fr_by=wDHrNdGm7h`C} zQ=DXMwVJ%gLw{_6iC!8#ypk!Stv!MDa(7f@Rcd?3M3rgBh}Rkco-8 z)>Np>r0~9~9659kAB0NZ#f1k^sk@z!0X0X95?`UzKS5QS#DOLE9<~)(#a8sGY92yE9I|`{hnsymrTU(PygSm=b1HWV zTmT$6ywLG8*gHB_4Ogr#1N#F`_6T0#oMWAj_}#T1sD}$h*&e6sns0XaFJLsD}{jBf_j79Fppzy!RmX0cn)GJ1YND~?#W zMYcZZP1c>!P!g!meL?wGlmo{sshn;HKS0w17RBIheD^ckzGLYM$TeYyG0N~xBdA{6 ztc3uvm~t*(fYaz|8Gt>$aG+<)#V9EJRl+uwBK#O%ywJAd@p_GQMu*>YRrN#5FtaaW zl!i;Ah3>2!mR?@`%2I+aDxI0B%!#(x83l~8xciWvm>w;l%6*7CkE==%jNocE;IE_m zDs`jofOf>Q5H>ft`JA=6w`wJ)l&2`&*pd2-a3-X&v11HEpMpxM+xJAo3pm%b2WtI_ zQ7lohNEz*&y3IJc+Ct8z1h4U@PO3VpEUPnP8gQ0OPO5=Vnmixt_elv61Rauac&c6jF^8xXzZ!3|J-k53(`BR$M7_K_RzP$^<=lauf>h zr~P%Be8l0dBKS@S68#1*%d0aV+NU0^>7_7#Ebec#=vzUwPW239?<2MifH7%Xr7V3n z%(d1L*=P6>5(GPf`#f1i4624n70TL4TzW z6*m>3wl=El_!ZZHwOaK1w%VWec?&>4eVy1qh$9s67b&-Lp_Kt2xz&@ZfTLABw4>Hd z=qW>lAqv6b@ou`G+ER<`z83^tc&C@sh-%Ev7Pr4D%d#w)WjuT5 z36n7&wrL6Je?{0L@UPauOx!SP+nme7irQ4L4;>zC57@ZwiMbRq=!i6%o~H5>?_(-!%v{dqEe=ygjfXH}h=Ts_0`x@3dPv$7&Jat5tSD7J{tP{<7|8p< z(NIaMpwgqyo3?9IAi)nF3L@5lRgtpjXU`b_H`UoS2M~k(4mWTZVf3937l-;GxY|;( ztvsSEIZoW7{Enk=!isOX;VwSlXg_*CQaQkDx218@!LGI)_&EG&6OFYba0_HRi4EAO z1U8EF{|3z&5)+55B1(G;yJBQmwE8ErXg5gOaDtIrGIXo`hUoir*y zV;4fX)JlLksS~xt6)bWhqv5ouQ{ZP0Ta^&`kjp6)$d&WZAyA@SZtc{@X;md~*JG#3 zL)VLg6$2h~n&KY(n^UX(bU1PA2sWu%x~+8P@xxsVix8f^$C6;^Vt{S?Y((Sew`T5F zRNCTe&c~++RR0SsSvky4$COTxs9j1tzY-rhchTB+^?F=DK(SY}<(tG`C2mFx-CtiC zr+dVA;|K@W1gji2hyyzFzg?xUqj5&^{NrZ1Um0O)){pAv=JgIMg;g%)sN-cTNnc8M z@PXmv1_(4)s4^3pZ(RCysaEI`{+L+)UghVkqYfgP7UsJwv|Ylc_$x!$CWc1cnfmdk z)iz&cfV~Y*s6!BIvq$g?<<@~4;pnoK!5tCrS^*3%BsVa_^WV}j&L6SnYZ7O0P8~?k zHkBlla7-zRod#6V$E>*So)Ylph&sBu_*qa1xB_%a#Q+9T(Gwv=9)KF(?=YmuP_cN& zKWa*`_9#n)+VUKNXk6cJEg`w>QY_DvXl?qqsdr^IK2aql!*em6=1w?EgV|N&21Hn- z1j`+}M=q{eaR?W#4(ZfA;p&w$%~9IKP~C+?uh`_#FPavYfq8RtPvw)ieyYeU3j)dM z>8c>J?L9zF3O~pnzqKG~_Rqrxg)SH|Fm$-I(kT~bv3u1pd1n|mZJOhd4-q%k_~ZNK znD+^v)2ol%MTdoz&<6YL1p5uc!Rb)c=wE9Bc0YvVnR@a;Zx%QzzhS#_cMjLfb9vHZeo~?!< z-950^Ft%*8Q2qO{11T5VrOA5dz0sjiwH;Ux|E7uaKmS8a4~67~pjBsy{!6GD#@BQJ7R=F-%STLSgTxr!U3sW@FBA8xP~LSD2h-Oe>o??M{Gg;=^gv`Q8c# zzSlA!@jfj3pBmCaRQ%Kz;Crh9Eb3p5^^v~*6lM#2Jl9B2Ei3U@1yqe%*zr6|)H<^6 zJ9|o@sFy_%)4?zba{K4++q~Y2nQf*jn1G0`@83jzD{d{^l=A|d zn^!{Li4~$C9nPHQs}A7Z;eH3o;)UgUs~IGw*oZ;KXeX@u0iCVAjIuVxx(dYcE=3qJ zMkpJl?-p~E`%%_MU9RujYNxhNFlkXjz9crq<2&;5vmQ8uwlq<}MqqH^iHLF4W1|g> zCe`Ll<+(a=@f4Qrw5PEVJ@75U#u zBP=z=-C&E+17e>~wg)*72DWj$L5;E(>Lqzn_p~5sBwy(_@+d8M1q}R3*YrIu>hyH5 z6c@~zZN*)`zrvou{El4^o}?c77(H$7oDD|)hJcxR7TA|6ciqIl=fvRh_xL z`RZJ6rms|eQ$zN5xg3Eq;t`7&zJANdpKG`Hx-obVd5qPOM!p{5&qE_mak>KwvZ9Z= z4Ke;)J7gb$^54#o%C{bc5cf&&Wa9BgSHO}R%AAitas;a_j#_aB?o(pesrE1Wt>Lj!l1KM z)3nBCSr}AB45zAuBRsEGkds$4CYDna??mGVleK7M_|tbsq*BA+)Lwp3p-Ox;Al!AU z4D`;mQ{(9-1=MSPu3^Ma7jqs!Z?C5SbFSm?G2TF4y^+ zS88@5hfvn(VFp)+RN^GWv}5lk}eGG8!BlrjFHszd>t}U)}o&I6ankHl-jkc z%KdN&X!rxNBB#TX7yAQdb+6e!sdDv5&E&h&r2&X=P^SR2(euR`Gm5cb>i}{-EMCYu z55}l^Lq2x~defcb(EQ8_sNVoyk|?hmUI}+@U!80pX0M~U!3Wl|!SQ#+kBe@DGm{fv z4fAKTqw#vnj*>@U^fmC}vrl;aU>|XnS*|Jd{k3Cn*C;0LwXpG5&}{}`zQ|1r6?p16 zwJh3NWzIdGss5e9+jV7!K5rdw9P%7o5F5gpGndY~|1dL7gZtii$D4Ec2`=KcVF};X zJ$%bjqJ)Gxc**4|lRpAdl4=fY}u0D?5>_1N>)Qy`DYR-{PObt*Zt zHzFdAB*)*}SZ?Z!Bx;k#J5%Ans8|vuSZz-_ky8lbxoD?KE9v5Sf2KHuo{D`>c*0C| z`^S%!>-kO@@jUL4=sOg;A;-1{f4}2e`t8cSQvT4O_{>k6QX$_!??D=K`gMPP1jmoyh91D0u-BJp%}_~BSV|Juv*^Hr3@Dx}s6{KSNu ze(Lnv+y{1;MU3puea-)=Nl8+~WqCgq#yNedTm`vEb3XI6edRXhpGp`Eb%i!aK8y7t?|sxZn35 z7RL`gnK7904+tGh>*9+%^##gh#khbt2BS`mcOl=n@d;0uSN(9*9&28~FM{L$vN@Tg zJ|~EGLlGt2#=eNe)`-5Ct(176oUZ-|K**P_=ey?$o~<=+qNKq+>mStIwxLk-0h)9o zb>7nd*k=%2Z&_=XX%5o}1yq!#@>TOEUSzUhWXA0LM}6BArlQ57FFGa7KhyGWKHJ{G zB#-7dMAM(2egGlY+vltinz|bgu9GDp#Ve1mtHvke#-eLkIqmwO>=l;@tWUmNXSM5u zE52&KXI5A&P-}<>R{~L^;|N`RmK^0{t6vw9%|4kIw*`qy5?p(c@sn&i% z!3?o8m_wVPaXd zEZsZ>e>|33Wk#6HHD7vFzuy$0-^gMIj3N^8-A+x$^WzGerz04O?mLuy|9*gD{?El_ z5f=-HnrkXq9M+t#mKzf#3{ug>4v5-{6S#T3C_V^`Wf?NhPI88DfxC!+@5Kt1|B3xk zO(=Agms3wTA+vj5)7~~j<@mGn7|CRM7*%8(id7w|vUpxJvKNgxPG`Lu;rMofS@Zxt zThKj2diGvwC{2>7VM%u>;2;0PXnr_qJw^$S(ND<%6LiNr^Eqnb50osmD!o@ng&1Wo zY!KFVM+%m-?uT%H%>4R)4LvglG5UFgKFs+8o&^QtYj+W{AmN{K^EYR`;DE)8x}^+` z>>}M4(2`2Gnf}Fj|QkgyMb&QZ3KcfXEx3j;6s-&E*x)YV+WKlZx6y!dvj&*nLlFjxSS`AW{jGs zKm|D0?r$+-MExoutGYfP%@bi&lHlJQUUr%Jap}aOOI3RPX||7L^A;ry#Dw}nkA!&_ zxXod0`Lwh)CO-?z|Dt)~wIRsg4kw|WvHkwD>3AAO9@4bjhoSOa(KY7Hub?faT0dO_ zB=g*s)lm?~a~H*g4}9VZm0K)@&dyxSjI9?JTQdmz(OvDb zt%L>h)(@9f{D({BcQ@{fy&9la>ggN4Z5D##$E%ZnL1hQu=}gP9?;WH&VBL7tuk>xq zt?OA?^~>@5Ex3Z@W;Um!cnTc94<&Wi-^b_bLGm1-Pgt73X#;HIp_}nQ1$+G?>Y<9C9&HqT&Hap@3@Ig{Dkmj&NUQFbli0a9i%nj}C0+2LyuX?$1yo}Z4t@jNO<+5V@HN;4O{1k&UUXO$ov}+I9-a)4+L;$m}J3<-Ql|1Cyf%Q zUEvuiVmz5{c6%Z|^tt5>#`35+0h(`Er#Xcof14v{%-adY)-ao*F|n7OLjxq>Q8Yqb zg~hwbp5mt07(r`($K7(2N->k5;@U3<))K z6oTt+qUR~EVQ>`v_t4o&$UabA*d|+n5p>+!m6o&QjuOKb(qpL}geE@&_yvBGXTNta z?Q6*?0~E`U5L%A(QWz#N*0KV9P5wY(EGr!WP|_FZd)e4(n0lW}Bv5QwZ58$Zh5KRi zE8wok-44=x;3(vS5W2ygZr{j>P0SN5N&F_e+X(1HC1s%N+BumCQ~{zzVcs2L*X-V$ zEO=(WBhbci!F;`md&bxo7wlmF&}OX+x8(WU)%fYL-|pQQ0X~FNCn?}~Gzz){dmH|j zvIv=CdbQ$x{R*iqZnr1D$Y51sqrS44Hzo^B)H_xbG5Mh|FBx~iXOQI1pG21W7Vw)N zp}6O>5eqN0V26{y=giZY$0~f|(^+AoH;j0059q2Y2(fzG#^nJ9SJ(b#A5+cwCD9{wLf%rnXZ<`!pNhICQa~bJQ_L|g5 z7gfuw*ODL=k z*-A(iN*tvEo1Gu{v!IInwq$Gf&3Yb87Er3di_yAQ2_r4)QG zau!;ftv~N(3H?4tAc*6b%*Xc(d7xV_YdY!l0OCrEFn#2{FP$|)jy(g~TH)Sz)6uUm z538js2zm5bT_UU9|0?SYFExGG9IP;SE!u*ST8tGq$WX>iAhD0Zdvm44$OQgYCc$h#dStCA5=k{n z`}02h&~v%}6Wbt)nn=!2XUhn+gs6&Vr&h_75EPcZ)lvpP6YK>Pe77JWq{3V-qQ$(o zbp-4-j%Vp06bcmDIPyj`07!xpRs|^+8Pq}q`dlKW-2fh4)ot=xJR24R)g&4z@2btS zyE1+2wM+eCo?o5veW|k8p$@vTMSUX}G|(!RFSZDsHGND^d%C8n4MyX#*9am$472vh zCV7UW01`m>4%Q(Ou}E9X_X&i7kJ20|R&|bQZVv3Glox0U&fUA%>wzMjbsb)?YkW2W zq9jc;G+x4Xh~7vtl}-ujhQN}|f9||Nk3yTH=aK%4MW?PX7B2uvCJ|D#3hWx97JSz3 zw2^hUpMudlCzYa1T?PaZea&mmSLMLRW%J73xYnSiHG-wATrmbZNCbcF04O8%52V#aQC<8$Aja_PNGVnwhfdr@8lZFvC@Z0>lAeSQ(3L?`Mn9%!| z*Hfbz=L}BjiQ=l4)b~9oM_(e+Bf^jyZW$@rw)Pd>@BOxUjf4S0^EG>BzN7;UH;!~9 zb~K&+^;?R^++_OQvOO=CrbiPI8#F;N!T4kGzYR_ z*0(zg9Hv$MxD}+y=Qofgc2i1$@?|B=u1Wa zro^Hj4%tMJD`WgW9Ig6NrBfk8@eq8|&VQy-TV3td+6?%NTG?&oxk48snVk(>zLVd- z`4wJZSXKKdYss5jatgmZn%i|8gcHRnW(v%#f0c|XL{0{CvU!_Q?NuJz?> zT1Vk6xI^qX2Y&^=58k+~=%a*m!RJBW9=qfRxFv{#Q-x+ji(OKmy-hD$$YDfaMj?T< zH?_EHf0P`?_BZ_|Uy_nOU*nF?D^f-+`KfKezu~CqAiSXwA(~R_PDQ}*l{Ofw3ay8b z9LuhxFIB`Eg&ZAgJdpux_xL%r9D@u@SwJm>B%`EOP??j4&6>-Ak{|+ zwZGwLTI~fSquNZP{}{I+PxOZogjai^-{RXOjU)rN;8+4ua-6F40@}0Tc4*$_U#T+8 z-nO5!3kzn#BVPC>sAR7Wz)`;2B)YOuuahgCxFkyXThMl%TKa2C{H2AR(};l z28xInUE~*4(5x|<2?~&Gb$%PR*>S;#^oXeE!fvza90zygBk;bRx-naklPNU%7oV#% z&n5-xf4ii+NeKJHA>Q77aDukiYxg@yJTKFud^p>Z0_NZIPItEgE|}ZQ;=W&4qlY zWZP8C)?(qH%0cO^3a21#a!FL8=<_nLy3PJ2@gc1PQ*fKW*wki3Q4DGzy=X%T%j!5b zdmELo1rhYT^NXKg)Qtst{uRz#!k$6!yAZ?aU}iUHJRQHkQRA{%Qm>u5Y2l+rRyA-q z=DPu|^PUHqj*3x2*kuy;b?{wgh}fdI{L)~*zo~=*+3`4vj!5T7Ltyc7;Jaacmy?IM zc7}mim}$NPD?Q|fj%#t>A-pmmIXmmBM;l>n8pG$S32;^ESy*k+^6Wga;}M9P2&o*z zy^L?wLhxM=V-ks{l~^$5bU&AOrucV%3AGJL5YkDb#+`X|xjw_>aibpp=xns^@7SRe zy6+n19uBdK@l)U1L-OtYepu1?=_+)F#C)CKrBnduRH6+A?E7Bf_U2TmZ6?_Fs`M$N zD#EW_0&Glh6lk+J!mT$%$;jq7`VasAvKp|p?#nuVN<87asYs9odORt|VYrGxg@nd9 z7Tx>Hg8(NQMrN>}LJoK>A_|h|Nzyph0JJeIHPf+|P}J$dA=0NBYqjK&+}Tmm=37S$ zSi%maR9v7EwspYAK*x`jd*_WT{4w}2sApB6v^@mpTd^%v7!eztz$%e~YNPh}Rat#A zXy_@l6NZKLHB-%<+Vul9-L4hR!zYP8@FnQ9rtl?RoK?syc7*14!h=(TjQ_RIR6v5@ zunmQcKdm(#kPZE~Y@ccRj!sU8U%Ejp9Pt^5wckh&E|SO>#UX0UKRl9N&-qqK{M|ox zcd22sptymEJ$}P1yC1@UMD{CQFh>0$3xbeMmQud$l`}c2_eH>!-3YRC{ozRX;S?$_V`+4D`v^3NlCi^+avLU zQhKue<>zvi)x@?G&>x6joon3Nc*n6e9E{-jYYfpzzE5^{Kf<-LYYVD`J;5DphxkYrIq zg35akK@d}yuT1Ts$cI4ACOwUiYO_jwRxb&5HqtPPH#dapT|O)qdbp zqQ2+NNJ2E4(1FQ_&smL9HXDLH)c^q+5!7X(6d%Wpy1XdRj#F&`wkQ)-=}F*U(U`;&^~o zgPvp4qbIf8=UV|;h|V=T=`Z2bFuHtc0|2AeL>)+#H97eia@gw|YlAxxY$U&|thjte z4hrW_mf|B_-sgJtIZDO|&5kj+`6tyf?fugPE;rnz=#qGG^QSVa!B<}SA8Lks=h^z4 znEdJklu4*DQIx>YP4o9F&wn~?ib7GH#Bn`iopTUU)Sg-xQTB?1;lNP16Gk2gGVi?b z%xiu5F(hacNHMF)VsWtuinj@ehh}wbtt$84y)^4*Lfj=L!H_H3y$@_4P)^!*q>M?w z;yvyvxTlq*BngVgdlK6vnfU*@eq9p}Vz&SE&gHexulHr4Gu<=~13vmLB)1oZLfBev zqOjVbb+GD8@vwcIXONjtklWM=J=5?7N z5)Se&d(U-7tbpoDAw7Y(P`8ac!%;45MQZj&hd`<4!DpXG$xhn-Q0tQ1ZB*lEYtREz zOX%-HlXbQ*wc>PQDd%XnQ2ewA;?~*msk;Cns@*>z27B=e!up_xuZm?#*SOdfx`y&N zu5`=Rx`LR;RyT3^QubQk%?1`!bfOt3*DndZSd0 zo5QTCby(*fAp!8E?D`1`kCaGMnr*F~#B?ZDFi+ycaYuV+tagV{6O}EHj0_Viw@_6n zY)((9;{y+)REXs)``Z`Hs6D`HQBH7dHVec|g9T)FwomdLGb(36=EW5cHn)ZitZ`L; zgOyyinW}xBcW?U>bLb{nktr=Zi(@t)%A_{hU zaJ7fGR_$Vm#<9$ax4Z7Wqm9G1eYyk~=K-J0IfGI(eh~!N4^A;HYM^^GKp}A%~I;};=%1cY9~ zL%?GYM^`2I++qDXPNot^emzEM$=H@|B-zMaX0$HJQ8wF44_k@bA(o?4ol;Wm;$TN@ z|Cf=`Aecmj7PxTy7Uiu_8+DZR_C|(9ee$dRl7H$GBr>wb)4-kAoWvQUDEj5Tq85hThMbvCN;r*#BRHb zn3jWI_eM0CY1ii0F2*x7zBdtYDFSlZwC>H7(|eY=l;?*!&&|m#XHuLoW};867tgqb z#B8_)?i%*>T}U6%!yagQAFOtnBuC1w1R&gfa<@p3ck^2p*%0Z3Nd&)-@NIf_i-AU8 zV?QWLhpz_y8I%xa*-mXqY!)+!(9d{dghj`#VX{^2eRnDiCG-_=M+b2H@o0K0wS?Jk zl-a)%wBh}_k_6^7jCACMQpo9bJ~G#jD62KyLRN!*M?;Cl`GD%xrLU^#M*a5Yg+Qm&J2HBk$K40wF>ybpRTWELN*_PgMgDM)Y09P%3jM#q0=w zkKbdG2{A77@S+tPQ$24rsrFZyC=2bLRNF#p78X+TgtJ}jrV4Cew88J# z&e%RVix-#WqJ}cT>!Ya4pUhkdQJ#*%BNMs)NGL^#o7`_b+&3SX>SCvJqAYJziHW(C z;i4L=z=m3O{$aJ5XQVXG$5IR2{0)DL&y9`pbld$|No#wDrC?GOyLU)V-0DWeRNUJ?YYnBzw^B3*dCD@{K*I*k%svd z1;xF{@Mn-2b(nl>a%bcs05|GmAN|(Z*d7J%=?v;^!f48atj|lI+kjfAC6+>0r}bUl zjI>J*=J*ljs+wisFtk~c#F5NF74KVBLMaOP@~JlvkZPaJ7eF1q-TF!VD$fJicgB|! zaw||}D{NM6=GNlk6M4Wk!$3Q5`p51)^!wjPEJu?>p(!6cb2**RUEzsYsX$4%nAu!7 zHW?22{bqnER-%egJlrjp?_6e&A9w{^x5sgtPSxSOK@;S8RZ=r7gn4jnSzO;~Pa4&= zH}PIil-X~8H%(L#5paCYY37hcBpHn3T)~{UVM(b=Y|lcuSJntI`ESij73fc^8@?J{ zpqlI%0>^z1iZLDA5$)4U$WXl&c$iS4O^cf)feh#4%9x37;Utv&ulp8dIjps7$&F4< z!rN!+laeyb0lk>oR%UIvT?lgktJ@`UGo*$Q*2cFkJ>APOlJ8@K*$AnK>a+8KVU#3B zzFHjhoHNN@kZkJ5BBdqdxKG8iQj}^coux$zBj8ms6mG&pY3?$`1QBERSTP9d!t!V( z;#$rLI{q^=BRi1R(bg=df`SKE5(Z#(QOR)-=saKKWsP$2R#4JI;sr4t=6wQsNO?}^--duzV2OYWoHJkU_JmlJKM%kqJ{^PzlB#4aV+h}ICnOk0lQg^hJ!>ZolIwoJE z;4^Lw+OgXGRf+VQst9P2NEum8-A|zB+2jU-#tfY_zI3)DGTRIQ&~Ya=X4>N(-qNVt zJ^1E-Kuo}#Y+6mskHzw2uwQjX13A>kK?lvN<+yIDl`o`P{r-MZRLl?7_-=AlpqIjm z%;3fI{R~`Cm5t$DI}NxKqQGFAgbqUygv@Cpo^z9O6tT83m(XsvUR}lvLD8Ks?9=KS%4|QI zsglGmhq*dS9bt`7%I6qe=+V~Dgh$a=a^*mo5RZV~k9MnSUuG53ce@xOpfpJTQK*Hx znTTON)mvP5T;sJyx6#coPe?Vl46Y5yw5Zx}Nj@A*18zr>iHkElTk7e&uQLk6?>z>n zbDO#>jt!8o^HZ2dCcKPBrbeos_l8tY(IG)5y zWtyxvd~eb`*}ic$yYaF%ruQUJ(^{80WklTm|M8LC{Q1}!%a3+M&3=~eqC`gBQ-d=@ zP+A55Okb>XqY3N!?H|awLFK_Y8rWy5_w%RfS_P1r8ht7M_R~zO!SnpW{0>jc;r=lz zVu~yk-{35dsibyn!x|f5y1AeyHynFx$v;z%ly93p>v_o!!v>fX?P7)#sywYUQ>23| zOJw5cJu%~KCOASC@k;h*XIznJcJCQnW^2xu6?Jo*gt&1@sGaGqcXnI_YyHJ)hrp+N)2SP+OfZ^u|U_H*>|^8nPg z+#!FtrKd?Cl0po7|9^@2ky(Fj8a$9_pe`DKE*XdzBPAmiFIA^RxjP=%cN+i)2$l6| zCP6oV-uMi)3Oa!I5l9)&rSwM_&29(xcDrbz$Kd`0s$d0NQ=*|hMq!1yz8isU?7U}n zTOBjyuZ0X}DK3G=l$E@*HyNBH@_HF`bl}01b_OqXBUR*x3*J%*7VchDOD^WBUhk~Z zzBf==3jz}`ks6+xvais!M@Jyy0lsk%UZ&UKZcHFNE46@@Eah}snt&m5ptFMlp^7DsQ_6>q~C1FT^h~z_hxotJt zxFDEN>z~0J8#>p*A};3{Ca?*AZvFZ!&k3L2B0!WvLpE}~-O%)3W`Hbhq{ao7*P2Aq z<wm3=eoQmfm zClC<|r24H81x^R6At&Z+P!spYu$b_(dPI^1cmfKD**BI~&;Ryoy}zi3i$eimgqay= zVQY-V2fdcr+GqO9lY;#@UnLD<{y&L1R^wyx8#K8OHtZtg<3|UDJXEyc9?uykNkXln zj8r`^`_dcB4ZrOn37*ijMNkjC(4liEACO3HU>=}?!s6T<%DEJOc<%M{x?i}s*?hL{ zTm4r#iaV+xz12~$f|8V0R9)<9hy1A~1|@4A8eTFPE1x#!q*zEa1D9!!=_+8s)fd3p zp3|)ncgxTr)}Eg0yOl|H*eG4s4gT1yK??>9UI{8pRi*+<58cs01k9jqM37n%N(HXB z7r%~KlRPICiP^2($yfJ1HsOZ|1u$CVk#4`mC9V?&gvX6H&#I)fy3Fn{Rcd*3Dm5YEg|`5Wu%X3@J#YeWs#!4=Cy2?ijyL|$;M_cO^n^runjOGmw#j6^4XQtR zr(Rr|n%vAGV2rsZ!K$Prm)@S$7+5ZciuVl;sV`d8dWUq;+D3+e#FX=-^dD8WUDfy8 z64xoQ=A-lkD;3Hh4pwwS93G8$?%FgNciG%U)@8whSf&$K(ZtOQROocm-M`MBxI(I; zJ8QJr;(L?$2kn^+@pH|xL?XoKa9MTwaggIyRMWWcLS`g zzMPaL2c`h5ab5~c^dT$@rtwu$K!c1TTh{@t%fo*Y_+)dpeP!@_^`Kn8tDuK@FCBv5 zD!HviSmbFQpmrU_N5W|inL+Nx^9TAy0`%ePB}4c3&0$z!0`@?}L?#{9v4iwxoDnEZ zzv$}50rTzjXu`Ve=aFY?iG+lLtckcm{aVLMtAs@-Z&xmqI@2)WL99$1A$C#aCny|x zwvmtVVhKo17*3~2;B?kBtA43|Mjua+qs?9UJOQU9tth|%H*a;N0xu)?0#vE1aYshK zp(|p_$%|y_=I^by);nt7cM6ElLJ|7Q%Q5ANgCGKv2#FHa4WVtzt(G_Y>;R6hqSje=AUf_#a$0D+4`4 z;ASrzh8G%9v75#}Y?x3-N+DaY*D@)1jm9ogUW*vGG7}a8zd!bGh;{D>C_eP7SuHTB z$yF5}eyWA^spg0~)tXk)k9O8`3PA*#5j+2{2h=qxm!Fp?-OIyV`^T7P#$*+XJz2XS zy~=x9!hEBTjaEFE02$A9<7c%lqCmicdUK-8VWWzQur=!CSE(Ab$piTwQxU$Y%Jd4@ zdVxzAU&$`1g46Qj7e(PsJf^M(pZO&7K*pvY#9uzU?~#a9_9J6Fe)y^L)enezj9)K% z@tD`2@TnvR_>q{3?379T)o~QzK>l9ce>&Lh^J@>X?v<9bHL;t!EJn%bC4Vv`k8dw0 zjFp~qI0e{)@Eq@=xsqB~sXT-KVR1ufdnAAsVK%rVYN$+@nJ&9lorj=8Sk{d7qU2Qt zu-JH;<8Ukoce7XTmK=_xEq#So?SlnnuC+Ffh6lm>rVI&|zl!EVhwx+Anh=^P0;5|# zloTG?5?25`{cxMR>g=8+f#R?yy+c32vvz1A$(DB?(`tWMwg=E0<=^veSZ$vJbd9X*_c5P3Xv2ELS#)4C zqBMRqh79+et&!A%^JCvlz~gC}^=w~3mCwnk)NyGBNNx&sru|GA7CsRz_3@E$BxzgE z`n0L|>6&8VEbQR&YdNa%i+L$DizO`5s4eJ!dVtT_LAq1>^8Lcu4?x=|m|=K+r)d=k zcn4+A{F+kzI6G<+Tn^)0c)35mBWr_tKg-~`cY10tfm$mg^~%Y!563tZo0XOIbp|Fj z#9;QPj!7>%9T(gKwZV19k7-p)siHz|#GZFqiuAf2n_?Wl&|5TJLGE*UHZAa)6`U+@ zEz?kzDEW`U`Ec1Z=nh?Qe9A24E?>aGR8CK(TxB}#ePby|uOA9(bNSB<=nDCT-o>w1 zoV)o`wFYX##cD5ATrMjPF(aUM?FOvyT(y|}b2XwgPU>n0!Nv7FU6L6{c)3Vqs4UpZ zEgMy6{bzwG{E!;esJI=jV>O{UMP+DXiy`jTjq|fTHu5hO<=>E0`*(5JV zJS@3>h$;~%+XT7JCjT{y+HJ2Xp&M+3w{(KG=uTm}T60l!`bVR=zegW*J->9b82myA&#L zoB9Y=9mn1vnX^6uqAY0JfmsuY?tyo);$@Xd5(meR@kOZ6(qiR**H~%#_f;2tE zVV9(k>dY=#d=|&y&i)3vGe6jAlpF$7faUG~c=Y1w$j!*wQMM3Y?f^fLPVOEtswWHF z`akMXHMB0a9rQEfGmwkOOn%$HaVLk`aFyhF`7|uhCL_5p!>^hi=nHX?4WQ-AAtsgH zJz*>Yu56?-emq zmmacT;2$Qe45Ega+l`Gz(&d6(E5!uM#4v_kqCIU0qYkk|FU#`a;J$H33-hwz;2L^Q zbr|80=o2HbIqz;PCvgR+7~|rwbHMWw;qr6O7D{2^)Jh1Kp=yZggdrmq8*#x-c>r!E zJt%5$#MopXfLPrK8RdN1tj!ZIw7vq{kVb(C@Pi{PD(?RYqtwCOqt!0~I(N?A&rwSG zFjD_`bB&QV>F|<`8T(aNqkQ}#YR9$Emt^*5+IA8_UV|PrNR90H!lWqEwA0{s%0wi! zE7o|$7?8|$!njU!zVEXIz(ah^2Y=MQTRa@12n&H;l$!FyN~4Xz)MH$-OH!>43eEpg zV*#zF?~c7J&xBxZ-yFxyNF};3zDroX33RVPv;AtkqL~yrcWx$!vo=a`p)s4FQ_Ht8 zV0<~YW=2SViuHI9<8Z#0RKTSYZ607iw(=6Z8(@ov=u|L^G~r?$y>R-$WoJ zw?O}I{@e9SffSGajwd4nyuPMg9E)^!B3X=RzO?@m(O6s?0C}s!G-l(1b1hE!)v&B;3hDbfEXPE{6241=;=S)u$^4(864?y zew{afbKjf4TxSuYKf#J~J6r-(NV%39+%Esk9_gX}2win47k{@Pe=mD{&zpSK7FOk6 zQYfn5_Bs)@*l-I+Kf*+@p>&H8DBk z%5or_*Po@-iSE?_-l|$AhcS+<^9?1aiYWO67C(!4fgXL6ULjkkCVUIZU-^IAPVN3g zODs}qnkI^wtr7}@kTwBw>9;U{NM=yDb_4LGIH+1#Qd$E-I-L^hUAjm&E}#>Vee=nX+oKCOahDM#tV`7cfQ>0h|NXBRSlB zaseCU>x_?UeZG?E_l^{kGGmAODJwr)@M~UPs=`H}Pi01AcX;sh6V+oLP3f!TGzg6i zSK_3@X6d5B5z5}G^bpI+4P0;7oTlnG$Wl#$jjg|ix@z-Q(}h*=-%>Fcyer(`YkK;Y zVNAlw6zDg)w7dE26~tXf=1(GuZ6M}Oq=~O8Y~-KSuTjg4xk#|BWqF(CqhWHh$IUsA zCfLSBG}MI}9xa`C+cK71kM>Y@eO8xB^f?+sy?jI9Uwg)$A&ulz=v3^F`x-%zJ2$npZu-mU z28?6?lzp#HddRv1e~wT!!VM90a(PQUP}Um1WO9 z!HzH`*?U-I_jORsm}F`xc%!bzD!);`gTIOR2@NrE^)nVIloS=`@0jpwvx_Bw~~L6w(u09N^UMpXa)vES3U*AUEbd!gwPTz`UTGy~Z{V zhbd?VX|FJxs{u09W6T@2mH^SUUZr3%Auo#z0!#F1tSx8}5pqfrq7zX8v=^)Fz5n9$ z&Q)i&PdPXlldM|SZ)X!)C#(-PV8bJ$2!0E3e22F95M1D-^d%U|xw4)I{;B751_T8N zd<)UkdQ13!P6B$lC8_~sd|!RM2)}e9hB^mbs`aCt z;b!#~WM5XAGfIU6ke^{oS7V>YG(s~ooICs4@~9?W7EQluM{aeNm2sa7_$MXz$9BF9 zylhTL^vxQr2cMjZ+kwtnqT6CzzWq)Ld{_56ab|50#hd0-aa?t+f>plokbVsg*SGzdA~%I)sKs7!|vX%l|& zs=HTBq+qzKKd0HGuQx+VX2Sp0R@ew8-jpC_K?LU+U(cX*lI1&J8OxcX zG$|+30c-^%?WIO#X&S*Z?-Wvh=3ZjNJDvHldqKVCAT0@f8VBF}zd6S;L%gnt7Mj(F zH}03Jc`{}Y3*u^!EsVhm{>ddaq8am2ql`KffyidPMBJ_Gn?&-{C43KVhzYgG5r!on|e`LzVM~V~vWMVD^}6 zw3CPka9ucSHKo?s>55KLJKyhRf2(pVluej@#e2hql$9Hj$w0W`N)*Sti8X2zcZm9| zQ<((DyM}#!sVE@Fea^XZmV`VB5Ec1q>7U}-^L_wi9L8B1J9?iMP25}A1)A&-Pfc9Y zDxm9cmv6jAy>I{-W|L4xt!g{;{kA2%1C(NTpQy)^*+*V4r?ZeKtbGm_E=E2I_adm_&(RuIjH5qHn55;d;YtgO#tYGZ*A@Z-1)t zNV-cX!Vjd3l}Z}V5SI94dj&Pk&ef6?-x~|VKYS#PywCOf{8FY=aMqVgY$gQq<7o&; z)EmAQ+XQ2^nxEA~6DL7#g_x^36~t5LIt0z9BXInq|Ft_*uC9D%Z)<-#b-C<{ayN^o zigUy$r2TJwIVImFDOpidpqY32@i&|<`h$I0%%Ky^lyOxrt3BJQ`XDs%VIAlqyD%rL zwdd~p0t(eIco)Y^rsch6>L`52(VFT0 z7G*s#1Y)fa=oRI><6f1b0!^Di{X4m)FMhSRIv=2m0eq6*2LiR+2YZ5!&F43Mu#0iL z>^sXKLY2U4VHsykV=+`oPbV=~wqMz1R{e#r=Cw|T?Qc;O!HOTQEcNY#Fv5oEBbF8{ zd-_olkK(7t43@Dg^K(}`CgiV``~fdto0qxo(`Zn_T!~1M zi;{Coe48amr!RX#q@$2iB@wP`2%WOatf6Zm&=69q|AdKjYeqHa-J zg$gyb^(}f96w`09b2z9z(CeD_{FG&lX;kl3*AkE*5SjsHr;kVM&Rw1?-Zwtu`S;k| zlCV2f^X-ulv9#&Qo$V>~Cnh`HWLz%0c0**bxR=&8Ub8_8T1HmMWDQlp%35XSmN7{J z6g+5CeS%R^^!2de7SWprw|rVB-FEYun-7kjKd#9+ub@|9)5$?cS6}>1i9!<^mL=Wy zkVqsQP|ygcgzJ*|F9T3pOR0E|Ye#whUNUs1k1ORvj&orf1=rBA-rzBDrf-=(A!>fm zSAus+2@NCD&w~uqUdV5(dGP|#cR+7^J8JxHn2wl+Hb-VGv63J$5G*|Cy8Z(UdaFF# z%5?RJMG3dxXQ2Q~6qRtIe*i!GpumWI7a2j3q-ICW0dvYYb@1UYtWA)6tJT=+xM#^Y z4Ht4iIfs)rt*_ZmZQF9?rFSU(N&L%_dO)yy-JLa;cc|OSL7;)^Xq;);>Y8BB#{E~B zngS`$DOdXhMjXrD$s_1R*z=6}fg$K>?McxXw25Gmj&MxC9`oV0^s96x0tN}>3JPLB zMPj>Sb}{(@JaCiD4iD1bW$~T(E!D-+oKw;WE@DVcmfbL~53C#Ntb0`_o^UxJV?pYBmeEOWD z<*7XGXovaksc7)IKid`7@LIp%58mi+iFF=cySBhGaG%Uphf zq1i^SnvOzm&H3XP)}1mA4*rmQ&%|YbE$Yf(Wz@al>@eAs=h}(?)I$W3f^E;%$tGox zyxy|zg89k;JS9v_L#ETeZ_5aqcu~<-kX(8uW|5}ub)ETM*&q!HLf&v7rMQ>{dkkWo zgbh*n({xL|4@NDhMlZ{b;S7Xx*wI%ob8@Bwn;JJzgDwjgVl;!b{UbIy*&^v9YBcsH zm1@LR&TLJ*RAJohR$3K$hdb;Cf?}y2=AXBUi{P zJiwSNH!iA+x-XyRU}M*BvM60jG%fsU>lQ_FF3(KZoT00mu2|$h92jT4Mg}3<*H)Te(~?Na*GD`)thb4Gz$gKa5b1K@c?Gn4!w=ng zz{9qRCgcYX#f}+Rk==!3qmv{Tsc-yCOmzO~98C{YUP*zkEi@_<9F+%1%4bPh>&Z-I zI^WN#a>xNmarNOj0Rh8si0=*D7m8w)%;iv)=?`76letQc-k5~0%vsimk3 z_%webmw@3tjQQ9)N3Z(9DV+IAp~PPk<@Opu2e!CFlU8ys-OTesbU2?>;wi$sXnSB0 zPy^5=3?b+qh+zZ9V5oBCVp6oa2d$kathZQ(A|arxl-{wJG20}K#WbN6fdcA&<67HV zH+v9J@5wPpjn`+4;Q~LhO8UJ?c<%0c50mZEIH33X;w@KWjWA2LJu57iNhi~Ha6I!k zy%lDytwAtQZRbmPxJMPsf9BV{R+iA%j8{KcE0g`BiBA#wRk2w^xG@>mf(!Oz-^WC{ z$s6I$i5*-T{f!$b7IKx)U{N`(wk{I+&eKDx7F@dyK*#L6MG2GH<0ye_?$&%e^MGwBRizQR_t6v{84dPk~RMch~t)q{Ba zd3WtC&mDSe+qX532Ci#b0JBh}bFl9EF7WUDGTfIf<5O^5BM^ylMw=px-CLHel6@-9 z4e%%HD}$sG%A>do8;v|#D+U!?F#O8YLRM9+a7DY$DE#qe4DdcjH-6C@aY)9Fc9sr% z5Y_A;ng>QY^f+Jk%Mxj>BmXYpdId`ZiE5r>Ot{hZX1;rZVGHtiwr5#M#v?9keGEas7PG?f{uQ;3!H6?0;jt-p~`0KR8 zk43J*&$mAy#@DSjUr1U#K~AkWSuLsWa=d0M4wHS>;qCoQ-Y_=aMg>RiY@20Zn+akf zKd~*rAJ&Kzl;>mRMaY*n^;I~o z6Rk1Ry&2`LcDls=%n_J-+ASZMe!ZpNblhDAp>Z_c0!3S1!MXVLLr;{Mv8;UKcAJ~e zeNrlN+2S0m$OhrAU^QLZi_T!|!#R6IJd#(~yS}W??UYW*K_qikMTdXQR=1$Tvo4 zq~PqltK9q%!4}anqva(G{;RSp*PRazfYB#7l-)>TzYm1Iu(wWEc|`1gvpP0AE+Aze zDu)Z_Y(D`{lPm|zJ#n^!E}rVhmjolv3R0W<0KG2r)0bd*M>l|&x+a9T~}L3gp_d@_;qv27%Q|1hCK=Rpg}v2cz+ zYuJ6ijcE17N8p~yZXpOW$2d)xnhBOoE+gd-((L>wq*-V8s$2V~Wc$>-SjxYM@rb_N4CDs71o~#f6>a2R}ZfoOZrT zojj4Nq69u+lLmwSIh!(&4E9Z+MM#==9 z00|?e;W!U9GZ|fJTS)Y6Sevx#Tb`tWYQZ7g*+7f{=s6#L6-+E_P!a=E_P-O=-@|6N z!YB&Wg*%4ac64L7@6z^T-K#9RJOd?H8`G&A0$ww+!UqF9@O4X^0#!=R`wb1_U+9C? zaJQlhs@AACFErDaTb?Z68F1!r0r5QJwRzBThWd~+fop_qt$Pp!p*wnfR5D>*uEBZP zb$zrVF>>;Up7$Li==-#Ez|G`YmpJ!3I@oX4&kQElZA#JTNlImV-D|?)MpK zp?}Vb+U7F1VsWY%_DhgK8S}W4GVo^A0*T1zKgnOqJfoBIw?K8uLc=C*3Tms_(k+JL zR=o01-N`dvUmCFd-o8hR}Y7l1%qk|&hZL*BjEX@D9D*qt#c_y2vEl|n?%y`E+vp!WDL zK)?<2_m4t+Vl#P8@6|}a&R{j&)lZZTFWg4ODLy?S5}==2d`#6gpQzighF73&=oxp9 z^JN7Dk6J;ohb;mF&AyC4_0=M)lN0?*j>UK(Hu>`f3Tpx&p6kL2{?j?lv?V;e`H1(FpVdG^UH&ju!2)atRCM5RLC{Y zteqG9(k{sh=aLwV^(gszy%V#0FB9mE8&n5Dk&fc_LY3zGJBY~IPmRToY6i@V39k^o z^HPWZq{tg#-mzIHv_I1pIE`+)$}iS^LF)tXD9@)VbDQ?ihZitI$%3QU7yx8vKYdZ( zk%eDyDIwLrMOanmwt*Z`IAA{NvX#-5GY8_B_l^oUkW7Jl?0Uw;N?Fd&#pG^|*Zl47yT=69rm zXlBpy!1X$>=+e$@(SZK;`bI3tHu(O!)FHHSCfXw^qo zbsMdT`OacWlcOfc;Kk3rY%`w-vJ_#R>X) z_N1Q~cT#qEcfY+p=hFl0Q^CX8o{_Mulsb^sRudJ zJQWV^{Ikz;UJ(3DLH$>-a#rTF!bEAVgLl0goFm*bID(~}Up4Prxy{KJ9rB08R_MXd z==R_f(%)b*u}-%!uKCI8cT^apwThtU#R@*xbUgf$r&}x;K5j;Ux{fSV<|^cw#f^G* zmbphdhs0-D)r5`QY*v>Tu5DYBSUdg)nrOM4q=3PZUbRZ2`Nh;^fJTrHpF@*1k*K@- z#Ukl;2Ct9IiVMQ%!;(=O!r{EEkNe}x=ueTZGHid^ROElrqr_&Ro!5di`yA>{4RI!rDGi-hRZ>Y8rW4^N8GV(-f^q==+~!3>XBX$+XwKQ7w^QxQIk zHX=mm9-ye-7SzyhC-@MHV*!9iUpcHYqM~K>ungd%tF4dR!LyK*S*LP%ha}S@)eZyf zkz`AmqsL-4$oq9!u&5t-F|xJ=@JpJR-FW`uOCta4Tyq1N70#LMmW8r=?8;F5-l*D4 zmh=)ZU@PKeL0;n&45sDt=31g=Pv-}V5Qh5sPpZ@LuD8xCFmMZ?ai$N%8C&(nv}lOP zJh;+z0o~QM?;-!E&#-ruXD1l6zs@mK=Xz}54XmtLt(89_oYb!1hOwzbjj&{C*jSJL zb)ePB^ap>B(H~5Z|F8J{)H|AhmVZ|?F7Tkn8RS8F_VOvZ$O*$9A^6%mSt>XNFPpz? z;zcRA=>p&?jjnO=gJ`Rf4vSgS2>WVt+t#)=K!NTunGv-SxOcr$oP8J~;Oyga@u$#7 zI|0>aFP8jCwTf!qNus!FgtH>rXWKi(*t4FPBSdXON-fQP3Jz-1&_*)KKl9Pr>4|ZE z*ANY>WV)VW#V%bxpG3*!YcBuh%uvwj&QCTTp3Kpps920z6pWOTa&-3>?%QGIB-i0$ z)l~=S6-qJqhw)9~PyWYZFsqk}z6koa+lvOX76+^&4V9&EwU%iH+Xd}OX#NFyI);rF zV$Gy0^KO#)qtc!sm+pQ~rD7uGd*?msmm~%Rn<($t@~T562RQR|xG1HoIn?u%8ZT4f z^JsT!kXu+<^#s}3OTbc1hP8Q`wA@N$UIRdr!9gx|X_%K-&9&$abw$FRLa^W^&IE3a zW#W$$i5`w>ti%dz;RA3e>c~|_08Iie)a)5RXY%bCr!yHhQ&9EEXrgR~lc4#Wp@X#D z9Ou%2p?!jNde^P-t-a6oZ^tak!QOvZA$_sCiC3@66(~O3{!CyCEPL4u^5~X6#yJCw zYe$fWjgLz@fC-9<3>QI^qLmE1D`GUjBrJzJ`$aVT0#kg2D6b@d!XNXX?~Lmxf^ozV z#^lZ+!vh}27~Q`M{u0t*-yrYRHkF+rV#}RUbH#|=Eh|czCa+3MjJXFd5u|$GzHf=f z=9lmw?|09S)unVf+}>iIW}s(f;mjPTq~DqJBedP#$w0BCZqFYwwR}kFJSGVA^bJ*s zgVGp*tZKh+oW*cicmIs;*5aVl71qkPoIs2V+OlhQetno^)wu~cYj7V99`O&DHGI*D zt&#zV|5#gRv0}IevSsY1V8PevL+g>+tjjr>3g|Fc;O`4P-IVC?NEFJDdwF^i8*>^l zI*6pU-LE#)Py9ZHPc*huN0v;t5YyTTJik0Bq-HpeNBmJR(oU-dF)#;-si+b~KAN68 zVDL+uhpotc#wd@jR&W}LIPw&rB`6=OKx3Z7JL2oo-ki1Q^j)ASeR(m)CX_o^XOY&6 z0%1n^%TM5!_;SssUJ%?nE*Pt?#xRK-LBZSJNztkhc)lwn8z9J>83XP=|KIYvv=9lETQY-ZhB55+1X=xE zV;3Wsg5TiC{r3nb=khhX8Dn+7*3`FSgoj?qJajWqqb?oYt?rM>AK@-~7YrzJ2PEsm zFdct}X%@xc%5qmJyDw%;*_vc`N148J*G1-|@!#XJxs)lyJ=H+DlHVWmCQL3ljh#MD z*3H6s@22)>(5$lH#v z@AH;5UoFqtwCV)Xbq5;>?Kms$_>e&0@e(DL9L|e|ws!e3FUoTSN5+7huzN@Z!f)=p zIy{Tl+|09tJG;z=7Csv4vDJ9=QrB5Fpx7tLWwZiqBCCMrwo^nb119u#Ns3K44M?R2 z8Uzb()2Y=jX>j!>#JX93DxazFSB}j_tm;Ud?ysYE$(xqNo?fC`GMoU_bw|xTiV*lm z;YPU%R||i0Finb?b4{}vizzC+Ok#qU+5@!0uN!0O^P_qD*RqUa#iZQCR)Zn)W_Ax3 zgrv_f<`90MCt;qyd_)Mil2e-;dk6-l)Jxl~k4^#`b%Q z7{X+-ZvykSh@Kur3iv>IlQTJBnkU}5Y6!hGNJ%|4B+=9|QCS%84ac7B1B*sB(1FtN zX+oXXN=27+u?_B5a_2h>lIf02UH1k8uhjz6W+2xCFwaq%{#~?{AtaQn!waUQN`NFT**R?p={*nG-D}8=NZlV z7z|unT4sxVit^lL?bBHgFUnqyz+l_wLS%ykmYcqhCSa6D&b%H|E95QZFlPkCLgf8A zWk2Ef^vDQ2UOUC#Vx3vdYC}!=i|T4;H@WII^_8hJP;rFLZIH^dA3%vy%%`acPATN4 zhI-iQ(Qu_G(q4VJMwPn$tCQ1?%X~&69!sunli(+kl3C=HZ^qRDuS@APy27I zf6KC^)MZY6?}{Xl?-3~pb^bmmG<1@LV}O7|)RuQMYVD!~e6DO5H7c`FH;m1=J7ons z=?8ur&?d1206scE_)Eb_2)a6{?giXP=1DCv6*cmV+a2N-5?x)dd#jMrvB`65!?>*4 z{@mV!2|Tl!m4`o~=gbPE|0zY&7)B7eD^T+{ig%hsH;zGu?H+~QT#QBaur@rvticVhuD$^-ghGM|j()=iic^n>dVYo|=wJ~KXn zgO*m>Ko-hG(IYe(<++Lj)oQEmJ;5iPT#e<%<^@&#oiQ|}){apNYjq@D#4FSVe>zX} z{4c}MC)U%@?oDHW#J+~kIf_;}&cXgw;K;Bx*b)!rAZ}}K!Q?L-^mQZ~iJEDw;RG{w zk>j5smI%^ykgr3#3zoC=V6a*4*2pOwGE%p@-WO_sj$p9aP< zJ{rjfXhG}~yFg+Tgt8vQ#PF*rO=(-eKyM6G9Udk@1pgy1& zU(99XV&us(mb#x0niJB){y3=~N zW3GrTwaSA0aXz8IZ|qE;=)X~}F`%|$X3U(VmB%_M%Jw^3Ny1(tX0B*O{&}?^ur;_v z;DNgOY$qe;0Eit;JL>ygVEM45cv8zKdSqRBI!U^(XR&z7YbY6 zum2d2>vjZk9MTi(H!#QjE|mI5PLSW_f|G$b1}M`lnI<1%;!oquexO?yN#b_JR3kX> zWhtbTXkOwLVltl41|u?zi%cjn94r@F_hxA_4N6_d3uKt}DykcvSG+l;ryxlod?Zy4Y$E`e^_=$vhVHUWGau3<^!J%nwMnWJ^VRuDwL|O!` z7QE%-w6IJ2>Iwfwy#kR3@toI(qMTV(x32V39ff5Ap z7TF?u!P!Kbr(;fRUqbyIc*xIsiJLkBaM(&ExikUrnlC;FE?!mwO(<+7DZ7xFa28Sm zAEU$D=0fdf3iNJK2iz{#D#C8+UXX!cv(t;gCep*#2aysd3T=r&2}kF>R8xH`&vJL7 zzW-z}Y6Xk~vu$=H>RDwwdHx_`V~9#)F%4W{U!pM69{;x>eVziZ+3QePo9`8Xab8p< zrb9_5M(6G0uLPBNz21E><1bn7PeKs&^&k5a9CFmjx^&ZdB*?irU2F0{J*q@JD*=s% znHP|&80bPAs;S1=D$G!jvHN_}CVe$7@*g|Z-6s9al(f`&IWxsJQ z`{AFg-?pC*ZE-1D!-&YsikGr>8}91koOGU__rpd@?}verU{l-j60DV}mfQ{eMQ(gK z)3GK2%gTht3|)=;dkbnLnr4{qNoWh%MIX5vLa(}I*zQNxaP?Gws1`450}waB8#`*I zr_a?vf&|d?wy|C8zFbQIYu`}-?}#t6`AY|p!`!uj_Y;3)014c@{8-l~vzK-pDyN|Z ze*ExGIVsVrKHUL-7df@wR$|Fqu!?rRdMGWqlKGzGExG{|s%WIjzb%gx1mrL|YUsIN zU}H-!5VUg4P&ySm7RvMf#%|&Ai`l&z$`>(*;LEFJx!-wJ-_QE${CeAMhy|Z;`grsq zVMFUr(ae&Dok-_DQDE}(VpToAFTPehA;iVTC1$0IVAYk|s0{aIN}U(Qi~r%_^^vqh z@V(HGpzgcy5EM3Wvfbl)oCJa!(SAhxHMx5+*EU4s-u;Sil^L>xQBF%nXGkgyCP;BZ znfJ(auXgSLS0Qhuq|3GIvPn8u{5Wa!jjjlal6ICM7F!7QM_M$Bi4)0}97=LUi_w{C zaf$XK7rkw*{TFxJ^p@Z^LqO)?|K%!Y7K$fhAaLGsl8u#;VQ{-EFUc%;M^T01SNE$Pb%-Pyei ztMkrzQp%|9dV6^Riv<;VNjm09?V4}7{T)V(1j9ph5EGG=-?MEhnr{IUOsd|! zA*ojslFQ}{-Z_76Ruh59nSu3COhvRb?+FvRd`&WDBQ3e2y8M#JpC~H}y2dZEqmUAb z6#juSfpOlQ+bzxcr=gwkH2l{_t#>(Dd=Yj|DLK3_u`~P1yf?J(PtsdGQwcfq2A1J- zE1mIP;%7;{TR|$86aPA2<+~fotO=o0K2d=Ob41F7itMiblMu|~+kE8!&G(Ml+nu16 zBmTbhZZ~;CSj=7Hv>k;Ywe{y21UD1mskW^{$$QRijecP*2D=pLzp!QE;z4)kvZMW@ zVOqKK2doSGm8o4idyeD$Sawwcg26LRqR3~U>V-Kw(&UFTCWYPBLh~VoXkJ_mGwi0- zE|AXh#~_nk0I=~iecv_6Xdb^RKXC)nJYzkKC-nMZW=mn(a7I%46^qh?8z&7j*!>px zEWE;+Uqe<{37HbY$`90HXe~}Tf}y@B&Vp_acvO)_{M;0;kC2QbWJa|i2CE8lq=*U& z7lH}$JnhFw-DINICimeR(OEN1HEuWIJiM%?5;Wk3p=D#+L&njTE04WR$aXqmW>wkZ zuGK|sO4L70RU7Y9r|;rq(3F(l@lEdrC$($6}4&n%Hi`T$7Xm zIb&6(KQ|J5#cRYey_)#;2+|VSK&+HP>gQN>BuDZPVw! z<3$Tjhu-4t7r+!tUE(dbo2Mlyx%ZXg%&B-xPK!Yd0CtM5)$2_|KAvgF2b{Iv2DSv% z-o$4OXUD^;G#V(#Fg%obw8gH)mOB`F_UtQR#_8vw?f z)0biIj$Fd5BUGdsUk5*)3qn=PILPGL7!@CEDeGlZ*4R}nu7_mtnruczRtJ;7G@ zIALa8E1?(wg{HD?KLjA>3K~8?hRQb+TRE<% zfO4gJI8#3+zxLlBnDP5vj33^=pxtm1-^9VV0d)^j1jf-Ge=YB<&c6)g&UFv5;&NWCMg*R0VE@m}s zxY-Hb4(uxsgO_6w)u{;AD5V|_qAN(Qn^*v1q(SS>qjCV0AuD%Qe|S)0q$2U;|JYZJ zh=$Nx>n0E(uXM5T@7u=lN|N9P=dF@C#LxZ%SoC!8caT3z?EusCjah{v)?z$^sWU6v z6$U%M`*+6!Y=r~sh;lsm1TAvo43&OkAu9b@W;hzx-*-BDI-~T0HQ-+TiF2TVG!AFd z)3S(pMx!@@Sx-KfUX0Afe<}+F;7};(hm0nxN*REw_KG7TPH(i>5RNy2mHzHm*^oG_ z2Vz2zw?>djhwc|-c@+ipvQY6Va+9)Z5iHmj;4(K)klD}N6zdieCP9X$=_Piz2t{d^ zN71tKWXN3A!AW8|*UUc4znsoIma?;9bBiUvS0vPX6eG)#4}PkXMK;z4jp(xk$dMnS zZzAe_;qLuB?PHnvQeZ^eq2f*c_lE|k|&~P z(eZ9rjOO5&;m>!=VLOo%088qX+|pf{XDHrr3S0KjZ$DcGn>1S-jKALof`H9-9YB?&%;_RNRz{*~}A+}(p2ak2J9p%8g z)iS0+MW}~!rM)jz?jq5=)l(J+6T+20ce%Qn6-kvaG?(Xa^00X}Oo5>^rTJgXVpm=D zA%?gV79tw?D3C+^FMVK2TwKJ0#w5pzvv*5a?+!75r>76Mt*}~QpRdn>(K}=Q9Fc(MayCYLSB8&=8@Bz_78U{F9kuJa zI-ar{!@5Z~D^Zum+#X9SOIcqOA&|dsZ6ismv--WpY6Q^~)dmcMBJL=MK2-2WF-j6n zOUOCC=$N3xD6PkImi^MVY_a{)1@1PLtl;D{#vl(wp7HGB3fcpYX8UXeyW3Wnftoe*+=-Qc5=fF%vk@7+B-cK%-{ksjb8Z!_%UF_X@P2Bzo5-78fOrYy2dwAGCxhx#elvNNb4 zz!80&9on@(7R8IAcyztQf3i=2gutbtV3shqQACBIxrKNcCZur`fk1C#qe}2D{BPd( z8}k}C?i}}Bv%rmBu3V_x3Aqnb=03w&DqSGzgUOwpgzb-#BT&IrJeZjZ#v)OndeOP% z73|M*OzYlI#{oy1L14tEhXRMuUzPgYrynki@D!BICTe;ApLzw^Lpc^^O&Ec=W;t{q zq<+&m3Cb~}cnA8GSqT9qSvGnx51tlzh(PIGgo|n zWZO1XgAsPW+&g5amMuT9A{<*Vjn3R2WL60%^MoB=}b>U@(! zylF#N7^Fq-R)6Uiebe0YL5ga#I|(>BbUG0KKYnN6U#lMG;?4NKjZtgd0643=WHK?B z5A42~4*Y3hS9cCZx6r*M;r4P#DX=5$Z!&1JCQ8lp!58c z92wBp53LY*7DD%;aMvY69Nahl?H2Z!6RCuvA~PdgBam8Hb9gYzGU#I{*22f9Z?X(1 z3_WxqVrTo|XRF&-7`E{$#NE=eqWqFxi=`=hC4Xo#@gbI=20U zn}90U4DFF+c;KknTY9(7sK`Ay*`O<)f~b*tyXIJ}>z}?>vKoaf7T(DsxTp7D4LSzV zEF~MvBM2^&A75j}@lAAB1?519aVAE%`Xe|qpb43iPuM(J;UtGaodU+9L!Gu7+qj*B z0ICP%J#}DbT)S*}QZ4d0^vW*(qYu*k8v|OqIJ*|cl?N(RwRVt12d~B4^W?1Bq0bI7 zJ2FPjkbb9WEYyMy)HUqCY9L^_Z{lf!gD}?3NIC|IQUI$4hUwt3!}{;^N#|Dru)%2F zn~^&o`9Q$oSCEfCo8;|Jepnpoz(`9_2?O7Xx&(dy$@v;l)Rca?#bPQa>$P1GFf*A5;&w?mA!NVfcIPRE~1aKh+UZ;aMO%shcttCIPE zcxyfl2xuAX0dF5;puJlbyk#O78&SdnI3Wft!XCHtzcOZMTXf)ywqdAaL>;DO>Z_0h z?MW6}5z(mg{ba7E&a=Jm|bXSq$OLh23dmmVUq(wFV>EL)Fj_)oebYA-grfG zcC;3d{vqSWd2Ne2x>OVh1es`_1fCE>fFC9R`i$KkVhad*c=)11s-{_uP}cE?>=Z6# zR+s#TZK`QR_|MAcKX*dp{I!Q^z=+yXm*vF%`8QhxRUwoJ(;55oNG7-)wQ&moKOMCdF~wxxUPR_5Pj0l4#K5+lJJEd-aeNDs z6%U_EgPhsj#kF8@o=$_-&MCoa^rOwu(1)5QydoEeLl8a2^+6#+J^}LmPE3K+Td{FxsunK-V=T(i*TK$<7VNOOu6y{8YrK@vOz|X z|G$r3eX_leMnX#7jzHk?6WGO*+!U1+;%`i_EQ+hHwt=^Nx`?@y2a?M}cNS^>(y%5Qp^e zf=&rqJEZYR4bQ*z9cR-BX!osltU0c=k`m&tBrh4U&@*2JxnxG zKuHO_JmCNSP-RuAAWhWn)N}P^1t|>tCFxjDQ|#tpB-LWEgPNpc!DJt zfkh3lC3$63;CmXgv`Xd4m&Zk!A+0${e<5wUPs23V6AE_7*4Im6-G(C5xYb*l!x^vr zIvbP1suu9{jDe1G9-`{>Y~8&2%GnImK;}eMw^=&WZ(O+K0>0uDQ00cvu^8C-u~KS( zkvyzX=UY1ynZ)%)^9WJ45SoC;v&w6|dow~lD=hHOY&C<1-P<(dn0Q$v-iL-YiARkx40s}~6Z$XlQ5Q4pM{IQW0Ay4pF!Naix=g(drMxZ=g8tN! zkw|=jD?)TLcAx#HdV8##5M<@^sj0i|A#%?s3Mk%!EV)Ei?1mhRQ|+jDhP?Ky{yqB{ zj7JvznI=9%7|l?}V>WtYIQ8VSqOgldGg6lPoj=LH-Ts=Z>p_g7V*oTIrGtgeFa@)& z9B#bVIWt{!Nwz9wJ9twCS;MWGGXcvx__)dngmHuVy5#`IutVZ!$D^(KL9PrmdF0C* zvS^G?ZnD_s>*)O{J2DtUPRM7x$Rrea^FOGBUz2ruKIUf*VK`-8VQ^p%w`$H#JiYU( z=n4;1S}9L@B$TgII(n1x-ZIlpfOuf|Z8&sF=It7G$%06(ey~qi zsrV=3rdg7Qdz!oHv7;_AX-DGLZKPuMxzX|E`(#_*Wqy?y>H7~+D8bj$p;u7G*x%x` z?ivis6!&{*9yi8$)SXk52ZM6|V(UhnBiXR09X4S8sgx%k_58U~0`Y7&cW%WOM;)aH zZG!b>?!)YgwvBKyQ+Jsa6O3P^8xgSW0GPtk9hBqb9>N9ResTGt1u+z-WG9|aLqizv z7ubnl(&C=EUg0PVW!>%4)`gI7!;nL+@`?$bAVh`jPMGD(2~!}#JUHyXR+hL{f$pOf zPQ`c~ZIi6u6S7~A5?2_-lo+6_lHwSg3+xzGGj}$@+TvpQNcz+#9w=9q7*#%5Q*XAS zTE=xYQLcn`XS|vZMjjaf>yjl=vh(RZ-J#vUm6?0VW8?Zr&4NYChAPxtFn@IOo~&$rTbp1W zotUW=>T34zduDmB#OjYF2uzm*8fC85?$4Ln$SaI`j2E-W2Y_`hKV|xl-Itb-w6Loj zzyYqDj*EWL`yG}(5)lFo6ACC@>I$shP81DjK$QklI&9EeEb}=~pK(94Hf|>_ z?{c`Qlg`;Eo&Wbcc4q+TawA&d9*G?DeGYF;;K{E-WZ;GiKE~P@`eR`xkQV>6gdL#= zg|-tRGrwT3o}!q4sv^=IR9v&>>1x_ViO@CjB717~&h~6CKXtfZb~CQ~ z(W~vh+^C^t=c|EjNi1umDBBLGKnQaHsA1fWem;z_(&FpizxLQ;*3f8%JSAxkKoiaE>E}pFK)!tUXN!qT*6mGZpeByRgB5ZS z#kM6{l_t4dtPSiCb13%sq%6uW%b|`~^!Uda`0K(FK_D2$zY=T*u;?%pu+0}3oNQM4 zqnskUn+0DGu$1{|8pPLN@S zx%nW+Qa+Q3{J^(oP-@mYG@6xLI%ywmrN%U*!)ZCPzpp=wR^V!Mg;zA6haFBo(^>tB zN(RZ1vdmPQq*edf#QFZhw`@TK=#+jNfjg{)nDhdW9)Ntiaf z{=QlW5{K(+=Xj%B9Y8_6^R%~n>+DUq>CTU!Ms!eQz+I31izUxS;P1 zq#7ECgJh?{%%7s=Rz-Yp3CnhqYL9kOM{tE8PTknISEFhCYn8j!(VVlM(Rd@Y@+2kG zm3@=#oGo#?m_%4D9aM*f(AxbE#rZ(KQ(hGbt4(Dkr|g-0R`DWXPZ{3{;p-czBnz--PM_SrOh!@X2vcVfhG_~uV=M<1DQf}L%Z zztOQUDB*!-ugB~zcQEwXe6|c2DC{`rscN^lQ(+^pG z*%8rT!5Uqw*38Xf-}QmJl;EnVl1_rQ=+&}r-yk<{`SRb4JT;Gxl+UIMs>|)OKvhwC0 zAQ39>kQw;_JrfIeIXhHJ^p(E`yx3aqFDN8L^>u^5$`Cp!H$g-GO=!gYmkFWNOha-Z zl%g8Cdys*n#(#)I%OnY|(exTCN4fOc^`}BR7am2CxOVlc-{H^TaQH*Y`o}kQawR&CD_IesU(qsQl8;caQINBS2yDo%SKrGhD#?7QFHU29ZgXI<1S&r;$T7 z%Kb5w1eg(Q>^WXiVFbcUYDXe?2j=Fhc&|hvQReHs7yuhjlzfIpNs)EZxlu``v7#jx z`(u?Whm7E0SGB@8pY)Io`e{sK(S~*jTxXzZfEVmxN3_`q9{pzG4DXqg+j3ojHs&}R zJ#&$hV;emM@`=_={=}V;PexY2g-tEAOWfT} z8bBb$#|cloGwuj-M3s{jvGch|+f*;#Q?G?=xXmUE*0FAuFoj0CKhbCsAhS58>ns@A z@|Ug{QRK=APd51E<6b>$OkljyQ-zN3rP2LzBIT03>ANb9+QPKC;I_euN>wdae<7{g zdxMP#(&J~=mF@i)4$Ar*1!kwNQq=CVA1J5xD5zDQ_)0l~-@V$Z6VvmCyZ)f*AgbsRUL5(SyKR6mWIC(tE2CWUwHfm(!tuN)+?a>EJro~795hM$wC zyaA2igYW%qI7w~cZ<8CfqzwMi7Qc3A;8yzn;)Io|{?WFg`- z@4XD(eOb#|3~N)a{Dx?!HCG9n86Nu~1l%R1h7~M#$P&F*iR0LfbO68-a+oUk`sZm) zE1tuX)=p@o7Hx@tWg`3j)lYC{-*KgxwX88J8Lh^QxxlG?mijB8Xa)>w-J3SdWl8{DiSPbG_-KbN9UL)$i?nnFmw1CH$ z?0hb1=c=vkWcDmm0ckP_xAhivQ;)C4fsLy};mLt8kLez5cp8O2xSm##=#5(Qg`Wmw ztvA~{D*h5$xO3jn)8a?W@*T^*4&Hu+>f#zn8J6XMFM?lXAR-{ZcE1H?CtRvJ{{3Hi zkJB6P%w`V=$Q|O;V8V1^BQ1DR@TB1a2|x^r7cP<+aPD4Hx5MyA->mB#QJ)m(R2 zrbqk^q<5PyH@#_pWM2PTMZmb`5@2mmM>B9{^wBNre?e}n*h*qn%U|_z%WbJ}psxtR zK8U$MZa^TmCLtv2^6iiB83pY|{l2C>uwcfH3-U`Xb$lYd;9^&w%dURw zQMp2u=kEdh=uhXdCNJWKxGNBb3iCje$84MZZ23J!CsR$84`UkbsWODNw?ia_&)8la z9s*tj*BkNODN;9Yb`iq}wj*Ac(-n(JMymDL{F?8}6($d1>5uh3tV?ut*Sq7&^UmNy z-$wnLI5Kd5@-&GB-NhHPVf~!)VU&tR(}vEXW1A;Q?UK<{2DOV&VjnO=iqkhbAt|ZGT1RMZt#%kkqJ|v}zU&w}kb(&q#DPK2yBxK{bwjTjPC;nI; z#;r?{^~xBLp79D%#Fv0u5npBtP`Q2;+ZV({f_MPF^o}T@;XY@KgbPq_B~KLuaPojI#zuGdj87n_V@W ziF}A&=Likxqau_p>Z5&)H;2SF&>IXMKv8Wu%|1P|!h3a4{i$Pk{T#E2DkinAm~LD= z41|Xh5V9;UC}A_I4%Y5mo}Ds@vMFrB7$1>nIDNoIb)wG~wM?lhyyO9t40?Izwus`Y zC+1xcO5vS!UFwto^O04Y1-heKzkOcLZI(VR2vZ@_<%WLq0Pr;t{x{lAJ4l-MqPI#Y z4a-k<%F1S5t6&G>8@<;%);w9CG(JbNR1@zp+kVI_5iWR{2~L3csv;mjH9te?S|y|# zoABG%Tsz?SY|K59A$F^qIi@ULk19s|%D)?>-e?9wwJNZ^*?>sooPVPX)S3p_S#U7Pbost+&l0PNPo zDf|NRlkxWUYLUTUtuPlpz;)&W=v^=4^vEZYimGT_y?Pb&Y&(^a@M&d|6-td(Qb&E= z+LBc7MFd~ls;X+hZ7CMVKP)8D{T^-^t730R^KA$8#CSJznNj|cH>*EV;YXSDm-jU; z?pK_SWv6`Ua^y-Bp06?LN>9L-Nb9Ad07o0@Lz)&h2hqO#R@}?mF2>fk#K3~gFmp&T z?cbYN?*1D%UfCywQ#qb^+XTqf1QvHHIwyzRL)gqr!0GyGkIb6ofPzshvTT(b56vHI zF~n(^Z^j~}<0n(MG%ynLgcxGRZ_{#zW`hCZRBd=>tB%&QWYi!e;nA9;5Ii3}oWu-$ zhqOd@nS@>c?Cg#pI_cbd03>T3PJS~(b=mW7{lMOeiHar%d5OrxLHn$_PlFsT>KDZ` zo&RNd3jX0kot)r8lvp;rd)7OS_DDx6uI^%ATpC@a4fpl$5rkot(<-IyL-pY}R_hR$ zGsY+_ZxF-Xvxjjx9DM95qx54OKpkQg~JAccHfj*Tw%k9s_6|9;(z2SL^NS z`O%RKB?>W}#HNZAe897>Vw!{4hmWS}rW*8Ii`cmE;P(9kwPw5R^yGgWp^!S7LWMLT z86H~eQgB$MF;Ftf+BO-NR|7&18E z$;XJ#Ak4}1Z9-rHr<;C*7<`6L0e|bgs4yN5`6jy#Z*#t5&_x{lWKX1 zU)lrBw@-`H*}wB7^a`f!0n~G!An(+QfOPqx$de7iz;0}<>eSfVVt53Kkm&sb8WLjc zv8VmuHft-yc!>d>hNlI9N|v%g;u)Lxc8eLy1tC(61KQ0m^^Cu>8sIJQu^qcRMwT_q zR&72O!y$){?(xpim*#&iohUJr0+`2tJgVY>er^L45k?>&PR_u_>T!rMp=GA@t zWpHT08XhWb(dRCN3A`S`mEP_#pdIg&wXtY|4rCbGESf|-Q9CduHSHn68nf(j98pN$ z2^xC)x{IW5XB#$!D|$ImRtBETQ4hq@4sWHiC0j)c00apBd5V4MEsRHF?t!jbqTlPh$ zK^gRKutJX(P#p@dYm)U3!&*Kryt5u@*-+LF?9RS{O!HerP0=o3_?)u|e;(^mtgFZq z?Fk=OeI?AP{1v~zE?ohI3WO6PK51o$7eIm?)?Nd~M6r6rAvrak$ti%bvR)5+EUlx% zKKX8>=^@<4Jm3<|YY5>RldoCm^?*{lQ8 zf=MiUil6tmt5^wLWiP8^hPsJ)x)tV(3_umpne*`m*K;a_mB)Of{Zt{;+(F7+{Esd4 zwuqBjA4&zzy(y(~Uc1k?C(_1TXJriRNsnVH$w1X{2nYlM9MCU<%q^I)Or}uqqgu9R z_X1-1VI^*E)v&P2zliO#an>?@D-9g?OT77G-R6_~$_Ql=3mOplH9XusH(Hk?{D!+` z*q2%?H2H3I%`UHtRQ_}0elFJ#FmJAaXTLmyrP0m;L1WW&(IvY3W~ZP2x(MX8BcPW@-ttHU<8#xdVvn zd=#U@pks;o7;OLy`eOlvkCw~rFc!b8Qj;F5B)M&<2nOj(F6S?amd$Pj=jl%kSYx$@ zU|27(A&CN*yAnYaOKT$%reJwEr@F4ys`|1~(#K`gAi(I?hZixoDBB$QmWOF8c*;ci z46$7>r!kzq+3BM7NWA-%>GDNKL6Mp3sNZw zsf}3oV|%e6>Y;!e%k4qkQrl5=yziXFB}51;`e60>yAsSuX|6E~u2;ySlfv@^o6mv! zC|aUSW7^>>GW`JCOFhPH`ai=Ia8rpkqo5NQ1hRL8bHo3ehn(kIMX*^^|A;Zfl8gU2 zvx@V$1V5l3;u{I<61P5SiK%D44&d{3=9R94W=xD^(4OqNH?9IS8YQnLJt(7Gar*S? zh9xT~Md+@&-bV#&Vq&H(lP6d9c+Y25W~kLbg7;6%7bAz|E!HYJI$<+YI7MR$RN0*BgZ4n^gti^FErE$$P3kPR=Yx(w}T$e zcnDVHAhkv=MC7gKQTs$p<{^^>w=jemREE*G21aT%bZL$UF(jen$L{OpK5IZH0a;b)UJ`sP)M(>-4$e15+PAa`jT z+TdPS8-@V?KLEg6vGKJGF8q6kF)SUUk!P~hrsKtu zvN#*(FOHWWf-Da0@r0mjdPJ|1z4bzUQno0@;>nby=5}C>-CkTik;o{G6bxkB9%t1(iQ@;fvcL?(xqSDe_RT8$W zGC6vH8F|mK8YGN$@lmnH%;(PYkQNyY!SwHNr46Up6Ho_RL) zBL8Y%?h<7>R4s6v@sFDz=J(w+ONa?=yu&A&f9tLmdNA}brH%|lY3r_V3tiIvemR6I zU9k3oq@@?MLg0RKfCEQo=)j12YJnUB0D-b!Zvxj9s#G&2nKK5;HnZD>!hD=m8c^?% z1IYw(tkjlcU=V#p>h2sQK5~@?F?@Q>8AB>%WJdNHo zcT-%meqp!;e1}lmW()3$Yn3kFjkGs|KO8(A27tZIVImk}47QdARVr<)h$n3FQs73z zl!9~!zpC}h=2H7f_+Ur`1XU}1tRO-Kfl!U0alp47ot`>2zVBqp-{50USI6<~%3XLx zQ(HQha1R`2B2cxVG)+S4T&J@GD_b+)o@J>VWejt1l#C2A1(Da|aKU!u)$T^Y7>WLW zuF;Ha>KnBs*BB}gQJU27SNQg~qDz@w0{(-fRiZf8r#OTzwL6606|XbK9wUdONCak2 zEO|*bYc)6G-Iiu>0g{9e+B6phKY)m}mPd$FxNSlSb}1}k5XPp_xkTTgYD5`*NnS@b z)ok>Qx9s+3`T8HA)!xlrx9gmv7ko~@X3T|;D$!ILdNh6Px|)NWGAO_}HX3tjKe?6@ z*ll?=aUxwplv^Wbsz}U5na&_I@n^ZB{k699N;$G7*-Xiq9EBlwW<_2S_FZSImZ755 zR0w73b_)ZphhzjWYYP~B6=G5p6KM-y5f!K6nl*G#m9SrMjbsj|~TlpODLViiVKOdMmc zR`uEGcRrKjcwoknrD&m+aQyI-P<&;-C7QXrxpNO&$WO0W#gZqtuySio`#aQ?RR-jYBYHvfHQ*Qw$jz0^Y^^Q=cTCK*AI?n`ZO0fL zqAfH!{lj!Z%{Bq}sULDq@|Rn$xeX^xXN3|gT6&m1`l*f8-oDC^1z?myh@2+FMB5dbwF?hB{Xzba@)!>Q-)C5K^`+6US(N2#%uJ5^d|6fYvJ8{V5(L|>BMwXSQ zlC+9qf5Ujmy8wn_?-T50I9&c5pDaq2$o2B%U4gKQ^k`0O1M87HbS-;8(y4ym&F2-% z@$*d}`VZV9w}ZLa>e}?m)gUXkJj_e zAPvf4*}OGokhT_K68P`^%s zt9M);>1+fh4X`T2FXR|g_-W2h{AAEyn7A&g*?Jb?;}uJCy^5Ln`LLs-Yp@ULWvFF` zKF_9!&}7d?B*S}NZBv@Z8VBA?H4%TLA6wIXiFic{2nWOx{Saxrla@->p)Oo~56un) zkc1t={1RJyb@kjp{AMb47F+P1HNH)`7eyVN92W34ZJibjzhp?)XBqzH;s=IpJ3gaM zjQDPgbn!2w+6Rsh^%l^s7UFd9j{8Qst!Jhs^(V3-{GbQqv^3qyDcYtSWH>o777x^mDSj(tjWvv~L)Cs>Tlsm*8JmVTsB% z&eU;(sld1<>C*%v1j6OZU}h|rVr~rZ$b4i!59A1wFLnoBltYhe55u8Q6nR?SW=zEZ zU~z%0>C;wVW^A_Z@MD)SDD#S10uq4+F8CV2KT+TSQ4zFpml}(axv4V@D~^bk?djU{ zH)S`sujP)WWV9aL-~*}Z|L0Gah~!2q^ea$dLEy^%&X@jM-~+ks<-Z8U1N`XCMC%5@ z(ajSLwaAb9zMyhS*qz4W5lH1Nr|M+`qW9R0aXVwQF_zr0P@KCwen*Wd98^Yts~p9bVGpsZPVr)ds-Ap7=o}3+;?0h0v&?`n-9|4f7O#=uhydf- zGz86af3m8S0-pZ7G7lgRLZhHqGeJP(6yi>&=C$%6n`1RdaQO0LzS4y&C<8+u2d;D_ z1C?*o;5F;BPy!lIJVXOmbds5oe-NwW=6GN%l8IVV#WKk#ZE?A*WY}iMLYTR=Jly$> z+8!G-=s8!WLmwo^y}Ak|AKjS@y*FD0w*}t;Gzw?F%-vqFRiE2+`wigy@??=n4r@bp#}K+fH%X+=0lWVy4X0_Zq?5#?WeG;dyc4i^#Z> z@eO}ERgGbg>0Fh3D45tVXc9a2lSQ0Mh4jZ!^ADI>OX`eWm=db9p`o^~HuSe&=Y<1$ z;E5m^KCSlLA+1Xqs+z|zqAK5hCje?Fw}dX>XD;A8Kw#auy=M1n6{DkJreWg8jsjd1 z^5ZMUN7M^b-Jr!0J%!Wz-Bz?eY1W()iVhs$(L`-20Vu{XJbjKjEVaYjgrO)xh80Up zM=YH;s6{T^pJFm_CbD^=BqUrfKTF!fW*9aqsC6@ofppvtd*5uWLIR=^4G9DqQEh`> z|6zJ*C$XqU4fFj;`B*)R7_kATm=*r%wSh%fJ4jApbrxYLo4-zb+64>ZzCGTcygpq& zz}}1_Qp<;ocGHa&jybzO(6Kv%^~6iI?*$TGIblic2hu}FiS4c3x6-rJi4Gxbh9`dK z%fy%+ag;6C0K!)O^QHfrRSdC0la0v+{6+ZpY32{*8Dw9e*ih1017 zi0&;Ui1-bJfCJdA+cCjXd#RsXN3|4Tps3$8p;|ljPmxf_ z+Z>-VfI_S9PWvxGPO>DhFEB|MhyOTWf4Eb>po4noWaAtH>bkKeeR%~NQi+NpP>8;v ziQ;TI)SDFR;_|Vkj?mUGed?KKY)C~UGk)R$>{(!hvmhqP99z#>DoAT zRPCBiA@_cVtx#Mq+V9om;t>8zBdy$dO8m_@qoK{`qK8f(v%Hr5@Q;<&LNV*M)XP*% z;UQia&n&Ey5f0yg>b0E6p;$@}?7*UJQ}5?Wk8kYz+)!BPD{Jzy@%nTcu31VrMWj#y zpC4vvtLqZ{V8OXm+78&@8RxBN|5(+^ayg&8+z=WiCJ%FAJH-J|NcP;{8Ho|W0`jdb zbtM&a+hRQ-#P=3$*WZ7?N9A|v=4A13tWU@JqB@I(j3wugbC z`vH$j*!HD&EXguQC>xmrfwj6lI#~dHX!1GT>(MZj_-O4&RPO;^am?OPYa&a!;Fhmt zY|)@{lsL!Da`cxn^c%6woj!Ng9^%Fex(yW7t+{8fui^*wBdN`mm0z~hf@XL?m+BA+ zRi6}!@drB45@WIGE@dqL-o`~3@%RASmNwMqv#QF;)01m=3K|U?&fv8R-In~;Y5_Dk zZtK@MHo6}4M4^Y3bzq}b!(lKupUHT$At8hP=YKPqPb>3qc+J-z&jMa1+93=;2o&^1 zr-&6EzK(q2xvuzdwcncoC0hiodQ9G~5^DM@a$2avP5=4#4M48^`^AAj8J& z$%Y0|+m$}p5yRi<2c#Di*vpKFKv@Qn0R%1GO&nuR!qg>P8ky&##>z?y{^Bdt0i*AF zjY;7)itWpnh(1=1a0!hXq@$8eZL}Ze-twVcIb1kY(qbU1F&{qu>Mk~)22=9$v zZv1ZR?wjww(+n!K*nqdRZ0I2Cv8pL#$f6HCy7;05P1SIx66v_fzc$=W3}@qAu$^f( za=myKXcEIExEcOUIkT`MVIm%OaSG>`mYEB;kIE(npNvee6aB>&&G-!O1};+i@+oyc z*0e#5pOp9W8-a2Z6i4c_Si9X^IyO8n{y*PnTbAgU6iGyJGV`Bk~#yz^4rbkqpbwtnbhMJ6tq8^w0chwCZkSU?p|(eTPk z7?~)6MgO*%bqkotNeU}wdeux6cVgB5V7{z=PoXL+LSo}EOgN(AD5;w?|S$;y+6vD z5}lDU*$=xrVs#k4>NS1|&e{5z1TE^^SmdD5GdLCds*5&yB z9Z0rRJKElU1xJw%yt?h83~`O>NS+}SlXH8@%KyVVwwBU{)P^=fOw_7+wXE)?-{NQn zO$hC#S(SkI+*(u0Wuu~8z(P)bvLMl>|H{S=o0TZBAnCCzbH+UC_?3Z3m@B5F^(7om zXDpz{Q=5hQIX$eyU)OBdv-qS><4pDuolUH^E8k74v^CAI4*(!*Y&g~|UU+m# z#bEmHw?w55(Sr1EpxL+y9WPO#WXv2~>Kc~A36x&ku0%Z9j zV1effGOg%WTZ9x=-~qNk0%i)2W8}iKXINpHmm2r)?$kkQ7n*D8uc@!JPKgQ&SJenZ zoE^7V4}=q0`*bo_`8z;8ig{^N9C3ZmdCu%2>LN~j1s;0p*-A&jfMtOYKB<7@n*AWH z(ZOTBDY^4)p@5FDhz|)TgKKHC_du0ev8HPkm^O6kkwIqX@Dz(2Q9OAb`D#^lRMea6 zU5-j0-h=Laj9VCf=4nAvj|K!63m2{$eMPb>NibQyXKmrD1L&m?=2Uxy z!KxqHwlxye+oG+nRwA+;kOfrjyiDJeInt!CG5ZlfgL@nuDEixDL?PA_sT^i>YzqHp z4RAt+%Z+eBSZTq-weZvERBJn0M?|XZQ3*@&hOZylN_2x*DgQ6Y*seTI`FZM1)YHMxrkc6}H$+0z7P<-66dqlpI!PN#I)jl9$c*B6UUw6d>6S5{f{+g*ibT;;e< zH&8VX<&eV$bu;1UfF+6xEQqmujnfB+PhjuH5N;F#=L4NJe`Nq){sR9^5tG98Zt;MW zU#uyvnr}AC2@%nw&_H8nPxP+)NYJ_1JyAb*a%L>0ObOso59N#B6-0+lUGN|h z!j8@`_nQ`He+5)UF$(nbUbupYwBzzy4)LpR|KpA#GK+JG2_GZelY#S6XO$(Y~^ za%#@SvBN)Vx@Tp1N*%v=Qy(-E95o$8K^9k(_l@p#IIy#Og(1&UI0?ZZU{fgsY>rU{}nDNhyHe62*pDp-c`-Kvb=tEx0T z3su+T9geMPj6%}c*5*CQx*+&kD*MX^-|knvK9qd5EgdgTjx8XIXFwg6i|*m)&`^57 z*&0}_#i^;DKGi?9GA^u<1Ly{)9Ec#K0>v0LhcRIFJ3{z1gMG!veyODcswF?7gubJj zixl)Mr|*g6oh8}6j-0s6Jh@RBWgkO4q3rXj8`m%gN~R_JdF5h4Gft#ez0XsV((7~@ z0>*@lpCDEra1;Xv*ruku{fb%mSsZ?NWRkx!9Zp^lxLPfN!s5A09_2;0d(!09MYU>l zpx>RfLw%7X)>_%8yRCOj1rN!Yg zU2_9t_`*CzK`h`H2GABft?>$FKMSv&Bl^R%T~Xzsu$%7}Aj{#ScI`U!%gVqWf=JyF z7@q>!V^$)(Fvi?}-m1A$f!=8<=>zIG>VrGzD`l_P)^IdVVf#voHk1_?N2!d1HTow%>B@p=uMjY# zJVY*n=V(WH>!tsy`(hVTA*;$0@`jVznbf-2&S0mcjXYFzAI{KS;(-jo~?{4_m+K8bU+Q(+G3lmvU!&Ciy z&;qI*xOyRvHZg!zjONIp_|(7`nHd&LDWJDfazPeOIk}?O^m9FQ5QYJm2qJychBB{z zvBli<9^b}OE$_xB zIbY^s*ixam@;RX43jeIIuiI1`8Yo6s;f}*nwz^1UAiyJAsvC_+GUY>JThlO-CNRHRBlNom1Sy97XL6+#w zk=u2Qvh20jD+?ymsZ^@jzOz^0)4L$9UAoqRbLgB6PX)Mk0e)4p#nGb>V3(d195~({2r+8_+<9 zJv)Gcsp99)*Tu%#ZJgrWW9{&W=lF=xZaKD1tb7r3WAYmtUwPCgf25Sq$(4Uuw`(tV zR`-v>ingV4iaEX(;YU0=@hlXQk<)l(EVj`u4*@2G>!Ck!z149^M;LoyY)+aRV^ii8 z3=v@Y_1!qQx7~)N=s7W4EzqUFa|Zk5kJ}&lRB`9IK*-tV?Ybb;LUqrwpgmD)`atrf z2)A%0%n4?bp^AfLtOn~fSY^R_ ziYKERG5*Gjo&?_JnMuI^h2jexwE_TNWymr%teWBc971|h0)g?*c2r^;0-n^$*lp>M z+Czu@FV8iC9+Ju**M!sUhu3&%gP{wil#iIc z+5KRJY`JI4hlnd>?kQno-u#g)tJT(2#v3-oWcz?wI3ZlhmFhoj|-(|ciK)y{S_ z7N(;dZE(48So#V+_RXNlcMS;Fgz&x*4YA=E{zeko4g=qC8>*#Ff12vU*8hamANuER zCCQp*CagfZNhhead;ZVAzwZ%vAcCz6mUUR5u#szVn@hUX0Q1D`1vgI9bof0W5ZRW zR)Ed|Xa%u8*KkdR#857m;8O)Dk`gZH<7iz|+->io$T{KGJ{IuVqp zsw6dp5#^F2OPO)RnOaMOFV`|E8eCe(=KCn!?rUBZah@h=;*t0#I8P$>Ng*zUxoHhE zfjfpn4N8TGvKoy|NU5rd+yy6!&}gKG9={x+%IhaD2`Si!mY?l8=Q=!axi!EtY8d2^ z*D~B4q)w5K0w?lV4OQ3O9T)*|&-2!iA-mr@z;{yprm_hED6?MP8{pvh8Jp77@hAlw z2>S_5R0T1~;XCi7m1ZGg(}&1a&blZE;74e)9#!Ij(D~hmLo)V2&WD8tza z+$*{En-%x(tX_z{#lu~2x1SD2UQ5bRwYWT>UxJn6C7!a+K{C*>`@4mBPf7p<5LE0Z zuH*6GgH^}b?^~Im?tVyl1N=92l5u9{5`~nCgz}~0hdfV4dQk&b`Rc|AMig(59{%BI zPV$I5jTeXPT>&UcC|-(Kf)TnYfzydBOn(99PP0>J_bA(dPeyLY=X9xJ17ZJIu%CWd zHlArfY$Lp?f2L!K?fXKSgwQtN5})m`5|r9hefTF>3ojd#AW(qWzk(J$Jr}i@p2JiX zT*N|$D8=?+-r=+l2yVP-iQzid%3F%}oM4 ztcpRzDse0tIiqJ2EQo-0>!iaLI{|UFn4B@|$`-f7(Y30e10$&ZX1eZ9O>rSlY_N?1 zO9@?R1&j*%!M!&NZLZ*Hs@T>m9|E_!y~7P?eWyiA?`nGsr=K7Rn=15HgN}e9D8ENt^VnC1*TPX^8eWwzCpd$u3>v2GU_aJ25*LtCA&M3# z_HD8v`tm_)z!*Y{pC&XTgXp;@T2iWLkih1 zrYGfy08Y`12^FGYh6ze8d`M#*%k3ewMxX@g*&9ewzn@xw<18{s zf*z&ElAK8{iU95;2x=CO`oZ?^B&o5tTT6Um_AMoY2xc?~Vk^b3uF#bro{Il`SYrd6 zpR+^qKsd?2p@v1CqkG8uE)0LCDMs z3umP4p)tI=0uE!0RZ>n(>h=1PuIY9bB{s3BL|pfRkH>V?G5H~o|8t%u4v-U@0 ztzj?fu+{Exw58L-{@r!?r%(_B=$_x}CglMGNfmz?JcyhLo(t@02mz3JgF8WPryy4c zSt5?dUU81LPX+6pV-0Ppl22Sp+20(hfTr3WzfE2*6^tcC%{#?@=JEIZIiyhg(@rvh z7LBErB@M;Ps8MEO?S|x8V&Niv&mU{1b|01Xwg&=o4J8XN8pVp8k5i5Gfz26<>^?rt zw*v|lMm^R&&naP%cOCTMh=b=A20lAn21CqBB)5cFh|B>w|6NI-qxsWwo=@wN#U;*3 z=fcIlz|6%!n@UAtevecI;{KSCc$@>Sck;5-g`7R&k?`;ke~go0yuJ9WtAWp|OMgtA zV7}Rh^AdRdD#R8^wD7URXA3*D?Q@MEgi#(dOQQ#Lu6t633`dTI)lu&nk|^OULT(AU-@9T@wDx^*q8K=i1ck?h<_ zWq*!`d`TyVmzfEe+j=&Tc` zLTa`Ie%X_lcK(H7JqMxzMcpIMH}=L_Ce10cyP@tjv!yO5GVUUG&nOMnjS{k1PBDQ;H5y~`(D@Y0< z=qGPBp5z0B0Oe9d(2s9roTm=t;APc244yU0^Q;t?y_0IN$H^E?E&ba)3>u3^JbtH9 zW5SM5S?Zg;KVHj8mMmF?=YS)Dkmg*-n-WXIeTQ%nDxZxGQjU7Yym%fPfQKX1 zgzJa%sG)2??_e&fk%ysUaw};Ga^*TxwsmNG>GM3WugKY`_DDb?>+UXS|0WaH-1a9u zs>P&lofGIbgI{Wqg7(eqCRzJVuIMv`u@@5aPppg`?sIp*OkKMn7 z0!8jletX8Y;O9E~>f3MBS2QQIh9_QDqA;)y>f|D;NMQ7^UK7+;LH@$2uOKu(gbu4T z*9>0ax1wqbuBOA^awseW4BjY58O(@n{I7gon#qSHHtaR_gxrTlv&{!r8^bi>NYnrN z{n&pEww!~+cH&R6NuRuHSaz~)=Ht{!<25{J_H;_3rAx9RS8j3yT^I#+FioRn8(7N5 zDBX36C)k;>Q5T#Vct)*m{)kCQv}p@b*?6SUSYf04MN9Pot=F_nv5J=dey_M zu(wlP5qyz8#*HMEYS3>`G26XeHXJ_XP4fb*R_X`eMcF-NY zoj&Z&ynMESCMX^=p~{Yx{EG^hd*<^9^r89MxAqk?MN2j@F`p`z({^=<3L&q9$Y~sF z#u!EV!$h`-P4x*>ouwAQriyjj2m z$9M3C0aRs!@O+Slm9I_T|TfAhpgf$twe_h@4g`9K`>cYg`@W;S? z0#*<{oBPjn$l=d>JE*7S`w_X;{-lx<-}UQR$Q*g?yf!=?k6eg!yQ2D`4cEvTITU-Q zvg(ijo(|tjF~j9$akOu;a(oqTwSsMpC!4aa#~@wY9stJPz~gZ8c8Eq0k}Gzu#$$tX zaYsq?B!P!g;^vT-S&^hrrB-|$1^TkfQ8_^_{mOP2&Y?@d{gb>s?KkNU`-qCkXx^N` zkqZ_3=KhB8O*Od!v!erSw1c0x9!=o)g?e7Xdj3>(&OxS(pDx^E2<_W009INYMcY#2 zR0xD+@r9`pD0oIll|d(vHM-VBkC5*C{al$_zMZh7SuaB3$almt*(7p2NST!h6kN1D zd{;rz5=W!J(ikR>tpN+MScPn$wupd!dF*%Vi09AqI7~8u$}5kJ6dW}ph7}wS0~L4h z^b-MmWRG&~yYZy}qS4PW!k%7e)^Y>QV%)jJL*6h8=j*9KW zMQ{q^MYF&hYYR+jQV&~GXS2x-T?*a+k4-b=g6l*-_v|%g_!3{02^U#Zl!ihCO86_V zZx9$O9F_)pb6kZo!#1T(%JE3l7b*?=H;#Ql;pgR9$T7=~T%*WTo8wKcNNaidNuND~ zcblVP%l!pv-bTV!KG_>wk{3B>sZiC1rpJ=r972Yl>4Z~MR zER6lJO}fFYm*%;qlT)uLYdCN7R?D9kR5#^>o71DUTGp+4HINw`OZUWy`72~OstU9+ zv)Tl+onKS1p~Pn9Pb842M})aF7MODwjd#w0ulQQv-gbx3?-rFqq5KK$O)dV&-?Pi) zg=Vhp%8E1OvlzyEOMBCaK3Nf|zXB)g(@BwQa}%b&E?ESq(JDdeUvEWG*RW%&c#$2d zvOonW2>m62UUtXlMVC3+;TWanvMSP`C;CDg9q;aFJ={LpB#DJTuXuoS>yM8cTKH0v zrCBh;s#3fAU9NSpY+H;@nd{@zJjT-K9P(i7fkLQlfAsKWI9wex!pDsH zo}S&X6YkfA7NfpEMYa;RlARiuIU7r~Esh!*k=Jk494*|X`QQ&y(XV6B2xWH7e48aY z>&{H#LfNToTVoih)fJg3SV-#35;{gGFVH=N%~F3^$LJ*l0^3*&sj5Sw6IO%(v!!Ae z4QZY`IGYomnsltH{iJ_fzgd&3y;qgL&;7uo$mw&|`fMveo*Tdxt3G0=4Xo@R7RdKh zieq0mn2X04N?Kezji?`1Khi3fmAaTjt9fEL1!VYshcbmT(?@+5v@YC0+~H4F1lf4s z=`5nGMDaZAkszGeyY6ZE8liaL&O{8AL?g(56v8>E8U<39Jj6I_@Mi%PEAySF%UdH0d)_9nf3^OlD?k*W2f zY$mD7#YyJmtOjH~edjU2P5gB11T%O57|Byul96(^un(YOHH6B=GhH3p74kO^?CAVc zp3vl*f`Kam+^1C8@WAuoo&)S)Lc$(sh*QN_cW&+3X_4#~LIq8D;5C%hNmzeBQ5n|R zs_M9IfJgCMKbHotMo*f<&S2!BU)l!mtSLS1BLRO-59?D&yjPba*%C}j5~v+wOd8j% zv9TeXYF}w1+x(7FQAYad&`k+ddjLtW_%TV0CRsLI4Z7Mr2cjyLtQh^YSX9XSFoZ!k zX(FPs{u5RAa+wwzNFOn2(06ZSS`xk@@(H0f$detYDe12 zH0s9BqN#EQWr{hK(}Vz`eNTNnYSQGV6_|P~01{GT|MI=|n8gQhV_6g4@WtFcG8FQ+ zk}~}rsc~5(#Wv&EtwkrA;sK%^Y&Ih2eog1nvV($x9a4}rdWUWAH2o@UQAxfx}nxg+TmwHz!xLk}17X zj3r&@@d4F|87wV)ga}WVP|4|rb%e=%O^4&QbKBGXvr_t$`X zpOZirSrQEyHkA(8js!Y;bgOQC0QYJQc@Vrfv zvm!P-$vfV%nw5UnB%w)uqa7?u>dYFIA~ZV_AVn>5X*ksFoRsV0mqlSUxDztZfB6lLpjP9{467DBPIjt&Z)l)ysfoH=qK%Y5CE@N?Vb4 zZ^>NrG_M-Vk1KY=w9GS;a(cJ`!z1K;5|{o+<+#;ULmos3U_L7Nlt2usO}-)CPdqj? zdgrs!)IV*MFr62CL&@9|R0rr6jbQ(c9+vKa_enSw!8s3(fX>cg<)(IMQpV%sBdYlrkLKVQ=*@%^e5XjBX!k0eHVb!jszc}!Ym#~qDU6FCJ?0h^!+ zKLdTBhgt4VdBLukx%ezZYL9&cXG z0K@}*-Us5OrM`dt&7ak_*yU075FCaz3N+RwzP6Ht?Iupc^$d4_vVtum3)i+=2uT?w1LV zHp$qM^dlqRdr7mU;#x)eb5h&ek%{s(DMd1Ng#HO~e%hY(I?MF9juV#IKCX6#B z4Jc%wS%N>+meOoIP6w2U*>v{uqL~`?Do7xnsVuANR%FBM({qPBY+MBcr}?Cbp}2)y zSZ(m6OrmYWuuF>PIvrybC&ru8_-l&Fdw!3AngsolbYi?$N(6$2zaCAACY)!ZZVJ-i znr-Wc6ol`#(IE>zOyML69^R?)9Gd}%v8vp9hEUc8mSmVCCb_2D4yi;oH`xZ_h-p0y zrH3EUbnk^B996vaY)&j=*=gJPrnaBE2=|q{QqTau2bQf->f^wLP7|?aN}{?}_%0Bk z(>KMkhwXCZSOr7#F*9r54{9GH&i_Nk=oq3R%aW2;mm{-DsHuM%F%F7-4o+4fd*?%kQu@?c_AxnR!>n=YDRiC;ERKE z${<=%W~q^%<1Mz-KWnT0YWCa=vG{#|K`JrHlI2ZxJ?SI)y=|lr4yQY_!PbedWMKfj%YMx^#Fu<>jx<|{&kWcn7#a7XI?v>Kme15hz zj7!)R(KJW7QQZb*96OFkuJR@XgA~=Zp25Lm&30& zh{)vnQ9iQ(l)w6r)1ZmM6hzGYTvT!h`AN2I0R+pl<64ei&HSx0|IRDJDIfexEsX`% zl#Bwyap)jtfS&Y}G1*h=n(NPe0Bz-aZeglhce+6dG{fAxT7hz*TDr}_N;byzBu@zc z0xTL?0VZ~l|0Z#)Y|9+@)Kw!Qdh~ZE_lby<%%U61=W|lG&;b-~8X^`g3UENRe-4pL6T_z355Q#?khs*A3oytL6lFMc|;(s}n zH%~TcWwYJE+q$ivxvFnpqOzDVP_?+bioI_dTrt8R*?3do+`=LiJhuRVU$o|`BOcng z6B}Y5_j^0cdPX(2=FToj$I8K!)pnATrI;g(Kf)rr9tA_lJ^H;*o{k?1&`{SlAEn zDKy!XbcV#)_&TvHc?a*&ocmHT7uueMyPL7_Y4CuCrK=2b?EMg6zW?Lo|539=9JZP? zi0`(j*hkj*s%8$*ZD7Xmip*4I0^*V)fz@Q8mGk>jXmbZ4LQDbUP}8X*6{EglObj%m zp$anJ>B8z&5ZZ^}0cK zViAQD6}9Evj?U4Dm2<;34>QXOtU9~qF_ip6^Knl1HoPhh_%e;fwXz6Q+I4YNM}sen zC+%YSE3OMDnptwY}TlfaqoCV~ODpNqx+t_x=n8pZ?O zpk{(CX192%G;82fS^@MXHT=2gxnzst(%Fgk%|<{U6>Xstp@AjAqUgaMb+7U$NEwY4 zQS3B;c_a%z1j3fNuAdp!Iq?Ed;HE(;^aK~}0(@zPR^`IbC*sKq6GHWg%6Qm=wG|B>=en=ti=Fyo~H6{XtVoKgW((qfE|n_8>q(@G0{R2E-@KL$s3&eDo}f zp~)W9EawgV@ey~%AMR{C=iwV*u1qfZnW#VG**3;XhN)($d22&T<>oHclz6 zA*}i-wqc{`?S4RG9}yUKTXQ{)h| z)(qc)?Uj>|>6wxZ3}C!7+45NXP?~Ju+=x3b1>w`MFEWToXDu~%6O>7+Y=o0OPm4G@kZG&&M(s7;(#@MVuS_^{~GE**oM>D`fUr-?Jl+L!lQgZ z|DEkh9N$#dC!{Za&7EsNYo zi~sYUSaELW40JR;wM>HOMj~rfHG%b967kZ%YzMBv`8tK|IJObX0a!DVCt{K&*a-75 zvn;F7LA#?j5pdSrgz^zc4kU8w>YU1uS$OeWLD7XPEV9%X>h%wk47J8Yk+s;R9bP`# zS--vsl-Oi1FCLj%g#6Tem!Dj9mMfU$V#m>qV0jF9n;LNt*9Rx=o$fFY(iP8+#cJme z*_I2N>pygMsB}yl|1(z18af zeT;IuC<=AwD(SZD0UI`E8?k*C%5GPsjTqxStLA9Z*JOkQJA%mBT~5No+|h6yv}gyy znk%wAf~}JiD-AmT!4A}wjd;Vt7$F9&-+T+EJDkelisJLca& zqo3ydM^++HV?wJH8puejc&_N+!P#TytGB$kFsG8J;>g2XGdpO`gBC={y6x z&6)JIm#9*6$IxTQ5JN>#CSV^!Yx%$>-4x^D z^9u01yB1}4m*C;=7#i!LZp2g`2AtF`{z~Ybyd)Y{vZO~{Y9QAUv`~YA|G94&@SY|& zPmm&g+ZIsQd2sS7Dct3717l#g(3G#>o!R7-)(n*j7PPI zhT+b>tcj!x@9&Dh*Lo%Ui}uVT$Gp*qsr>F^=h1@lvnPeutV*2j$3%tsthK^OPr(y_ zgo`R&zYvhhIG=E5OIzA)g%AVR_z3&IEG4q_F0yr25XZj&m>0|X^14%08 zvn~eGM_MD|mt9l+fwi1IHH7Yu!SMTroXp*W{@5LQ-XD7cj3L#owTgC58#H$k-D*Mv z++FHaR@YjsX>ChZZfFHg+yc3Nuc}`Gt;9-rRN#5y6TPupcF{_!=s3amkHEjm_o~BB zX4M|(4KiS6genhn|FXjb42WTyMBi#ZbK)+sEKD(@UJtIwG86@YJ&Lwux?H9L3mQj& zCfWuBuqvb9f}nhae@ zH9uvf^rZ4U-*U?g7639y5oD{{MJ!h#KxMYQta|4+RKPfyBwW0)8p}XYIQ_>A1q1%jd!At+y|zOayR{?m|Lu+s^W(sH@Ix+$zmP* zviWMS4ov-Bjm2zRRPzr5@31P(w&?JH;LF3!KVXE#dgi@BPV%8KQ;Ag<-yta*Y>ua} z@L|^g4Ijc-eCi5Ke(Bjw>KiKdJp;jFPrA0EGX%=Kao;+%Fx_52NhGsh*g@o!0{m{! zIAaET%`f>9Om@URww4-30e{T&7(;%TiV5#|-hXgOr%(!v(8rAUAKz8)c#Z$a_n?K^ zHvkx~4?3-$X{=_WQ=pyour(6~UAp|F^cLdyxbhmD9~seM^#+wQzQxD@QZ*W?4elN% zYjc`~bJY=8y!W{NWOY4U9-^ZZPPF&9M;GCb1^Km)RV`w(s*nyL2xJ=61BuKa8#!9B zU4Z8`WRUQx1(jMR1{Xx`aT?Vb6cM(mN#?v+h&8BD8Cq=EBO#?2t;XF?HnnMUCt(RZ zcZx^^AK$4zI6g zS?&20q@Hvt3UBPz<)wTG;9fxK1{?XsVRvZj)EH=&Utc)F1L)eQQ_?UH%Pj;qvil#P z)R!{eW>i%}WIIf(BPzoqZ$`{{}^GC5=d3< zfv~=H^F^>brOMl#?(1aHR~o&kG)=u44J-VeAtFwmo6zR~xE|GIHYab)yc0%xP{0{m z#&g+Sw73}SWnq@ISx-4KsDVY%pJNA?Bcviq`ru`lss&D3625NhfiMG z2_=?~fv>cBvE>#qb&Ka`d$cTB2|>@>Lg&b%5I=F);piXz$(8$Ow(1g1BxDFl;g~Ig z%4cviKK6NgeG6y^OW{xD$n9Brjfs*pd|00e>b`>WsM;|8j@k+o?~MZwwKO>H;+I|l z@MPJXd=(2YSt)e$-mNd8`gTw7iTXa+ zIN#aGQMQ4ABlZ7K4|1=rD~_|uM`|5#SNF$+H+0WGAyG@vVEBv zKk8~xHrmzzps=giq=sR|ro)^;w{yeiN|WAKa1m&JCLf4CI7i5oJ-h_$8(Sz`U6t3& z-!7G`!hoOg?PbQs2fEqNDd}nbK;%l5a?9vQ8Z>U;I=ERExT66KRV3|yx|U624!?#$ z5yMa({riju7J>@9CPTmbAc_FvuebF*6atlCfnKNo7n12Lizkv$3H_JnljWL=e=}!+ z8^^xRN$q7?oZQ%p3$N*3Ml$#~u#b;XXbYgd7yc`Maq_E38BmbYj^Xwr?Ug$wds>Z> zL^$&agxqg78QQboM+5c@%cU{20KXD*`5dUHd>;qPa8JZpr)j8C;}t(~L=)CFkoJfV z0+H92SFrkw;Z%hGsuez?;Tf=tjRIc z1t8KCa~e{X_jq^%O3(C?IXEoCvQ3XT;T&IMClN`YOPX%n9&|o|eEviOO-C&qM_^#W zOJ!-{Z;{j;?IW6B*L@W1@AbPuaPAZOKdp_?B9cvtSfbntRj=vC_`iF5kq;HpR&8LI zye&Vxn%hfF%)sERa zi&oFlQBgre!rF&E>nSiyHe*2>4qCQ<5af5F$^R{NlhGB&1J8Q-U6t0BTZT$t`rc`9 z3tP<*)uG&qRR?_JRatjIJde_`@Fry@ZvqA{bC)hup~=bj{K(Q#J$-854mHa3mhuMr37}lofW=I5y(1XcXNEzu|!^Zp?whk6S7ON0Od9Y6l z7uS*%lS8XJd{mIjl(ONO*=!z&4@Ij;+?QYc??WS{YW-UfvqitvKCg0Fs9=jD*K|*7 zLu0_M2OEnghtC?GhC~~~O&IClJeMEj;-F0Zg>j1xKhyQ&A!!)RDn4AB=k*+kUV!rJ z(2~B)*7l|B@L7y;W*}@=Z+S}lKiZ%7+=C-K>QdV0%h|~4uT;I+0vZ#YS-tKi+6GM= zHc4i6xxBWhfO87(=2P-SQ=LF=G#i=V9Ngy~QuGqR+o=Q@EzghXJsvTb8f44>>tc)9 z1fc_wG6xl3+mFCi`@YRGW~dT0Xvp=$eZ^YBj+_p7-xn~ViI9Tawca7e%0nvr zZj~kH>JQuX1AeBV`L}3M-DPRg4W%F+Gx&MgSUPP_hE?L*npKn$i|Ts)?ih{;De*wQ zdtK4Lz+%mwBO*wuBeb>_0Vb3)xJ?ox4G26lPqC@kEM08ynb%faZbqvR%G4{M8Di+) zRMRNGKyVbE8ikec8~QPnnW0v9pbaR+RtB{Lwx)c^+{UqTX#1pRh71Q6^2wvO$F7G7 zHjl!jh~j!+yY7f_w4KCYbE-kYaB*%$YX5n*ZWs z7|kNX5b5Nel_HG+3y{>Nhz2Q~26b0_!Y2CN*MhN1GoXB=S~N;{deQS0NSPkFQwQu< zRa5=JCup|$>^LDZnRXp-DRFg|U4@z_wYtZ%RI?qO9gD%7JNOa|8!-mTdZ7Pgg@?vZ z4;3mn`!b*Uk6Q-lI666hjUM7=tkd4giV%4KJ8Vicwt{kx0bQOp1S*H!ncxKQTZIC{ zK@ncdUK~PCPPF7Iw`453tO>#BUkYf>Dr)A2Ij)} z)5wjU$|!h#Mvu~Mtbh0}`*Eq-)fWWh+P|T@aPz)U5Q%+=9G~I3Vp?NVZBEZx+E=Hy zL%ipKzi1;?5r|mH4~2Y$-Z3cAjb0ptU;quo}8!laXG`N&RAN^qOwEf znbOn(>Jv-<>7XdMEN_PEw|Ai0I!}iOwO^N_(@YRE8U*YX3&OJ&qLs1!%KQcBi8~D> z9)UuvP{(+#&KL3#p{k@y?GEXyKAHqSN5K#{B5K7!s&y}(ZZsH+0ot{i&^_c6c;c)# zD+EsvKUxs}J+TW)<6~`;Yba6poc>$@h)9!6Xb_B<_BVhMi-flK^zr zbl#PkTk@YV7ak7Dw&$SAIFkn%;=f_XhSU(Hy4JrSe2>*mvdpx?+f5nhBg#Nv+*ZM| z_+@sEf^Y}wi^bz#!{TZPi28B^MDN|MG%G`Bo!PaQFjd#GUzEf(&; z#M21oD903_A`UkfI3!iWELO~q<5-b@4pOsgTy%2Bo;NKc`Fv-hvVzQRHnIYSBF-{K zKFB?NXIBftwf6Rieu`fMkmSb<+{_#d=^=?O1_soH-+=-fBxu|%$@C6-di=aFaE_M@ z?9=%Z6wny3nV*fwN6k-(b<5nY&kU{1^+2mlN;17u`%`TfKrUs-Ot%qYi6*@1G%Sbu z?+^;N+2u^pP}zy}J7nq@hZU*jJ9<@P5$3Ypx>vy!#_lW*k!eob)aW!fTD{K_^s&ig zS$&QRw`%ODW|P|sPD|Fjc6GJR|+Sdj#bFbrvldA+7DHmUj3r1$>2B7&;m9zK5?3Ms?N7aiiOQG1(Y4elAREfa#A&aONjJ29Uy|-%_ zhD}V#Fv7^^jDr7&Yz1eXxSjd0@)-!m+CiC#8i~}i6N6A)XxLSj4%AjHVxky9pXN`3 ze2N#j^sY{^MiPhJpYp(m$|;`X#RulnI#Ie3|1m1R@|a~it_(m)!e#NRs{OHp57`^b z-M`vKlwf2qDzKUvRH`m(2Qe$Mqbp}n)m0Gg?18QNuALhS`kcz|(fKvs81QF;DMYD# zFW7LN4q4$?8lC{x4#=#U*X2(M7K1m#$D~M0SgTXdw2s2Br-dbLJ|Hmr!~?9&MvMI_ zt(=(QK4n_Y?B$`meva%&CB537%BQcs7L|-w&N_O{YF;P9SQDI}g=HZH#JcXl`Ud5N zzj6+2_ndQ|9Age9QDF_$yFPO%#)Q)(DkM@)TTr6xS-tY=S84G7f19 z37!y9QLkH98e**)og%)HBkK_{g~;+`+3t|QG4CqOy7AgW#H;j z?DLv)lFt+3~K-|Uf(KC92csF)P zPiTJ|K@X~cm470qyglTdK%1&mT~UuW1%J$(1+ZQ>5_%+XuR8J8GQbFuVh#x-@Ue9t zfcnrT8Uk`;76W&G`y3ifvzH@_6uo<7fzDNogOkhsw1DP_81uM|0udQ+fJu~$vzEW$VUfUrw(K%f z;f)~Ne7+K}KIR>FPrtMHZ!K3o5EW}fLe#lAF}2iNEmv`L8!~zF{0(O8I_SL%bSx3f zWuOreLNTM)-x+-OnN=3h*Ql)g(PuaNy35%ioj-4egoOY6`C$2bX4DB*90_y$i}`EQ ziTk?432w8$rHD>s40=Z(>M})MY#XpH_6&e&qPr?GJ(OJ607(eHgPSAtZ(-vg6F%W~ zktO3kWJeihd8{hAmH&WhHWtLXgzCmpWb~(4>q+Q+!A>0j{`sz8VgX-%&U86;9=MmC z_DPtN=MSE1^IGQ2lJ`Vv{|?)&K0WGb5&v2>Y?EN$-Z$YFYKEeeXgU_B|l}0*z{F@X{5NqUsCSBFp4| zh1QJg;w4??_OKE}fW5{sBD2k*uzA)>PV)wgnAHa}bRtMbbY|!o-|47rwA1&IqlhTT zb6g&ECCViB)m!P_#mn4R>*+%gS$%$kl`;KiwW(sagTWBB#K)fO;Q9SvE`c0!L%t;cSE90aq}V+X?aZRbB-95PGs99Y z;-)XMBR?fDBG@mm_f}LLa(pAOCo?he*@okTw=|-b?@%sZkb<%x_bE35;Nb$d!YhOw z2br?+`@yS_v@-$;ZgpDx*hEHsq`ti`U=wK`a3%!WW!Sm&9P}*nQrm5Od6~(R%n~_! zN4y(J=0X!CW5o0Cj8b@WGE^MR&1d{7>kD7UUS%s)BGKb2%=^#<_cZ-~Dh6YsRX0`R zAB&sYz~s=Nx$Jw4>2f&y%}|4a>0@|Yh?Gcc$lz2trueLCmZ&N^vY*GsKT@v{si*B@ z!-O`UtENi0AU482<5>0N6&d|IH#wz7hyo=z7+V%u9L^9d=`vWtPEu|~SXddS~aPNG??D3b^Y=8RS2ISZSZ_^89pCET1Nl2sn# zqjltSsA4RNmoKCR_@PS-;`BV)Lvk$GPj~jveoq{BqDVAwap+UXU!HOswP$AIZ9#9t z3apfVwYz2ORI#gW1o5g>y*`t|Jp=?58qV?GQD`9(AD<)@;0-O%a5?V;&G(X++ve;#jgp7;{0qDm!~8*4^FarXbTD9T#EwoF z+bMUNTf6S!;)1p6nXmV{7S~MO__p~$u^xg)wPoNQrx#?n2q9a-F2A~jLlTo?D^vqS zcO?6P7r2#^%ODZcJdhz1LbesCkeQ&6mJL;5u$>>?9AYl;d5LoLdhd`jf(eV^QoK_b zp|Q_Y3ln3yFimCa2U7y7NCZ5uW$EqH0qf_s?XUyv4*ZxUc545&ZGBszyha*3*;qJq zvTTxlvqkE)KEjyl?Xf^TmAV>l-j> zOKGOZF|`ArF1f{%>LnnJ|1nZ5B9+9Ogv?1a1Mwwn=z`HN`h?wtq;-z<3KTlk!@vnz-2r`X>x59V zGFa>qG+x!sd%sgPsS9Z>i0Lx7VGMU~f-1nZJf2LM5%^}Q;3o(4L2|)#3>(B4eWxMg zqaieSyYnls^)$$SUnYT#E_Ys zr+iq%6b*n=9*Z;AgKP?>-_J&`+@Xlegj6o@u{l%hn`&X;FwQQpbk>BYVqFjyG`KxS z_FT-YMJJFKQKxz(P4S4)BQ;H-pWMW&+zZ47y3ht@perGl?g2~eEq!mf&(Yesuylua1;;t-AsFW%hZ8A?v z5R@~rr*P@Mh$ldV+Q&MVrV# z0SR(Y<=%R(SEleUkJuX|@X{#D(HCs2o6QF42g!|hAahcm&B>?YmF9FCx8#E9=*ryUHSH4Mvd60yw`|jxuXNTHEo!)Y-dqBt!EuOh}(DcpI>^kl(Ei zK=V4mKijt!s4Fj8OV2doP1^Itoz*S2PXi&iA|N$hH`d^kWgAKmei8x#C$29`O$$@$ z%B<024eZa1v$jL*dtMt;KupIYe>zokT8xu0{J7_J%;H;L*Q>t|QV(xDnPR){w*jW7;lCvlj3!a7Q?@Q~{!Jqyz zqlpsSR)A#&v2){pdRF%su40Hdy`I6Q1?Y3d2WU8&oq}3&d*@%RX(ukCfvTw&t)PR6 z6oU8f_(4cM9hMk<8e68b*$%KxV>lecPx;varj}$8Jjf3OO2))WL6?3Xwl|QkZ$p%2 z`bQPEK}-6{HHyo%Ksz*S$F*9_Fqc3$TH=MZMLhZ~6Ec-B)4s7OCh9QhcI?c!Xe#!0 z(p(Xh-Q{AN8%Dpcv38UDnu0M}f*aHkjNaUNZQp7;spZ2c=+Zcy=0_tw=?#h(hSWz{ zpNYEg%@mx1-@I&AK)f1=*RvarIQb~Z*_*D-0pU52XiCmkAkKMVFu($2VNz__3_5VEi)DkHXVDvff#oNze z1#B2NW2ShN%wf8V2u)%TPgo6a=C5R^$B38OsRF;Vu3$d=A2G#Dj`+#cV|rkDkjz&U zD`ns$cM?j&;P>1Wd6U*22gu}42l%i*<4Vux!FlOT|yU@0-X%^T-4r7&=2^YaY=F%Qc$p9PMW{Eb4I_KP($VboSlT&3@vQ_=ULrWdE0ZXqkQDWMT z#ixJj=HZJHAmtB3@laM|$S9q4?83gZw4Z=HtTL#uf5eg`g=;l?31i3O9Q?MPGljQy zW69=dJIqlvKpu%Ak%Tl;98`C4W;@Z*>MgPFvd=M@Z-m{4fttR_51WUyZd@2IM%gTB z$k9Pl1sacI2=z(dhnRN2Z5%a>?cZL|&Du}1pgYGKrX_pLX`t+uuoYS70I&QHoc)8b zeRzacQ<1|vptp%u)!wS&+rvr$UhjtMbN*)>j5&GjP*N=+pd#)R@%PHgdH6@EF8=F< zJl>KVg2wc8=B)|aVt_YV^(M+WJ6x&@HM&YF5cGsmm8!8r$nAc5cg(~?7Z@xiS4Nk+ zB3HSs6kUpc3sI<*NXVGI!hdmcCOBV5f0cUZMlVYb7LLS*>XPuIoPAn>`I7GqI&AHm znU8ga5^;tj3Qce_fVee;H9P)gd#D1FOQ3=-3DvhnLD3(FUf@=$TpEA&rjLlP(fq7l z%lNa6oW#6skv*8>hMfd5628$Lic~4LLXO~kF1e6%;D^Pkp<|d-k%S;eyfv4k4j&OF zLdNf4Mjkgw{HFaJl>LA#?+Mb}*lG4D2wR~QKKYj}LEQyDNJDWsIz$MX8gc^RPE!ts z2?@#M*R-G+%ZK}`>=4T()*Z0HF9D#?xi!_->lJdpEA?Nk@cOMUkL8y)Jk9S)PBBE# z%ZYBU{b}Tj6Gt{m1-dSv2H}+l&VLi&6A_|$nA@^y`-0=kD+z1zHUpv?Rsrx;)na-DD5t6DZWA3-Icc!NA)Al62C>_}}0G?L|7|m-& z$%LM(WGeJ}4(l9aUea_DI`Y6b+!UI_cf`=&Q^;{7fGC^vE=T4x2m*n&PmdaeoCe>X zn$_(i7f0-*>j0%dN2LW5^}d)6QUrBaw>)%W8lnxhi$=Ru?;?w}yd|_SEb7@yy!69J z-TlTG)O`eB919|grc(N$x-lZ)tV}CK}7%m zSWNlG09D*y+q@1D=Ry=a*bcTf_YU_BwvtIose!a37Td6$H4nr*_p#!&2)ON=Hzck4Gv?U?- z7ZrucdjFw$Pd7ny9xk2u=B(|u`&+pNvU;y$=qXhWAZl-+f+ipzDetZVz4wi+vMdk_ z4G+MkQjNm#p-uYzk-Q9}LYdj&NN&WX?gVWz_v!bH4L+OUhLNz#OJk^8v>!5W$f}3_ zJD>ln8ZWQ6xcQV>APWiJN_2>oB;(2Xj;ZMir7Q1g#P(%fCJn5~md_^ZzL}x0?cy{E)zy=_ zWszV81KKfQw;}b4j6F!&V?1M;7G`EP#P4wN7=6RO&qshPx&;#YLoHS2pV}KN!_6+K zLwJs<@oG@H6KC@*Ct(sk-CM2CLAC zvM+I!W%1@qA8|vLJA6|Vy$xp>2aDQ_y;t2lSta@raFkWLxAkDzG?VUBiFe)?n zkTN+~rTo}iS8wrDjJ$Hsf4iKPFpby|;-0UDVYD;&kka9A@=uTtrs9q(;@Gd#zP)e? zp>73+zq=E<%53nK(Gc-j@0Xlaf$?dQGt8Vnmf*(cQ7K4a%I)(Tdh_8ZrVQul=e*cH zHr;8#hCa**2mp_3Mkg_k^ExO{Nn_uR%Kds){oik%^tQ2vPLjL3O$k}!oL-i4-J{j| z1{Q~yT#n!%AHOMRyd(yd&}Wurv;a3!v2+c#iPz?H-vE-Xv~{fJs#?byI*p=$MQeJ1 zg-VonGnc*#TnH@M-q~BdYoWWd+dynbS7D@fh7cm7R+rbGj{-dj1*bqe!1J5^xAwtp z(bSbHYck|rr6_;pq7>zs{Ms*1-3|OEWP+)r?m464lZ6DN0q%KJo1_MDU z4hR)||6Iy*mT7p|0s|N=iAmA}ej6Upvm;FreO{I~f4UCbqI07Ew3t@=nkiBLf8ro(()9zAYQ z{>{1)CuB7~f+q#ZK7pKx;2q%|SS}$t=eex1&d;t*%!%vY`a#H|F70wP7vz;Vu?*Ew z=ZMk5;H~6E6idc)+XUH_lL*c&&u295=Oz><(~hdp%TAvn&e10aMx?>2p~A_ zdqBkW;Z9%;R@5gP6jqML&ck}rK+`=QlkFfE+Dm3lu<&5y3Q3a8x%O#hl)4V%N#4KN+JqOLr6#T3%80`%94#qv{$e9XfKv=3Ztt(Q~wR50` zpp2zsdI|XU=^ikRQ+gbCsMcdrEpa^O>tuZ3-eqLfRrOOjBs3@-(+Y8hZRF6R_C}7o zqvH^<%?(H#iL!|9xyyc9nhbB`nsU2*)oQn4vD(XYB7qdTD;db!7P^zMDswF@WP1^j zA8=Z~=1e#%;Ln{EfP3g@0iO=tUs%SgDe(cbUJ9mrv8i-v5gX5nwGNf31GGWAK~AtQ zl5m3)8I+(zK?ed*bvDqHU9Js5KaI6CQ12y;Akf~R1kn~WzcygbwI_?pr}I+ZQr}p? zqhMn$iMAb3M879c?UIl8(tjXvS-ZU;#CDFwV&?ZyFB}<5Z~VQs(atIoGnX*6kl(|{ zd%|!rsKrp90++)K?yeoQm<34@v!fGt-AE&u1ZOMd_D-mzG1TB(SH|m~$=XQ+)tU7? z)E5}PV)aufq%R3Z0|%JLxZLQq!_-|K3emnHFoV^^w5}+1%2qZK)>;^WenfA?&we1QXHT{C%W|nWPd@Sd$BPp#jYbVybbJ*U1&z|RdNN9>Rs)6*L#3Y4rDO|DU z5WCSt#Sg-dbDbv~`zs6g!=1rJw{?)GgQB_m1H6iHI6VCor>U0N z@5FfVX<0A=2U(jtLA?hhSK>T2;BUxtScy5#8Il?)XOaYR$C{Sv3&szue_oX7u$drh zI{6fLQQ#NnwU(^G(E8i`c$~61X4o2pKWYR)d0nlQk+8OLE%rrWvr5iDl?hNdf-jPm z2KGp~c$wLTsXF&cl?dV+9C~KzwLb!R+B^tew4PY z8-@nw9H4{Q4hmynNvmJz2#v00k4Q&3ZX6=(T|aDIr&P#e%)yu^5>3Wu)i;e-?F;ia zW&q&QO$=wZD^(%HV4K_nH=dOeA20M+9OCcz=J1jVs`;Fb9t5jk@fC z;Z@s?DKChR^|=MNF&ft6GTj@$JkrT_4tl7G9i`xk#}6_o*$LwOZT)Hzy#lmddbK~$ zC#-lT#$1Zid-F`ev2KCsl+{Xx$zSLt?UyoH$PpUVjoKUGCzQ?~Rc#xJJR`AIyK}g7 z9tU+e{TIO}ANgr>UVo=%zaAAUJ4C76EH%({q6x@>G|?3TrATrJZBM*!p+-O?_u8C> zN@$NVax*lM8g}9>(|L>l-BxZex@U#9NIW>9b69(@@pU zvs&M4`nyE=OvNP=y?k$G6UD+9bO{jp5kTNwUGqLD>Uwp#2UQbFNqa7~RxBp_ssFY@ zyznOMp^;g5zUx?*5WHI(K-EyEVAlrSDn2yIm7#pL#F-xa&kw#@z>Cz$2h{M0;}!x1@hKXgjB z!98j*Hc0!A+(B&ANMJyyt!WA+7ibJLs7XwD&Vf3=+LEP;rXR~;MXH|eG8uZD6h4X6 z5`5ot04Mhs4}7gjM=cwLB#);rpPP5GRZIGii_w$D@)r=^Gop&IgE)ll4XrqDjR@)Q zC>`IQPGOebBp!@`kisO{I$ILg1>mA^@%8IPEh0~r9xDqS=){Gv@x@U^pgu25*jPhw z%qIniYef|PDmv}HlyThU)0bDyhqeAF0*D9|IrZNAPkIsovIMYtejo7GhYL9n?HKdV zdit0g#ei08uYGrA%r7M3nCnZb1?DLknBB3MW)lnM*5dJk{>jqlY)bTl_ILy!GS$#CVpVfO7VWt%@4O?`mVqC{;63xf`D?Z z@1)fIR0GQ5&yHxF_jHtdY%)|*IRGD;r{9z9z!)w~!1*su6O*2ixqL5hqCRxC?5);7 zLjh+}r}zv&SPF9hRwH#B0FU6%yH38yKT=qQq@;>W3|uK1#t9(PzTx-arGJCAY~p*Q zR5bvakbKndVNvi3;a`NsG01+pc-q{RE4P!D5?@VIr)AQW^s1H3cEI6KrIx@oxvJMW zkoIFV*amM%teBb3Thi*sNR%L&uUaDANvC2qf8s=Cpa_Y%PJ+iNdJ?%Ec$g|h3BHod z!n}$RaF%^?VSQqwqMMDEFZapgnR?a9gOpRw9YBX@%z>O(Z%#sKhT)4T4JQV361G)r zX8DOEkSz0qTP_U708H^UsKjBdkYe2a?58BacM$pnYJ7g?=+OEJTjJjDLbCFIylidI z+||)`=$~wVgXm~bj>xa&4Re&p=6H)IjLDFU4}%Lm+gZp2NaXw_`KAuT9A1}s%WOrG zRmt~ut=9f32M)+Lmd$sj6rgI%V}%$u8{unA{UDNK48xVrsUg*fI%RU~DWWkV8KyM* z6$wc1&kH&Cnh%~Cf%hPHIlv^&1|#&Cj5kHRG^ZO7kzsbhnY4IJ5;OuZRm@D$Mx@rQ z|9jk?h+yw;BUr2kw&n^4@<&RaTF;+b-2Vgu7Cd6A8A|LUK#J*QJK`3hoH4LpCI-kZ z0ilO7AxbSDYju%z8n3~W-k8$g=7$U*m;PcN`R4lc78{_7{i*i1A=o*}B$RxbC@WV0 zW?NPgZQgB(Bd@E;{J7EeW^$05XGUO6VyhnxzufFNW#52DN}&|s3>00R%-jw-Y8KV* z96hI?-!p>Oe&GD=Y2v6#uEFy!Z)N~1ro6LHcDbkl&M2Ilr5RYw_CK1 zwA@YasfreP2HJtrhxr=q67`}_FJfkec_)?&^4Q4ru^fBiP4@xi;-gbTlB?JySRc=W zF&KOl6-B`)TCiB{Rnh^D9!w3}nZ-xAL7{r@BxG^X%vDK+CS05jz~XLLD#$6oC~OU7 zIhFc|v{etIW8EVBHWo2Ue~byFk&$!{Qp%ymNQ>1?Uwu`Bv)E+WTk-)NWteFB*Vq1h z|GCJY%&rZdQAW^^F$j>)-dum--F@WO!B5-mcQw3wbhlqsU#Lhmt9*=~rXuMF(ORw` zT+}aX!binh?O7oHkX!;|)twJ^XQ)SY!4uq+@SEy_c=RE%;nZ5Zr>k5!0Bm1pfZ<;d#G>qqEwi<2e< zx@)r~?XY_`Q7??w#lF4XaJh6Yv1|pXD^^8q>((;Z3IOH(Y4wV=OFsm4E{+Qr1C$T44)w(6r>CbPfJi>Dd0L^E^ph7LHLd>WQ@V_8NTZ zV%f6T3u64E6|bjdjhcR#1kc2el;(_U-eUQp-Wx;n1*5A|f7OH7z1s5921J1(dw#5} z7e}4i&#k&oe#mm1P4WA{e}5#cVrMfaNeIAxN7k;0%wzKa3)f7yO!R#|!&>LK?^d?`gZ#o` zJ>8uRPp0bD^s$-EoBa3#O9=xd)pdNs+J+_R*}}kGsWFW%myDbNd3g@a3A3!o3BU}5 zfbRR(`=C*!;>zq$4kZ_-nos?ySKON2F}oH}ir%!Ls{gjWJ5JoZgSzzpvt92T8 zi@Mq^CW#C+yl_OoX;Gcfhuh`ww8K)xt>a^(5Yb{9uU@#FUxV`Ny0Q325_bLtczH!GW9(s3gK6s$uEkN@`TnDH=BScB3Bk0?uQZGm zmqfB+w?&pOy|;~?F2b|w5VQ-$AkK#hng2&?uG?qxz>%%JBkDi_`PNCqgBN_i>?Pa>KcpnfX>AEw`^DeOXRIS1`;RJ-qTC$K_@@8REIbweXRNI)Yv;XnL! zKF_W0Wl=m#;Hi57k$VMraSaE3lyN3y{ObcVZKa z^#pop0d7B8OVXk!xGRKG=ycW`q#Vp}vzG*1JnkGzV>Ag8jxgRm1Lxl6^Hfe6dzT8Xv#C zwr2~sUT*~b^M9HHeY8n9+$bE4v6ZYh8TC$3cO^RL`M|hf#G$fG{vzbE1UEwIl9K8N z5dxcsIy6M*Rq*b-W(q=yd0fO~-z!m!D0!(3_t4yT9KbrD1FW<=7DO8!_@#>tCj) z1Poq+eA$nSg$oD$&@|YbubhJ_GZ5k~PgrVNyz{}= zKJ>C-g1D@wxgzyZ$814bG$K2Bhqj3^;KdBX@Ey<4X`f3ky+llDd1#LE)O0!niUUr_kuYTtcmxCnWKlm)z>5= z`6;=(yD{sMcRz&@T^N}kMV5}$Is<1G$acKftC6Uu5IeX1Za#dkcQk=WceRE+`W5i{a@4k-sEPdLt8G5cDY%om#1p^3y;~zZ? zL1mPcuE=r_O?Ko7F&11HT|@=M*2%p8SOsf}$g{z??Defd7fZbb=lJc&mVrC?hi3H;2&Bt!??yu1GEQ?OAc)(Agpq% zD`pcBF~6LY^%Z&i$To?|^b=>{EfW6(0*2Omka4>D({v;y;jZvB;%&vf!sAV)mELir zZ#Arw!bny8TE$VI>s^F=EYX~B=Q_xLP}HY}8b6J>?TR9}M^6Vl4xB{SahVVjzivu| zFoG?)-eZdYhDNrfSEF3`G5n`O4gWM|P>2S;RPP~ACPg&)up#Eh(y}pvwp=lr;+0EX zB_|T9{R+$Mk28-HobawN9~@&8ett3Kmw}<2D@J1Wg$*(ZdNNe>gjf`$7!z|FL@#{+ z*^$RL-t|`jY1-;FP@`pj|M?|wbRh0lpp6B?ujhqNj_j6=zc zpJP--O%}mSWpJ8Ls!|58p_g;@Sc9 zi4%WJYfWo_vL;_z6>mFxuA@F7Nis+Jl#`;t2WRv`KyO_YNr08;ED{m;T$3El-_Z6IMDAb2**Fg<#MTLm-;e~7?YU=rV8e$(76;E(0-9RHrE_*5x(2cY77R z7=W6+KceLK0fRLx?k(RWSK0?mJE6EEP^^IZdMR}i9AiMo4^PSNHD!`e+OUtRKikJ` z)-**I$#({<*@}gwCyw;<>)~1DEJ=BGIUMQZ?O11laA-m|J!`^UkKqP!!; z@ekHzdyv@d^uC7zYQ_Zdljpgy7|Glp>rX3eWjd*G{Cq3b|<60#)VC(qz&>M7hk5M`K(8aHMXh>F5Q_ zWgDRv z2BAgJx2N(bdhH)O79ld(9A-pmC+GTU@f%k*a3YkKQ*TeJS-`XkZ<0$q0)c(suEZ%8 zdU~Tso+_diWfZ18)hE%6W{w(8Hv7%J;15D6bt$3a^=GNQ`3~#1=o{kt-Z?6T>oaHe zZ+b1o4mkY_XGhk1XMB26{+rx>cbNTmj;FWrdj}V3XWXVv{l|Vckw#rs?bM_@hXn*3 z;QLUWgj}Qo*qvmFCT1SGadXwiGc`BiJ>JtB^WAlSr zbV!j|<`i{CcQ{w~xzorJ3F`Y0_FbS^yXdis)Te3LceY1#OGl^Nok7>jA6}qJySgA( zXX+{|ny*9zjQXr5&PIHfqbr0(;w%%?sY;_0K36E}wb}^GJGSRY86IpKainl=6gB)d zyt!HJnS9?8@kfNdUJp~;J)vTTc_EJ0ARu?eKgAKEh_-Spb-<8?O?t8Rz|q8(W@4G6 zLxehya>Lp)YGRR$+T548$JnkQ&uYI?1ieW8TOVo;)xT|MLFp$l#c*Rnh-cw<=$#Hk zJ$N#YL5muHl%vKW2FhzOW?_D9`<`yjH}Fo%#~cJ+wh3?+C5*DjUF69a9BQUJVZqo( zW+hZJW=S&|+^!?0YX$SQc%+B$%!I32Njg7%T;qA-eazBuPXSsx(Akc9%-{~08*%b~ zEg0#o&Y9!*A1`FxmRL4J)|@ggav#_Q;QH3hWltkZnVOQT)THdzl#UT)25Xq}TjZbdM8?rsM9BdkG zF&Nh=ikb@{4&fWcwU7EZ>yH$=Pc|@?)?xf(cT<%=hPRYe-QERUv|x2# z#?(g8XH$6?sP2XKe9FwR7@*M1S22vL8+x}+m#aeyht&~cE39@ggfi}XT)DDv1x>YH z{b8M(!bd5i=^27bX`9PJTYY$J;hHxikN&P;?-L#-%)NHanF~Awx!+UF_^|)MO|LAM zi9E#Fqy3@xr02>A(d{9TUvMK`n~6ld4s{ zDEv~7l+qd^MFcQ_hO@|%=R#H&Bzzw{h?Gs{{on0Y!UBY`(x>y?0uZxr+7oG|4IL%8 zBXOLTKm;Yt^mmE)9XxHgHUI;{xoZo5O}{zuYX4F&qcU*l>mCra`@8zjv@Lor6oU80WDE~AB3&D&{YXt(gjS^zs)`Y?BsLxk&$(Sww7;%uvfM4@`v>3mSt}7f$vY&<5KB_+o(Hn!KK4xmt)Psd9UEsw)SuWrYd$Pm-c zGAEYFa6UDclZ%=T>PX%c!w`Xd<%>d%w1u@;x^qhIYOn>r=xD`Cx#IAU`^#8<6Ze3F zYf>r#J@5W2A^WC1&YJD0bC)CuCll@w8$ z0zp**Y_O=`<5rs>a&~eGrjWgWCAGO1&N5!xqxI%hb5YjRh}vR6Ng6BxX!97~G-erY z+c&OgDHpHr63u#z7*iHUEp|T4`7dCt)YbJ;)Zhd@W1Efx;1PQ6ZJI9{0+&UWTrIrB z;duQi7G2D`YPC$fYtHu;)2`v>N%8~u7+hBrfzj{shbs{kzqIkIx@=$BjzeRy`OYLQ z;z$9rbwb_ioDkvl#?2v^sYx&K^LNAGCbNUWQgM&*$GRk`EM`@VmUE+ajBv)sN^aBz zw_|pSI|*f@5CU&d6>hKHABXN&&bfXo>tHF%M7`Mbv4_Vfa&QOi#fsRd%8wQOlT+pA z@UaNNa~*<`;OvrbIyVXxKMJkZntHdDOT*xXqH7LD z(v|pzhb%=2lNB@mmJ8MsqQ0^j{PVw?@(TyJ;PX1QmY^%Y1PjQ#L^|o z+LFGZC)^-YB;2b6gEmh_Hc`?EQT$@iEA#Kc@YucWcp@a_w3q*faJHx?I#gG+c}#qN zK!w?zuj}MRFKrpR=6^EN?b+H2^3pcjQ6R0mtb~JHajka21(hQ89SDMJ@~Ep=MuqPop)9VZKq4G_)_==lfB+I_$?Aj+LoS6xpGiJi5D434FAr~ zYWY|X*;w(_m=}{DxuB7S(?p5Q=mVBC4n1_AfvBn{GEMha?(&1!`^o9JP}P@t7{v+6 z;X1W}U76D{dVju znKFyEeU5z<`eYe1Q!zc!l}lWvRg2D8ca2ceSqD9U=2Jn8CE=KYNUN+s%$5g1G5dXb z?cuE8ircF~{UIpa@VZ5QXNY{6lrD|XYN4b4x38`U?YY?UfFkv1!` z>$6nU`?m#mHHjT06;__IU|HT=|Fc5lubYtR6=kv7;D&w%h0pkJ^}(N0$h3*_kT*R3 zx<0E5hg88iKX{`dv{c7$H(CZ;U)p}9hZ^);#ln9a(IXNUnM7@5ufNI|hcx9*$LNlW zAQa6rp9pVM9KSt=rRbp)fAbzuPyHD=kujhn|b4J0nK1~bD2^X?G z@7GKOZ>k}K7mN_(C(aY`C^hP^HBm+5hWN7eBSG$}XuUG*04QuGkQE~GPr9g)8xSrkpzS{n3}gaQ3^M`)qVcYX$q}| zByXzj8G5hd+eyXcMFD%XS>XC`zK6rjIo0E)6cXbh2|r2>&T`@_J{5yA@K>%REuNqD zc-=^HHBO37XO^#jyg+WnHtN5$+jHa&-1-b68+FI@ynu#{vGTBTXSlMF!#8YL^Q7p= zLD_dZ`lxRs3Ux|uG2_6-ZUpEismf5#QbX*&qAdduL5pw+~~I(}9Tfz^Y$ zK_Fe}>C=E-%j6n_9+QS*U;JA+8`Sg>vm%^neHdUwLv;C;=CiXgm9oiZ&nO}Iw7z+* zq5iAY$?Eyod=--<@a`BH7bK^-2p5@L%nnok0@KMSLr$_<@8VMt1QuTue$X0=tD91;vRmt&^BLKk2^ zhk$WS+6CuhTc;=%?S-O7!Lcc(uz8rDBh}JzOD{Mkc3#~PxNEj2l%u*kd|h6@=kLFi zDEA2GX5K*SpaVo9kFH0BTzo`&P}InJj_;(bGtyTkke`n5FTgpaL4fm#&YH1*0HhQd zktHw+s{L)49cM&1LtCN4m}mBOohr~zb9J-EFk~w$kZ+OV-jD)dY9nP8jh3`FROm zrEG_%3%0JBY!VSOGMq@7YA*Z~_(+%G5}`0!x>?;kO9+!=5+CGma(f7Ch7R+*_tY*p z75e+Efksd(O2eL8Gr6gi;_`z^Z3?Kl6Ymz*t_TRj&mw-K6CLR_T85>hAWUrhgfN@5 zrB4w{u+IkEi)VDXEq8Vaq+uMPRhflClTUGxq(Wx`u5O#!b}=*e+2}g%i+&0gk$2A- zQtB7r5r5O~G89u@#M=#~Y+v|w!+TE7$kCAUXZ^29=qh;e)Vj!jV)2nj0usth&!4{% zR3?vwlWjC7R>&a{A+YMIuY_csAYZc#L4jw};49@Z=BFJ5sK{AFE{vlw^raJrnc!}s14 zGt457QdbSSS@T1_L^WUsQvD?JKxFjr>5yK|n!i`hF&~XBhSl;7W^HiYFs+o%byvF6 zOyz$N9bs_D?>>Ffk-x;bfBx`Ujf;m=+Q$al-o~g56F8|5o&BAg#63@InM(JrkxNCr z>H;!Ev*th(YKcA9vHXwaw8T_ND}}*Sm@?+|PfLX-u9ln{12}+8@Vy#T&PHql0;D-- z-^mr~W1>@zNn3E1q*iJh(x1M;Jl&QI4oliofGv!mQ@y@u-LRz^wTc?VtW`Fz_H-Pxcx!E93UA>EbBM5?90bt`R~Z7L(<;O%iKXE7rGZ%U+A6KaBcanU~c zo550p_&^=f0EwnQShnY&T$?y)cAepRBV{XJc8eNy4Q32u+}by?#;NujpB{!mw>Ju~ zF|yGZN=c$20j>L>@Xj*#%8euBxc;lQBn@RD*`2Ztdv3g1br|n49(AFoe!w}Ad)$fd z(po%V!WRp&KYVsH=>^*bZ*jV6$Pu1BOF06FtgQf<_g7Un<#Hvrfh$BfQ_Y2_k`QomRu>-=|V0eGLh`lUt?>u(+uBu5ZmSL)`4;VEmg+-WWOSg*2)U#d2$ z1>jFj9?SXT1@|qt$m?sy)Kr0i{{Tm9>5A}A(Vdt>FIt46^g8pp9s`Cf#`g+ie9Pz+0J$4nchbDL08ohGecP}D=rcpOV_^aV8Iwp*PJ!ls za+GB!8i6zm&t7)=W%|O8n-G}O`G)L^YUXUSQK%5|J$US;iV&k4H#3~6&9f5w#@MdC zGr5g6>haY0)jb{$ibdzP0mGA_7@$4J`t#;M!chNL0WlQ6na6;TZX|(N^E~|M4DgU7 zk^P0M3kB_h%gn!Tkjp53+)SYh>2sG8bs>uVO}OVMY#rN2vp4?&XAfF6Z2Urlc7Sh$ zUP?cf<{TX3cxlQ=R8eI-IYfMURQU#ryv;lC6@eS3X#(RZKW+un<1W#K!CRRoh<6N zmFQpg%?$6I2WQK7vNUyW{6W3or)lf<{begCpi(8AwnfIA1Z;Cv-51uKcyaCS0Esyn zo=XTVaN{K=_m7zrJOYY=(V%Msw`^G#Am{eOu%rU97yV=0+2Z`LzQ=j8e;CbU?Ui%& zqvHtEMKWmQjG2H`drPxam`G;#4>iDL@#=cJE6?ig+2U+lhkf1vnVR?ajAiN%I-u$TaA}nDqX>h5 zhQ{F*NY1ICQ1vnTN1}{Lw+lH1e$l?VW}o*Y>NOqQoGK$Y3xT%AjV6zif>zubtm8b2 z&u(yiP$HdCXPaseJI*xKThnj`VoQ>^!dQbhjTb5O{mdhtEnpKm+a1!ykcW*j+(@{a zdeHRZj7%PYrjav%Q+=fGsBI#&OVu2xTKGz-W8(82U=wUOi{IQW-dxP~@IK$Nd!(m+ zyhVg`m%fz!@ux)*Vxj@r)hQuoUdC!BwyCu*P}cv4ER1o`ye0RTXq85TSH8x$m*nRt$Zy| zttEk;J{xoY{wj?S&8ajmsBA48!+I}7{k+p*88T8q?)XF0E)!Nn04wQ2XYaruHgk=z z5?++sgP!%YG1w&RKVji(w(C+N*F+pT0ano$)kTb^EocL z;goNyxnWOqV-~W_7!X2tImBt~=Sg=e7J$av)y}QII}Qgc$y#H34k@HD3ZBfwI5UOZ z(nCvwY=#Dkk9r%{{2wlgnBsqcHT%mRJw}+}9VN@IPYt>L9cbl9zEwZI)Er;NjXMLU zcMoRqkY<5EMaPO)2&f9&`mX3pvyB`MZFb&Xx@9Ldz<-Q^5#r8Mh@=M>E&1X}zV<*e z4ENx$ty4~e_ccdCmq95o58akagWEg;LJ&VRQ_kgLu%lvY+x2GF2X#>>;=n$o>o&Ww57_O+wap9FL#K%%jhq3 zPEGG;Y~W#3fH+l7{7p35vl)O9%g=Cdev9CxAC@xNM`AR-{xpyWJvf=3zgkgeo8%j0 zWZkd|NzhIc9gj7Hmjk^A9>{R7!k?19QI(Fl+v&42zGJcjXhfToOWuU;?lMQ`u+F_? zdBw__RNIX^R6E_K%4m!^*b5NHRd`WNWp%9wKOG)H%nyALWb~{-9w*P5j7Zh+81#)m zhU%t1{#{qH>HzT!qdCKd@V?1wi2FXKo;i>qr%PuV+g<$S(`rm~i%MDH~_&iMXpZGpyS zy<9yS``&L3AmW(RB6?R1)@{Afk+Od7z!fUL*C@lIMY)>NkjVic(i?5C02RNy3>2KQ z`Qj5p2ngQ-GWeQfDtSwM@kubD)^&-SHVht?%x&00dh0Pu^rBM)mCcHPH_&4DagLxh(5OTF zqut&S15}@(H#G+Sul>Hh4oL?BC#=@*!Dp(RHUlGMeeG1yNU%{t-}cZKG4Jg1w9(Vg z%Pea&L#=v)D$ZH+JIX`D)2CDe$KoI z2IU~S#)A=`^$&!k3+{T9oJLdGIs6*wW;`8gG*bfDTnRZzMg^cESYmdn>Ms;EK2L+J zZxov^x8Ef6n5!v?nx0N^z2unHx+kvc8{*VCt;a-|;T>s2xSDKoQ9!}u1 z*KQ?+N8KRP1-UE^Td?qDq=h2sN8c6E`_@d(H0LNi2yw+Ti6|I7gs7CW4L}%C$+aO7 ziK8)ELY0q!n0zd@qjJ#%wn9Y`hHOvF)VjXN_gI^x>P)yZ?tTjfZLNkJ0tmR#MrV3C zt(vw)LAqz4qYnx?wn1bH6Is{7E;)k6bWLB@M50Zm%ESUO$N2a9+b3I>b8wCSx3|My zAA+fM`pN1^?x1CP-YViQeZ$&ot$eP(*RR$LX}QMl6dz8mHlCg-_D6amC1{B3at;2Z zueE?qkAJ%Lu*P(^4zeGUh?%R{L+I2}xk`x95{FE^s&P_(2*zZkFt_7e@TP7T>m6AI z3<;UZ3mZc?_z)UJoB0D5@vC-}Sn|+(avv#v7R*n=yM+ z!CtQbHS(r5SXr)ofW-6X1ikp)@-9zP`CBd6O#&aKiYcH=0l|jkzku%OlqE{B@y%&j zv$8XMh@*AEqJjayX{1(-$*?j#%m89=GHA%kNO5C`{D|e2tHQWzSjB-*_Aim1D zx&M)vktXxKv%qYRE7gGrVQ2OIZ}=O1bZVcFqLSXQ6nQdy zQ)vyzm_+e01&B95*FP5p$pGHaBNyLQ_we{h0FMZXjwaoi@GCxCOV z?hI}KJ|bJt9H@};rZV($@*SP(>x|@|6nIyj?Q2xJG8DitN?jq@mQxGHIDo9isX8|4 zMr1Jy2EN@{fCeL|ld5)~bu8{hmr<{FPKGqHU7`;pAh#bz^@JsE>b2&+CeydhCWY2t z|Fn>2<1mOplNIH7d9`&!oMC)E3;k)ZAugIr@ARsbHvklN5UQsfF)Bv&%v@BK%j+NB?fHkcG{W@_*Tbauf&df#g}2nQxh_`D}ws0jd0>S0{A)sm^jsLt=fo{JUF_ zlJ9NI!V|0@$r7=N@$Are@suB6&tL73_lA?;gmqiD{`AdT|BG1-i_kc#d&o4P z&k9thrLG{`=c2?ZGmU^}{83RwFZF$BUV&c9C>@~d+U{)Y_{L)Hf*v^g4Ny@ceX$)! zV8dHDf`pDw5^eYRO^4y9lkpv0luj0!15z!8M3)6-2u|+U&&Fr#&m*k+d~TI#7dlTr zSyJ82&XU3ptzItFwLq}w^|~BJ!S3AyVcOhb?5~o5a6;2C=g6C1R%ScZO`sk;u>>lQh6%>{RV-f)A=!~`!Rzh|~u}oa!(BBRM893ZK*d3c3Dj%2pxrg5{V4P;woV@F2L!ex& zGRllraS~ccxBPzObYTjMb;%Nl!C*}&?xr8Bg|!xsY1<<=bIW@^SB^7K#|aPCztyH= ztw&hL)bgdHsiKH|H#?@`k|Z$=AZImJzdjW60|{GLIQXQbqRSKSKn3J)9~t=Le9^Lc zke?YcP1}Po$SnX6C+GCSYkSvZpL7S1WZUiiuNIr`MW}C%@#vB-V`ujzg>&R$4FF@v}f-Asfa*6E6G z)SFq&*rI+tU&Kn!_8TTsCRU}lT+Y>5fuic&294WZ0SHFD@!dchuXpVHI#VyZzll|P zZos&?WFb47D;T*M@X-ZUzc6AZ3+%ZP^B|85UnkK#mWuDJq*Zn(Vy>KII6mKw@m41g zJP$&JE>P6gDv$QfXgOEC@o3T_d(>{yBuEcx-aiKfBgniy{sZlB+DqCKs({;K^ONGK z&il}huIVuXqp_4d>vD|UnsEkp20r?&Bc_QyfiYZksqV~qYPR1Z5FnR_3{fQ#0?4q7P)?A*^fAbv6AapLF z@A`?dwjPP`LDQ?8V;*`Vk3A&I5{*Y|xXz&>Zq95@*(T}e!C>g#o4$LT<`1_auDec89!$d6^LssxK|b~FM$8s`VsxG!gw&5lqs8c`l8tswf>-MVK+ z4x*Q70ZOnV2%v21z=-xOEHC2QI^ys-4vU;8rYB|&A`w>2g`2I7R2shy>i_ioD@l$# z)e7%gFl8{8xQ0n5)^ zG9-bZ(M?!UL7VdzxaKprTJLkR5|X{0y@&@xgRLD8;KDIdrSkZGCHXMZ;)~GgiC+ER zU_r()R7qJINv5;>TnmJR-hbS2?6CU4!;mceaCT!gUBp`rzb~BM&P#l~$rBnyA>w=Q zu|#tvr93lVGg}wDN+hcv`)>wo3?!g5O>3j6^WzdK3$t2yhj=~x!e)@9=%R0vzd3N+DxUXpiBcqwEq&@S@XvL~n^2o|5 zJRzznLN7ZD9?#Ou<2&XAh0#$K&Jf&r_G^_z?z}ZFmTh$!f({(o+8d!mbJ5E$38SX{ zb!~XGy?%bza@8aZ8ETstVdzN6ZLpC}Uq1 zHW3xbW2^xn2*P2O)XXtbN17i?2X9*`i!yuO`iV**{PpFl7ZqE-!=9*r8F^=Hg3AT+ zaEv8MwaDVz^eC=A`!b_IB(;kdde`W^DAf#_rWvthj=Hr`ad-d+1 z+nzqtxv)@su}-A{|N&{BU)?E^|WoB)T2lqpBYOc8v6 z7B+%6l3}DB$C@k}!^cyCT4GZ7>1_{~nKT9%w7r zS7-Rea>xnNH&9zxTF81PdPdWxz8D`)|M{YtN(qZ)*Fu2(rXx*% zeo$|e_!*}njp}yZJmo*>+5JN!I9J010O%9KMa*?0;b?&jry2c|)n+!es0# zF0cLJz;!VApTiYu;zIz`P`kdGSlN!zIjk`1)eE%|gA52&R?~cKZyKuG2!i1{fFH~ZpWA8--jiHv+Id8_qitp9N%F`(%TczA2=AT}9{Ke8)PnfUb6S*gY+TzBYwu?h zqUxKP3d(!L(fiGT9dIeVpZWTf;n6zf4XhSJaU2B5tw z`>Gn9Rb&?Ch4jV?U01P5rjlco5>hdlyp?YcM3goLIIG=)Q8 z9H=)+BFDabiQKIm@uZH3Hc9ElK7@W@cReHC)SD!&u6hRj9yHHV+dhkI0?F6j{`R_e z3K*IykTqDSo*8c{m?*= zj?ugn&-U4KdG}my=9F*G#n9s@JsS(J1)P(JU6y7@IedvTSE2Sb1H+7+;@QP~uKmnG zLRY{q<{}@*A{nM|U>4#0XLS)@N;Q5?#R6qB^l+nfFxLPd=SJE^Y^{>#ECDQ3rnjwq zGH31eA96Pjan49$T9K6Bdv>D3rkGGd7YvLOwNClTpknLqBzZ+D-XOe~qC9M0CG;G8 zjf$!3#0R;JLwY``T{9H;&`G+sr4z-P1IGVmYSeOLL5ex6v zFiNz$e*M`E+x@QaJ{x0x8Aka9DqxM`2}%_3>R03{>+Ybux`>|dU-<}iToe7`ImxD! z=g&yjYH>IEp**BL!J}DhC3@6f>twkt5KcvqN?`c;aIVeVFyr)Rv$FQQS$-ysVtqq3 zli%ccMqVDisgt&5m7w|^V@Ae>y`G;13y|1Hy5B`Al>Jtq`K{o6Zoc>hyBLtK{1P0CkJF-9O$cap^O1Jc2>$?Oi#xph|xfWny+%j#~yW9`brcF+{q2@x2Aq` zyTlj>reIZx~6X;AmX?pJ4=)%KC)~Y)G%-lr;ohN>McYZdwb_5cf z`J@d#=E`?SwMql?zJNa!YM0rMyFuH7nZwr*gqrhrmER|N(0SG5*`;O^5u({m&%URi zlzPU=0kCZMpf^Nxg8`*6FhP)YPtcS`Qqr}6cok2uo58T;m&8`V_jH_Fh<-ffx>#aq zYQZq}*ZrlS;5NBqu+|PSoDnXPb&%$0(PsS-s3AYUj%v;3OSf}NY~7yUP39chARn(> zo;5Tq-q7f-+ejWG-P`|Bge>Vz6*z38>)>^o%mcEFRPm;Bcet(!s6K}4tfIZJ?rQI4 z-B$nWWLIY}tjPbtgP;LVUsb(9fxpQ8@P+pBVkd*mcb(s$6oZKw$`jArYHn=|9%?0g zkBVS1OkfzA`3mBqlm%w<+LmMXD3P@hrh@@`bj7hIc;Bi*)%oHK(WJ?4WecnyBVh7s z%I?uOt>2%}UWdaw510coDs90fY_)-BAB)^3_1%FPxN7mDE;WI;QXY%9o{!z)DT+cc z-(Pl3392lxqnx-T%!=qj`f|rJJ1tNnu&PWH;0#kAn7eWe8~YB=Q{cT8j;``17-`m> zN7Mb6z(ohc9LuC>-uXs;qXqLmsvdG*d{M=rj55HtlF^cV%Jh*6!8(f}1?Ex`Zm$2= z5WJf8Z|?4TB3n*{JCEtqDbBBclzl(M2YKk)=l0PCk(1{^)OHNa`C@Nc`}%H){~cC2 z&;zI^jHCx=b0i>bAiDk8(GW)Vm*++t5dzgh7oF&U#IG^mWpN{!U;UiqGk;MXi@%z` z4X$7hgapc1EL$sBtjE&}+Q7C|-+oA&Jj52);}hE=0ZkC}*qDSj&FmOj0+)u%hoz|+ zCA$o5mDwR8IFE@#m?&nd<^jI}zm2y1N@BzuR$117+`uX(dWrPBnoE-F_pz!(8nXh3 z8eC4=Qh=p@^jKq^Ge%1IB3HP|w|_tlwk+Ml#YolmiyZ_6>Pw^8M32hnsU4x8!Z3|b zerlh{k*V!$*qz%h$Mg#oObW3a+YPz16rv#BO;u%|bLj$T``Fthvc&DtY7Z3du^+^o ztdc@{M>CD~1S%i4OE7Czw*d3s(ztkKCZ@_;I}!9gi6}(%zA&6+`P(n^-C10Lc!ACy z7u!;%)*EMHUl*YLo7dtlOUN)CSc9|P+>wTSr|^T*AGfi+9ujhT%4dRoOB0oMGDAi4 zo)<&urSsT08-eTMyJp?3AUNLkC8k0T-|k}n8*~)@vXma?m41V9yDKP3c1h<_2m549 zv`|%=%UN&ufC9^rNFUjtGSPGrnY-VcflmVXQyIr&_}JZT8k;Un(_8l z{`m1yu&&i>>Ht}>_~vRkjzU$Wr?~mV#wVMop%>zpe>bT04+6?G98*^)SucZ_+bd7= ziDczZaO`VlV2&efq)t{vf`i9n`l*F}*s*@?!_DIMF57^Oyt+-uua-u`)Brzi02ZKp z(UQv87iEsuUK7SOy50ESszPd_Hk|Rm2W$AhH)D2&(yCsXyvLL}l<2D#)JAX23Huce z8tajlEc57`g+`PY@yZi;Tt`?Dz27EftVs7f`x4Ap#on*XVGDNfh>zL34CEXNY!l4{ ze(Jd4uD?PPSkstKhL!s+OQtyRd-2c8N3vyU2fE-@Y)mYcEE>ygFL#n{ACBHi$coqz zG7K~CTvh_pcVG)6|KP^_@pW?01YS&dYLN16vC%j0PE~pTPvf zI2_Zes?TV%$6r1Y%dWFLTZ)l6!v8hXgQ{>5awg(ghF&}4oro{|o?Z(WG%6;PDujx@zpKHzGh zMyUVXxAg{6QQNI-#^zXHlW#ikIp(^13c9r=*+e*HfvY z9<4m{e1EC64V(a0{;vfObvC#rspN6#v!f=3G`A$A(2JL7&4Z9sbhPJGF(o<= zw@1Y46`7s}EZ^BQH=*-3PxIOKtI|s(ej``?^%Kaq7^(j9VAuxSid#ghDVBXCa4&6% z%-y\"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 Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\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 };\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 :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \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/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/670/7de640a1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 01.06.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 MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\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 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 :local mikro [ :tobool \$1 ];\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 :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\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: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\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 custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# 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:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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:global tmpAddCerts (a);\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=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/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" +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260602/20260602210015-Diff-Config.rsc b/MikroGig/history/20260602/20260602210015-Diff-Config.rsc new file mode 100644 index 0000000..c2bfb4d --- /dev/null +++ b/MikroGig/history/20260602/20260602210015-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +--- +> # channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding -- 2.52.0