From 02d6e48f318f2646206bd67f4ac67ac6fb107419 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 8 Jun 2026 18:20:54 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 08 18:20:54. --- .../20260608/20260608182051-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260608/20260608182051-Config.rsc | 2667 +++++++++++++++++ .../20260608/20260608182051-Diff-Config.rsc | 8 + 3 files changed, 2675 insertions(+) create mode 100644 MikroGig/20260608/20260608182051-Binary.backup create mode 100644 MikroGig/20260608/20260608182051-Config.rsc create mode 100644 MikroGig/history/20260608/20260608182051-Diff-Config.rsc diff --git a/MikroGig/20260608/20260608182051-Binary.backup b/MikroGig/20260608/20260608182051-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..4b18aa9c1cd65f37be7ec963fa078d3e179120cc GIT binary patch literal 164162 zcmV+aKLEh*sF8C*fdT-?B}`q5%QiE_%IY^xteA8F0000K{QrKC#{>Xa(&={8Hzq|> zUEET*Ch@h?Hv$mgS>|L^Z_F_HGAGlI^e_aJx1a=s0+`U)oW(gf1)YNnL;Gi~JkTbZpdEod zjQw!$QJ(`Sck*wfurZZSf@?)K7Xe$Oxx)A%T|I?1Rvu84bPZS+2gWAk&1mKCLiqL@}e>Yto(3xA*T-S0bUoSZu)%@{{ zeA{gcMT8geR}5sDdW}Hxe&AaGG@>4kHVK!`dV(H{ts&d&88rB4_f& zllSU&M3dq0UcH3cKyM>7`*OWxKXuvaJ0jyJjx46AOLSV)N#Vl`<0&>p2jMoz9ZE$K zt9Ccu%z*o|j949so@GyYx=E)_#GNj{!7q0uB8aC8AO0eu&oxiVX4dvKE7q{Srv6dw zKtg6OsbZ!DkHPntSFc_Av-@f-bh$ zwO^opdY*=+CuXB!AMG={?c!nh_+`%FFoTCv3!vz@xIp^bh)_Y9Y;4gskc4je?485h z*c7;heEPEww@T@oO>iPjcDuGFx_s7fC$hcVLDq6AUA7TBC5v0$IKO} z#;}?spr@Q?*`MQ}nSZm*WisfK{4zGNGO^9@2fc-gwqrOcfqI}6cObkN`!0DA6SS=8 zAk?wWFMO9&(O4*Sr$8X2f5xqcaQz6q!5WhiO!>7p*WeB8l7YpISu?&?Jy@a>KT?_X zU}Wr!8Xo8Ah(1j=pHz&R@Gq)YYGwGrv}0vn8${iQGejS7?H!STyfzt#cCBq=o0@$y z(t5v%$TwYLgezsuL@N^Mp(AY7>F4U|{VKWCu~VL~__ zI+DSb^og`!sVYrIkmEJO?I&~b`!PNvDjWFj1xI1QY($502Y?)=|GCF~l^`!+w-t2P zf=WNbp0-J?2=iO_+pz=&k;wYMITi3E7(e^u_`|M9a6T#-m>aR#J5^1L4Yjl>; z1A*caS)#P!HBQ#dz*GUyGb?9FO9!9r(@cAIRr9D5L%;b#-TI3QXk}UyRsYA(6c!Hg zn_c!jJIfvRv0ds_dBCsINyt~l_d|tHlelW1dqCP)4{2`7^{6$?7%$|kL3S52m>+Mr zVE4bZZ1$Ys_IYmnugyaow9ocq!Hc=I>fD4BWA>q zGQhgwkdkF@f|22O6tGx6xqsRhgYvARAdqHZ0iZOpG%dKYVIDZ3qrK?2pNC@OW9;Nf z|CaWGNYB6+2_S&OmG-8=NAwCp!Pf|G}UDXgH=A{+JJLhP^@!ZsCJ4k z-g~q=*Ep#Uv==|QCd&j^0v9`)Df8vSu%ANs<}B<;)bR}nu#|~9rDQ3XKP6(guYL^0 zXCMCYa%RX2qjFl-sHa504K2m$iMk0kC2{No`of1?%>56>g#e%D0ktx0^r)&T`E~*p z1ULIbed%1%U^sG8{8$&aM*t~=yb&ip5xqZv;Q$u_u#=q!Wub&up`Byt{6CI8Rw&87Dbf??^Af~br-U^*Di2+SiWbLfg9=RCyp5*(jv-vAo?eD! zID5eFz?lDbuJ682$0L<1=QPi6B{-m2$G-4i-^|!55#{u*6UrblV@F2fVs?b*z93wy zB#q9(@vqpQ(YHnZ)e((wKN5DOg#ig8)p*ig!nMb7!-0vT{y!%I1llm;I6cQLC>Dfq zGmYVbIp;Wfl!bJhKF1N{66+lqn%AO_U1wCxqFBJDlgQQW%s&WEdoG1nZx{GXzbGU)|OFbSy@C*smiIM+3L`y!E zab41N?3swBmS}Gm=1=F-2W#M4{VBqz8!bf+%7bm>I3~!a-Dc9-g&swm0MH`^O{~vw z?l$iO$al7=?*e5E{>VI^2ncineSskv``noR*}m$NVsW>yVbLj`(rnJEPI2TQ0KaKH z&g&GIVSA&9ji9#20F%e|axW3h*DP7Sq(TEHY)bLvW5X4v-R~a!M+-1}s2U?PcrI7+ z8C6xfU8i=pOmr_s4K-F===_FNp$Q=%|9wc4Kk#2&VQefJmLxGqM@S^Dqst!MFDb$V zrhP@7nceEj>7ORXF()api)>)oJGm^n(t<3#xSN<~O=6>3<)D`=7r)ARYFQ6Xs}9Kq z0=u$hW3JxlB1Qw#U=2}ES@$IM%bpQ9y2P}$vN&rX)lzQ10;1?|mol$cBj%VDAi2p@ zt_oS$WTE@fgjMT^V;3#jtvZ?bS&-gda>(F;@v!@p(mZ_rax-A-vAY>ANOL7xs+fER zMRWKI1)%R&!GY1ZcgQWf>hHG6yS|f zN(_N+GyP+5lMjKgYI*w)6k^b{|2+>C{C&CMC519iEMn#_;8_FNi7WDAJlv`EEtdOd z5-DX#oB^qh1a9lV5-rh9yoQH|PO!5!Z1h})nN1p3-}PT46sRW&9u`q(!wu^GHl|-L ziE+#s{^ERQtxORT^8?BP~|P zBO@Ux{wGDCb&}EB>(oM>3_a%Y4=FH9YUENfnAf2Uo{7l)ZG;O5k6}N`i1R;aTb$Cf ztoz07CH0m41Iw3ufUt;qZT;ddGC#Q)iCz=()Uo!f53ZA_NH7< z=uuk1kLD}7!%pGu0tUbWuae>F%(1$5!b>=CyxBK=Wx~RvWDJrf@}?FAvvMk#e&0@$+Ws8Nr_+TRZ*gUEH%G3t ztBm=tlNgRy{)_XOaXD?-@z4Nir;!SNtsgVA;oGgYVw9g((+Z^?s&53kK`pGSrM(1A~e(}?Ky z@hx&Rj*I|C<{?XGZ2-dmerQPdQE1F(&Xy)>&1J1PWz%9;ZRbQ*2yo5i zGHgsh{i6ca;Et&hU>4D`l6J0N=ZOLx(E*+|^`5g0DiGQ7lE^7$|5r#PE$pL4`UXrj zL@2q2X(_x-)M0dD+LiYQKm?{H&EjV}sAlTvb%6|@gb3j`L&Vra=t*Ff(UvXC7(E4l z_^y)i!E!4-NbIC(>7<_41>X52_;KMAqP5jE#i`cgNDH{T3P5U(SP>swgq8wP$}k62 z()x!;kclF%;ooi~PDq_)m{qS)mk5k^aN_>3lRFQ+15+t3)+l7EkhfR}o_Y&G2<1wJ zG~*1?xFR6ns%L~_1iWYi8tY|{x2LdKO7Oc}_1U9sPgx2Kukz0^iMac};%ilQcvs~8 zM>gMK@E}Y+n`Yx-+rkMxM@1vBI?Iv!ev7oG zTPl+rN6xyvwkt0Td+x{-V4}Dg&TNd`5c!SQ(ePKYtzfk(5oJ@h5tx=Mjp+x4Dgc1Env`)-JjAFE=x(zxl!kQI)lWij}n`@w~nNMSl zr{xS6eo#1tt%DC3wHk>u`mNCDG;2%pBSezpC7VQ07Medkh$P@a(n4zk7>$A_gl7J|KJ|P`|I=vY0!kq$PNj6QM`Hx8W)RE#T7Cxw81PP^1^LDYYM?` zuLpz&QUKziAwgA0cC0rCD_4$~G!sH2E_N7eQ|rT2+uO@WIW(Qj37 z-F$DXr+V~Ja0eWu*Pf2XT@9808c=59N?Ym_KQQ&NHX;?6#z3yHFHI5R@zHBr+A%fB z9PJUyPCv`><~I)bX$V2`K`#{$=i#*=i-Af?tp!{VqBj z6wH+vt5yU)^qqmr{+?94r^s87Ab?~es3n9W`L8~sC8eOywu<*Tg-Md<;&&>Rz&SN# zjggwdI!JkMn?KIH|Hb1Z{27JmnIm#Lf>eXorhabXHXRE&a z@^47{m7KS&^%uvf{Cy=J1h%)66A%5L2SK zDkRSk!Dh-r^ADuo`U1zmXB+6TOq^-8w!AJXqG@7w^hI}9$IgD8o!F$eY}fPfZEY&N zGA#C}VD>Ql=zIM!HPUjf_+PT-B)YL_>jwc4)<;4vzK(o^s zLRxuhoh=4$T=x2Um=!eOL;Q3;C>qOs$!9JS>RKnAcUXJ_aiTUi(N#;bs#E?~>Ymyg zh^QSw5?JUV9hjPcdOv6PS+`E*Y#_ScxmHFJV4gj86~CVlTm0)XRc-rKHJ5lOkGYP* zJGk?&XaSOKc3OZXiyy4}Hnff@OToW2_9L>7xzXJ^!fhsA1bVHxm1JBu)zrZ@xZvm>h z9ci)=#q#I=SEJ7u5|5hQKHXfq%%HGFoKC&e_%&Rt+%~siS?~KM-LIE=ZDkyIkHM2o zZH*<3!e29lKqq6t7CHem43uJfc_Vcw`t&FJ+yksVuax&#T|so}kPP$Y&N~Y?YyxjQ zo`sxRBScYS+SMT&H)W~D*dsZHX>(!=A&M?6vtOMe!V>xunDNcBMP@E{!f&iqMwU17s8PT`T|~-s|5Nm{y+=+{CJFgLo1J)W+;w5}_2q8v zs?5x7f*uy&H>A!8y9uJKw=fa~yVzldi2KNqmPNGmb;Q4yb@S2$n0)JGdyK_B=AZ7u z6k;m=`hbzF)`u)AW}cR&H<|40u?NI{j<{u9HtW=;S0dwFT(3vj4JNS$(8|DHx$#W! zK$}l)KuRIpqFkTDN*DMHYGDJnkUPTJk)tt*Ajg*en*9emv9nkHB6+vLIqy^If@Hm2 zi~hql#)ge$Az&!%zzFNDQ+pIsJQSLjt8Ri}<$V8iDxu7=rh3Cj`~p?WYzw27pnYDZ z$?3ENDDRou1H7l#OLld#$Fyb*I~}Ugrbt{iR&FZQ$*AZUaWhcMtDOH`=YAzcJCc_$ zHyruf%QXRa<)RvxYVdHFW>6Lu1cM(Kz6R^Zw&J(+oE`k(7jzNb!KFF$&9#upsIFNK zgX+YxwZyo2yDBS(Ouv9bw-^_VC>|aYor0y&;iX~nv$sP-_#-ey2|Pc8T{oUt!pygzlpsTnL8;o@w*t>nIBD zJAcNmQ>dG2&FPct(OBOecb+~lDioRRg*Z)KYD!{j(7at5#~sn&?iQEb(Sio~ov!Fh zsc%!(7Mi3%YR&L-gnxw>5uN~*WmiTPI94R}t(uv7gM_(%3M%G|(!-+RBD z9>WRQxDesMv&N_GZWa-w5V;|pCqb7pUAW?i zr!8eRiM5Rbod2nATz*gxqJib2SB)Z01;oF?e+1i& z3hSLYjVgz64)9dC&esBSyX4lD@jZ7Mys;G=z1nQN3q-juhd2nzdFq#_$*V&!V^OLpeWbQ|0h?cM9G-F}L%s zO~KtA@<#cUn(jT7Tgt)h82q{pVg25CQmhq2g@rE1>$Xzv6{i47_!PR&H?4-;KL)Cl zmQ0z&pi%uXcm}CsX5x#{#_0;gw0q%NRIm&lPt`8pfyYlj33}r@SV2haPXk4_&>F%t zfs@S7Sm?TS@l#Z=(4iWM40Z2{6@^a_>_pP&ZOCIh{m!|Z^$ANmKIZj1OtgiKaphrf zHOlCM)lIyDm%cskB7Efbq#nhelfYc*$o^_okF3AZ@urhj+|ND7M&0R)R&b5!4V&s^ zpY{7RMfitg`FU*cVc1gW{>^GU_$Uh{{BpTz`GJNCP|x87GzW4Y=+&j{xUEvL%?z}* z&(4b1oYtmZpb%pF$#*fa$BTqSWTJpG5K3f2@>wbydgR2a*~~i0pzj{&d@PrVx9-I9w1t11v$MY%Ss;M+lEUPCv>9t#cM zt|IUP4gWVLvNZj{RJgG#iUyUNx1A}DUYi>}c}|FTr#xx70;ggFPbb`XDou8r3vOR< zP5PZ7bagP7>0X(;L^1I2C_eN}OP7qw5ck8`DWj$c{|>0gJ0bRx!jyw$1PvVeiMeM*dO+*t z!e#_KeXh%s?{nquStIsIZ|Lt`il)bKv?le6EC=f^jdgU4R|feP3P5@P%)Q!BCr9V| zloxGkv%^k!(z_~=P4YgAu+B{?uX*N}>^mwZ<^K}|h_4A@}rMxrOF;q(R8UM~vh+Pw>V;`p!CkmF}{ z{2kH0|D5zQ-5*AwuV`KG&;Hy3@gt?FTpkk#gRlmYG88Bs0;%ucmdX+d$d0Ak;K#g+ zPK{ROmG4jJyGw(`Mn>ooy0f>bvfnQw9I+n8mg{y9yPU6pO-*P4oc63G4C2&3 z%i^TuDZaDu$mEURi!nhHpTh744_-xxRK^tA5H}p>!&v23%NiSk=r9XMH92o_-2z z^sgd4g}L{Vm^tCbq=rxGWukQJ3-T+(0py#o!F7RrL-kfP!>YS*N!TL4nLd`a``fsr zX4xj;llU^Om?1h9STT`2Yx@1n?o;((O+pZ3p~x!;9*Q4PM%>PF^T}HFdkO9@iRTErN4Ns78ZVPwQD&_SCwUn={7ZA`AU?Jw!kfzN zRCuO@^Gi2-A@gvNlERNkn4M)N^#d+cV=X_cVljXxAgkKUi%RW4v0#NpZjju4r+x`I1HCM@&0i*lw8QP_u5pAR6lcH;s{%meyQlH>T)p3aJOjC!gGMH00)@40}cTg%dUk~M_a1^l)EB^$x za4zrYxjZAnK^|7)5$~?K#A1(jC!H=DLbZFaagw3q_1SAg)ubATLkhjNwXfIu>c0*xc&0ETH17_dJ0W%T7?AEk$* zzfw(mB7&>Z4l;W11p3LP$4?NzV>h`YQUm>hQA+BGy!eQCXg(WyQ?aKr0Z6fIEs=*4 z42SV<))S5#k4MEH2)ZLm1gtnt7zTC4#H+*CKjPQb8LZy>X>kP?a1R4T>>UM6 z7qGjxpaFS>9Ty&{0mMP1c9cQ;mLS<6eM44x5)67_8euDMrzEFaJQ+sd70M?Zv!%0< zK2(y@y_cQ5b4VO+$moVZS4tiZE7}o)B)vX<5yVC|ut^xE>z-!vZ<8|hxJhh@5*P}3 zz_+v4FVfCDb~%2jVl4*)9jJ3E*4mD3Lp*R(J7E=3y)K>V&JbeOUEfkFf(cimk>yVJ z|DZRyzi(eDUH8LkSqtrC?u@h9s1_Eb{{4hs=FsVo!Tnz& zBzRw*iRcfQ10C~DiS4Rh{80n(wgTJq3`ND*id*yEWpmsEGw6$6+>(|`Ru{wZr+ z_9H76O?!D;qt%Sz7aYKNSuX*IIdCTO;c)bNJSR?>X_jHpo?{elQ*^DANy_Eo}|17Qbkxe&!;C0d5i*w z+!Ey7!hk&#)NxfyNl9Va1U{=xUlz1;VGkY*A-x zcBnoLcvhdnRp=5;ZIbN|Q`F{yY`222nF`^oMoBFz% z^DId9fC>*SdL#PmHVZSnZ}zg7Q2tl^@Y099ZSXyT!a9wEh`)_qC-a}jKFIwJ`D9?y zN6=F+r;K8|#4}Z9aGm_X`ZR3(Ekkk*>_T^95inK3^>5<8b16hOe^9dh$B?o_P^2gD z?NJ=I8%mt=&QOqAoxs9%bX~{zYW=v8xsA9?vIdfpuvC5|qmg1d?~BtIpel#JrygNnahcD0B2P_ z)0P{U@$E%8PZ9e-B;6}EKs)8lb)f_L?33EQQImWvUMt=s2a>nHmga7CX^&Ci2Zqhu z>$os@&{};81%#aV0PH**3Eo_sPe8Afo(&aptfYc_HXS?3dBy=B6=+4PJi~4<$1jo6 zPKZ@U=FvizmvkUl!Wyi7g%R^E`il30&T=|yCEBs!DxX>e##EH$N@;&im&*k|O49wb z!6qV|V(Wr$iF%a*X9g)&5C+wKNP^E=QNp`+hM}xm44lU!z6>GPTK6iD)YOuQW|z6< zuZW_rA&pVSBEa*uTJ{Xxe)H=UDNUxLp^W3T!n?`;2syNI+s-{FSh_}2&kQ(R@1^$R z*DEqqt;7oF#8jxuF#+J?#U>gWK$*WV$eGH+7gjSwJ*&^-(BsnpHArv=;F`B}PN5_8 zVw^(s;pgR#B_^HIfi;9K%^Wsu(Yn0ocmV}oVWFUTI{u&Viv-i@7AHhFFzXsVh9! zI=OSH`Kf$H6YMSxpdzP0(XeGNGf^`;Vq{cDVB4uI^)2lL*Y}#A!L>{&cJ_)(aPGT~ zO;ySl!hj?s*3xu|kG9Pjt5$1zrBu!3Njd!R*FGpm1g?jCG$UK<>TAv8SGBE7Q;KUa zYG|K^le+2eM2Xlv0mbEF7S5l4=;mK+apWB|L;_CZTe6`r%t-vir}ll4j?0XDSonwx zfz#$);c6$j=hFd_ZRg`FD=DTvZ!mZMf!uj7MugH|H2Y&kzF-fGqJK1SUcybXTslbg zQK|Mv(7FqDs0~!lwlCac>f@q}2^e-$5zzwEdfMTC?vHpc77@KO(tcD{B=4>LCdJXXJurPSBf4g}9wJ7WNT zL9pt#Y^W8E6F|C=3tm8Fnse;TfCG`78UOH{E$jE|Q#}ru>VoRtzTK}!q+8lDrS0WkeS*26cs4f(+63Wo&8`?4q^X!3WcbyL8kZUnF-s~Y#a<#_ITLRDMKr0sE2{) zshX!O(t=vT7DNYPIqCFqB^oOy+EpzO_x58ZX8(%dtOIVj} zfVL4B!i#>`^^AkJ7z3=LZ>8GJGt*@1zp}_sa4|&J2V`WvpQ+@gTG-;Rq(#76E=3wDj--8f zdUI~{5Ri3_b+#2?iur{$gdJgr0d{IR@GZkx+9m%BziKc*#uomIa73raxo!l=Vw@HJ-*AhR#7Zo8pFu7 zT|((PVgVWH5DPcPxBhG$HzGN+hu{hQ28NUc6C3gD+D9r@wslq%Fxf9~EDA)QL?^IF zu^4Ce2H_oGV6hlMoqPo_Ifg|(uRSeQU9Ax`6Bq46{BB7u^qnM6+d7Z^hc`_UKXnnM z!m17K{X;h{DgdV~^B_ltb z-j38_EHxc!%LUyUm*GePA(7sZ>wTRF>1dACB4`GdkMTqyLeM(Y@G;z6-?f)t!Mtq1FOCUf8AbaE^pJ|ZxhVsCt0wBUjrw< zCS7^@zK-*=wqpUo(9gAKHe74woTQpUH|xYr+JN`g5ev8m@jp4GPxi_!1loA|^gvDBzx;crxk$SeBNK z6pmOF0!5y~>ys02LXJ6?=W9xj&(0^8l(bss z?56LYJv{+U-|-qA5f5M}pcpp{BA9nv={WeQD=TXjNfu8+)^lxX^~BQ>>*$SR&-gVv z;gcO^abslqc5p%p6oRA_Gn3udioA;CODR)qv?SH)_I*! zmKiYjAj)I||0p06LeMU~+JPCeKol85@P!gvlqET0D@gY>Wh3tO#(&7c0QB|0oja{* z8AAQ)J8udi!{|eP^k;cs8gsUs>NZ0*x2gawtgYH=4~0;g-doB)XrYSxdu#jmG56Qv z#{UK1_rp2R{-)0JIN3s*DC+>xIW(^kU@75+r&uKlKYy}F=Mh$+kv1N3$}`)g-ZqZ= zX6OGWvknh)L8ALa)iS)Iz~^@Rrlxr{eitB&V7gNPb_}%IDLS?VdOKr{s|Z)P)#(yy@2xj6 zAHcl+jfI7{c@0J*iLdnl-bibjB*Tmq^y^gqcAjg>wBMh(g#gDO5+R-L@GeTsY8X&n z!}!j`M&_a#(M^Qf-9u)NYovV#y@zV$Q0uHzXX8h1mJv3qTO_A0F?NXeR-pX2Ycjd$ z=s?oUZh}ogGH^lKqN_EsNd;29EenrVOip43cMeCr*%vXnDRT;Xyu`5JVnLC4b=3KE zE9hMoX`HB`XF#%Gwa&nm=|-nwJIgeP{p>kQPi)({YgXtcKgJ$|{OFO_`{v&r`eMAl z`b8tpX2c?fz3z@{u7NqZZ>FCf2DN`;%0%@Rm}9fSuBC8-(S)9ub(M$EFB9c!d}xgC zOP_dHJeWZ;A#NT}vrb#ebb~q1{H`YVsRy~kRu1AkfcO}qpx9|x!~xF*dt9D~@S;U` z)cTg4HyEifFI(kpt4vQ@{edbEny5-ATC&~Ha>N#S9Bonpg(;aDfSBGz5-(!<(;Tx# z>e7|gU-@M;{s-T`un2+doP2dMOQwm%Rr3@Msd67g*dA1S^-@u%N({D`&0^eK@W~V* zkj&qv0+Ld(JZ1Q0w=m>}H+P$y>+g-a(1DvpR#Q0G>$}*0oGxvFd|UX)y^X}U1)HhU z_7HZ#G2{0LV4(E<$y!46c+A@*W9~zSbFI^wH$*B*=r>reaE_)k3}^j8r-aI*4(7WN zX#~+M*wu%l+WdxvMaFr)jP)SutHWdYfGViP4B#<$obd`w)|USyk8=6e9~#LhMGY&s z(yPl7D#r@)47B7vB}(^$5mn^6(*TTFOQh%Lwm8)^oQL~FpK|yfHzwG=hC4R%Y)vt< zIbWw{@*29$o7sLmitY&|^zrBuUg92RGQfc)?8 zCQ|H3#JBJL2}Fy*|GkjIr#&jZ8p4tF#60y;g|1j>hJz;}cxFvv(sLbxOl&691VaM` zN&CN-|7Y)>ki_Z4pC@|;;cf<*9~C^e{OY+na#AZa%2Cy@6(N?Um1wkKeQ4Oe&JYn7 zSpD&1jrHVQA;D!i^B=eAuN=4`q5Soj4CW~$s~@U8s12-V7gV=ZpDrTAC90bkzmHk= z{hl5jj#woa8dWQunF0~oFUrcCpnMTjGmQc^hq2{d z7F5if>UE@FR!Wd9)iIPJ?IGW16o+38N(P}G>L|19r)_`qSBRjKgls>>mfh7Xmu$LZ zUw0G!*fqDLxwQj8h*+WXb%{)8DP);(zCZFH(l>i+NJG@SxVmxr3xFh8TUr<0A0X47 zTq{YbdgOWQ`(D)~T?TPHCH&=%xq1YtkD^b4ncK7lb-jnzIr?$UXa}snezg?+jXS>g z-Ft4;vfT0b@)fz!rBPVhWkMg5>2x)d!)$Lcby&#nov4ZX=OTu_+9`ScbaKPudizI8 z+B*7;WMMORmxJQtwC(`QL`nut_}J>e%B*mMO@~!t_7j@wREd)GT;5E1uzNU6c8^=3 zqG#Dr9f`t7jneO>MQl|8e`UrQ1=b z#6*s{FB=N7M;FfN`T!ISmB)TRyv z&7B_v0`$>Z2LvIAI1``ZM_tqH0i?cDFt61| zZ`Zzc3&c^N*IS*Z78j}<8GQ{3!%OBzLhc4+4VQyQ(9M;g_HufXVj1q#|=I zz$!H}<+K`rW+2>6J4vB;{xnk&-SkbK4A!Q^Xz~XZDw|WMtQd>JBzqUjmY9@>`6}Y} zfGvbM+i)hdxUz(`9u(`2*WCBVftZe;%b9SSN*j)of!*Dnun2|7l~q%2IvkZae@BQZ z!+I^UzEZ>2Ya+GaIw$5{QUtsp- z7+h1#zDB8LB-bqN_3^(Z9ay|5Js9}`+Z9;pAR|V(--UX;n`QyzXUcb=#Y^FM&hRg5 zd$fh=%iU+lp@u(f+kGFcZo~B zf*zcru2)P?|0fS5=Z)~Th6-P_Zl~Yw9}Y#B>K?qcs`tai15kA?qZG(|o``b68z6t^ zC`$D&^KuBB@y(!h6N%&pmS8J{yNFWP`mbNfh#Gi1y*A@3z;wX#UL;o@+pz*l{u6^tP9 zdg4>93y_J$!ZJuIJ4DS>=8scmE13H&%AW;@^Htp;P|9^t8*^d+Riu>2weEBjlDP-iKaSe00umt_Z= zuF9ELN5;8(8Tx~3yXE?qy5_Zs1)lv{j=CnLm{app49wR0>=G|>7tAxW4y_r-qm{b+ z0cNG2mCTFvQZKMQvcMtQg#)eyq;CC{?6?n&AB+c+U`MMKWmIFE z4(68GiL_PRFK*wke%b`d=<_qekiTR}B$G5$f|b|CJQQG9wb zg&m~XJ>!AQPo2-wJ*N#T3@_e_kXVXKWC`(`Q2IYbR=uo&=5)q!<2Y)F!qHu;-Fg6F zQ7FBL-x0hM*VLC*Kz}w+Aq$SMROc)F5y=eZ1^4fW-`upLR!v! zz#VLd8%5~<6UhCP`d#Y+oeJe5jP?T zsZY&7%>*{D!X;vKzTxvnq@zwij39g!*g-YR?X*Qb)o+CD5=o z)l;7Dsk+`wq?@B|6MPtiv&dhW>;Zg9YS<;!LB;*>`uhT?R)P8eEu=L`XfopdkXH69ul`+NU_S$03-b$oFIZC!jRvl`x;@u0gCfL+>QCjm$cI zTnDp`{Mu>YVj|8rc#JVqeatzACN{6CRLR_3GyGwYOlenq+-8KuUH&W49yw0{H z4DoE(F66N0q-}mZARead1^*Q{gzu1AUCP16`&zF1MIQMU5y=y>#^=l(y5^7LPlDe`-;$4`M!&S$1TU|8#MvYqzbWB$xOe8b zQ_zsH5`C+5GIPz3sP9STOpgJ}z7hV~3*anEu;)o(I+NDR+F+kLx9_$9QqIsMy#x(} z6Eh@ASv*B$eocyYWEKL)?lQ8zr=aR=eV`>L#`q9LNMPWDqjz1ryt^sEm^ zV@ULj%F<8$&^=cCjtzc3?6q)I@wsnCnRt}FLd!7&^WMo5#nh#QOx^`mmY)aE^@?!H zgg5Cd505wu&Wo*06pFFHKZVjQZ?7J?<>HWzIzXA{T(@8+tOX!_XS|K|j5Vyi+Q~(h z&WRds;8)*dcX1M2m*JIQ$4p5nIo!6B*ohh>_paPygFqxLM|$Ifg#v0|L%~a^81dvm ztLFjw-KACi`tf#-RZc{VRn4GoyX6#UHWZ84^1;gg%ajn(Y_27a?+i)63T( z_y`mg3haQLzLdHEL|A#dw9Fhu>e)P;b`X2EPZ>!bW@2j)|1!ZUc+}sg=in!d181;Y zJF@^Nq0VI;lfWX9XM2)nw^Xq^`e1ZUj*HT=t4Lao)5((Hr|iF~Nb^2kmW&~Gw3$>p z-JAgbF9GjgdI##8Xi7l@^h}N}(m%E)Z9S=QrH_$h2D+ELP)43wVvb8 zsmecFHkg@A2L3<`3h)1fk~H?)8+2r&4_inw8zq&t7_Lu_hUn|yyJK_TmL5cdddDS= z$B(WCtgYH2_Q`X8L7BsXh`NI}VKF{ErSN0Oi*|yr;=jxoVt_TPraswvY{xutSd01K zQW-C0`@7;mzx@FJKLEg6h&UhKUPXtIilI>eyxau7zus|wtXoG{A#?I-Y~bdd{aR@G z5qnO_$r#$wI6f9BfN+yfd^s`s#Fl=I!LGvy6ke=q3^THnvH4D+*4!s73g) ztB;EP9rcOuGFUa$txMdQBG7{OZ7E);tkzQmiAmL$Sp%-*AV~}#aSw4{qmGEQYqIH6 z1_1!3Nn#dXxHolX=a@AFzK5hG`+seCu-EZ|Aep9Yc~rY19sKpSZYY~HR;VF_%p+-) zdUNIjMb?b)qK;Qs2!UtT;+a1|S0lEq-E>qE+SRUP^@HN=Q;hO?i$FMNYuaJ}u0vxG z1<3mTNbBUKWp4+P60xB4znKOL&K2d*yTg>8X1xNMcOtxh6>e*k{Ib(q!=CDV8g&yS z^8qZHd$HL)CGi3LEA^Y4KR}6=Jp7ac5Y6`hl`^`GY`m1FctP@PEiZ}PMTbTCl=c}7 z>M6(-h`DPjtS4&~CqxAwTW1S~7(fTBJoFcac9V$@n?V-$x;SA`G{-3x83vYUU5qeH zXKpN7c-dc*a$(%MW?z%QTiNhC{b!YU?%5WzNRlX&)GWQ`tfY_7uIG_@Jyqg(g-sfM z;P--p_vNmJYgH#cTcyi{k{8+GTViTSrxkVC?hf9;02%?{tgF|ys%bB+J1(guF@2sL zp5y_?{IQm+$p@onff}WQL{d!^5;fnTm9OX~L3{rwu%T($;_J2GNLwp2c*t__j(dkN z#s8qTY^f9Xw&C#p0t+6BP*IOu1v#y{qFdP_{f^4ND6xN{E^d=f%UlK!+reTQ;i|R` zC`9t2R^Dp|zgd(OWtV6zFj0tjP#lG#@DssoZd=kV@f~stgVxKywNjv912u0Gs@b;D z_?*eRw5Wiv6;hWR|8J_!#J!MNpd?6H5DCJ{h5ne-DbhjdCUwiC2(+Jma5?p0U{=gB?6qYFBW*H!< z^_B4L(ira55Px~{;}Hx&0DUC3(3ISTeKSA_v)^o5lqvr3fI>Tm|^ z=84#|_i-s={tkb3H)7AD(4RPoHmM*;CZx%{0=Ygyf?#3JV4_}z+neyZzd{t()g zgQW0#tUn-WI<`hLj^N9qBfZ#=1YqB-YlZZ(hC4XBIoV!$!bx5xH>{~XXVqABckV?h zlKe$nQW@KF!xR91oYz9VgOP@6>S=t%Hcl$^#x}xHTM|>ZwD~b+@RZp>>BG)7$FqNI zH|b!KfQhE#JaUKtH#E~lNWn^3i{|pLYU3!fwJ~^vC+&v7`U7=<4A0MJ%7Gs!vdBi> zHXZI?CkyGLM_&UQh=2(s3Y*a$*gf%E!Mgb?FRhd8O_FQn##?K*X}Kf?oS#~Q+>j96 zJF8X%$_L~E2`Wt_sN}mIV}n$TEOYN_+e!ZA(L#0!X<*6u((?9v$ugcH;s%`!;Dn=m z#z%PPkmMfh-~#+M(KWM6QoYwZc$Cw5*jP6U5N8fh=_IEQ)0*@S=ou<7t61AhDrr2s z#beZQdh$}q=i*;2Vw3|13_Ye!Yy0bbWo(0lnm9(%vRFP2z{!70vzoD&!VCNX?2gw- zxFmk>J9a3c{W}4yJ9m$g5bs$hmf{)319w9i>N8!@t*04?a@U0F})}vOiRCfxyTb^(7BNm3&PyH$#2dDDFlu zHdK8F(hf zE7MHFWZ@(5y3#YUN6Md2FZGb3u-%33alVavo1ZGcktvI|hd@%3{Kc_IxMH!6ZC`h8 z)d2Cs7?;Ff2`0N_D}Mm6|0x1sobpwwF^Hgvr0OC?f6x#piIfai?9fG+6TM5BgfB>? z|FwFjgU0T%3pwBpLiCBotQLX`dQv;Y?5QKS=4^z~=!96u;#P;bo5SrtOo&gmgEr#6 zm#G@()E${z0pk9r4MpS6ax2|WFfFzD^Z(moV{)Q%^b4~LE9fQX-oIbs(jd~IzWVI5 zjuDwN8#a~!j4uynwLy6j1x^C2d;-LWn7-n3=G~85XRg1VJ^2blg_koSxpikp;~dVxkM>_UbiB+jPI^ogIg1&HTHUsjV zFRj#H$r-P)e!0nsZ(lxvkXG8P2E#n;_N%mx;;!CH~{FT7o`qc zQNQ!!gqe>cu5S-tQ0g)cWcK}x{$-U3_TWt*g@3FB5S|~SmL;s3+e%>U?0aj46GZz_ zR#_7-s0yK!N^)qhJKmqNTP!1I<;ERKb{tB2YS}o?Gd(NM4vb&apQDjfS69CFdV!hJ zzdt{lM>$3oJ5{EuRfuHtix6<20%4;POU-PzizJuXM}P~`Qj>{TU3edEv$rRhL)&}Z zjUsZOa3hAz+b3dti6O3^);D7;N5`=20C7-cwzY`X-(D5_5{)l7IJGM#bbNQvgw!HF zePgz;qF@-YihYi?cIl7G^mKGl?tdw68nF%R@Wf+yyvAI>1!aw3K)bM&NXO~!JyJ67pE;osm%;wR9qxa#v@)CthOa)esi+$oA zys!Hq6Q@oL?A09+wk^He93YsdVaP+3>AN`n>oCX9gz8p2LNF-S%W z&vAUmkTHx;)^NpNVyp`1p?F!sLBmh8Uoy;+CQm5IHZ58K!Jk=1$@=*m7+%^DU5AGFS@9 zh$m>Tm}UczO^-b}h$1qO$k;4_aW4$H*l#aS>>bc@&WUiZB{;QK95_2j2$pvWUb|+V zx=+CWSS_=(#yMzgCBolz(#J#K$xdkM6axBy!&#IUoYb=lp$dJab93=Qfi$3bWe$P- z$B}*~Hc(AZ>rr8pjxcqS=N*YOd{hzAD$Qif<5!e+Gq5I&hLe~+1omUmk&Qi(x0k7$ zshQOR2M1Z%#9VOw?b$)ebN{LLOVCv2 zl}r_0usv`9Q`^Yh&olBnP_0jc_{ zGviJaMAR)%uUiY&y{R_3XV2k1r9Af`>dia@9&eFZvk@4p65m;a@AEiv?GAwgFM&0< zeFqxiLm7>};o>`W5XLAa3N8B8l}QYpB3aj@toAl1KzfqVG>RvZ(94T*J*5d}Rlqy8 zveK}#C7xatZkye8F>5#!(nBUaDIRSyte?34<|dohE_vC3D{0!W;b*Io=%42lOEEji z9vosW^ML>J+pE-l49xC`)m--d0xv*|RW=|{s+JLz#6dq~>|#2Xru z8<&_Ivu0$nTAKWZH%Oc`E+THp?Wu6}^SvW9hRS8-ph}8O@PAv7&9rHsACd)2tmJoo z(kynK_;M!o7?j;fb{ag*4Ux@BnA{)|ChD01>nD5)-&f~S!%&OEnhZ*9{d3JR`R1D{ zZ&D&5^9u1-M|=D@r2wJ0hV9F-ij8d4U1%qL1v%PsRly%->t4hxb^DZ4oS|H=nBEljQu9dko#5Zj4ZfAhUT zwE+VsOjPY2CdEOZz*iW6dD0IxddbLy^Jsk9888b5cWRFa=3;9#=x_(^ypMd@eDg|YqepVqR=8G78Bft2?x%=1qm^dk37t5)8>j*e-3>0|4NC1E zvnLL+#)nUlzg+2lf+ndud*9C{HS;E}ShNbpE!Jg6fXkN__lTjCP+edr6W(sCF`gp!ii2Kd6eI&&R1V@boYSJal)<*Xvi~rSRa-ChQK&I-H^zkWgD+y zwA$vVvm@qFva`tcTLW2=1Apuvf`kq>EZqgLpXV3y{jv74|o8L!dcgd+Wt_ z1H$jX33@Xh<-*)CWrJMp$?eSYz@((Qs>3R`f-?3r!cHt|;PEh((74UVtaru-#NV2J zuS(WXE|+&9p>Wos25^l6VK&e98ohx33g(y*NXyq~E4=rJ&mQ$~ z+3qGL-DvpS4)VNsg=KYAh=NJc#vADkg@?F$8RT95FcHFOKjMNwm&QobF^O7OJfDzS};V1|od zyn4|mKWegJf^vFA{bvo1su^TB-uS6cXZfY_1S}t9JE`jGO(!#tGR0rUKk`@@xx-mH zVa{T66HeBYo09)g%IqNGv7tNSsakx3wqDaoH?A0ZO3@yq<95Y3h~rS)O~5_4T`f%p z)VRYN1MV5~|9yw`!=!6?196(QR05#S_-063bnh3GQE{+su%Z$t6+i#`3`HE#LTZHG zqrt92_J2M$74CjO8wHrSw%30_@K$z~^)q!KJz(rCWpYkWLMo96iXLOVT2}JA5QrIF zZS^g=jzK07-~8X@VRl7KSxa+qW3VSkQCpNR#@4K z!;|MKgooh%#@|;K2lLX zLpCxFhM=nraglpf;J0kw_Xn0X7grF|IGXWo$8xfk^M1B8j3D(wILL0t*IjGtu`4Wz z5nIn->fV%tmE<81ID4kiDfFQlL_V7lQJU&%!fe3X$_qJ0h7PwD$fJO1tXs3qDzO9v zaLK`RwejH7UR(Aa2Px^8f+qH8;(R;*Wb(zMK)K30fW0R(-TYq8P&I81)XbHn0UNw6 zMAxqd8KS);R$1mSC9>z&gQcy+Kr$!Rl+Ai?)hau1QlW3%xId6*C~&u$xY*!82@z#J6*V=^s-2rIE#+8 z&QI~}A#~B9HlNH}x9x3b0HGf6jy+(8r4T<#v^1)h-yoK^G#(wg`!nc@^56=t*N&G8 ztX|l&G5K}UFOXh@gL9CIVD}D^V%xj^*A$X7bIg)#hL$QqyK+mmSe)a$$jzPf7Krc3 zv@rOC08R)q1xaRI!E*h(utjU|@8N18ExpO}LIb*KT4UL618OT`swVeZX+h0zgdkg! zwuONBq7%&Pz=k3g&4XeFen<9S9uV(R{Vgi-*5GJ`4HmqV#^SlDI~zO8N+Y=a0Ya?}c* z1-x#5qkW!SDa_QT`j07jj{72$OR=pl_zTmSeLQ+oQ4xM^8Mv}g3ITm z2(d|CIFeHwKvT^-cNaI=y(36RJ3h8ar$kvKKHIT6#YCDm6g(#YM*e2=#5m zs2H32*vF6p0%|S)NN4|AN1ZM^&bO{900#C>(LUlT^)qbreDrxG*Vo7R1Cw2cf8p|8 zS@Waaxmau7YNr|^w!0Gg`Gjz>ZER41|2-D$CTZJ)IRlubnFdwW<6Yam$&-5t4pyRJ zidYnYMKi6WATbP50-Kf5-qdN+xA1e+Cb3Ep*?N&Cpp9ZgODvna!Mw)K*10OiVx~!+ z&p`5ULNhfi(ijF1BH5KXL}|Osm~A_l*gDOVHO(`RrR6#%8jX0ovWjWP<5pkyv5$Cy zXpcz9Vt6x#{g$2~&kqJLJv!_xOWzQ;yce2MYo>#B-K&DAiyuzi&CwgTVI|n#7ZKZ8 z57*h4uTs(vzX*xefl)>Qf9KyF6v{DrP*TR(4B5kDQX(qAF#p_H962115znxFOx2kR zPX6m~&(loP(NIHxJu|vTotl;+u^FbxTcR}zEx_jSm!0DCSp-$QJ_3chux&?gKYZ_G6?a>&YpB3nfxMb2KTqS+XV2ZoBe^ZNflq zuxs>b`JM%QL3o6icIyKr<)>Z{YiTVJx!{j3C8O_Ke|&X|Ou6&*2B}%3Y1a@u$fD z*b^}B>!-Pn{B}m`2LiDPKIAX!9h+hepR3T`TAz^MyL^a$IP}TOrg$qGL2d>J+@mTL z(6d#WTNiv0iPLtYja_h^)6SOAfwmF>DSVM>nwK9&Mp< zo_b%o1H{r@dU5xHM|a5wnErWYc><}Vi;_5MoTgU2&7Y%~Slh96{Awwk{7C!sh(ZkBFq9)?@M8+>cdA7lG3=wC00oVNJojRAfY zZT^uAKpIoJwYa?x45WtmG+lhlLMmMz1Sl~pBarL)Sgtc zu;_h`QsO=(%~*E9Cy?mQ!?z3Y(wS59%pe}v1rZ;XU){yg*a$8Huu%X;S-BFp6_V5H zsf7>+M^T@5LXlZ&;f=fO0?*W6^NJybK@6wzv$lw~99RMRFQ0<*tkIZK-JSIzyK z9kT&GSlVn)?W+0cJp4_o2dsZq?A>Q4Lu&?kaaFs&;pU#d zZ{b+g7EYE~#dW;4&h&a>>_KugYIW6@x*rpXG9u_5Oi3&A-z9aHH4{!Xou5ah_V z_g$x`QERs*V5q3lqBZ4!-yHk8@%(NJw^jPgEv~x%=Jr>{wmEnr#~y}#8>jDKyNqZj zbF2Mqc~Y|3ie?hh1UvT)*nvmj?y}u>m4RdOq3k9|L_@kV60&<(6w=O+@9? zp!bBT@~9g}VM#;xzX&|W%PRHKT6!~#M$_{G@e{FR^Q|1jvP(o5v9An~Loa$x2_aC# zZfB#Y3jjZ|;36cGHelDw#1#0g8boUGvD`v|{W%> z8(js5yo(-=O%JGTW9zN>!j8_N!2dF1@~VMCgmia^_Eyxeka)0g`nTtU>bRcE05 zN$I%}G>vL^^DH+^+KVP;4^a2hqm)WdfF_T^sH!;=bczoU-N|h^(aHibr@uag4nVVo z-O?Vbr+ny4j@!Ze8W9E?u=lDYG@`Uc%D?8zvw)RS3lL#&C@v zv}AzC7e-n}g(P21hz(2SyIXy3DTOiJx2=DwJ;QwfgxX=BF}w*lkY6r3dHf~tUFomB z?$oTFfe9T7Jwv40+zKzN-*G*1m7iyP`GOxT6l&*TX-5z)DUGe{tc_YpqkFr>*iwWk z?>&nCAS0ED#kxi@bSv)ITAOXpJT=bWREX_$LFPq*Av{X|0YY6>W8w`c>pB@_VWCdR zgeLzV264US4MzL!#iUmya>xJ=?O9|6eICTkCz>KshC7LX*$?~ZJW&vUHl9kcH3Q75 zDp(j0*zAvv1}fnv{zm*0z8|PrQMjP-*;^)x+LknT+reMCmqy8Z_i^Du4KIjpz8fwJ zpP=1aUFEc4g7Lb;l+8kj&8TF9t1zQ8mwW>3<~a!HbLWzwwq{!dPge#5TH}(a1*JWg zWjUqiOi23X$`UFF=yoS4KbN(YHM@g^mM6yNAQ|(?#UT!fSo!xZmwk#W9G4|NV>0*KFov%dHeCuurEa?XZe_cuOA)ou7kHBEK_s8TXVD;}bO zOB;N(reQZ98LL%xw0nUcf)8eNI+Y5SHD`VYV^bK@6AqI$>c1Oi=pQa?s_7Mo9arUK z=}N!nLFFWXc%hp5y(ve;3W6CgO5%#^5~PMfIMvLF%=x~i)o-i32h6;e;x;{}Gj|8u zCz+V01M=mE7fXhV9WYTt_v8>itYp3ps#4!}vWC{C-mGnv*GXIM#W$S@-GyolDV(I2 zVtr`6k#=Z(Q77~&JMg45(=`i*tJf$ihKf9z?gg0QacR*d6#9hz*FFPBj-HA3i>;Lw zI&nKYFZL5bo=}yRR+P)JpBN2V(y3Q1VZv4%}Oj7kR0XZP6F}&4^-^ z4Qk<0UlzK@F8b8BZOLD)wZiz#Ro~T*B&Z;ot6i<>VVq9>z@?2;75sL9wS&>-oki3KF|pJ`m517QDi@%eJdq$`wad~+%-Mu4GrBu#T3~Tq%-+b@a`~fme4`cv zVOQr^H;9G53pKddL9t~|3dA|#U4q;%Y#V`Zb2?-fgVkg0@Q|E1g|`Wj%en3ai9KWIEG7LiS{r^vRaYFB)-w3- zCn~Q(^PZP(^P|%Liw@BS_&aO2IxCq zh33CO$U|W=JK7pwCs4>L`flQKg5}9xIWkhx5k0rFk?~LLL7Fg(<%h;BSD@QUXKwJX|plB^)s1A@npDuch6 z5L(?hcThj|xIWkaxvXGCWf8b#580;Prn=HVWzYgx4vmExJR?x5N-+hvn8460pBI`_?uJEwZid49+Sqy zxh~7lXtDElNZ!2=WZQi~jI8!M%)-_b^rZQytpP@BjS6**hXck6n{(_uIo~_APIdF9 zbFSF8|1(z@`Y5x(f~=*bm@Ae7@Y^kzvoR|@G*w~I;p^Mi!q;k=zO=o;1Q1qKSTjEW zvxC+I>)Rmf6%h=^s<3~>#n=qF8d~Yx^jyC&kO3QSdpsRQCsJ91B^AA3$A}<=TM8rF z8AGkDFA?ie^{SU#;@v_bLZ|4KF z-EV)5K)vG2+eJs6in2a%=Y$vT!%$f|b^*KlpX?k}Y)vc=Z6mUjz!|fV5xHqrLA!Yy09>b1X0S zTujCF0~2vX>(iS8-8GSI^z?pyfByZ%A3?9a%MCx zk~|TIMM^q7oja7JW_4r_Z1qCnU!t#bG7FP@Uxspy>9m#-x5XOQ1gz7AM>u4UWTh4B z5Omcert9ibwEyudEM02b_}a=)NU&Iwz!iF!8G=z{{Y+o zUFzSYgQlYaHW+HxS{K5b>r%mn@RC(f%wdBTU*ufps_sDHgGZ2PbsE}+u<`AXL9V;5 zoCc;dz_M0jiE>JzzdgXlz_#fcRWpVg(#5JUD6R5>E^v10 ziK7(vBuw-81sMG+nw`d-oh%A$F*d1dp$Kj=OwAB{)eKFeZ1VEIhC6~`-qKIpX*-`s&WhjXkq13H) ztM>8C;j(!)_6Q1S!Use0OYh*wLHBVl=F3yP5OUD zbz`!fs0DK0LsuQps&C(0=CBT_94$SD6%qirgoK@AVqnB@U zIDyc<+UXZ7G6#lXVF$jIF4N2?e>cmld5+#HB+z4I;TFkpxm)B5Y&kh<@n>M{J zSRpTI{a*^<1<)+9lcI>yL|){JcpzMr74r7N$gf@@A_0C|-pWzVI_A2^UU+3*^qBFI z`bHV0yZtWz@X<^SbuhhE_6jA;8vy5q0@Gc33bgx9o*BujRHL7y>tP;1dQPiG^(XSr zcU8yapSz9FNQonSL<6?K9^;vSZ5$WZQP;Gw&R} zyZAM~XAa#WtM(Q);*N}ZLCS92=YjjPU)zg)#D|~sW{i>q`>PjaD2(HH5D{}Jf5W6O za)H!`hn}V0VM3JAyG^V)g;7{ex+~-K(9w?<7j&7M9_xKrMLHiW$G4s0pEWEZP{td7 zy*OA*Y!y@FZM0FM%y8C6- zquzLHMzM+VP2OgG-+!$7I>=Aa`BC_P&W771Uo4IEhl|2(iC34uRehN&P9S{O!an51 z>20f#R3l4r3E0#jZ}Na(5yj$j`66dowM4D|tix1$hFzx=wYwqML*AAf%ce1H2&DC} zBu`jYxmGwN-<*mRv`0D%C5EzF?GqpC=wc?n^^`}dCapHGZ`n}R_mo)Iv^~-PI_3y% z%3fjXszN=}vauAnQ~P?<>A{@eMwg1SHQ?6kw z6bs5Y$RP!Zj}+2hyi)EonaeM4zf=Kw#!ozfj9q`2Mu)KkES0RNfuvT^_|j(p4vle( zvJ5U{e-R^jSxKi|6cWZD_LtCyidV)pf;Tk;d^M^ecg@<-6fE;?9?O7~dC+VJ6f0I0 zl*@IDRx>Xi?i7l3ryoSShwu*fEtl)5#C3tuGm{_7hJK^UqCf}XM5jcAoI4`W$wqQ$ zyF^rxm3EJ2l@vng91r?b33Fr%JU!E#K85)#_l6`4XU9H-@6qGo)xg*&4jLc6l-DO% z9|ppY!S8QStHN&P!%CS~#H>Mpq4PL6I~%nw>e~ZkjVl7Bk(z`k1j$*@lAO0Xt?pUC}p|fuXVN>u;U(QPIL|s z-PZxFnS|^J2wJPI*7}$C9{x)Y8?E4Rj%FF|geojk+Y~7E&+9uWDdHN`3e@P#;tLY` z?)qj;vd$~3TmQAmyo@lk3&ic#JFJOBzMx&NhDkPwT#|IG{$mt$1Jh<=8!*1Rg*E#@ zakY{gf|#*FuyWSv+^BrQgxqp4%^QAn;<->^7fgjp8w4!iL%#S%*NcC|$s3Psa5INq zx+6Z>BRo5o0w_^9P&wOsXDi!6hSk8rUe%6{P^JR0nx%tGDl$<#L;e6#-RK@t`1jH3 zZLO|qs;U2qA}*=?c96!lAQ1nz6hj!zb;)O5yehEZ2gP)t1PZ-PLy++zC4Ilr7}UWWU32Bq4ZU^ttoEx)b91Gx=3hWj4n3LJRk zN8|u)qh6o4RKPBSkmB8ZfIgUuQv)4=_*AtLB0aiV<~cIiKTu-Nw0Le=DE z6wPYu#``~@F8?D_bB;mXrv}kyVH|9?h_#X9j-719{G5fDN{3AF4T(9}YyqyGxh{N# z#SmIuy~uII#ClvFCcW9d-=+UyRCB7Dw)wQ`<~BDrV(S#Ei}|)3@xE5op?4*dnLvuK zsITtYSh3k`SQ&JJ#M^Jp;t0`oF;q3xEhaV2AU_|v;B;QyPH3S_n~04Y@SC1#G*Lz7 zlomrF4tyZasulx5tey~C*`RmTuXzEP@dtkKYdET@KFMVSjT&`is9zbVPJ#N{piuTf zdlgdCQeMx}+f-zkZkKHg<21-P=cXsv@(U_h&p$K00$tQc0DTTr%!BB662Y3eL-snG z9DnBCu#t|K^YBheXCi!eTHj{0-Fnt?+rh$HgNan_U36hs;$29ZEfs2**3~t26uxlB zkEH~#Wc(K?>KAlxK+O|V5MsxWKdUB;q-P96pe34oezvg^D9|v|gb?j~yRG({6ObiB zm!Cc%JJ!LUS^tQ!C^Kb;r;j=H_qolfh5RLbLJ zFByi}sBNbPo5yAQx(U^N>0|i`%N3#JW&bLHAx|@oNyrTO!nP8s5kql?KSwQ#1)(9o z>!2T;tkmN*G(&2y6Ax9d+}yP6H&h4d?9^13wurks_;*(P@{u3~@bAN*;FCaeO}QdN zS62bvd<+Px9@zXIzVCi|+8~@X?7|&zB>mS@C;h+5Z9W-Ox5L5l_r2j(l)4N0(#v_> z=~;p?BMCwWTIx#*f`;|Q8n*-3CH1h=IoHH9sM#TJ>rprAI3QYJ-IREit94#=bDsZs z9O`G$1Go3^C(+#o#N|{?q^DwSnAF`t>Ng$?7}7bDbiT&?FXT!ES5g0@j>V7d9=kO` z^H@~g(1DYKFJWyoH1xG~@=1@wN86YA1^i6~!wUe{92T-q^FV|j6xqSOJ>aSwvEkuu zVZhmxthCP97y*_GG&s<}J?*HT3r0q|5P8v%4bTBVRGTZ4$%1b#-5?dZs}UB3cvuJ_ zHdU|tLS$#PgW$=+YeL|Hzhy@sP#ENaa-P;p)p*; znnqf!OPvOca2hA4-p-qy#9eS@>cf~$+uduLst2GA)r?a~pm0VEzD;EG_G?mIJfZuA z!sChJkaO#$V1*rTCc{(zN7#*9)zItzSQsDKH8*t7)5^~X7Xlpei)UJTdpTS*o|dm^ z@5TU)7(?<@y?hP!61rb6v?tjOF&(9xONYNa+%F=Gz4p>+=%RKAuaB++rC(?l1c61Z z4mQXR{`12P|2az+9E2St>9b?J9)7zI2vEen-+Jo_-1)J3dSZs3YC)-(t8dpk0;h>b zVn@zH^P7FRw z!}xL0u)FM8GM`i#jS)2yd~Ndu4dt!-2trtp?cz?%!WK%3Z zY2iTR-PZ4$f>~TLAyJ<0et30e#M$gS&B8p@nWEhoH;pz2MY^#aW6}C2GbF8)t4D*N zr~Gh?vYi;BL{HsU$IIR)qbFl#gF}TpM2-Ao*{>h#sU9eF@qlvByEmWY27CZc{whjq zDV2Yn^)tX1;!JH+=<##~eFo~`GgO0cYxyAm1&}j+ggij9=K2swE-qUdu1{-@dWcf& zBE{X7sTrgcgdo0r1(R^rnRN4LfKE_Hbm-%5fOZs1-!1as+rEQmKRwCO^`j>D11fjAVRBTE7DhS zw9qw^=P#^rsU={o%NjZDk}Q5X#ywnrLr84FO1U8tWoE5NgR?`)HR*kAK`jfo%l6=U zf?W%H4I|cB9w5)P-8^KSL)Cwzd+XBj8{!ucqH^16Lue4Sj&nNBoMeudxhXD0^qLxj zv?V03K?HcQMNB=8LQ2s=_#o9jYRxc4FPbE`j#4Zq!_ohSTDA$n_okp9KckfO+ViS8 zq$J@4zyp=?3uxqD8yirR27iRBSKm8Dj#8Ao0d7Xkw1h<&?Y(xJqk);kdi)~y2P_2& z+eqlV!o9@VJ#75jsvT400x{853K$DRVcgJep`PGkZQRi5F-0EXNc9A}VXJ_$bEt}85C;=&qeJUv0 z*Vn$Dh8jlODtS>D)n|nIUPiE=Y%7LX|1y>hDyJNOQ=~YT|Csz_ z395uBi2w*M6h74E6~13yJf}!o146Y)I|Xz^bH9k`rZC4519Gt&-ifQeHrTn$FtVGy zShhkS17IW{8$U_7(>=i%mObnY*n6`C4ZD-?pm%h0J)3rNzYjb^tC_=O;#>4m2v$WC z)H41sU5BiM3wU-2>}-SA88`(=dARTJs`?7ra6$l^N$?<9;DPs@5mD?@**5hm*BZ2C3Hkc0{dRgvLn^lk;7INM2$^ zhkY2_+`i{+mB;Zo^sJLox4<;$_jLPO>^CT@#}bWC&n0x_auMJevZ0Hhf1KLmfHj6@ ze_AH|vsOIW28vAMmA-#X-XZL8$48o8?umlAEazvU{SX&ckN5C9N6wk5=>G zf4vOY;?~QT8O2C|(f)QCNVn)-aRHY<6ySAr=LE<~UKgHbxxTyk;`^>Ua(>HKvIy6mW;@W7%r+W9uFq*>D(V`9D4M05I;E(2o@dcSAjB^ z*_wN~1qqRey|>w8px)>H>_Bx^#~Ew{lv@1wV+$^7PZ;?cUDxGn00fijV?=hxlGNzv z^8el-Mu=x}aN7Fuvsej9C!D4)+9)PP_bzUu5SQ2C!Ixo`vT-A=0(BKu_RC_KqbQe` zgNI^&Lf3W-k4vmwdvpen-@PMC0i-^!yAzX5K{!f%t9v0oE$2{ymTc-F_1!&2Vyx^|)iCBa zpDb#8T+ODRhT%1gjRd9<_+fvEEk;!!(KwrD1t|LRbnV$~;Z6L}Kn4fv^TQPYln9bl zR%9;Mc5G?dsrmF@TM#gVOn{On?IA?zV{?;Thtlk@%>`uv89A;~pe2g+?fj!P0>P|% zi5|b-B`Y5RB+Xd)I}gNe{}u-wf762>d@35j$bYLiSGyS;CGNTCa$?*|`R&`y3ij!B zGbA-Ocq0e6cT+0U-3=Guj7(l!#!D8Zs_t$rwi&#yKor;FokDP*Y&NK{5iu(c|9T~Qo_hZl3`sV?b_VAlu`AvaK(`Qj6QZjf_aiGcI z;j<3Q&2E<8gNgX?a1!qt9zx3zVVL^opAE0PiVs-jBLKK7g0&{cH|~Z_atpPCg-x44 zN`RwLf;d!%w6_CPDrG(stw|(iR0lPFEV9~m-zde_p%rNMW%6T#;H*!a%V-Td!yh}$ z6GIOg{td*xFlKNMVF_N)lbLcVT6p{2)x;0U53{CWx;q;UU6F~%=Xx=V^+5oLMCIv4 zwa_3XKMo)a6JRV?{GGvtp+@RV!PTLGh~$&l(o>NILT%K6nVdnZ^g&ljCst>EcxfXnrFXCD%c#ZfjCyZ!c|C$ za_bBU+z6`Yldwh!4bsv1{O33GyKXDP0S-yfoOx!HmL#g-) z6typf%+1k;cELFX$!CTR+P?t*KLEg0cD!$fagxCtN6rmL&PA*HZNueN4^%+F+1Td= z-M0}lVuVf+^c@IjU7az_wGcFmBPng>O1QyH@CV;i#AC0bf_+8Eo`r!bmEpia=|Cy> zW4CTeCvj?{?Y=a>F8;zDW6n{*R2FS3`=)rl-xZY~){Ltft}1tPIjqP~6ahLv2fu!B zT2MWT`s201%!3(s&5-t`{SKjiBk!b+kXf~5u zwu!53l}26@0Clj1!}qK#ew$BLa4gNt_)OkV(R;{63wYgVKv5m9B1(in$g3H3?`J}n z0dS0qD;_^!ZKscq1c+$n?J2gs7$EohCyI)&KkUM|u44WD9&LtGQcxM#FGR1uPG@L_ z$IIv6rsVwOD|RN{1y!p=c983MNNiu{&_2I)G!AWL81q~?In7N%YzA08Aoi4-+yR2o zql;lkmWJFu^j^{pmJM|oOP_oT(qSD_KybLn5Lc1*LZ;psUn$XIoEsr>jU(JF+S?=@ zjHkam;!-r@6pooxnPKSo2aGgtbjvc0eK)^Oy_sFNoC&R88;~_z=dNnF2_6_3BFn$; zQB2_Z%ESD{lgik>nf9 z%LPJW%&C3#Svg3xH({}vuhk)Ou>WqQTAJ|FSA;V`P%kkbVrAaa2@MZg*QBl-7A3i2 z*b&D*vMEYD_wYWeT#c{M%a-%6OF@AygD<}m8=d8@uUp#lKS><$ieA>7N5=XIs7;~M zL+?fhqHY7z{^q?gpXgyTZWSr&hQ!s%xc1{2ki&1%n7N~?QgFlPiYD$js1NDK^IBwK ztB#DLA$LYN<~xT240K4qVgcVzwj=T6%xt=;gD4@@1hh)BqIsexEpk6Wga%=N5mdu6 z7jKj@xi}a+D4zkm%d`_U2TnA4BZahhMXE=0F=k1pCrVn;536>)qis7k)e4QOk#|nMq$actk0?;EaKl!%976Oj4snO@#R;BnwDMg}GNZ&yV-Ev*bQdwEl@(R!&o> zl1Hn(I7E)I;1x14%FnR8q+R;fJ$2ZoG2(O>7$^Ltz+c-I{nDe_XO{eQII{yE#@m6? zFnqjb#ILBP7Fnfxa}+dq-Oji4eLB(yc6c~m!w@II+=Ni;po4#KF+Z6x;l$ZGjSw*> zORTHriPn;N)3^2lgtQAP(SlUS*etoLHmZl!=rd!SvXyn2?V=jUGe!X~3tqLfXPv!K z<E?Z0CT zMvOeaE`#wrSWxn)r_NxKXG1#V<900gQ~%5>5{(d3Ne5l-2o z39iXoDYMO_#g2=@FlY5H$cG{_paF>cfmcsC)2w-ab&J*;` zD@V45(96W?(R*>gn`q+p1~`iV+f83L2lm-kAsAFQVe?wi$?a*IQQ%#yX{Bay`rNdM zzATr4G3v0eyD~#k)XZ#B+~7T{bEXF?2VjKi?GeP!UfAnP5WeGN&zXiTX;b;P%`f6{ zAPxaUy}9>y0{W_jy>au;GbK_jDl_ZOTS;fQtCc-^$DNQcC>dE|UX@cpHoSoZbCN?o z08(*g&|;Xepm4P8JuHs0)1-Ryd+?F|80|7gM+3v6T-w%n{tD#gI=PyRYMIxD1*fI3 z(a&vg5G->V&m4;l6&>!rtO%GIq^1QTO&~C(JoH^6LOPa^b*qzzgFi^5~4t$W`ZD86AyT-MzAN1R5U6 zBloJIX+~&$0EVia;F!)k0jNwxI9C`tF8b4@7B(VhbGeOv+0YglOjHPDp!AROCA@-9 z+Tyh7;=29OHi^;KbO#z|4ly!X-n25}2z|5Rl;A^8XlHrovB$)@po%o>hc2x1%v8hC zo+@wlpY-uXtdq5A#ICs)9k| zCEO5D@EjE00{R4tJQ3_NHw?;g;269#)~;SW5#X2O`n5y8xt8y%85xaGSo8e>-cKKa z{`Z34%1cLhfCgjpK;1zlf*Aw_93pBMXL(SD)VSE-+=9!p9QVK4k|b@PQVY?7Hw&Sfx85(;Z~Z=NU^iqwQ5h<$zFv zO(!$PfG4Rc2C~VT9mdorQiP6ZlF`&pq43z{K;_h;xy?%mwAZL6N=Z!zFk!m zh^YB$FBa0+#n`-npvPIX<)Q5w+3YC-gc?NiXNV%xN=!VT8~>u4@^nhagG%jGeI9OA zJdnrkw-;JJ34LuY27NE8wtG=2ev4NhO^?{OsS9aYp_v0aZ~5TQWB0ViTg}& z+wIONHCbnB^sPq+BRZB4HyU!*jq~(IQeWFpVMyKTBz1aR}3? z+nPFqb-n4wITNqBocz+r9VYOtJyq{Hs~DObyh;T#0RGZ}MA;KXmP zqQfoel6Y#*CWh-kavC%iRZj+z02aGDCxy5%n4l*(DuVWWO6SGTlxaKHb@obTw9~hQ zlKYS4u>CkR!eL`J#k4)>llXjev67D&>f4q?jFfeD8B4Q0u|1q`OTSI5b2@P+RQ~)l zNPEBpbx+TYmg+q{%O@s9pPHfdyb*G|c<)t|=f7z^78*~X9M%~J2M|=L;=Tzkh00$I z`m9nlKV$_A%uX`#|AO4W>OL63PX`!U4%aPY>aI&&rb9H(=T7~XL^IX1YN_jFK(l8| ze54ytM%KVajLTQ>1Cx&F{sGl|%h3%dq+N0vh##1`CGjx5*uER@Jtb!5tUVb{Gwl%& z&Pe&blMU{RV{GF7eQHF_PG%JW%UR3pulJh1EmPY`QoD;ULGsGKp z=Y^jC3pI&MS!rM_0d24bhu`l(0&nj|M1iAsm3DO)cagRrkTq|P;1pK!d`*%Nlqo{c zjQo!pp)V1Kxuq)c6}vQ(oXmIdJ-`jZrRjgt2i_-$eVP~H2jMz*Mm9A0s&ry6n=XllCqXO-V;6gaNak)Btn@%MvaqSw4 z$q|w{(`w8p1s}^O*;xY;Z7B%vy*^i(v4t{QsXnZ8WkDTk@!=(T5z*oR3)y~Q&k%|CHk3R56zo3O5|7hm)&I;$pIQWAjwmVeSvU%~lOP87RUB4VX+q<&(P0z8t`s0uq= z^Cv|vsYFmRUzTj+8!X+s!GA1aYM1;xc($VINZ1o!n z-FiZsA1JH~KvU}TI#RaP&OEi+UU?Em5F?O)c_h}<2|{&Ygjl^VPY4qLf%ZI()ni}O zQoWOu&GSvHka^2O)4TOb-i!KhxZ#|T{YpoGkv79+47g4b8B7AG?`g0#=L7B^>o`?N z3lhC&PleU(!W02-Yjg$=;AZRGX_2|?W&n{qh1lilEA{4ojGmqt38%-tzvj45d zBW%tk&aJpV)q2)OKtm$M(~8K>D#knTADX%=-NorP%;M5`5{xrShHx$-K)YdDeaV5@ zq|V!Winn=Z4%*M(z-e{U;^fM0s%RB8$*X%+JMa>=lEvPG%fGuuWZDBU1zt(~3^4 z%9C-+KMsm5@gD0xn9xsiJQ23_B1kmrB0uOs1!Uw8~(U z%y8OI5aRnaab4MCI<^QMKF^68CS;bv0)%h4C_f9rUP|TFLK|~ zNA7H*GxMakZ|^v1O;~;71(C=@sGyJ68qGTwky&|h*b}$Zvza8p z2OD;@oqD{IgZT5bB=VaAag2#G#A22kX!r@h_*|l9@Qapu6R6Dxw=ThIZM35uD~=Eb zL4)zD!XormJ5#Ydvy@D{n*(%zMn)luh1d>PCb&{NxUwYMGyW*9M21MR_C&23Y}`(n zb(3eyQ4fXXi>?E5?+hzU*2mdocYHA@Vd|spHGCCYResp;$Ld_5QQ9}n-fRY=kb9T) zSeY52U_xTnk-RBi;W51CP^*3WMOHTfX7NJtm(sPtpJa&W|6GrYdI8wq!Y>TppLLr` zq7voPJK-e2aOIT?sjEjrqhaQpH~9@yt+onM=Dmk-hv>6z8h471{wmX$r7fg|pR9!` zGBCH7RLF)<+VNK6`QqLQI#8n>{Fl^ih@Wb>DxClVQ==}-7kCRIePW0J7UDqmQhqPV z*{=a6=*F9$P;jLxL4dLoAk*<`=KS(4xg}wlU!un5%Cft)V3Tk?3%UNH=*DLpgbHa>as0~hF9swu=a@LL3b(UIjuB)y}QTBLG zB9UQUXZCRgsSf*xl&dj;1V7tp8E5N@cJ zp|mVqyb}e|P^uMOq*iL8)f+)O5YbtqO9>nL9Ii9G?LeDoP2?jZV}AV|O&6J(d)tD= zWyL}2-( zRjSv*A?Oa$HOg=Z7XK#j_ zL+xLW)3fF_&s6G~^`7GEhvi(zqfHS3FDGsc1}j1)|6soE*o-v&pX9O(a4{?N@E;_e zaWw*x)!e*dA4M?U@X=BMrN58olf|VA9BnNni?jrKZ;s``E$~;y3B}}Y+PK9)atP>+q0AKPY0O>(Ot_cueGGpN`KDM zdExh~vEpQAa2oQPO8qjpf8&|woiu(%-8Z&~M8fQbllhtIRF=er51+^m)!rUvE}6eg zsu6OEME$HM8i$%W=^Gpxi~>YM6x1M5NK#exiGm3&gyWW){f+UoydX?v*7=zT+r*BJ zCljmGkK(R0IwSv9WNB7GkDh6q>#P>kR}&0zp_NHGgjMdmRsTbI#%i>RAePmEm!qL3 zAWZ1JXn7f-s}B$_!0tZaDrKvqbu=E3t*chBfk*4*sU{%pggV-*&3$u3{w$u|*Ap9v zSbKY9b8rA}{K7({Y4~n4XF0USQGqPD5o+aqhI;zKz8As}G5kDcvW6TT<51IXQv0^@ zSpJG6+(qJo<-}Wv=u5>i+q{rZlNeB>gDmj!Hg8SO^_G->u@boXq8nL@5c+Y&%$tiC zR*d?dg*h(F9t<5#{b<2_A3`~^qkq39T-WFwFj&8A5R?Ukdmq@3ZWQgYf|nXgbI(>3 zI3a5v!=3j+l-#Od(GNC&@)Fc(QiA}_kBfiKufkeEeJCh@aSotymry!$s2ps}#Vfne z9Mn&`T;sHCsjst+0@U*zlq!4^^wtm+^bPHpNKSe;fW_*ye?DP;$IGySrJ_43Fbthw6cm zrM`BVoPXQy6AO7xh1Fs)8?j9584c6x8Y99xyrml0ydd+1-^Ecyhxfl%I*_u0YiOe1SEW5Oa8M7a`7el;> z^%cs0_wg>Nc|~QDuvN?nz9f{|4s==vS6k0l(ftgWw~T#kJ#O-pt)8pfC&|2Za{VD~ zH!fLE8Mrkg5fSa$C^gmDG zpJ;XQog#N04kppx%V_ghzBaFVr55>>L!cqd@w;y9bhKP5hASJZKsZ=aNr2o?3NfK{ zS~wINO9*OzQb>bN!iG|*ZgK9YJqEiew&xPF;?{_}Z|Q*Mg0`$n5G8k0J+%rYoBw;`Kzku-6_6#M0rv(ivvEE4==k+?QhG*${Yya-Wj||KHb`ZYYTJMKNwIp5=f29_9|eNnC=34Rw6EBG zN$B_K2cZjI=6{^3gdMUW^$Q=z{hFR)`XQzbZN=q6=UO`G(_?L2632!>4!PDC&I@(X z&5;XwQ9atdME!7$1-6^d2o}|E(LT9%&}1Z-T@>;uW~uOL2{wo%apGajFFfr1`taML z0|o8Ywm0!-@e7et-#$`lBu6vZc1DnxhLdP48?ppriBG27V48tIO|xyE&|lup@WCBQ7sm3A4xfYQ1Br<=vubRZ`<+-_2J`tezG-wFWQy72)}D80 zF0mls?y5*Pa%#YgjKDZDyaSUOnvhFWHWg0lnE4RQrQ~jBHZ4_MRAW(fLr{6sjZ?+m z%;-|9OV&5KYRa%2oczRcmcp$<2_T~(f^6b(lO2V(Id_Hfrt)l@*;t2u5WY@GU2Wwk z5|*?F5;?EdRP6>}Xi=j%N=zO9dxqD}9Xy}8iawi&i^pj_z?NgqK8SMUR*85Fd46m@ z)VS!DLniKE#(C6IACPYlreZ?gn6EUV&aV!U>X=pfR?5;5l1CG2lJQc)_!o5FX~8`*mfh7#!bqN1Uv1lrO&@ zc~kO&!Is_{PdZwYTlssol?szK5xM9)M)A;)3eMhjRj{ARps}J{{jc+Q{(xxnK!&nW zcW{~}Lvp^KL8jQ@&Tpmk1Jd4VaSvt8h`RAVo=GS7HIf0W7};8FOluMlpe6R^D$`5e z?*5c0wg!^in&}N30FUWCq;*+uDHgY5sGe>W>$q>06qazPGPXHxZIJ!;!gARph`HLb zjMv#fD|~JMkDz2}|FATZ6dklj%OwZgYtAEL%UP+JhIaUrJXgO7qKG7({v0h{T^x-Y zfc_qDTL<(3j6a)3FGIAm^m%akwPDbi!q#Z**y}rY-j-kUKnst+yf*eLC*9O@78nhg zx&_c|x{1;H)(jhQ?mc}*3W&$=Hc$Y|V@~pXVQHOg>krYqQul&TTlJ~g zCA!1+9TYo>#TK=r{=Fy1ZpWb(sAu8*RG{Y$}MA zx|Ifh+>`}7`(%I^-gMo6hlI-!C=*y`X2_)MY)0lTpV&u-p16qZNF2#%0eWJ*yD+Xw za;`gb_HSC25kw{q|7U+Li&o~#nayF~;}K`#;`7aPGbk5mNo{q81zB()Ld9Pgke^PQ zX2WeA-d_pRh`RGJ09Jj%`#8aL6K0%I@C#=woqd$z;d;ESFiF}h&cy9Hw#k|khKhf4 z<$L~N=?ydgPJgYj;qH1M3m>|zUpwY>;vrRPAG*QjsI}&roM76>m>Q5qitKN0fAL{L zMO2ut%i$p~%BSwu7et;%v^w`C7p^zGa^h+n`PL)fcRWQ;MR&5{XH}RRe)xdHM+ZFbj&7)So zJ}UcUDOx0hk%1?j_UP8-Yj(R+wTk@}uehO&a&1xn{Z;$nYvRnx@{b|(58i}{Z}+iM~kYTQ&QP?iIk(lnHm9hQ??TD8ou|3 zi%Ow?IwTome@~NJ8}XWrVNKqKa%lp!p6ogMm;lggW9@e&;gfKzHaJk@2|hAKEJLB= zb|^FecGukDz>w#6Ccd_ZMGvho?YJLbl!GeD(HB;*1 z&lP7?U74^_aqP4#jquK^*IoJm39Lb}5VKoC!Cqi1mGXNkJa`*rFL(3~V^EJF^aoy( zTAT?Q$Ir&c7gI{$NEOztp9s(YF{`1aywVd~#Nxk|&^2qpi}Gx(3F#XQkwlQA|A$y$$}w&Z^PO;SdvyS{ zmHqXNJO#OY&uNo#)gbVg!SQIdxDEXHhX|n$nIdIae}Z+2K%?I0H3!3ys~Rwghq+UH z2U%Xgdd%m0#8f;vQBV!PzYg=h-&SNn9YbaB^`jfziEVD;TaS8DdXf~E2vg+_ue#rw z3K_XRo5bzhj8i8;lI$9GbQj=vT7JT>5NGbnL;B|>DcZ+|K0^Q+feK~rOT!1kuIfC5 zL3?YtfFiC|FClveC&b^?7t%^SupsXlDck6?D>wELgW6OBid3&)z!(l-O2rjj|Fz}f z*Xgsn*=Kvk{BlSTnCZNKf}fA)Ho#e2wr>z30H<9U69}Oq5D^Dvkd@=8O4Y(|m@kxa z0S;)eMI-r9n9y~MR;iTGqKB69!BYvh?)&{p!Kqiy2xO=PMA`)CPOzC?pYYBJ!5Rre znrFP_7UjNssaH+GPJph$o!bpe!VTDf<-`oY2ng&vxxb63lU2f+Oqq$Ykfv(#x>_Fr zJjreV)s?gzfFXh9dj1(>SoY%VQa>M0qZRTQ`(Yo>@+VdTE;85(VE6da94o#AHPX}9 zgTsCz?FbOuK5k)QQkU%yS2wdub1e{{`NO@$3+<%IP-)fg@(N2 zIS8t1Te6#n@DqwuZqBnNDKY{YRb$92t4WnL-piqVn-D`hMCLIO$||D4%Y^RsW(w#2 zWn`cU@Q?Mqk4|3Ll^bn=nv-I8?efkK?W0Y=9zf5@^xWo8W&t)z+PV%+@@h?&{_OU^ z?777yH-d}&enl)?Ept!z!a)Z9K>2lUaKb=5$t@~H@Y!qfX%L-c_DsIU`R;kINol^3 zoRAlZ!+7m&aZWqAl%2_apL;EQlcj_thLJ)$soE3?ZOHpq01$ndK&-g;LDY%-j~Q)) z3#LTeU=c^@x1~cX#L2p&Oq8i1L$Nihk*G|b%f?lrh56;!;Vf$f9oMJ<0H!QA@$06?v5vK&dEcrc2}*c;$wt zG!Qpw?(&Y}wEorNU0~e)k^p78kEf8T{%O^{yTW#1kDx-*SdT)f{NTE4WJ`!KFVI`$ z>DmwbEu&*})yaOrS$qT%*6IxE2Z6NNmX2fNHzK)Y&d{<(;KKslbY2@PdlZv7l9v5B z^MMr4=3KkW+3Gql=YZ=Q*v>QgBD~e}xQiaV1$3@ceH^G6;#iAf^>e!zlq`!AbgT?2|i=$@hIbCZs;bF(F7NbQH_Qy}YNoNNEK1#$Ys6GHay zqPENSDzep=7b>$9Gqh-s%&=SKVi;4$6vqT*TTzfUHq~e@dWZd-ARQ-drRUY{LOjg~ z`wJb$#~}Bsr$(Y4Z_4)vsz-(X;m2oi;@i=}^47m*kpqec39hdF6+*vSs4r?QtnigJR#)%+9mm&{w-%a0F z18X$Au(qg>W=!>UIE&Y2uvd%s^oa}k|?@|E_CJtcJl`Q#pJ zld!OLA4MgYPC+ItJl~@(M}QK2_0{%X zd|>pOjTP2}j%tq>xM%6@^u&=XpdI}+&cVhW9Z5jVwIivE48+&|ZZ)}s9X z0xd(y?u@8)M3}K-gIZ5`Oid`$^PWSf3z-$&(?BIf^$OR|03E5=i(TQWlK|DDyN#yfZKeVwq(!2`0|8@l8ziNWQWo z?QV~ovm3pBE>&=(*??Hp_^Pt-UHXeW2amJ|pQ>`6y1H|7nW~n=MZO#6y(6jE zLs?Xuf?7tN8sSWgw z5_&U+LD6dVHtVjfQ?FNlbM&h?JHp4MRmspr=>OKgzdgUQ|yRn93s#P->%0z(9)iU_?x_lqG69Ux34e@RE~)InDa3dNCW zx4?!04Wb8n5xYqOv6=YFTkr$l$A|@31&ipu1qukI)3er5br%Icy47{4ZlMBfHw69s zP^Ft`Uc(S^s=VTjDdd&1yTC*ak7P-(tpguH%eJ|{g8``hch6+F=D@2z z*1K?P$(u_?pV0wsi2p?5_i0snp53GeG$FZ0dTN`UpI4TM#RgG0_XN6s!DMjfvu@$% zo~s#xEN$@rbr0vx%5UC6IZo)=mNn`(Zh^GW7K5EsCj%#*4cRpy;!SU~48YyhHKdH^tjW?re=wBNX^wQY>1HRRb!5%AF7 z99eH^8ylOaCNKrp&v57s_19-jH4mrS?Ha`T!gY!-Qt2dApBeXpy0uvxkbrT@n~{{+ zFG&C<0IWFcC_H~s*!^u&vdMuFe!j6t&Iy$lra41nBgT-YIZ4-GG09qVQD(w9W)E)V zn_jb*8#*}^_!`#=t~wK9!Rw-Q*22$~E@_6>D8 zVsszH=ViB82c75&`yzJ784<8AkK%DMDfn;24jjPUq=7=uELu^v^7CcTR$g2XJ)h}iQe17h zyjQbZMA}FZD9>=_@o7(M?7nw&>tpZsdL1idi2S(3B28d;C$wCI%%%~C)XTy_Rpy}M zV@Og#38A6g6Ug=;qQKZ8n?2XOylW0Lmfn2|x0UtGtgo%_PZu#MctEBCsTh^i3QBK`E{ z+M)%y!g#9vfL5feg!Q^49XYn(6~7(;9oxZfE3|ORz@XNV)Oy&0jQ$C0kRL0y@p+7T*bA%VBPR9)ZjkFP~7gDkPB zJp5+RCU)7I2M~jd`hD%ese!C0FN%3C#TUus4jOiX&0n!iH1XQ>bnos{;8EAz8kh zLC=Fx8cvs+hfj#?oDl%sHkK&%Ur6Zf`Z$q8?-oTW-M0s@WIg%r^~AsHaUicaxbLfu%pZ1BJ?EeIHB zqphw}PNEr?Uyp&Y&2B`usPf8tFFPDpXWfthk<+8E+Gunc&~&AeA$UNp5SEZCG2>iz z+Vft7L*qmbH>W}q3n(3-?ya#ZwJF$!BFKF+qKJAOZOLzkctgQ6DtBnWscfr*_Ag4R zRXEk#NiMVplBP+QUb6dI_P&(j?S)`WkvE|cY7TiAy+z5aqi?dX<}u7Ul(Gpn`PSKX}0*3LdAx9>-#pTubR|UZD-8;2{GKc*e zCSb%FHj%8(pNdu#7SmP0a5=17RU&*Ejq8Cc2f@Nn4{Thul?YsQBN|IQurHeCD z;#xT4mX~ACGL^ge@dV;M&dZ$TbRR^4&ZP; z0^P*qt>%Mov%MJ?MAbB=QM_T7-6pyR zEFN?A9md|~S!o^1MJ#F$^N2KK$pY?#^|q>FaBaHOveaA{&6p~VK%{V@K+ohN zq!RpGY*}!X(d3+@6B0bM`u4rsmu7K!x*tQjY1etyF_(JrpHG3Yl@Ma(h9B>EJ2^d~ z?*e^RXH5y|DxUA0Xlw!fA{oj4Wjv32he}RNz5u<{xbq6Pk2b!{sN%0k=Bx&@w2Kc7 zzc;!bP(LF2C*jFV=-c$zRl*SN>!XUDu*7Q}j#ApcrAwr#k&$mY1G8_MkdaopnDJo; zvy@qT`1wVfufQMF1~T;>OybxE)X1!P5Q}?lU+iN3Bp|@=w1j8#+_Mu#wGP&%3b%@d zcX=8wrP)*+kLfbo&wx_b`ps;z`ISzm`!Eo$IcecQg78TQd?6FXAc@)oc%1{AU;;ce zM+Q-2S1)_}3ilmWFc;^ExSeYyXvmn9Fof>Iw@Lkn9y+aGRsk}QipkpoWb1W(UQ^UV zmb?_S%Eh}wci}9gqJ*rwcr@Edb|+sxGxj#$ZzZsJH_HEo<=fJU1HBj|Qt=@kEjSa< z)!iUsKs|HWH%OOHebe2xoWE+H+daG=G0jz({n^YYv3IJn*F3aqfe_QEILTV7E8bl* zz2nXcm>H(qA#m|0Z>71B4Kjw6Gb;>W8h)wdcu905&8UNJDP%srre_o{(~LAFfQWOD z#R#xCS3C5*w@9e557WY+fzffvzPv<~rLTEREh5I6`@t)_-XYEr?Z*A54UEUhWm-&C8Od~H`uns|Iu%m3zgQV|61iw3@H z^Nml2;Q~-c5i+s9)z;>8zw-sm8|59*fzQU@*7x95xbH`{pS&yhE_VarU!+Jv{7w_v z+{C*%fDlR;#@O7{n<_tM^~QQZN((5BS=V=jleRC2SA=SgL!8%T{XN=jKlGr%#r@rv zJs+pA@a|M$z3uxGLGqHlv%hp?B$l?jz?7_v{TzT*3B2m&H+p&4qOS4t4|;qH$1 zOkF-8`fXEEvP}rv^}u}yxcarkm$Z~n(v!zX!O;R<=HofO9z*(Ppvt}}{Sd!^cbylY zVIhSAC>bx@yiyi7Y#{IjF5g=Gl+b!O?DaVJ zL(Sif8z9#uif9$&Loq9>urL$8MsInxWGwSh*nV{r{WIr+nw$$4q}k{jypGEy-P?j{RF%X;$@OHSo( z)y&*~xY>p5Z3H-4VpS7;e7(;|)mlQAEGoq4a@}9TMLYR-axcB-PhfU&|Dz4ZXv3wq zKk0G3in^;1!(dc6dTiUs9`B+0Nfq&@(cKj3&CX1iBXFVQo*79<0P@g7-KnW$z@@hR z%7&_1g6b;|Fk3=kW0vsX?o;IdVZcPI@ZC9P>?mrH7DIrW9Aczh~5Zq9#f{*+5W2ZDt>i3HohxmBMuy)zd8VX!1LI7E!MlZ&)2O||`T${9AsZDWnqTW9RGaJa;D$WY(?@j((w%-JB9;^(}I%~n(6 zKeN2}rGRnUn9baqvMk#W!pxRo(nU zatixfqAY)4y_CYQMPFo~obZ!#MM>U{rNX+aF?Ig&GuLpcfVV~*x%3!MBS0i2!X_~*#YPaX;)an( zlH;8HEifRnRXUi<2D;rpS(@Lp;XYVIu}7Jvmzt^B{V_iN*rntVrJ&)^Hb~vMH%PA% zH{1%wu9bcG^ugrW11^6-08tMz7cm!1MD8W?-*9Khc;QG{#{2VKuISo!0`p{Mx(6P$ zMLHnSN%&VmD29KFbPovv8GwXOQs9%2Hlc=5LnA_>!SGMD)8PrS=oM$vF5iq6=s0L|(tv<+H zW`5Qh1Wk&`_VrH63$xNNpO)C0AmkXzzRMr-p|&5Fa=c4444opVfn%9|f~G0)&1pl{ z4A;LDK?3@RtmE6FG=e}5+!A#h?Pi{m-=$1eIFK&b*0v4Ps0s-a&ZmFQiI!&;cw)UN zI%T5LcQ6iB;{^C<0n>U4Cey&tFOHgI85QkhS{~su!VqD155`*x2qF{(G#A+(<`}W^ z_KvPsHc7OrRc`E5tIv*G31c*@KFeqgbNwc38Md7|c)ESo$-5QDP&3=M26#EXrl;NB zunP1lzvsFW*9olVVIlIF%-?GqpjG&0t;ScIoJ6zioHnTAuoi`KN}%f}pw z0ff!oSxkS%U6bkaFq7FdVj(o!*1(T-L+As6pO&4Fg?ns$$Hmm_Ap?l#GT}I1ntUxU zgCqWp;K>BgAuJvQD8q5%kR{S(PAhuN2+tm}#D5Iz8u`re&aD$`MKxhN+k95P_TdPd zf=s+A{)kucH(G^lAuNIUr-`_4Q)#^Z{al% zzp$i&^c}&rZv@|+qV=C_Kah+Ls(OexuoE}U?@`+uE-41;i5J2ID6fUBaz`1|UG)4{ z`+V6c&Mpw063Qei6;RR-@bS@JrE4zQscA$Oi-6F8EHXM1@=x{98&*3K{I0Q>HVe=#hF^yan=w1W~T?P&QcH4Y%j<{-T3Qw6ht)xQ(RP z&j^qP;10x7YaF#xpTZo~f3t}CUH6aA;0ss*#$tZiQK#r$1qTYcrc@pTeYyX{Y80xa zjRE+Tb_EHA!T&3crQLEPojafKzuO%)8Fxn&1MLq#E)Ck%9Q zbfmZJV;4FfIb9OC4@!SdEd(x=i=FJd0#}CepnaZPppwCg2T6V}axKTU>Dh;b(mz?m zi27i+J(;&9tj$HbO7D_!1Nb)2?+|VOSNRl3c?6rxBNen=V^bDg0(a92hj3RFGEGqD zVO(QUSFd01FVGZVHcHs04XfL)1NRB`Z7$g=aInPnBix-SZn6`D-vR%G3$K-vpqlLo zpQbjih~ujbPkkOyD%<%#(^6qUf+arBtKO$_2CB(j`3Y%5;sm zeDO;sb}Rw(7Ygwi9c?c)Z_BF0YY}m^=tBSkK>fc}f0pdwfIy2?!DEGgYSr=ia>2O? zMh`Uvh;lgDa?!lMMRYlF7rOj|K3=}2H&dG-^=u<{cAX)8xvL1wW2WxjsZ}!+Jh^yO zb{^aUw3-G1O)4^~Sa1^7&hWtO)&{9OT~MRJlXL>jMFtn%&oW%{bRn7a@6h8ogcc*? z-f_LhY03J%!DbQ4CExec6%z}~*nVax<&~`2O;u+%TO1}Fl z^X@0oH`P#7A51?|S%IrsS<|txrT306xKCfo+H6E!n1#yj)7x;yNHwxnYT=JLW9Wnz zOtrfQ7h;~B3;ph7HwaF-IWP0Vt7g!o2q&;^^YqcOSy5IqALO)w-ZEoiVI==gIE}zi zD^6pAFrAsYLtVyZMQ_YFd@jJ)G>>ioYwR<3T^Ekv5}Fm`y4vXpfp^Dy(=0=}5>-{G z-5*q;tMC5E`{OY_JQf+TbUy1uTzAtaZKP}X2fs?nUx3-fV{Aya*KHehKGN=RFXlbp z)A8syo0>rjvg8RBB!ijfr#@p0CeJu+4Oe^cRVukT4SrMTBRswi>``m@WcBi-VE?_^ zpuqHd+eQ0EuyTqVknVQ7k%2>`wn<9tJS@~?l*&5FA2L)t1?LDLCaj=$Fl5HSX( z&QlZ5-H=a2J2RoEnG_{y_NqPXU&JZV?aSnGcMk|bXh}_Kpl=qTU3Q=;r`gQ9(2m(=W2lZHKXLN+sMq zUvCGX74Uu&b5Rkw3{9nPR7H3pyZap$OX$fGaCJ;EgfQeF-;X+;;?Ou19W-_wT$5UOI~7X zP>eM|m)Pq_1G*sGGv<}X@o`^l+3E{tp9(}@Wf4(H_E9|HHs&tn8f{h!3?OSVj&pWI z5I*LW8dndnz}wmMj{QH;etXe>WYuEYJnjHEO_W=>+iO#UvPWy~O)VwEa1VE;zH=jC)MG)Ty!(Pq*rPkUu@CD~ZUa|2B_1wd7O|{3A53Ace zb3zie)D+;N9-}Agkh(q>5b-BjcgH~$21J}bQd*mGc|@|R$NBK_=j({C)Dgo#Da9`qCKmNHQ- z`wUt6yF3rC<<%@w0@e3500%vbxlSalc%d5GFR_t~Sh?BAe0t5o1DllMiG2f0;M`$0-H4Op$6OTFp4|Ru(;a=sKq{AnnDpvl*;KheY~w6pRGJ zd(0GrW3$A=Q3y9Z}H`T-^tcT`sdAVK$hU-9Qs(`FjRK_d=H4ZpVZ#BQW-wS z##{S$(bm9DZXxrlabz?bwXv)DNNk7)Sj^cvw60q%=W~#PL?bnCdBqMd?0j(@b0cO; zt$2Q*S{nSdFo?qtGbH?SXarLxan8?!yck9-jZbyTqNWA;=XUm*`Yx5c%JO(@kAG9B zCP6Y`7=>-7U28|^*uwjj#X_#jF6ak1a?tgQj@vkWGDTg!V9L7wYhlfmMx^M11>hLh z8=2-y3kvhEs*+=a{LVy zmxff(&HciNZd+_AYPuwhfu5aI@#i1nYTH#qa7qTpKbY7)3Bzy=>V(EqLkh~$^VAZ? zvMA_+u;)|Mj^h$?_pJ`Q8~`(f_Q?C$1v!@OuEPjX^g#ou@gei7@ohgyFI8&ZJj@pYRfCD@N&<$Iq^VCJ6PMMQ{` zh%H!Po_8EMp+zPSCuV#W?Rpmc&w<71W`NHGvDZVEu21g6hCSqJHl%^|zE3BZ;n@oc zB^MS+i2cYL?%j%+O%$`jzoe1gR?W7^5-4^&n4R#HdX^(>0P8-w5$6>}5!?#r4NfdB zz29kzFi?8sqBa#U8*vU-0zP9_V(xYf5jG2c=b9uaK)Z_PXcQw`Rq-m(qoL6M&`VKc zDzitit*$}-o#s$pc5`09q4g3Kx`7h7L>!*^UAir8T+cP%qNuP~jfqxh#avkb-)nYnmhAP1Y zFMoF&pF=nONYytFM%3Ist8nm#m?u{-H(M$3s#QEwq*0@2FJontrvtx2QwOU?_-SOU z62VxY9iiYAS68X85ZV3URh&G-FIEI?OxEHt#<8*@Zu4m$(A} zP@p{gXI|T4q_#qNUn!UmRG+#>5g@vNJxH4W&`?@L*lc^s_RDQgv+o^@v zfpq$yjD6({0b;{qpkoIZfZ@UA;nk7oQhHL$KC=VkuKZmP4Xxt7115i>{ z(pv4m$d!i@sQ9FMVDI952Af3Tcy>x5GUjF8vR6 ztp5g~6Fm*zXwFaTS!dyzWN00Yvb&1(d#3vuxPu*<)BoxxphIMDy1sL1=06e91?LBX zqFau8)7FWLxy^ckpJiFQRG}5zH1PX$d>d9vcu%Kd>~%AtU0HR7=JvSl9G<74a=j4D z4mSsJZlir$A@|BRQKpCD%eU2Em!N9?+jyF6Xh-10W*BycKKTRH&w|4!hEMNfR(YdN zc(|K@jUYgdp?1tX8|wb;$#DBcbfKbV$;;Rothec}-aF;zsv~dcf?W#yejG_UY)^i6 zYG}}7(JmTiI$KJSlIOvDDa8J+lUVbdY{pZ1^d zd6sRHx5Dgd8|X|~`nHFWlv@IFFpAB4q5c|ov&y@iq=r#=KS8&D!MbwRW}Ee)-8Hex z&>d*u>}~GnFp|EIiV1tBuQjUosxQowV3N2wqMSjd#t?&iIrNb%@F=TbCeaGr=uNABdhT9BcLKtq+*4d**+eHvLhS=waLpwNZCmx^|5=J_JQ6HRdt zigxC4ga9w9U7pdfP!7u*Asl-4UU{lgp97w4TD)!6E`qLYOwEl;HB15av&}Kg*Tr5$ zOqwzT4vMdj=(LcMF9r%bVgmh+Srd^_&bB0Tw(NIp5%tcRt*5SgSyC$~D0d2tIQ1oR zUGI>YUlX_Hp$k41GjVLtTtQX@1zdziSvKOzQ7T9cHL%D$b)&?CdRF?8|LPpBrv9Bfd?yVsxz@}VslCw~6(;C*uHMkFty z_Nb$%b3S63zumImuB9bvl6eP8f_H77N2p4R;2#h?z=&)w8MAhErbJx#vK#P(f-Yl= z;3XYsxm7ju-1JL~M0A>meO-6({g}Ntj;Jq$to#%f-J8^sT3&)mBt7kbO;;jFd9Zd+ zfBc(s7{ml?VmX)~iwFLh&r%#Oj-@mYL6mXzWj^4+ZYUO&nBJqDmMVEP=MltR=hR7p zp8l=8f08w8&TW|wVfDiO5?K`hyGJ= zeOt_^s4C3~Yb2~~)~mb$D78oPz@;;67Y8qA-268H`Fl^4{FhDjlg?{?%*a=8%7u9b zyemv;Hx?NZZnK1=rCM4VRMoExM)>Xgj94%y(KFE1U^V(;}iNABj*${LfZ5NQqXTHso-E4E5Omdb^&lb`+|VOd{7YfCd?K2 z$%@>wtCzcf7@4)6JG?_Er92(6QkinK_UnA@bT2`)M-c(A)~IQwtW49h)l6wcyJXK7?$oQqz`BsqL2CssL& zD@sYVB&mn;oWGc3jr;MmjZ|$3*w#4x*v=ePyL_irw$O$n0F?xjg#2X2_mS6BUXm+v9LeZK*AT8co9K7zlzoJl1L?|a2 z;4(X=gVRK(_fFJU8Jc&oGBB6G)deMdl@7qym=qAhD zM)C?z&K>{dD-;F`b#BQyTY%Z#{w)&{bM4899e$;*%QJXz;T}3OF7-Lq3+S8%#_~Wn zkecUbuIXalHqAINmqsfI&gV-2^|Zm4MEQ)Jyzk6M=R#`eX`LYrL%^ z2;#f{Q;P|xvV!q-;%=mY_+)R`@PfARxp?cPhVzWsc4H(OwIU4JXExg2pt5=Jf@4@N z?xS`Me|hGncb%U8GN_EYj_t^&s*G3>HL6>;tyQ-$l1)X>1?lgI&!fjdQkT z7;E3FUr|UW<7H&%g4w;}TQpxfeJ);>QJauMrCt5~Hue0|d9Ab^i8Q2;`AyT#BZ!Ft zdG-WTZYP=;Q|iLbimY!Ljl0Eu`wb*$qQ3<+w7wxyJVc(XHR&XQ4PmL{`*z-@9=B?? z#mF^(7+;Z1TN-N%)Qw!9X%|G5cImJtAnv%wjL>?inFpi*c9w6gJt(s8#_Y4o*zl$F zsYd7-&6gp`cX47y=u*{?qSu&z{QVF4%S1vOtR<;e=Vm!;xP!*y0X}!3|}U$;hMXgONqf!rZ%2Ut5kU8^x#U56ce+(|cj>#KuMm7onxt9RwA*8{Bthkm&A zB^bmR^N0W9e;rr0`5HleT3PbBw^KM{c7WtpygiJ@>Vop4_+7F$q#qrf6goJxdwZ+Eczoj#K(N*tUV-+q_)hk zQtS$gmsuNA5HE3b)L1pN_bP;4G1C@uF!yfb^IIC(#EKVtYvATM(vzTV%&!e5c%9B6 zI|t+>7aO=1TW25g@BE59!?wsjQY&FyiV_P0rPw{|$57{sz+r5_s?D<-?(V_8QFgQ{ zlbDr_>PD};c{|{;_ASG9QE7J;qjt%8&d9WK&+o^Kfom+4Y-5k;@*Qo!7x+$wlI`xU zs8UD@s!BkAxag@bvLGc)d3TXCXm8B~2hf>gCPNd_Jo5!w$BtlrE}epB$+{R>(ln@8 zss~o5Qer$9Lq%S2oeH7pXaQQqT^`?P8XxN7>J#g576*d%Kutt|V|3u)&fyE9>zfQl zzNc`(`6;R$CZ*#V#~>DW$ba55mHAwQyeHpzXbKX3w?C| z<2Y~ThH4GZTIV^|b;0f5c;rG%U|5@Ys=el9ZVt^J=|sfdbqQf>Xy$O!z@w(AbehVW za0g{ZxPrOPSs_cg2QQdyGQI!{IIOulhjWHaxr3{3=Dz_^6K1%LRc!ZRUF~%E2}a-+ zXq+bEOxmni+Y?95t2Y51>*>(b@qoa# z4@T!O&}{dn>kjo2bAe%5s&{)aCH9Oc$E3F5-Bey2isPNVNXQ6oNYYE4CXin6Ka6T= zpQtJP9q>DXa}N=!7(s7N8;m86tQ|wgcH;tudC4F~WK`c4c#Muz^}%B(ERhcO*zw=* z#G>Xnk&?`aB2|!B+*Cs?gdHTj{3H z#wC)FmiLi?`Fmhk=g~AyfrR*sPQz3gLx|Km;YDCIz91l06`O=LO_J^o*~SHc9*`2W zO~oZuZnE)=D!EW+VRE07MxaJS1V0)Mv?whJdkiONZiX4>`g93wH??y{5T2@X*29*w zTQ7?8eb)YIr3FFrBapr)%UWGTY82o`nTC)xeNsAq-|nw)ORK~3;O>HN5!5Q?g8{Gg z9z`*NfcYE6nCG75v!;;y<{^SQ#pjh9{g;Ly zy*Noylg8_!Y+o8Zn+#Pvs)S)+F_rRlTb@h%BiZe5OdpRz1%<=QH0ofX&dIBiZ6oM! zxVJED2V_=43Ozm{8sbwct9WtrF)D^Kcdp$t*A8iHd{CiNSzD*I_|yKql$iM%ow5l$THNt_oXwp&{hs zAUHez0Cw`yoxN+!n4v|jkt-wS9`OEfFu6oq<2dd^R0XRTz|(0a?F0@w;5{AK;}iPT z8}czGf-2Y+(m;jCjR*jade$ma{4f1BG#;i=I#~S%EFu1xw9X248f+(v`VZ@jaegg0 zoMUW#5?p$E5CNl~l=MAUF!UcHsW}Nc^A&%ewS=z(B!rtkaN=fKqjfU6?64o4m)rNg znwZ{Om~+|bZPi&Y6pQ2gVNu+rky{{rDji~3YhTJ_N>Oa98IpDCz@mAsa+sct=qpLn zM+u%X3#?QJt{mC|_gaam*@85f1Y+bGjrFWy^65gF>_jDeC+ zL_+*}!$=ksGnD9@#CjCh>iWXF^DuXGcTn-4vVO5ig8vN*tv^uVN^NenE^N3pf}wCN zt4nXinYJeNr_EzJ%uvEEImIPSoI9>VCffIYDM#n}7qBG84!{5?Lq0YtQMx&s4b6|| z!LGZbvc-}u)_K_7?g!(uA1Uy%R>&U#)H6E&;oQD3p$u7}Q2Tx7-%~RSyL6Df_e395 zIW|!?^6EeE+hZWRvz!sngXEb#YLk0!FW4U*tLu}n!gjqLzDp1yoY82?ovP1vCP|rGc~-g4EApQWyw{$r&Vl<&OgCjF63m$VecOYp^JI{6J((%%9?RX zYXNr^cS_Uv2ija3yQ;8$(Iw!ZUEF%DH%ihc&(!LNY}2q?5wg%16=dzI1ZyO{6Y`zh z*KlpoN%z<;Vx+SFKW!pblJ0J6W>5UQ>N#9yEp-^vp=ZID7%u8lD1UO=^60GW(@;Q- zs@?pCeXvr;nw(lytxJ`~5I$Nk(-&Ad^5z^QvV;Z#<&0xbKx{Bge`+WGjEcz(Ccf9} zZ`24YsduF|*>8zm-6A4^8kOJ~K!H z?dOk%Y(F*`Uf+YBh@sht%HTQSn&eJ@ndZcsg&{%ZyXcE208k?-+dje1n!D2^Qh{!4|r({f1FG#Q|PRrVEVY&N#aon zsw>99ANcO%<0oA~0dNiPDa+o?@}O=KP--N^&JtgWITCNqh(K-Y6A;(b_@>xw1581t zKQIdU7~+4%Nr`M3NEtk(VItV~vjR$*QH==aW!17ZQBfYqW%8T`rQBP*fTudiAi8>= zXKv6ezF}k)zlNfHM>BDPQqm)hf|8xilgRi4)P&MywN)HstMZAqqd7`eWDcG?;9oXW zQa+>xO4vw(UZS_b838644K}c<4p#74`^6%74WttwYe^RMzO7@kuW`*?X$~nAx^Xar zNyLHC93oli(;d>M=a$`!h@QP&EYZ_#Wl-B-IHl|xM+vQ`zW7hOXT}r!qzsSx!=ZVIT>+t=1cUIgAobyq7-b57KWCr#48?K(R3_1*c9v|njV zw0C7XotgtQMeXhYUs=BJvzDaUt`{j?vqzbXa=`K=CM#&^6M-UX?VJalzdJ~*m>CD5 z4$O5bGN&r8&AKm~P8H1X?~$2eFNR031$)Zzo*tfK|7lzRU6415a{yHOCGOx|ld9`M z&NAn5neKtr;_gb2e&E_k#pZErihB-^Y*;pCjA9I9SxabpBuHC|_RH(B5c#^uWNng* zg{BTM72K?QEV)RK6LN#wm=vfs^UF%f08G!%k)n>Xl@{C0wzZUGJQ6qy>0V?h0g|6% zmlvnPnZ)4PCDCz|t|m|s$*W|d%7?_o4?4?V0sAlZQj_6)%6k2m=g5VB-CFDddXy+l zkP@tX4d$?sZl=GbpQlVSVo(;tn{xM9u`Zu_k51c4inaEryfke&9s9l5lXve@=*|UO zX18mJP5RMOc&v@m(Kh)U8v!*d3&mko7d3O>&$}bbK#hH^?%dNsSVUwcfptH`m|$G7 zO9&;C|LeF981D04)8Q%b#?2|=>zaK{M6ykqIlGP$wg*18#8!*XIIpiepHK1Wf{8>f zZJv6}LA0Pngw8A933Z_Vq#J}UM0hy5OIUi=-Is)U+b{HBn44%^2;rAKUYZikq zorKuVzveMg(Z#Qc7IF;G!2M0eLERCe_nmdl(4{Gs`?G^O9=v#m1;JE(V=9Sl7PxBg z9}byrKK6)7V!6CGHL8Z8!ezV;XX_6H50tDvK&0Iqp*i`w%4Kzw^dO_mq>cdR{zX#x z`4All!F;ce3O-82Ru zM0R>nn3eBEZh&?bsM^*Pq8SH7CC&AN(p;4~>_Ve>#JvN_$g{Rkz&N?z#$UB60-v*G zTOLXC=WRrMtP;j_ETIu_bVb@z%NV_P_4J|Ti^|~-bw1DaM5|HA5nUNNP8-SPm_YOv z7r5FsuW}%eR0nW2&Csbf>Q|Q#NbhEuA&&2HW5r`Dp&ndUWFuFiG^|a%f|gf4{BYGE z+M1ed7>+<3`bwerC*WgTrz&t=igP=#CJ(L1W*dWjab0;1jslS&9Fm7s5$_*^eqOe5 zxEh5QGvsfxKqWtYx6}MXOLi%njj@I{G$SS6SN|m+-pVm}%As_-?Vi+m<}LhekcmaM z^kMDdrYY_f|1Z!@wi-R72+G-ps0dvl1eT$lSsQK@5|X4>U!NC!+?&Se`m)NztK6h>#tjFL5}3#~O1E zu89tuD*R0Ose$dwPtwjS6)HnXF%zN0;fB}5niTj$mN7rj1M7*pQnAyY4aynEL3GO* z55WsEf;~U~AA@_ba;o;Pnk^|aDWa);cC6adAg9T?DB2PLdl3|(=!altw&CC!t0_|k&7tEQL!14Am*KM=ak z1>!=|8k$8=0Y(jOHGNU}Gb`7U6^0W3L>w47e~PmACeFMNS?B?%L4LeKKG{vuF5j65TkxshR((V#IeRB~ zg6Yh~Ih@$;Y0U|BEv@ZiK(K5qkKLQUoxXlh_|Y zR0ET=zt5E%c$8UjN+QbF#5UL+_abon=C0s8i^>|mWS8rf#>>c}p}PePjWrHRVgds( z;nvQLoI&QY+ODYtS()c^oJ^E+gk^wYVt8rhss0Q<+0vEdMQRcV&E$_Qu@+do)*?`< zt%blabQ-ZqPEYy%IU9JK|5BOup+kxtUKWYX4gr>uX-~VG4mqK|Mqck6j3W~LTZu;J zC*@fYuqSg}C(LQWzp@yHzVhj4LN&mSHHD-;x%=4Xy~TWVCPcHTL=Hef-5&M{R?l2) zAp;zjE+8YwZu$RCnIz_Cp{Ldig&W?Yl@pVvn1H+{zhGNYgk{3cApj$c1;?P$(3=hl zJco4MT?^H;{iqnZf+4i~DP_c8C#G`t)RndyVsHx2e=2&enp&R!hO>_@b&aY|5qir};^iU614Z|hiq?0Or zdwt;-DKGb;|=9yVee4@AW=O%K2UuFPy8TA6EFWeib#a*8Qo|S1Q<@fI9#RFvykA z0@V+9oqdr(M|!cIwwyj&hV+Tot$FPBM1K1&vxk4=(TuAGlIn)QNxyX07#IrE@&zL0 za&DjGEhVctea+Fpq1LoNX%W;)Ps=(uxZtkhT6*dZ-p0%QlkeSH;b>V+*OHST;^g1=y@gd>A&>T+jPi`Q&)f#Sf zm7bWqM9n7a2eU%O02%U6C+9+*_%GM5@sRTqFmhx_zj~l9xem2*6KmMl9p?_}cIUeS zJ&MKe^(`GFty=y8`Ajztff65Wp=apKDpzE9W%G#^HIDvX*xHY+`w$I4UwJ6Tfv`X3 zT}EtL>#*Qg;YcWMcJK8-fBCIFy{SP_ut$*I%>c57^Gh%&IQEvdQj8X9=nE zmh8}1C*B^=yD|8IWiW2d+i@5Yw7}h@4x^|!UJS>lDC(mQ;?X9foQBrJpJe_m zd-6+enXs(t=6RkwGQg(^$iFr#N88c6yeVa80l|atuqykLykLG9C;dnw7{573F`&_a zev%Ti2haQnlJqLp@xW42!@KZYk%a?+X`M(uxm(^pxS9Y@3sLz#S@QjTUFnHT5bLLxDFWl)FP zAiTKuzmfokC;NX3Ml8<+5(a%V&J{D8z;>7n-G<;IdrTlF7ULOU!sGF0e0j06fssLU zn51)nUTcTQ&FF_&YyrSCiF^tUZ5=7vk_G;Y@S)1yxhUj+*hh5@Y)~}I^R-qt5)SiB z7ne?C)?!|(8}&!jr#%)f3g@R+QI5TIN$#sg1T2sx*GdAag5u_pF%vJlFPs(wuLu5a zNN=mm$;+GRAW*e5<0{3VwQxQ!B!@vOeN)dQC%}bx@c}3!W@G)@n2c%kwp&HjOIVYe z$ZEjm*Zs+Za{o@U!$GNYAIcvUPPVavVNN*ymc_x)GEmYyc;_kfqxMB8;85FxqFNE$ zO38Sy0|Nj|;I?ZLxvzl2=_oWK#@bwv7m<88xS3;kWYH9SHZwGiW2D_8`cCzz`;OZh zZ8Ons%HG>wnc%_|3emC@%GIGN+12+N)E<>0_Hf7gvDQU zk_Sgl3>eo`E1Nx-GQhvQUykXYFQhhP>vbTA3JU%F7#dzTN7gPrJQu zH6z8hC#w(MC4|N&*8-jY_-$;a(!jqNE)XhEj}jqE`ORD8y4w`Fttp$*iH(G8QD1DN zBuYBQ5Hc|ZZyR$kMs?b5n@c<3Eb65oM?05-0Ma&Yzy2Pu!Ukim~lOG>%c<=G8@+6!Xi310qz>ffl496itK}huIr%>_ zW#Fb>t{Ze~ppbcHXJWTG4u?yNoPMepwtj|U`p3~pYGL(}g;aBOK-{=H!&VgUJ*?t8 z!XrrR4(}4$m}Js(j9Gyc-@R+q2DUn~Vj$gqzSM2o4ynl6kuTuliRF~YwB-PIY>fz({B|?$!zlzT zw!5OEcc$~StLpPRB5Kn%AhFmRKz*aOteqwlb%^MKq2{NLO}<$!=0^3?iU-c7^{t0D zj}gFoWcSI5mAfKRR6YAK-rb?=Js0ivJ43Uq zY$lq6P;-(pO4vJGL~~#nL+}Iu2ij+#Y|oi6}XkO9&5}KKm{9M13NS4t%ssm<7L2$OF8+YYfq#jnZd2A+c{k1fi3K?}*mzfilj~P(l<;Yiz5n zIzmv%ur~jzntF?i^Xp8kFs$-8dhjRtQJ69Fk2@8%i?6`=@lFckm&8L$GRb8(i&g~7 zpd>a7{O;l6dIqdy<=A%gwGgzXu}K&-r1fEF(N?^40O~?fZF}ZNjO7|hIre)^VClrwRruMOyT8Nu#fxIFHQ z{0e#kb*9bKq{D!f9kcHM{bM&$bYm$w9*3YW%kfOET&MXDxX5>cCnwoJDFea5;Av&I z-)Sxzf2#if9S09+72S6PzUY^#*VOOBTaCeO`Q5`aT(?DFi|rg{I=qa*nmJKkb9x5= zg_Qm_6)d|E&Ga)rO@?g}G+QsKnJQ|-0a@r!d=)ptb<<7|Yc66}BZrd92C_opNkp7t z*P+r9CR~|WK&CZejwMF;xfT9upYn_8swVpK^>X&mzvXSTDvsa#|CG-TW_h5t?P)2AhPiFNVxDGy0SI#_hI?D~} zqBrf~Ma)13!ylOHcQ52HRfxs1nNVfLT;y*fL9Xpq_!VNH07>Z7DPlODM8>3>z$qGI zQz|>|o*xP+aAmQ8?DRLsG%@_|Zfwd;6(~Z|7{~`(-9?M>mD4*GK^T|~dElzxtX5e4 zTPVfuzD9NRx=UlMX=5>jdp%&W<4RFz6VUGFQ4MNp2TX?5R$xa^0uUO=%Y}Xy_zPw% z`BI$CG)+ez^5)sZ5 zuvX)~TyHcQl-Xat{efwIANLgoL6@&<-QK;dDoXa>d_LiV?pLpOj zE9Bn~C`%X)8YIMcG{|*KQ;($$8|ro~h*r70*h)2TKeTI$I)A1>c~>aIy#cBOOx#Tk ze-v{-uHWF>kxfu&I!u1dGU zabx4(1f^zall*ewiAV}Zk!lky_paYj3^sb6mIpSBC!<-sfek@@2ISv>I1HD_K; z197$;2*u*=G36MGMl_UvpFk4eI0*>dVHRz@*UZ0zZ#)sj+pIL~4=yxpp|QYp!VtJNqJT?j{-9I$#`S)~+d54zgi6+jAY z)e77r)rejZu9a=T02d*8NKH$Fk$RnA?6b-fnZCa48&S})>KF4`M{$n_)CTsyRMX|v z+x>8I;Tls}$Nx+W*bgAButbKN;2_FaX8l4MI z?f8y1A-$1_xx%ffP!j2(%HYDQ|DJnrHt(cN_O6mY&C5H0e z;x?8wG0lFmPre7=QiwcX{X^uMEz{-aA0TIeM`|oQGp}hYBRQNCW91^P4#Z@_>;ID2 zuop54`^CMYg|8U_;$1TSO%xTJoYo?pGVT%C(ePk0(q5?|vm zXD;j8h=9s8VI0&{V3>~DXgXWi>rO1!S`R3!YA2foNhqEeG$w;}G;`6*qAy=AGpn+` zT2@HpICHW-VbZOO|4ps7YhAKU!<+%pu=k;Qv5VSRx~x@&rEge~XGmX@4?I59eM`FFt1d!Nv9VJb5(_QWPV)*ZOMvwyTOu)_ z8WY6(Aot5T$45JFoO_N-kA&=EsMlG@gMWXOOyT{Rvg$CzDboqG+q`@~LGD}-7G7lq z>OXe^#`J*SUBY>~rmr8E5r)(ghx2>eTHGr{;}OY|j1WwYPI7$wUu8v*NFQihUQfAw z4zt~QN7mfff-i5z0UbS-$I6fV%}d~oOM?}26f?ItTcXGg1XQJok5Kz-8ByQMx13`O z%tnDv%*Eg-glWT`@(T(45qGoLfx+FC6p0O8z|+<@N<|B5?awTO7sTn+x=E=J zd_uc%Zwx-e9?O}QKS_#UZ0kcgAwX3(zGep!&LFYYbVGD6H))Z%{D97bF?)!I)0K5h zK8h6TG8>;)pZ-|@gVfU@-(<*xX&@LMqH&<2N$QLU*BMF7#L~o=diexn>U2ktWm3wh z=iLYx`+N5{yaAZ&_Mtiw2_mV4Uq~&gHc2+$fCvx7dg97A;V4c^mKa4Noo zc3B=Z;tkq%PxMyBXjAX2uY!KSLDpF)pGtDCH5gFe6ZNc?RC#ZhB*#?)R+qCk>doLH zA6u>%;*S&9gws)KCnhv%yTvT1Xe8x`$}k-{;DNVeJ;F^nJl-YDe$Obv;Q&t%swzs* z0z&zRjeJ~f@;oHgV=T|aQuZuFlBzYYO1XO!E!K~-zIbe@dG+3K85)B9T{CAo{K4XA z?P{bcatBjEo+;=679;IS`)Sz3)CI@fr1iwvUa+w@pduu^Lah_R2~k%Qr1&I|!kv+QX{sD<0s7k=8tyaE{@yCV zs!a(_!4tYHoqvA%RtcWmCnBo^nzr90HGc=HOFffFJSE}A8BFy#3(C|=j_vaF#OLp> z>&+|{y`od4l-_A@Jf)f_%)OFkZJ%ubDi28S5aiG;3>1aVT`2Fl#K#p%&Aa@MK76w2 z?k?l&5i43(GGghVLkQGZVY6z$b=oB1inE}C1)lR|@ zrskAu6{4`xn%_(>NQ@=hwX|&3&)Hl%lwly%Bg0RR-}dbMd*dXVCJI+6RT3?Qf(%Ox z^L3O}VhO4WJ$H$G!2TT$X@$}Z1nd8n0Y>s`1#{3`V4}TW*GiEO4rDet?Oobu{j2j& z+7V;nO-_?Ymc^T;-Du-cL8|G@tDQ>ZftsMepK{ERU1g0#jrO{TszM9|Wru&>E z2!PIUR+kE8hLIRZE$@WiAW13dujaM%UeUvvz1;7OR0!y^&AH-TjZA4<$Y@`~+!MYr zjO`{Lk(IKVQzx2OfjCbxJn#YfK!XCbfUrcrc(f`(iNW}Opf9H{T49-NxUZ6D6#KQg z8C0cxpGn=ci~TM7pos1^7Qa$)4e7C7s6oOoj3>34dkeG$#KRiN_G8n9QUD`X(*H6G zd6ZmF+pj!)Kp?sN!3VZjm-%hAB9rfD^hQ~l{e>A@C)#faO)*_=<5n4A73CKr& z`pR(*NwUW|APn<(&->@%{LCX8XMiw^=r9n#r7tiOqG2$0P?%_0=K4B=ARa+DhS?T? z(Wq%LtDNd3q@A3I=FD~BM3$^5yZHYtX#MpWmiQZ>P9jpZ+f7G zrJR&1h^mF}3P*5#YeCGme+_CqNo7FrqbuD)$eW+|r-Cu?n?`i>1A4R+hz_FL(L6ysB2u&iI3m62*Z8ndDj|HJgmn>J1&mO-O z-FS4<9md?XO;P=ubt|%eKWm$-FZEL4Se%>HqYTMHkq%eIIpOXYutx;~ARbr`pFj7p z`snDSf1p$on|E@g30%y9$QU>RjJ@FmGx^|J=v+Xh3nFRT;C|q1$!XwgZj29er_q!v zS;hG&%$_q5>jG6ZuM8d~;cN~IYVcB9D|Ske)(lfR%YeQ0i1tBphle2&xNpn}u|ac|wEzM@{lE1dy{N6T<6(y* zI9rNdP@gp-a*|VsK|&DMOZ|oV$e5-6T0)dH(`~q%wgdhYD(7O)7&#h{!w|ZydG7fm zK}US-Y*=lJVY6yeUPprc0ZJwjEPYlW|2ITgdgXN=qG>OA(as+P#q&dLrzv0KPv0zJ!Z=F8xQxU_8)MX^A#J*AoE zT&;1AFOUxu@43{Dna)QmFEjGaoHIMUbPWX`Rzh<8N);}Mz@}-|X`S1H)15LHv3t5( ztB8dD9_ml@>>`xXZO6CaWckS6D?b33OJepLTYO|9#`XIk1`Nrx|+K_^I2f z&k$FLVF8w)PxJRng(1Crgy~Kqt5z?WK_sR!n5Md}qA&s7+u*Sl3`NT^-6STEh}RGj zfCa5=HdKSzEkV~!n(l4-9UfS8pSwqli`Zye31N4FPHrR z#(GZsMJ0@n<(?Jm6I?}U0Q5!@nB`n95BsoCR4sl!2-)nYFFDT@zdmyso)!g~U7$Q} zE$vVMt1{P8Usiu*j?b)jw8OY=#}pU@liRw1~?Ru&5`FCm2O&>)6_mRs&ExBa(CHu zr@R_^2~D5`RZm@P6_9Ze(w;mK-(XM8{|8zB819@LPgdj?*{<9q_i>c zoNMm^dq`svVJtXKVkJg9v$F=y=n7`(99yYn7ne(FYPcJT1l$Wco6&2}_io9!QIq~n zJ5_`6Kxst7V5jk22FEnRh0yS7rRiNP#jT5c=@2gI%$h|v%UfHKKn}|ctWb!|eaR_& z5A(5z|H`M+U4y|3+IDa~f?c%ZqM6CVyi)D3MQInl0O zR$v!U@6BgfP;iWD25`e{Luc!!8b@wTA=;0J{HFZv)xi9v{%y*EM&Yv(eJL=VXm(IA z=Nxi5oaTpIcycDr1)WHuLW^^NAh6&R`7&>~E>w@2`pykp)NEfshcSNAZ%L(}d$Jaz zmC=rS&3?mJTkep2ik%t^#zN!J84}2hI2H_-mkS2w4a%x>95!%Xwlfu+xs_TABM>e3 zu~V_XRAua(z^Kq2q14j-wX|i=jL+GJ=2$|BJQa>>Eh$l4A&K4iVe(tXC&bJjvhJ$_ zeZ4D$PdB?Z%8eXj2U4L6rPO^}WlYCQjxPESV3%QUxi~FI%x$PX3_mjTJ5VE$IQjKt z)}vAWqiTD1;f1+O`23kC4rnuNPPz*l!?i%OG6Xa14gD&t=FHn>n_g(RoS$a9r2cl< zJ{*SA>&K}y>td$02J&h7i{)&MgYo{^;*Q=&ZRN|5Q}ED8uijE*#v{~|+SKC6x2*C7 zOUvERG{6uin-Yk)-T&k^5nQHK9?8GSm-6Yml7A=)#CF#+CM1!RaiddFQ)LMo^4)KD zlTSJWYC>c|)b%rg5+fj5{#-3UyukrLl?ebHvcMgjC!D-~DKubyFh=D6`i0U&K46_s zLw<~LNIT@TzijQobXEjFt#w7vuieYo@GVM*;{=yFTJq!Z|NXJ-mnvS``e?3tF(>oN zjBesf00W_FIT$#J4gH`@oF}`|HleuP-)F9Jf6Dg)&yUqeLAz80qSAvDD!WCeOSpOuVJ9=rYm8eaHMePH*^3Ft9mbPwbqQ=B!T;*hSo6ufE5i%i{M*D}2* z5p#%{Hj8FhCnkirlM%8^ejDh5nNqRGmchh!D8tu8>#!TVPVuXQsUxgaG~}zdArrc_DOqV4 zd%f@QP!(BtK{@;655%Cx9K*dV^cHM6h z7*L2e3}e&oVK2}yqAypGlZ)(=LFKM)0;!lZt4vBB)1Gq`_w{bX9V`o+wS+U&N1`2H z2o8FoatsLuBE{~h{O*QD!<{At4~+Ftt#I3BBA;Xk-$2ZlvTH-7Z-(yE=r$=3afIhG zm3GM_9j}Rn>gj$9j`fyX*qv_o422t92XUBxvv0rW#2_7vi}^`)Ud0p+fMnxB@o6^9 z5&e8Ah&4-tCKQ?A!KDVKGJ2$;_5BmO5{MGb?emT(alT+AM3n=&Sx4gB=U}}DOn6i^ zjnHC1CtzCLz3|t-;0^EY4+UzU5bG$P0IYbyB%cvu23IR%gHQ+T^VUt3Z9tA{0O6A2 zFiTQZ0TDrWVkDvutp+sY5-o@pd{AICCAz9ypCv@1&r<$i^0)YtV3J)#!{%A289W?M zXxoaXNnY6|7ZI)Y&)^D--$w0JeTD?qyqGwL_J-I~X`At%gI8g4jE|rN$Q69&a_M0H zFeKL3@!P-_GR*XPM~9#-c2Dt4pupA$&Vi$8(Zgqx%5u3H#Ha)%Y*^YTu6ZuptJ9$; zw2lY(o32+Jf^jY8S3fs96PwlQysH0Yc7UT`VMpGI)3St64RD`S!b<5g=~yd!%BZE> z2axVbj+d2Yd7JPpMi?1hrb29g0wf+IrN`7|lEc&1V-Cz`yR{B%U2RmYIX>Hztr*Up z@hhhq$Hy*l)havB?%A-tvxfHq?2}ZAmtKHe1~A}86uDE9zbL<}gzoD+cp}F?t_nXj z3Fq`D_p`voMVnWUgi0e!uCOBV)#4hSzpSXiR~nDw1=^#9vW1amLZKG2)p-hd>y!g8 z^(n5*2SCOgBEZ*(`d}$+Lu-j6wA719yEusof0_oP@v0}g5KBJ&zlD2Tos1Lw(y&c zPUG2>0TZ^SX$HSd+RUXqqOpFo(mjgjEP#7ixJRga*GpLMh8&*rmxt!4&Hj&0%-Rmi zB=_Jhv%sHp6x`fdZTSvN*j42!yTzNrO@xO>>p*eg6cvYr)!2-I^iT%SKhGBkXOUy4 zDgw!f^MYg&D;eC>)>DbUC{BtFNGe3kZf>2mt5px}KB77{{{7OBpUQ97$FJ@{M>jm@ z`3VO&>J+2O+E&WCo*80Ag$T@h)=!Y1q;nViu161nl|W$bD0SFVuuB7lKiEYWz95jC zSQ&uTW5Ze_VT&rfBFgy?`hRMB#$266xe+YaG!Ba?OC)5`o&=+7J1!Au zDXPQDBt<2`>*>A51UK~#6f4|WB!Nt1g_wy|$L+Ijd}9|M63Hdq7G0QFmqo)Ntn zH8mw+nQ3y`r`!=V`Cj`7UU-ncFy-x8ur9sl3asbW zn$pki5uxOZ?PY*N3e}v3khyaH3XG_d!mREs!LU3UYZS_H zNVWYRYaPu$%CYhCl6Bs~)^+Gcnr<;TI!=Q!**{p$I`#4!b_@3uNS*Q!#{N1Ye(tie z6edZK0$k(c&1A! zO=U9fB8s;q`4m*Kz(f$h&%JqEB)sjL0xkS7@R7)}jW=*Lab`Vs^mf@`870gP!ixcZ zvR}-iCVuix!f34g0yvA7x{e)cGI6UCc^6yD50C8*rNgh2d#*m8$xS0=d%m3q-^Y-t zrx1}Y@U%fs32kbo{BX}KdvXvH9a5ms$T-dIk0k?%5}9rQMU&;Xd9qi&ivhPw9EqTP z6xKpA9Uoo1RH8&)AW`_CO?&VE+pJR5dWDMMp~a^RG;*q&M^KSVd9>|ZDfYjw!+Mgo zl2(*3=|&yA^SFN8$apjfVQaxok0kz3%1)@tV;O}&G~osL(!=Fu5wBj^(Y;^;mEyQR zKGJ{le;Nd(8|eceE!vS#kQ&mKxmW0{c^-?mDwJ($aAeOZJYH&5c`mZ*n5kmVA=<-~ z$lsX{0uVpOJ_PC&Q`w4amq_NCl67Hwx4=yOXYN}A&0fz{pz0b>9kXfZD$zGR(_Q4< zXp3@aX~;B`n~Cyi*&=Y+C(aZx9tYR;M#QX<5on%Y^*(iOmv-=fxE2ylIB&0y6s`Tm zFvT0UQiLf1LHiVjHwtxxM=L~qlv>Z85>xG3@&=O9$*$NOfQ}x!l&;5e6JiI$89M@b z+$jkI=`!79jnA?map@l&riIiqKYQ+z5$CTe9OH{%-GBxLg{LphOJ=WOO6MghRV}Q!dALWaU53PmiFaplOKvM^9 z5fiRQ!f>rpw(wtRZ5bFsWm8MQdhR(zfI=%7p$tis69>q0{aMAR3xkP2?xFvY!$GXK zdyn=bQdmdEkYK$Ya}rja0Q-c$%`WpDXN%V5Elap|pc)ah2c2p{KKG(}0X8=FfDifa zMSM1H+%V#xcj^Cl;QgZeNB=)l_{%gONL@t7v$)|xxQmnoxOegB0zwtVg?+{Kr(UhQ z$STR;wo8O20#p5AN6L&ax~X*Ds%s;YgE4~cWfp{`SP^#}sD%y;jTG(;DrT^p)K}Plt6+IPy z#A0tLYg0Wm0u-!(`g{5dZ!#$oG)NTll%~TSl}Dw59QX_Qn~IZGDRWGxW>m^ZB!u2E zBNpfVcIPM?(vDydNxZbEi-jKW7q?7DcIK=rrPpnbdI+1FfM6OzybU|8w!Q+}W43C4 zryV*SBrPrX1q;>V(>3*rA#`9}zln=@e&c*alw82|%QB*v2s{uB)Ow$)a}40!p*
faT%c3$cKTAEC=P28-#5v)y((iP1+V7?GeMdHg4f^M;-g2YB z4tp7@zu4VnGOkRa*M{e6`0=wt&l7n7-~mguPr-HvMtb`7j>YuiP}^w4jk<}&I9>4m zT>-GuKCT%`)Uui5ZKvES&vVuiHEcro!;%<9)K#K{jU`Y6A`egN`&EHZq&~O2Hj-pdaM>VbJgF~W*#@2VOR?~xI!-S+*wOEWvGQjyp8@{ zPsQ+qlPC~8P?4Ij2K!!z7>0pGe)X!RR%mRvs&v~$M`lL(a-nm!K}8v& zE)k#!7~PvqjMl_oRJ|XlKSM$Ep-RCfAB|~v(s^p-$qP>I3D>hRmiA9j}#h7X)Puxba|b zSL}!OdQn~w%+cV#HRB}h3Gj{`PnPZne4YRN$rPWn_9Bqb@e*mMQsS)O=Gj5P6F-$L zu1Q~hrPPP$(|DTJa9HtAtJlHw=8y>}Sg7n}9j+#?VyPOV7uUJggg)OtyWR>!Ta!m! zy|wj=*zyWf*_B+JMh!{Ijrq_}U3E=X1* z;H0Apf_|Iue)_eVqarIYPF%9V+g?vh&=DFLVl%K(plrOk2<|wTxiG7YbVNJXpg%z@ zQMs54Q$~-+l}R(fo-Y_!GFozJ?`H421I$+>C-Qb)a*MnhD_r|HLY&OD1W?<~8fYI9 zC)VTdNH*R4-{x%{N(p9kQUNBMIXfxXnOD{GhO!wm5%Oa(q!!m(+20CI|UT| z=$-Z+bz`(H)V?fh-BY`?*?Y+w9;S}9u9om+#z7UuV9=K8wp}x88zEB}n|W|_#OU#Z z(mJRB4X^~wR~C;UO6ze!h@OT(z2>_NXmANcS(D+D3AUXO#R`Kp0J^IVGTH;8#@}`6 zfi-X04xTStzeJ85okI}Id-WGj%{C`^rcxIs;_CuH#O$<^iU7~~8EKd3cmbx46s0}( zI-#lE`_uG<(K`pMgz>;^jC>j|M)XJ0pU#-S@0!y^#qwrmdA$IqCHNvmXmE?lyuZ)NI zYGG-b0||#f=1oQ2a?SvoFso%fAI1+Qd z;+rJDzCP=QvWQXp}id_y(ZkKn?AGC8p zZURO=ST+#a#x+5Goj*m%(9ehDJk`mcntY0KPxvJ0t5gq#Z1kr($}O(E?bQPDFJ2R- zM;cHXK91|lbugFPCTz`G>a#Zczk@`ikf{H1eKwyNTc0Xr_hJgijxNy4sU+_9Np-G( zvY(S%%Gy`G91`mM77OMV&8fJtS`E=?{&}H&t->lFZLXGc>rd}zPIu%x66LM5{W~-1 zo!>~Ucqt?zNb5tgd-j2`)mGCszfNtm%BcBy)6mT+KFlg3f|G0eRq%4MZ%MtQ*E+$~ z>R97C*NE~R6kd<6Y^#H#+2dpJ!cMf#Z!6KJ?+GGIvxofW!a}4yixIfr+H`&>y-@-! zR#&H{!f-!dfKFzaKDD4K?9EP<9>=87;YV}8h_f|1+;-mR%J18LR-AUZDH6{-JtD(> z_KiZHXLqIlEuEqPcdmJ$2(`!ojGSHn6wIv|TCJKFqzrj;%~#~yHwn(m>wV^WU9TAV)6@~1(rxIW`Ia1P}rj|o35VlrM% z0J{2ijCYfJc`4T90f9EATvi;7XOo>j<#1mvrt)Gz1so4)4!Ct!uL+%|0u_O!vuPgF zmbfl|ZskV4PiZ`Yk%o>(zJ4U2UZk!NstKI_j$>>FgJXIo6Pt=|Mjw<%qere)2S6O@ zv*ufC{15&q7-2>{QvLh)_n}y8?}_|$Mu#YiV_c#bELHn5<+iA==3vqLDmM<}x8ALY zsJ2B`C}5LxcT4 zwRZ&MQf6|?HA5-W8T{=c4_6^ZK}n-h-mfJsV!RrM3!8gK8c&1cBz#g^i@xe4Ci1zVmb2$Wo~FudtS%ddcBzw1|)f?J9c z1HOfcKP{Xt`A))XtfatEZj6=92VJEM?pnB9HGk^Wd>-l^U+$5Kf#{A{_h*udc%xeT z8pVWV zi30|F6cSY;CIO_=g&7IsUtA$WUxKhuH0rQ0Y2(@n1P^?j!T>u~k|wnkn9pgq^I6?! z2KgrqlP^H@#`%O((Hmk9JC{zPxoU2P9C1Jg#n<*_W|*70=DDAiG}LbKy{d>=vHe7i zoq>6M>$@9|A97_Ebz?lj1=r(#ZBMIK;Sq>WtNc?8`nDbsb#v&jc$~~X%_DU+mE<)! zp$P*ub0;y;D!u}Ir<6HsPbEbpRrw#4J`R2qmU2-L9vpNR_}4+!h^Pt}yFXsJRg~DW zssiJ?-2ga*rO9eygp|s)3=i_vCpGXAC7Ut233^(!4wg)*3Vk`^7=GCOzO&^SFI86O zB*zgr+fMoTEY&k>cGeZZ+7=qStGwLPkREGCb;tmn#2ww{RghM(t}z`gGQRlG!PyE` zglkA}G+K4yT{+F8Fxwig+uFfvq1O%}ap(?VUP851u(deSc-3Xz!JQ+H)6sFc?8m!# z4CcY&u|K$ps~45aB@}BzwnKMp+1#qgg6>!qxp&B+SfUO?^d0q+(o}t{YT!WMb@g)= z@mFll58C@VWqqV{qkCsq#_HNPj%p13)BAM8KfeppT~p70SzCCvdq!r3NYMLcG8|VQ z&qc8pxNwaItcaH?{90-`MxSQiN*8!ziBX}Oo7mBuK?#aDaw3;FTPEHf{q8QgSehI9 z5kW8N?>^nC=j0Z}&$*}5+2gb*JL8}(u4e7Z>EZ|-g=0--7bWWJ{k zI^8r^@);5$bX9ou6JA!E$+T+HLRZ~e+yLF!y zT9gjT>(t_4))>Yv zE1U$6&A_5C>|h}3EFRTo35?3^yP>T7>B~OdBV(`jWu!ul4SS4E0DdOx8QLHv>UzsW|!ADhcJuFZMB<_()JCO3mj6-+QH zCbbP0r8<(!IVl^g(%*@h>+kz|a2D>(7;Gl~`O`YQS4TtPj%Vk|P^gJR9fdqu+QX$v zUa$lx9Xy~IUB0=ONGJFJjuXbf&Xd);KXp_k)`5fZ8|HFSqWifs>a7#}yHS+Si)^94 zYMNVEx(o^6g1y@IJ1<6wTi6h?q)DA(K4Qd(8xw|y=J+$Fz<_W7!AxA2zwy;(mRy#} zzo}Q&4oAW6H=9yD#7SwX^|w3UT%P9r0cjFfENw!=%Z?qH1opiO^VwxQ+^hB9WO)sG zQ!hTD)rV{yp9G;ktE0j*)g+>59an6)$Qy+=o6n0TqV{Px*V#hQX>l-C0f*hfu8#o- zZ{OJ?Sd~-%sP`pFX5Ay$a{LS@Ad%Fz8?ZrOn4(M@;_zMVk3+%qgKMU|{396IE%%dV zlqZhH3ZMMKJanKY^n>@-uC7U#R>EoSt^EDhXAqT(Zom`hlP1Q8cD-|Z#~8kIUkf^4 zJ8E4l|7OGWs^baIamjP4NTODafIkaH;pJSeqQxy;!Faht%Z&S!^rKd)8mx1%K;rCl zQb!^FbK8tiYn?3CqwO^@ys*}4JB*K%u&C~uD^?L*Un;rQn`Zr}<^Oo$mWIrqci#U$#ScTo|V3vhv(N$(hF8U}aLL<8@WP%Kr z2(gfiB=Gr5VdSkTvURET6LHBC-(ODFpr6OhWeIu2e^+eL8NN0qh@wmJxW|eQTb*>_ z=~L*{lqc18j{o~S(O>~6u{&dj5A_C~pd6B44!pQ}ma#T#am6&Www=1I@Npe{1MiwU z+GPw{FEROULMjulLA3AaTy4>&D;T$M6lTsR^P@s!A#tcD(c%*^wPzjl8|Knkegrgn zDyW6U=c5I(my%F;`>lLm2sKfwmZokMvvO&_VfGjq+sLOK_g*U#vJW^G z3S!ropXf2cTb8Hp0frkUZE*BlyMz#XLpY{?yryjUvQ7d}%Gfx4wI&I}f;V5Gv~}S^ zOpS9gs#oiqI$}vtY9PWI%!f)wO1tRYbp#cGH|&Sd%h^-~SPmbA~*ebBjN1M*?Xz8#$? z{Q73J4XO;gGrvn7*miPzdTGykAzdW7Z|?A-pUqE5BJUaYkFei@b-F;U^1RmX9=GKG z&-Zc95rpnL>Igo3i1qo+g$SCnnG$C_CT#0WYRihnQb!lS>Jx8d@LB56-ye%zNx}LH zrg(Ohr9Jyzm`Qs41iKCD53dLEk@67ZVQ?JjwetKxx^<>~kzIhF)&?$y7E{S6@q1B( zCBieeBObXx%v(+S1U&E}J?W4{q#e@7$U|FF(W6b=@9h&|^rY zPoY;`U66$1-KYrqT{zmZYiYp6!R3!&57zr?+kE?P0gX-~VDwe_lzsKhG0n-Z&VJ!J z45Q6wCZLJXK?XMoR>)SAb3O6}Vv|%71RCyHo?D0`s&?WceC-h)AZ_g4$E7$E2UYG@ z&_s6}vIh{)dVeuUG4`)&-jZ+8Q`W4Voe=V5+H#N#$*O!S689t$Lj6jkLz^U2w!$!^ zbKKvKIZo17LWG9x`&V$_fZGR3lTytEcnftqms;x2(a$U8_%FY?%J6}X)z zCWA_P62<4F^(cA|r_%Ksg5JuB=2HEhI8ecpg6S#1@&oC>yF2#1p3_zam_T|>18-Mb z9E=@faYvpaaH?w*R@n~(1;ama4E;3Bhm$OV%^42xiIl`5A%ox=Mn{!G4J4~5nK`8P zy2Fc#qhUuZ&>s398i!3Bgz>*kg_kNF5jAo&>_vZ1*3{{}7WF9ANtJECqcpRtL7LRS z0idj~@a%6y1({}hlZJi6IHH$VK>{o@$~vNyVhhP#sQraE9nB$4TA6wol@R(}F`gEw zsa+g;GA2)4Baxuk)_*VmC=Gceiz173nX+&q+qG&3(>U|UpE4~`^m-=RbcJ|gc_xD@h zG^lN%{)q#H&uNYNAip#W^TvTTbR2a&|G)W5>E3-&T}{0bUmDG5`Nn03MdB%F@1Zt{ zXXaZR^! z3pg)$DhEdFu�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 G|3iNMe9@o) literal 0 HcmV?d00001 diff --git a/MikroGig/20260608/20260608182051-Config.rsc b/MikroGig/20260608/20260608182051-Config.rsc new file mode 100644 index 0000000..34f61af --- /dev/null +++ b/MikroGig/20260608/20260608182051-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-08 18:20:51 by RouterOS 7.21.4 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-LAN +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados5g wps-mode=disabled +/interface list +add name=WAN +add name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface list member +add interface=ether1 list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +/ip dns +set servers=10.30.30.81 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system package update +set channel=long-term +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system script +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global 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/679/bd93dce4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 08.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/20260608/20260608182051-Diff-Config.rsc b/MikroGig/history/20260608/20260608182051-Diff-Config.rsc new file mode 100644 index 0000000..8acd01d --- /dev/null +++ b/MikroGig/history/20260608/20260608182051-Diff-Config.rsc @@ -0,0 +1,8 @@ +579c579 +< \n:global CommitId \"main/679/bd93dce4\";\r\ +--- +> \n:global CommitId \"main/672/7cf8bc7a\";\r\ +582c582 +< r: root, in 13:30:03 08.06.2026.\";\r\ +--- +> r: root, in 14:35:04 06.06.2026.\";\r\ -- 2.52.0