From d092f057b1ece43a4ea03abf379e560030aaca81 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 4 Oct 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 04 10:20:07. --- .../20261004/20261004102002-Binary.backup | Bin 0 -> 243756 bytes .../20261004/20261004102002-Config.rsc | 4340 +++++++++++++++++ .../20261004/20261004102002-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261004/20261004102002-Binary.backup create mode 100644 MikroMaster/20261004/20261004102002-Config.rsc create mode 100644 MikroMaster/history/20261004/20261004102002-Diff-Config.rsc diff --git a/MikroMaster/20261004/20261004102002-Binary.backup b/MikroMaster/20261004/20261004102002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..236539e19f8e710397ce7433911b1932a5e6ea13 GIT binary patch literal 243756 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≪#mSdscJAji- z30bRi4%mur9VFi`a`gqpaL%0Z@j$5)M%Zm5e1&MPIWawp@RqfRCai~`pLZX2fTwQ- z?Z>piUK9>Cv8!{j&g+UD`cqdTv31~XUiUw4$Q`Fi9iKXf1`KV$aRA(9F(8*M;(c7x zua(21Ozxu#pBJeXnw>W(f(2eg;+0lN3E7=hBRv}XK_AL0FHV;v9p<8HTK3q^aX#{W z+Aqn$rTPP1G-w@JaKr0j5my|+a+o%B^MG~AizjZMvdMY2GZq_i3Ne!%0XZ zE(ujz1W#+RB66m2GAgIz5Y`jLY9t=3ts!(#0lmTzfxTW>+wql|{bP4badGF&mD0Agv3>-@+2BB_s63if2Z z%NOq)BD*(Av=a53(*P5KdL7x3{l@#YJqgzSk5Kvf1`wM3C#KJPrRdc zGOep`ur&fk;<6vdl& zrDat%syOiw73yO{mxDH$5qpNF-~ycX#B6lrmS$};m`br6-fJ%l8d1}c=eGwr=Sl(u z^(+nII}Qp{%h2KboB+SON*49i78Cx6_gw(V28D{gZIz38@D|p%@A?AF74M^(=lQlY z_^5%n>k0fTD_`R1QZR2xs)b|&IQS;>VFs7&6b}aIj1~5O7me}@=C#FCT}9Xi6oFRa z{NMC26WCOHJrWB0=KkNvvlwrXT?#znruO_AB$VGM?&Kx(Es@%z*n`=mF`K1%PlTD_ zWEQez`9j&cjG6(o%4`h}O_eg;v}v-4F(A9Ee{R*1{#s|;^7Z?PYAbq6yH{5l2-Y7f z8VkyK4LjpnyzZpS7_H9Hm=0YqN9b)1ZE~;_-N(P&S=TMh-}W!8O9BitULXaO0Bobv z5!*g4M`K<%hwr6qA9gKxaW;`-Wp#c5)rFw2{)pZ71tNzybC0*of!3Gn_WumRl}e`l z^+@6?6!1Hjl|Y(tJQ}9POCGZK62H>AACbI5w-n1lW!~7a9W=sbk|vGTYB9Z-!~q#T zO$LuoK5>+^T-`Xyant@}eSfM)>r5N6c+ACDS&lD`EVPbh$C_BRI|$kyg)aQo>;ziC zBxCf~>okYvRAwh*CZi2Yy2r9s1iOw)wFh07RDZUt-#XGr*mZ8!X)eor1$fW&F(KpU zX2nD;ijYxnUrB&w!;j$1dz)8q{zuTN%!L~CO$ILl&=UXHz{m@aS^wf-D^tE93Ua1W z&`d*EZsf*xq)zEx)N~y&z42^Ek&-pBVxqxfN|bor6E-V*B0_XU#oQ8y4mC`}1_JE7 z;-9_tjlvIY)P1!d9RR=2Z66^k{{Y_%2!`Lm(@guCHs5e00s?J12|g$UrJ!#FwJohj zjyG{af^WzU=k+%lnM4coxVJCU<6#kTXa2ki-&jVFb%J-SJ|_J#SADvF<@@(b2;_xu zWn9V9M@b}luL<3&g5-I)I69nxkS6eSB($L)QI%yewdd9cp~L;31t|2>irjJVx1Qku9 zWHU1q3hZ^*E12EM8Lj&~7EO#uc{IC{)S8G^;Iglai?vr`xP84e#wTeIIai`I&ODIR z!ZQZ`_CUmayneo2jnND*2|G!VqvqWd>zk}N)s>Fwv|8xrxkrr@%8HuRyWVauTM+}j!A{-$ z3TVS)3Sr;kw<~wv8F!tvNI-t*!x!F-FjCz@Rs|cL*h+ZpWY*VErA@=%;Tx(@L>v>CE_!7Hy3$#wLHZLtp{V(6%~vW77jAkoDW=s0dBb=Rzx6Ku8w2~eeE3*X)|R= z4^6om6~JpkH4-^KCvdtV4`XOK1w<`F+>3EtA@RUdL0##LOJojgzF%PcMtJvH1a#J7 zAyJ(i@r4?gVg$j6lo|DiJI0|dE<`;t?PJX)U5<~kRT5E6P7i=m2Z6N~(CEN< zCDP`}(^r$Fo|)I|YS<$6pJ0V=8YgI-7kHVeY;e_c;v!N$7Yt>G!QNcUJ03&qv!epk zssLvQ5?G8|t-1WqYKR(R`K?+774G)k7ErwaX|_+R@WO^GH}f3`zP~v8hja1zixjaw z{wi^OtT(#TwG4vVj2JeWs7T1m>y}&C=BS$`%1rV?vx{C6LpxT?App0KaCO{U51A(m zB=l-GN7Km^P`~GC9;)*_`&3St2-l*P4d|{nvSQU~rKV^SP895yS;F1tIk3R3Jtd*? zBacCnhhh%%&{LY~Mvm#nCYjSn3+zeoV#p;`S$NofIU~hNKim8vf-6RcQ8S~I6m||9 z^mh)bi_r6YNGH+xW2hK`5U~t*V4>>soIM*xPyuBe`6%R5#gMfNksOk$rL0Vo81@!b z+=%I*tS4bUuqMY7TyG41j{NoG728!d(qE)%0Emdk?^7+X2cp|nioPfKlQhF?Po3?f z*Rjj@csyw8+*J<2#ZS2U4oJkF5A81CD7r$LIIVzGPc3up6QWwMg~|T0bM8z9*l$SJ zv5RxAV9Cs@?K{pmhnz6!Ee*9)zhL)71J&(aEtPg2U|+sI3hty38>@iSpKvYIkJbNi zFGYK<-|TkwmPI3q75T+>dGYMM=YkfyA5=MlX9g6%KtyZWi?_am-mvpicIZ-iCo8q!aNv)cD;UYiKLY z)BDvW5MDVB?vFB~OrJVrL>>2JJ!Wv61+n3phtd^2r1OW_&x(m6^TX`Rk*-6nb11dJ z`UNGun5>FCVuv7{3#wp4P&E;=g3tOGet507`WGdWMP%qhU#~->6 z3|+BF8A-L(epa8HCui22u?`_(7>w)6KqY)};h-1pRAs7$kJpGDPIT!r7O`aEHL$0P zF&l#6nqzAC%Y_ArMk*H3_Q`O;FWwW|ah{_yKD2Qy7)UaU{--nP3G1f?7x|bhQ{slV z2DxdtMo27i@M+@pg~_dh@Qa)S7r$`u$r|$@R2A31^V{;;_97`+z}SwsyRx|FK|}_Y zoQ;pYKg6B@aM*p6KF%`yMi#Mcvm&eZIJrH*1W-SFNYj*Z+T0E2hk`E_OIPD6zX>*v zn|0?v0Za$pU9=Tx((%$fF3C}0WjqGlLs+3{$RL|-^%TE;7Sq3q6j@bc8T|5-iB z`0MP}4{i(nAQaweo+uy0jQc2}vqw2l|AZXPeklHH9+3}K)_*tsmMfvD?opoRc$!1D zqFynQsZ}7Lz3we#{pB2u@HyMW|Mp6niwS}rP4$yRZ9sEz@iWzkwJrf)eBZzUQ;MMa zLN-xEHSdAg>i72%@$KH%O<&-0d9t58%f-o5n(4I`DXkhe)ZmVwW;}G1;az+)B~+az zmj+4Q0nG@41)MUpxl^c9Os$&=T|!Hq{n|6koU5ezvH|E@ycb^1q;k`&Gx-wjuLF!%wc0cL8QH>$B^HbdIPhUaEI`38gFAk zL(vg2Owk^dI~0&mJw!|ulc02%t9=?Qfbo(B2r;WX_wST960Ea@Yz))AW@LC?hvwNn-U{iUmMt$3wqG zfh13SmufxAxum#FQFIV;?I!;V)>^9@<_p=}gFwTDyXNu-_R@h)5Z(DkjWgcyWo8K> zi;rKItvWZ`ObSQM&L`@5fxTBGFia;xVJHn5;tvO{z^RPCZxI~NBfHZwUK;Wu_V*P- z`tOTW<0a5UA0dCku5M##aro^G&wRb*@BfD3W*iy7>^H5{A@iVJ(U|>73x$0M1=tQ? zjIWK^B^Z~33AJcpRno-!YB8HQBdCGMZd)!*%L(s|Xqo9w5}UsjaXh@T5x25A@bA9{ zK&HRXZ0i?wy5>wqFbLh##O!^Hn%&(cuE;1{&}GkFnUY z5$6_$*Ydq)9!pU>rU0`;dbN6A zmg7K*O{dZc$t8)IV19)aosk7*@QaS6OmG=`gD}_lx8`G157D~)8v1KT{b&|GM(g_c zMi;z1N$Bkq<>3T(vUTjXJLQmrdouv_X@AxQU2KB;3fK@3x~sbSH(g;OqFIp_;z`SV z{d=^MQ#CyIliP18(!uBWmNf^cj&tR@UZwf_Utd3I9^ zbf1LFh``Sxj#w|M+DIK+4J?!snnEJ!8Pa~cd`&be8xIhctg7*ddyu;$M@)K{9>R)U zS3AsaaR$*Xs>+dBE!;(8RX#q9Sjp8iRh$f`fy&lD6m+cuZ?k@`369?QF60Yw-`Qo5O&FHex50i^axrx%5qxuN zR6VBvxq8aR7T{J>W~%opryA9USTarxUZXY~S*zrbRT*ec0LQG#4%xwBtb47^s_dT3 zDvAv12^G@OTW^g0sfKrIhZf^Ip^czvidFL0Uku50!FEP85~Bq4FNYI=t3yYDDx4y#X!fyLcrJ!%st zttf70;F34dk3!>+Ot69a_d0#2>6q@-zwSkVbU3Es?#>W6kS48MCLs(a9X`9#{zRhx z&!oRrXRQ9UP8}}54s6C%ekXoXnI2)TE@7iOyE1|ENrCT{cHoA8L=#gbql$M8tZ0XY zae9&IAm}cc;8hh?mp<|ZY}){%nC?Qf=3d(|t+}(bU}7;Q@Y{hA!4a~uR*SYWL3P}r!A@NeUO4qXCr<>E^_}& zo=g364i84~BL6um> zL(?Rtx8@26UR>c^Dov+cN3ZE-eeKlbL3h*eQSR)8CR)*Nd1$TS#q%)vyT%s zf8& zM*)Nh6^4T8$ZMw!-Kog=?+l&03F8I60}R(gkSV43D+|r}CS8yUO zZbU`Qug*G}D51A5M<0FAsMo9ZZ`p_oU&FtCFC)MUS7+gn{O;!gItpyT{*-1feikx zn_onj0j^W}H@j)QBDL9B!J9f5Ns>*ekTM;uk!3Q?M0u8XRPTiVWEU_L0 zKqk=E+dP>Rwa38=0h@5lCPzmx-p}(#UBcI{829DAQ!aMq-AaiIiYeO6TgG(xECejcVkqptD@z$X9$Kh9_|zn}V5a0PT#Z{;kjt?Yj! ztwwSNsl=zKWM`3EFU#n5$1YlDw?)uh*t{q+smjMs5tu!#-m$m9an1hnp!6*y-`3ir zFc?Ts;YNTlUar^9z^Rg1Jvz=974yLW=Xy1GB7Bac_VK`w)Ts904bW*ulA(zAl|hs( zz{mej@iWmZqQ#ens)ekF{KotHlKS1JhDQn(p!W!6uh(0drZ|bbKOWrxQZ1!5xV(&Z zF}QMqh^!92#DD^HR7BoR-L>6Fn{RJH&Zl&ZZug=%PY18-=4$=9yFG9u9=Fp%Rie*) z{{xalKDYaT0BCOFh_cs9Vrkz2CJbxRu=3G?Z>=MrL!R6)n#*s}z?zzJJvCbM6p*VF z&pL=@`3Hr%SrA7RkQe>4DvAK84Vb`_aS{OafQK}=P=GjDV_nU8Tnu2i{HHk1@ z-)9X6s@|<~=rp3SQ}gn_j)Ihrrm;i|%Y1ZNXmILCem-xkT;G}~$^*)yL>X*o+4<{IIahM8*K+}T`XqSo~s;A{ikRnd>m+Brbnn*8*M0x$Euq!5)wmXeF$)p*XZ` zg%AFnv0TIu%3wbE{tActY!@{+|AE6~PgMB`d)NgB77uZE2;IPyxAK4?v0OxHtBDv0 zV@U0E(2e682bKE`oj&biZ)T?|9R)aYI?Ipn7EY)@f%b&ziX_w5* zeaXIp@E+jc91=csfi|oW(*}<2vKu{xN(J!m%?@JLZKmFX)ziBR*(ydjUpE9Ino6RB zi%;>Kw8^3R_R0got&yT&8jTtImDQaSU!rJb1a_ zW=dZNlaaX&xz@GVg3`nKxO32C@t`r)ZOl+{-%y=r*)N;DL|N}7x-suJGr z*9~CAuQqrzlclvkbO)+K0w-xE>+O^+9&~}PPgGFcDREe%X=i&;7c>z9dfG`KQ<2e1 z+n`>WC66;+zEBP|d^?ktFb-q;;VGw8Z{AXs30_CVmChrN?1dwyF2##Lf4c|E9p_I_=#b!S1oZzwijtY2g_)k-B54 z$LfI^lX=3e%$e_`Qvu;th+6ae;RfT<1;y-<=NAqj5YsCDkuay&zrY1qnNx|sH;OJK za>1q9CpeEPhR!H(k_w<9L5-^ODg7qF9?IYb5i6)tHD;cJ`knk-Sp}3G!-%(l2}<_WG{bB_zX+f|y6tA`dQy61gCQ(`JH-4N%!cKv?25*`80#7-Uc4gU4Pw+x4KljaSe zycED%7ZJvINO1zX2iCl6)=e39O60@QjqjY_&!NIa>}K85xI@(oSfKA>f(#}G$hpgQ zvb=b7Sryf!+lg>pk@h>}yHu;o?$`d>ZE(3RD>Q@ZBoRVYdRZQNJQ1d>;H9J%p)IvE z@r!ysnjgh$x+;jKfPB5UKA}FAa2Vw*#Ychct3!)G();=(=Je%(?SzTH(_RzSD5>9z z$gQv_`uorI>*Kx#hJDr6*rpvNa{dScf{>M#5ThZGi3pIo)yCjUubfAI*t;#t<8=e% z7a+`;!!d)P^L_gklKjo)Yp9J|stdz`O|It6ELt6_^}(f2%5 z!OpRvI>l&43RlZLx~$Wn02QQG{tBavWlIjaMH-pB`>V(^|HA7cAjb84pj6Rf>>{jAAIf8qNbse8Ll zZU4hh%j3$KX^ZiIj8=-Y5TpbrSmZNZf>|?KK`ip- z&Xy?HH#nH**qsp9rcKpe_np-N-z=fOyQ1VCaf+XrjQNGvXjS=5*q?fKvE&;aIzg%@ zn+bdVPPcU~E_!BY^hfrxf*UZjQ5RLtQ%xWEM?5>&Dw^pt_pfz{;{8F{Z2j7*yHU|! zO85FGiquC)FJ1EjiF@FCk|;!ip1-fdxgym%&6l5AwTK-Q$R(V4Kd0=_tVyjIW`|bH z{e_1)LSr^U^ZmcyO8jme-vSuJoz-*CFGVtSE2*ej4L|#AS1R~>C?%(0IAvAwZoJqM zL4Jfx3sg6YmpGjxKZ#u8inDB}Y?iBES~_~;`6~jC(Hud@mDa>}k}z@%*++!wA!NGN zoQbvXo7+1u(I|S45xwa1<8BX+)}taQl+ApWFj}#qUMhKPBNwZ7qWTE5jhaM6kwvX< zHt~M(9y0hTfqUdRRc^gfL~Eh;mpu7VX{?B2rtpF`-H>orWpicxY0+90}A6#=g+Q z);TZKs<3E=@-2c(!31WucOizYj;Fwmyddxb4T2yia_Z?DlXHe6o+rsvGKe4{GtN?c zdhWh&9^=a*n-UBG6h3T3&xovljOxrHzm(MVBdg_SMha(-mmJbq=e;iYf@LS_MMOV$WPo;99qk!AjBZhG$HRK6or;+zSP!y$)IiuP;=4L?5XU!R8# zR5hUwQEB(Ubp#l2{xq6;p`*@M08%6D0@!ctoU>g1G=UA5s3S@?G`d9vz343+>VA_FHM>!d3_^Xz?Ic+S7M%JL09VUJG<>%9eBJ@U(Xc{nRf#a&m`SWe2Z-^TpX zln84vwnWF(Jzn+7W6`r{sc99gitg&46=$Pt3;}oCS57$W2LttMJbN}t=5vuH(BTKB z=;U_L)%W98Naa}nl;%-fy`n&*(}>xujQI8si>MVM_R}?RsnV~&gl^nDY5gf?;doA6 zgw=gYc+Zg<nVN=M6S5F}BiF_j9eWNfrnP5RAd*qiEkmPXBtn*&~PV^3!+4Bg5kZ zmSjNCH7$YV5j+>}Wb1&y9w;tta?w?Be3*v4@h92s+=c|u|JU_rI2Iih+U=P^mWsN! zOn*w3q1A$Hh=Lx+2qU#XM(3axM8uttGaXbm?;QW1Z3U{!VA~jFjrV%L-LtWbh!1Li z-T!lPzyfU!j1$pw<0n*@O(@tG!~KS+YtX$_+Mn^^CF5DviBHkbga|bX(ji#aOr94+ z9x$qtKf4+GiAirQ(H6M>I4Qz2glNTXUF zAn9xk*<;$)3A?qm{qTKUD6GEU&N={JWq_6ubFKsV&MIEy1)S!`wzO zRAcu8Gv_SCGx)$Q+q=Z3#+cN#7}?FW+_Ua^y$odK2nj)m3JvzYr$;!@unl9dW#CpI z6Z|}V1W@yOM$9__(Yp(snX--ppM&022Quxgd)Pmr69p-S7zeFzhr3j+9}0S*54g5k zzDg=?OI^v^p2*WXN@+Szdth#W;8ZiCwckvI5zxGYjN(Hbg_6Y|FZ->n1QeIstTIB0 zlxY1tKL4S3K-Q!fkzY939DfDS;P5au%9`tN32<5;i z9M#w1Dc0kaz%!r9W(Y+hYBWC^$2~v#6S}M)CdVad5oDPL<0JWqgs%p{db`!+o z`^}ZGuj=Znq$vKMPd;P6pPNPgc>4mw#gmO(%9N8M;Sb;sNR1hRDwjb1yKn5Hqwqak z1*x?cQFtPt>HIvNT(EBQ&Ec?z8=TiIxkzZhis@(sK65n|_l0=q*2~msNFc%}I+gJ& zkmeE_F8*Stf9zaCoXZUF-9LF_%SZHqS7da0dd$-Cl5J6f*G~EIL(B1^aNL2Chvq?L zZdY3+^*&%s(tnPpU5!5JY*Xmse`eRUV=i>fZYtS0>FejNxe{JXfe-5qb4o} zLNwg*Yvg*FyS5_5*l_ndZ~)yG;bEqr=aPjjOZ7t=cLn|@1y^tH30 z*2XioT(7H>aFa5(qInOSq-bXvp%^SM zy~(BUbl;D5wD=~TamNCg)5zE}0%yRpr=Pf7*6bAQjLfugVivNvDemsrSoz^Y;(qX$s%6l^r)CZc_#)kzB^E{UUnkI5=_*eVAhs}7TvfhS zR&e9m4B*ajV#P99qIVK@a|2{9>$$ORGPKbStzo3m1uoEQfUsqZ}WQNcQP zyTNjKk>H@8i^5bMLF#S4xJ{(!DVg8IXE&-xSQ7I;+19ONnl9QJl@dI;uAKu0n;AKT zT7Q~$Nw88#nfUn~mF!DV!MpYbVY*+C1Vdzfs4R)hSbDvDW9(TsojzPrtoVe<&PjuK zde0eN&zX2PLmNcP@|AP~*5A)aSmjI1?_Et-`g4EsnXGO&a2Qp{&%U?f`5oqKgA$t| zc9RC$IGtDBB4#RHX}G4*FXal5vBhLqAvP3wN6%`=k}+^!Ul8Io&p}c%MWujahkWrR z5szb!*M`vZ5JDv{=XF2qV7N{x?ynyB+_a`2nUXRPb|czp5KZXGC!09=DT1Jua0SbT z*C{eJ=NE0&lNHo<5kWJHBZfdNTS@Q`J~r>H0Qx66{3>fbqt-TQ=Zh zFU(*aqxW&3O+H98)(090dtBfp3o%%IHT0eP9{7z%mYD6-1cdz4p!B0KA?#G6yKtFdx z*9SZSsI^2S)Q+mKowia5Rk!lpJ~w)#$hKEVh35H7`)QyU4nf8inZlci#)yBBWHkDY zzaIwg4V=RSSoC%7=f&4@X}Wy^w`oYnupPTor*EzVw>+9xrXacoJJ0Y$dUvb!P73VV zat~@vjA~{)&oNO6*BJ;g#^IO9FUMv6EOsl^CN_gHO#!SCfcC=2mDUj_I=)T!A@T}E zx6}c_MRf7XP$Mfek=r2h-Z-nB5qp=KhKO?T5oA4~uvxU1`BLcYSJrZ*sc zd~I`$Hfv|U|0V{dn00X6k)?**g-?AHkk`WKOK}!(v%E-bwLX`@oV;`d+A&LndK7hf zyBh8ve5w`;gE)5aWtT4h$~I=(87@D3Ft5K zxGo{WhB2d%YtNYgE-P({Oeh)+rkHQ60GQng*FR@JPRs~;Z1PnY9#$*RDS2dV`IY(% z&4oIN5@}lWw}eQNjp}NyfoxdBS^@pJM73I0E zMbnqP%puoK7mSFT?TzCf#*E~fN7_j<4`F&1zd#RqjWa{{oLrR^Xh(E}siQSggf`}k z@&QF-lgE-NQCzV~08hfP`6)Thhh&1ONfq=_S}9bi%)O#h#%PK2vcP$8D>5lu+@S{uZ1x@i6oO7ZhMr zC}7(sNj@HZcr4=GuNiON$hunsgDIeqW0>y`TeukKhu9tB9Q2JF(h7CkLtI8q<}|ro zS8*nA>#b_wyqMDCYoxgRiyJw5Qd6e*3JifIHUnxz(tAG}gRIH?g)3l#J;$`Sz;d(joyUJwW?$NTw& z4vpUcaZ@ykiJ!#ZPn=ChssDt-Cu&1jaya@Nm)+L;KWv&})Ao1xP-W-Aju$&xW2K@H z%{CFTmrs*(7tg|EKFsy(*%!fYt(1lgg)4~4uKh!~9mnn-o$b6t7_!f0@hc_T-iaH9 zGx7NKC1*uK*GYyBjOEeVdsfIqM>XXw32d(pxd|Zuq%Um3ri&kwx~-`_cVNH)^k;BC zEmy~$^S5`}pt4*$7LF}I+Idd_yG)qy9W(aWtF>B98|Ax}kim+Psw}(U4g8Biu$6xX zde-x&3>KzGS`*OG~l)k+dwT1xYFmig|TR>>{!7?#l=T@3&2uoph+V()~&vim}sAa z<9%9hJ_Tbm!_vyJt~~gz`B&VEQem-`*`g|}T7w)=&B+eAD@Z+s+RR~h(YfDUg~=S{ z9{DCo)culH=3>QahY6s#M>q2J{YO8^CiQr=*uX4k-AJt!S{B5dFCh$~zZ%+|hDSBU za?AVVCEo{KDbC$diYjfLf`w7)&cY2QJ-H;w1kVc_ zy6YwbVQ9_yxh4uEruTug7aAJM;2scBxyv0c@_0VO`5){+}djD$hgg2rsjlQJ}>ckg$zu?F8dx)Jy68^0cr&rxC)q1t;5BhMCgWJmId&G-5=}e+azv<(#I``};|DX~? z{({R}ps`psOMSUW0a;Xme(!>3Kv;3T`393`?N}(}$HAaw#ZfjQT908A(>Zr2Hf3MZ zFVa`tzm=f9T7%m;VhZT|m9Ujh_?pWCWh8e5t=k$zmi1086zs=pbbO2yA#BIFBaU5g zr#3hypqBsiB#|G;^?p3R5r<04+%eo)5qD*ZvSgwXlXpjWGn8R6aM+v!bb%qu2-|cp zsUJZ|poUw~S%{!QzXw0>aVAdrKHlV5Eo3D`9VS{3q_Sa!lo1&EB;K54@?Vtd_*=H| zbj0u-&bwE|NmB0tkPFWs^ZeHm>&<(xML6zU^-NGZhW4BJB?4j&K0B01?g+IbypXrt zsZKYJZ1tiMlgl`5wPn6XmIcQpe|s}gyh<^q0dkHp` zod`fhR7gCpBEHh(U`l3`@iK2W4b+G?vJtou?VEs^o43#jTYzZNr#fwjbJjmGDl-w6 zP8X>slE? zYzlCx0a~-F*=?>qgWc@F5Vhtip*3FW;?m`bn7@1a-%Dul1@8O&FjLolvR1Uso1-Pc z@M-g4ofwW7@+D+rqp&RI;Si+eAdqyY;{a+$>y~fQ`~OTEjYh397cUSqRkW2VLF%>t zAus|#X-3)y=c^Wg?W`oHkQru7iVWE(Vl!#n5(3qfqdG)AyQr#KekVzr*&RmzOfVS; z(fX31BX4<3EIfEu6oKyM{si)ttRR?HO~_vJFCOvvi=OV0+99o>rn)?$Ue9BO6AxQd z|IYufOp7Eq?utxV4?7zNGTj|zj@IYJlY%`D$U$rAc zH@K7t3R=|2=?`h&Wp@=N+ui?0B?43G8_K}iozLFF*}Yvoe3GQl z)3`9gu+COY6bDaHk?-7+tG?S*w9Fie*Fqb@xEt%^JO>I_W^ZaT7u|L5PNe<^m+fr& z6yQXSvaUdaek;6GwR>l!5Q@$;@GzjBzjRwXak%r1k67q042oLJ(gf8Kkt=u&abrP}4tw^2@dkEc7D zLgqJD4hXB{43&-`W=eH!s&fun9D*29=JQ3H6^ijP%t{elN!VH&>1j)gp}-qruTY-o zIqNiG*Leks0R68H$*Rv|41^vT-UCTfi6<&BvQJ>J!PlowE}zuP5+@ z4jMGlUfwVTSSo}{sqmV??9hyNTp@ic-y2*~VI1xN zZTVd$R*EPJiJng&g-iO(p}is7rLr`!cN|sH5`iY!G1)l1vq{G8%NAihw;ByLa9^g| zR2B#0V)VsRBe1>mu%~~do*aS8mKx=T75q|;`7L4*XKF%{EYY_{s_|>3)yoUo9F_1a z+{^%MLhEVyPsKdA>JoN5)Z`alKJg(e8qSP^XpV4#__MVt{0p7`T~jZ-Ot3kw z!M&x&ZmCD|SuQ4}jDBD}LkmD%2V#&-yyX@e-A55XcsB?PJ3YSSAq2Fju?RW|qowWn zT&%x)n6xQaIslt;NYtFQqZszHim+NDhS7oDEF75Y_1kA*lF#F{7Vi=^obMn?EKg9! zC#3@EY{5W6@O@aenHD5q$yvNN%_TQm@onZfJ2DNL3Syz7ZQk9>IXqZ%mC~E98ARQ? z*;u}%#8;Yd%I(H?3tI2ObQ#FGsfm*baItGV0u}B$w;KYrO#U#PbgC856&xtajDAs; zrnlt2wL9z_w7NqE*63Heml5<7_;xyJgqD1(bb;BIwNZ}OshIcS^dAszQSy3@FwRd@ z?cnkkmNzz9$l4|DR~LBtL9iu68}2?-Uee^&>a!F8xbS%D7^@m);(uReNo1S$oLZNR z&e19C(+ec&`|ff8)vLGOj-koLcxhGS9i?4m{Dt`LK`Nfe#lVIK_k%wbWK1Nh8Q#kj zBi|ZV#B?aG`tP-w@XwG%KAJV4g>j(-u=4>RAX@~yH-{%?+=Lg{@C5=u1tRp8F3_zx zD+Jg`W%>wIEUaUR9C4HQeJ!U_H^U*m=qtEq>7We>z`P(`?%Kv z=q~uZaaS#7$_(`US1Y&If1H>iP|3i&0Hcxvbc@{*Aav`Nd6Mo|o;cgtIl5d)UfXVv z(2O9vVqVWgzBQT1dcE$VIBDX}Gq@W}@m!XGfj&e%&hRY3VvN{yR`Tkprvs(VJ^=G& zG{)~I`0~Mqj`)GZvOd?Zo3Q5<5}Ts-dUxVz7AUmdgPfesoXf04np}8`pB7X}mgp6@ zZHGq0VwcVe2F7RZT4E*+RR;BFaYZrA z9_Z}9y#To7y1_)kw+$M3rzO3(F;W@c6%F>_pVP4#2~N>bQ|>UY zqpIRgi@M*9Oje=5FfIPt-|E$InzelZM41>GC-vWcFK%OU!7ru;B_n!# zEb8IEsW#tm9=8>OVsSSN4l(4*M(o5BrT$s*To`R!#=qg}1cL!uSG9pP0%42woU|SC z#Ujj4YfZMvgpLvUsmM5q2|5JQ^95{(4+6vSByD?!9m#Fu2%&EA4{ICM1pQ^;)_wB6 zd}#XzT-)c*U`0Tpa#D?K0Y??-FVdg2N!)pI7C&wk{M|fa85F1-d-F=4ds*xVS83WG z;UAWj$>6hY@5r4CPfa2hMon%wv?h&l!5vp(mL<|BP@1eKox{=u=83e)*L}#;aI?Bdt0oF!=I?LLDV0)Ix4B?&EUQ{F$Yn3F zz`bwa1E5uV(pW__6<&Y*X2!BBoVP@B9&_2OxB8Rv-aX=zz(5mlh;J zehQ_sEM7~F8*?K9BLmUc3D$8RZC}<0G!lHjT^R9FG{bSZE^0jbtb|`1X3jnrO8XYn z+whb@1^Zz&XPTqto{mYXVuuwvof%gv8-NY8@sbzawA_`^CdkRseOpM^Sg`GG!0UR~ z;G?Awm|0!K#kailX(16i*&Iud3w4L=ICa)>#VNKW*RdNXpaeIT`~!g^-1eHBU-dt_4WG%ZWraI5I}5HvrvZ@W(uka1nX7Wz>O*f=LY} zakXb791hfuq-31WT`TDlRL! z3qZ4T3snWk&479t_koTtJL&gKE5--qbFMr~ln-$dI_N+Jkt}Sc|KUBciVF&1ORpOL zJDoaJPFL9M>j8=6c~cH8@bvrCJ6)j=y3C(d&+0xFCJl@w+|SYx?+d9D-Y`(X=rvry zd!WMj(1i?Dz!AnMZBDAVi%NQz8Bs-j2_~cytfwY^G7SqIp_tes7KrW=-EFnvI&kTD zmDJ@WAxycBmc+R4;F5xLLk=U-x%8xdw)T=ZY-`dCiy&<}!Mrz7Z*T-^Vam{=Yxz=L zM)FkIa9SX(Jc67F)?W+MPf9F%1kApcf&+!x=2#g!al-=(av|dZnh-tfGjTS&9_2xz z^72nyQPX)^81zHFwx7ME+-o}v9{w4Lh&5CUnx$W?`$^CKdA7$b7A-yf_IvMB>h83W zG>_cxw)mtK$Uf?n8E8EzdELc-(USNrj#j!OCrRbWLE*Z2yD@+(;)+IlWz+&FC-=-8qE<7q)N;7O;^I>m z*@SFwBC*TuNMpG!ZsY)}#i_I4#sSsBFLxj-AeNiwSyf+ND7A@f5jBQRnWXWoN&_!7 z_;g5n&coxuxH&gaTsd1+>j}HWT{b9S8vUz1g0oqpAh-P%zGc zu^}N&RphpK=|X(O=$(Ve-H8eH@;x{L67ukZbwlFyVr)H>K=k#xf|YAn;7H)gnsb9`idoJ}2Sb(rEDkwdq8?zxm@l?!2 z3PaEjT#Ta!-$V$YbcJKefJ$Ki&%s?*|H}Ejk{L+pef;s>Jbxfbr2kSI1M*eOdr><= zx-Y-4_u9>b0gJ5i(8^5W59^%BzQl)KVGzIx-R=6QEt&7G1YujAT7{dv4>)BDkD$Zz z8;xBbzU%)IAsT@WlPPP>;M#}1;-DsA=oiNU$p74P6U z-mRYF#L0x;zETaC)_XkQMedX}vSnB`;X~?;m*C)GM6QfoSml-F%y**8rwVU+#2-8* zbGS+$<{%RwtIl*hlfm62&045|yQiJtgFI6op2U?;wn^Jm$u ztw84f`X@HvbXmQCJ5~_u1ufnny=cBV!tnc<&k&zctiY3J)->j>+lcUuf;F46CLhc< zKN9^jCZgHh;qbXVj|G zp`wm9i1dVG5?J~&Kc@o@vkvva1l&ts&_6I}B^t=8-PS=m$fJrA0l)8&G)_At)xM?` zeLXU$m7k;)g6$d#P14qI>q_V4B89U|zpR4{NWAVzVule2d~bG}Jt)`a5^l%yF7$h= znOKDVG74C0meNdkf=b()QKP?(Y&os4x{YOx31tKjj1`UoM9xYHxGDJ<&Vr%wnBTOI zR%J0ck%2Yk)22ifP|-W)7iWsz)k}=`rcD;o*v1}|F5ChxXj*YWU3s!vCYg9hu(ok} z9lvBp&x=)neSq-7?L)ifhhIb@;0dP8Mx5M+92PZQjY68?O7iXSV{s+rVc)jAK5hF# z`7F=sMV=Z9I~OCe`&ZPjR6&5$$rWe=U7Bxj?*D^fj7R_d7$%?8uo7`JG;wQqlGXx{ zzVA}Fz4&=>ZOWn?^4;S!4GDI}+UiN6OTvi-;&oyoL=%_ z;zFMob+nxn&{bThBJc40no>QNC?@t!WE)S4Lih>cWsM4pvx+7(+wRhrj{E-p_T&b9 zo~;QKR4EM8Ke9dnig710OBC58-XAJ{dgOlo2mGp!w`iLIG0MCMc~3uzVVD^ak^)&t zvBLramGbbW;T082$S-I!Cxxtw%VO1Tw210>l@EC|f|l9O2W|o@Q z+@3E*vbkmhxHnLU#IEJRO(KG^@wdaalHcJ$`d0{AWv0SK>4E~_uxuH3R~?gbrq3Q*m*I3qC5!8X58R>zc#f| z-0g*g>{}|QvuxMHXiLj7hpb15pTKy^zK#5IZGEkjxe!HE_*4yCVAsOL`@e{-@H$m<^2PJDGz=)$ z2_=qNX9%F65}zngDjX)t6_S zGT1xw^K;Iuhj$Af(oT;V2-=b5CtvGu9HeLR4nOh%ZBJ;!vS#ryzQB{ z$4f#%MtdWlq>mf}fw2?TMfr#(JA^ZVkk)A$Vtddc{HnD?HXUdd9Av=%^LvH3eKx7) zV?j2m)w=sY(`Mx+Da|O(Nk& z+NB08-9xH}8wzctg34L4;CBiMzzZp|odbWl$NdKWo2wM|8rYPZDd#b~5y7mP3#86`>YPYHEGIv!?J7#}?LS&9`5HJ9(Xa=e;fm8CMWA=x zk~*=Hk%gFWADpdK#;Nx}QfGp6>rKd6UT}e6O#%qF6o_2U_;}JODE)w5imp?wK|;idL)GL!gR5Sob4qPdH~_D1nB5yO^& zzk?8+wB;Y>wi7`r%5|< z(sVk~RLG^-4Hg=|wPyfS-#$wx@pu##H< zY(0J=?}7R@n>0`poLys810{rS2aR*du;1sdu2jpO^-}%A@AytCpvRFf+Jl8v`p2t` zmMu0SOpB;jM26x5Na0+-p7%rEf^nOTKov0YTQ)|hp?|@&{x%Os7}eBBL-x^5{v+u0YcIv4~gnx z{-Jl3>=(I??!Y@im_ed+2V%lGj$a<`X7<9yau@&gJWY+l{sXr>>ZGW$Ydd{sT2$rd zSW(`iCdniO=>yKr!&>}78r>rZe2~8F%&R8wC!>EJNSWf_^0suDx%}Qkk?}qoy^YHuq9Y*nig(-dro_ z8%~2p5Zi0iP-|)RDa0KUo7})ocppR1WXLSkuB4|uoOtAp_b~O(mD$M_@PPfuXTK_> zzAw4KNw)lqGY*_V`OiNz_)2gt9CX5-YKz+9*jdk&>;3Hn8M=ekAEaWlU#bw`fHB$- z>2#2NuMKW^kBeh=aTYZuUQfdpdNZdBQx>>~b$7%_RJPM)uoIs=b%qT2J)e|y*h&iw zKhJp|s`{_kK}olI`=*}O*g4%%a)jUpJJ7@NA*!4AWE|ddcUL22MG8;_+m1VmOL`u_ z_zb}@mtHL_hF{!+y-#t5o<;hUS9{XS^w2D*3UWAQ84wAkAs2;5V@Z9+mO0ZNL`!(v zpyf$T^4%#*T2N3Ew3S1+zO9X1x6w#o5jL2`{;4^|1P@jre&~Y(D%jKlMK^9p;VE#0 zK3+Ch*kk!z{2E2q1y*$qGwiaHkotJosPe*4!`j~Vc_qa9Q~N((K>?=I z39NKhHd+5#*_qQUpp23%^HQHQ7J&jfoeaMT?uDwKO~dY94yg34`>rzt>YLwb9|K3M z0U&X>yjzK#9&O2js`%Jf`kM!yiw4+4$@=RndzIZLbayKWMen^+^F67p$seTgqFaG0 zRHmK7=zv&zO?%#3DlwqiFv9PgY!XC8@uN|!!%AsP<7b03%GKD-Du;+XfB{791y)vg znYRxA^0_rKwd2%K>~zAA{ZVP-+2#oEd!K2W+&M+*#%wc_iD7#!NMI863~LvfeIkxA z>eseD=yp$cJ^a@%=+3vw$mFFB?UjiG-y+bIYzFZMgx|8dS&C9#NvT9&6LP5y+7Hu~gmk_fHXIFvwi9Po3YeboX3rODluWGDiU z7yeWgB7yGeCRs|v3P$1vD$^@6<0ZkbXq3m+K^1!7pZ0lxYi?Mp{NvefBV`u$tmP3i z^SDkuZALGGjd?#FJt+YyViOlFUaw4qq^ms4eP9W)`Grx@ z?h~n#DxwOeZ3MVSpD5GlnNe0lW7u*jywms>>D}x>nF`J$ekYjNCnsrHN>fWF zJQO=S(OpaGb=JeH-NtZlC$>{)_4>`35_cb3S2<*Y8W#f?3LVRVMmucq5q^kHXFr$k z*~z)2e|`P4hN>bWrp0FcM}!KpTY68j|6Dd)9;f*6zOgCUO}8(~bCK!gjT0IVEQ3lh zC7Fu8#{Ym39RA7DbtVb{vy!yG5bY+osXmKEVguHOwUL zl>bV2l?L7M{R}A`I%w43f+K#?FyjzE%ka36#n&F?2>aUHe55(6yf`b6!dz0BTjYQ@`-?3g`eqg8`k5sP3L=+wu) zNS})oZbJo_C~`r0028>gd`$(xyT#A>l3BbH`;B7cUA18BkYZ( zc&vc537TLySV?6;#IF45)gB93iZ^E^+D)JEiBz416KIWA^9ebc_KlAlrX0-Uz*@8B zXh9QamXyhkZDLKv#It>fwwTE?&miY{AK(p~ofjMI7w8;4%{HQ3rU0riI?5e2uhrrV zy2&dK4Bwq6ZkDm2ys<0I4y?!F@A7B~`nvYuTtrQbKlzSHGaLt?&x=g)`zHM^+hddMz40HloL z)+#tGYV<@kr7N6j6jPq+6bwy)Co)>fKi9P>i_*bGdG%FoPsS;~DFr4OBQgu=$(IWMi`y%En2_a`% zNd$DT$8=2!5<1xQU$*XIX{k4Utz_rEtmv_*^``EQraCuJ$6wsNv_xe&>(ZMobAaCDQ z{BsFAq6v+K;wpzt&ZwgvBF?-Uwn;>erZysU6t5P`?b!!ULQ&L7A9~+AHJmXG10MqV znrtViLmY8f*sju5AZfHM30L6%Rk-`*sxGc7g3ae$O_Oy)yV;fd8;z)74D2a>TdGie z2iRPgn5HhhOu{{j!{CDTlT^9@d0vFWr27$r_SDP|i@oWC<4SAoAk9>~tVK7|r<=sy zr$=5k^CY8~&I_0Nm3q2;>g!Jrzvh?f?zNd5*0oQz->~h1@LTQqiQN$`7OD@W^E@-Z zQ=he<0RhSu()Vvw%}SYA+SQOla7wI9zhL~T6^eWhgm>%Tnf3Hp%K4I;4KSbRe_Z{k z49{T}vJl>MWKtSlJ;cnPp6N|4RsO)7>7!6qND~Z2B~&k1BHn(xyb##x%y2eDUANEc z79utG3>(FVK~T;rX}^^G$`REf4{%1T-PR;*J4oNz9h(U)iH#66D`?+qOwDrfoJ@0V{wii zuu%2AvrF7RMWc$n^6&@9+Rfn}%(;jao(qK7aT*pRnIR;CrTgLAz(tHJ47K&O^op}f zL1w`5mc|ev6e4oaB7C+>={98H*6-`n`3^N&d_zw{&(eq?CnM-#jJJcN9#faH;-`kW zj6xIlRmL_1VpVwD&kRb9&wBxOG!-Mp0LRREG^^m;`L&wbW`djIl zqLtB$NW;(^kHr@GGn{=~W^fsDrm0FSLwAxtRDDUnm`6J+0y?-_sJu0>zA*XYdGdu$ zVrY;aVOc6XaMs0kkUE^C3Rs)hNt+U}93pz>;aridsC@L}6B!pwg9prQ62RwV9C>9D zY^Z8jwzHJY(HsW|%e8vY`qR7}%{ws(E@AU31O)>kV)fYYtc%(z>MQKO)o#>LOo~aC zM=jE)kh=shx}y<=vjH9WxCo85>W%;-{;tYhZYSS8=pVwrK8mKw@Ki*sQdNQ0gsLCW z?YO=V7o^ggv-cM|#cZe4D@Yi{uLH%7ItCxXdQT6efyJjlR5yUHBHTZOJYXG{4Vj$< zA%@@P+Dr#$<*%Kw8?DNtw=@S#ViOq&+n*e&be+XADu4=tQB-+W)rLV z7-=_CxQZh(i|`>}T>Poj&Yvv+-&3J^cXAShF_+}0rby5>{TUTQ_tf=RkCs!QJl+w& zZ6HS6$A)F`oTr7_YV3>UXTLkTD_aHxKm4Tk2pdZZ;NdkLtdc9#0mJPFs@xI{#HpW# zrtpf0W>bN2Iu2$1_+i#8tF20uW~764iwMY4pRbiCIY82!v~cuwqHL!hq$mvfsLbGa z?q{ZV2RB-c=)Uj~$#KnA|J`fn7rv%dCxWz6<$L|Gn|m><8A(MJ(3=_LUq{yB5yU*T zD!LGGNFfQ#ez+C;P>@*T5|cf1U2~Fs-j>g*@IYu)GI0gTiV?22TTqUc%ZDN40%cYn z!kZ2IddCBv=fnG(%$!%6`ZY)NVZB^GWyuKs<&2a!O8dOu1&(O1Q3;$nIWX0Apo0SLN8diD z^m_Z7N>?Mrx6Y5KZU`L8O`h$BE43^2zQi9Em#Vm7Y&3uNDh} zZU^%NxlWJJ5}6U3Sw%l0`|*9r#Pnp%j9QhX-P=qJE~}qGENGVf6aPDRoZ6j}`AYm5 zUq6+nsu#Ub)WNm>KTyUP#>xGKY?n_HcM82(N)ju4%gvr4X0o}}v4GEXxFtcOV6@{` z2R1H-RHR;tbZE{E(_OiwS>QSVTQe-cCbqLyE!Qxz>B@~h3g&55V`7a$u$lHR(woEn4rnG~&`27?*s~Xof|t7*JbX3;lr>Oh)pouFbeGb#M^B;9_z zB_yo=2vb()h8mPvOG`6XZ7sl?nvIcc#qP}r@B-@E67RtBg$EruPVHW?`;VJrE(>52 z0I=-PIIO5uJ<9Ve{Vp-tH?dKTh{2b3_P7B*at5?)cSnglImVNX{g z;^Sq2+JrAnfBW|DCviji5m-~V_{}~4V_V*IULD2lKM69)-{{1FuuEXk>`^S!G&RLk z?>`m_xd^s552=v2x^UtC^}D#4_fM8br*%93vLY^we`!E2^d(J0$>?$7M6hBke$uW+ zBo2%uV)B#Xh()>AG9OU5CBMsnmqu01Zw*l1VVQpA=`K!5ZpruJL25DqjV%k*Y6U!V ztySOhnk^ebwxOr{#zz0s=g9mb7eL+J(vSYVE3N)4m%h90&ofIbym<)9AJ-_lqE_wL zFRIL?2&xvMv7QJFBP1^N$!w1u^WhC7n+M!q%nvlFQP|nIZEHB|D4+PcFl*m5q;m|B zI8`Kn$2Gsl9dozpI4k9ZSFc#DabQlVx{Oq{XcYrWc_5~yrbSOR^`+l5V{|UWI^?&Q zyq}bKipVB8e&sv)+tTv?llL)4M`bZ=v)gHxB|KuGmBcpHf66HYe@6U-0 z4KlWyvH&F!aPsE*trDuh0bpOl9d}lo`a8R5bCDf+CZIlwd>Q-Ku?Cqd-Eo|seBP$_DjRC(hy5|G(&(}5lC;=ol z7Ll@g#=D%nFkQR+#GbN0D3|fi^={hl&5Z8kUIG_{s(J(EPXe!9K&~t#(Vxp^OZC5Hc68p?>yd&>`D!GGs(r3aH(hVW13xpF<&hdl%9sw@l&pQ z>U3}Y_vnG>X~b!#m(CFy8g3XNTI=ax-9h3C78OW|fN8!93R2PG+s@&hEWJubB0yyY zt-^s)o9~fDJU}@kikzzOyDZ6E#|$W{i$C3dm9KWIh}Hva`W}Y3Sfcx{45mtEuCq3s zqgLst5;&Uox#F*e3fZMdVnNR!7bW~-F^Zp1TN@NmGExRGb6thsu;U7UT;2i6Noyf{ zeRWrakN+L64Ft1pFj=8~9S?v0zN4HD6SV_u1n@Y0yCMmBB4Qi6(^QbNNJu>LQ#Qd0 zX>S0a+QuekqLR2IB^o5v8l+8^4^yv4f9~VpXRa%Z(9K|gHW?F2e7p!l3ft{AiOgi` zb62eyv8`~|!mB`h0M zF(NXA)Dpf6olJHV%nh`n#^!6g4%dyXln{DuaavU$oi4UPZVJATp>f&WAb&W8sJ5hB zap4*xnscxkGmY7K#R5~hy}FXPhYbf&O!zi$jxGligzcnegu~xehJgErdc*b#(4AVV zhkEYj-yh@-(UMsJ{?k{SvQGaLWB)~gepijuX zmQk=e_RW&NPx`J5nPUF@QEjeq;mK}$1^6L)e=PYl72!*^kgN(l`&v}a zm7K$0y#?Cbpx3XfO7lS>J_-6dJGCw4;C?vCB7@C%9b+La*?PWT))g_BaW+s7SG{h} ze&Ba^ZJSXWNuUnj(rmv{pT+%L{x9OD0h$UwPOt11j!y~8ZsB^eNJOcZRRi!iYhVr$ z1Ze^Rs3vq>kus2w1@_7dlmgq+AQN%<8i0;J@%s{{X274kL<-MMOGaYN2Cz~v ziC&pet@{k_G3KVxxHyD03uZ^BX=wao?iWqGkSK9IQ_;R+H^KdGFqGa`GRo71#G5|t zclzw79F&k(haA8Al%`r)-nX!$qhl}rNQVgAMVxS7EGoY~5Q{+*sBXiM8`4u-SqQ{a zzgycvLOK&uG2&rSlzIfj-4n;#J_Ym(wXwvFLlk1F3 zb!&*>nK=3`0IwN=q`PKk5x6rS0A5*k?6mjWjt8aA73Xe9#d+>QibP%ax!}}Ud+LoQ%+Tito@3dzJ>$`N6k^WRDe$R zDJpB!)T|D)4b|h7xdqLx>~VNr2ytNId3U3cZ2M5b&0P{DpwAUQmOjQhUDB%ftG+N$ zwt?VcdM?6tqhsL1kV%MFJBZ9nRA27(C@IBK@#j-WWaWS{$iZX#i;wuYO$#K2vC6<* zU(?|Z3jU##cbq`V#lK>B#nJF!NqzEPaQpAk%22TiQSiL@kfa&K%{Axm+UWu6+?XZs zT~G313PTy>g#|QDajZByFovda2Bn*egn&P5hp~(VaRNgggkM&nKB0^n>jV~275VfW z7Px31?{zadT`%^IDLSvW%pmRomCrg!LwTlMY(3VP5X6RrpI-h~LrLpFEReNi%Y>M) zE7{?a{1Km?c|5w1@s%UEPdVBbYotR%udC#wYX&KnToCkv6VX%@-S4G`J%-Lv%OXn% zQ>)z4ZuE_f-_wHkOlP<-Y{Pc0>L(RwveoG@f#3Q|O+q)Otd!*2#Og*^i$EWEpYv{u zu)9#d5Ifol`wplUrBsN}wh>n^VA|}(iZRb@_}(MEg%${ia0Tfg?X7%Osu zP8+W7`<HDh5Vwql`6I7 zX84MVo&Go8hxwOxiI~TvKW#5IiQuv}ABf`sUWr3$@6$mk1Z-fFC?ltvfq$ee%X9ud zr8pj9=@W&7JCRh~2`Rpt6pu+vNL5pgk%w^*PFo-fov3NAD8N*DMoci+_rSpK`Xwnd zz(z5iTv|I7zU z0U4-QOs?|)+LJXvGKGPVHTMQSW39=2D@9+%e@;kU#z^(`QTK|Iu&t$V`=_}Q_mSqp zKoFbq%fK)ys2m8i!2GSSvdKu-k+Z{r-@Hovy*#)w_#mkv zrZFc>yYr_+Akk0T0ly{z0mjw&m`mXCGt|tUqKdeN%Lx?~ZpqjrbhDI5PM}(mfRG}N zUPswhOA(Fcf{Y8SOUZnSauoEMlydqpSE)nTa+F zSCTbr#hBj32zIve#1%%9>wh6U@?fc9KG5E{UZ@-kAV3Z#L||!j;x?yu5vJ=N0`)&PLzFdq#FDfqYH8(;Idt{Jw;1 zI}<9~l!U(Nz~9IDV)EmzFEy%#aV%vOOdk@_$>5U@N2U$$lGbD3zZ|6gHxfgr;Mmb8 zH$C34$&CmA@6EU%dn>Q@S=|iQBE|I3(kgfcm1Id25T9!Zxu-3FHd)78X_R-7x0ytQ z-fM^IWD`@B)Zqgf*=0P;4Rnr1lf>bfw)>`;C%_7_TpEiE(4gC`6?6yAl3Xn!V#~s( zTWOO|(pqneh<4PhywaKP0*|w$wxuh!N85+CrN096;oh$>)zLfH%Xx=|pemd%an2g< zszzo(6?35+PoeZ%*r@ED(mmDqUlnC(8mL(@xoGy6(jj^@ zlZj>$1#B-SQ3Ni{b_j(^aKb7YB6c4B=4l%ih`EL@nY5wCG&iHf^LJ>(gT6+j`?BD+ zJ(yPTP58*ro|j-Sv*$U$z4^ry55@{|yNQGLCYf7X*<4lHWImT1OqxvHtDvn&{nmxQ zA@w_DX*#Bs%t`qk^7+Hr;Y%W7CkItwl9W-nTMM|3tm#HnB&)y^HINJ*eT zmWf#W1_MI=aT~s)VIvSKtN`+_e;`7|=o#HeDiZAor6m)&Vve^WZ@#R364s?+wBRV+ z4wI#dm|q^Iqxl9bUdE|p9HkhU&7^F;QF-43bpG}T>mF}BY<~gz8(nzvw70=JtC^hN z_ok5DV#s_n;xzcgP*+=t_3c;g!OaUcaDMX)W(o7>!E`Y75L)1%f6DQDxo?oWXM1i}H}*xpTs2t!bG4QqSS zkV(KZM^-GzHUfKQOLd{P;L9V@QTV4VC6841vMEtUasLqj1kXvu06 zZlzz_dNh+0*eSwse|rBzBnvk{VqUD7jYHj9;7ev&)xlM*Pgio;5n4~t)Kvuw87qj9 zc(o+4=P1YyX-8cH~)X%LMBq4a7o4CX1KU3NRDvP1P~_qSiW$oT56j3B$FEGWzXMa530PA#|HbbmYjhty(M66$74%us{ zCwy)|T;I5WE{KEGXu0$7@qRa)WzD@TWP+hWpQK!_Bg|G5>9g3OR)q z^r%Cjj@C2VW=R=43`r*J1Ada#!U4>;)`a_&_}4pm)0gWT-4c5(Yuq0>{)AE%hgYUu zs9gg;Sg^&~cv1ooGS^@QXo*;s8Hn_nI#lrju6}Qf;Ge;>=c(dDq9jx7G-c;X;BUE# zMvttSB`(&`*eGQ_#f#Gpk{w%hAOEM2=hr%7cDi2g1&XNS!p&y>fl;#+r8iON{j`cx?qQm zQ#OPGoRXK~Nr#%s~acUVL1X%exl59u%|bekDF@VXc^WZ z2T7MT1BR_LSKBVWE^QWU{gMQ{;zYJ7aj!`jc_EY7G^~apPe~diD5JoCs@C{Q+{WK?A04&u1#qFVOJ&t24{2sVautn<+rDW$ zgm*hFHX`pr&+eiskgtf>%Tyj=@`*v+AVbS=qA{IZO4owv18?kM-Cp^DzwC}j07?hQ z$VFwdgrZ?D6#Lg6Lcd~+30!HI4njZ$HV}eo@|+X-;!9nc1FC`cpI^vOsF`;+OfRw; z#lSvD2lNa!6;g6kX)X(e`&^5OpvfjeOH89Zb;3CP!Q>YTWv~XS5lpcS(zvau&hO7K zX>&BZ_OIIKv#lRGTG%_CU)ESSakx<6@}~n%R9@)}Iw6{g{!wMNZbf1FXp|p~PT#ti zJ`QPk?+UT23E#St=5PB}25NBFs{4aYDA<3ZiCHmZeIl|LX@FrNaf zg&Qr2mYw-E`cq(Ok0(OuVxF)n7%!l`;GlU{PwtQcKkC~sPDZVFaptB)>*kHY^aa-V z1^`|fXB`OR<8jQ2{IDq1pBz!EU-HoZ$*c3$qnvp0Zcn2>GMvn<6B#bn_Oin&A`i;y z*Kj>yYYuW)1E;JnWHDY9&T1mq^Ft2_Ah3w7JpJ#5VT3^^n1SGVa`%q1Lssal>cpJ> zt+kz^Y=gwOW${DFNOFqe;3JNaBC$%Ol^g;Ra2^5V$jB{`#m`%>-p`xP!lez+^wP)U zyo~qDt3c5Or^$#7{Q}8dnk$o6Jw=vo7l&C8TA~@Xr}^c?I(c9Q~djxY>$BR1it%lX5}fb7iOK|#K4ct z@@u7M1HCoF_8A%wd{f*QQxXT=YL{Z{r(v-$+1#lb>5^$47oD1U#QoqBbdR@=Hz0f5gb)& z7?0-%SE}4I?VS4{3B7yL?1=qmD+~e>kSwqcPSeQvJ?xp;{%E3VTVs(>UoP0GMX4YL z6j-gJuECs~u2pHFxAgF{E7E;hP8Jb cxL8`iWqM9&~8Q~}Sh#H^C=rkl(O#CiKy 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

`2(RS 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ڲ~lm^n!Suf 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\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc 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 dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \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/23028/195b191a\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:05 04.10.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="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +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=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.33 name=prt.vados.ru type=A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +add check-gateway=ping disabled=no distance=1 dst-address=192.168.0.0/24 \ + gateway=10.30.30.85 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/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=time.google.com +/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 +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20261004/20261004102002-Diff-Config.rsc b/MikroMaster/history/20261004/20261004102002-Diff-Config.rsc new file mode 100644 index 0000000..8ec1c54 --- /dev/null +++ b/MikroMaster/history/20261004/20261004102002-Diff-Config.rsc @@ -0,0 +1,8 @@ +607c607 +< \n:global CommitId \"main/23028/195b191a\";\r\ +--- +> \n:global CommitId \"main/22740/229bb693\";\r\ +610c610 +< r: root, in 10:10:05 04.10.2026.\";\r\ +--- +> r: root, in 10:10:05 03.10.2026.\";\r\ -- 2.52.0