From d3ef468485c01488c1438ccca3543b5c555beec1 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 6 May 2026 22:00:16 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 06 22:00:16. --- .../20260506/20260506220002-Binary.backup | Bin 0 -> 279016 bytes .../20260506/20260506220002-Config.rsc | 4678 +++++++++++++++++ .../20260506/20260506220002-Diff-Config.rsc | 7 + 3 files changed, 4685 insertions(+) create mode 100644 MikroMaster/20260506/20260506220002-Binary.backup create mode 100644 MikroMaster/20260506/20260506220002-Config.rsc create mode 100644 MikroMaster/history/20260506/20260506220002-Diff-Config.rsc diff --git a/MikroMaster/20260506/20260506220002-Binary.backup b/MikroMaster/20260506/20260506220002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..9311239d697594a492be1896ff63712cda284d09 GIT binary patch literal 279016 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ଆR^KRuyw+=O5B117}P?a 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

tEJ6 zJ%sI&XA%NiL}Ie)P8>0&bs``sL6_CzuO|pfQCFwT zfu#4CF@T^-Nl+vk7)+Bnr#6dTL#flI*#4(4#RfXiUDA$kffX}#dqb2L_>HiB`=?MT zp{%DIT9RA=TUq9dH7?lMs(nSi$3Jr4C%{SURz>|h{Ps6jYm5OXi825+H*^o zJXF$IPT^k&MT8}9;cr~{r=;S7%UZ$Yyg}Ke)F*70wiMz-yx2->{0Rja9DiAq;^Mxp z;tkm(RpYQ+!Vx~LgoAkd`_!mXBum2iY{lkfn1^&4XRthV(wufxXtB&vz1h^U>i~%K z7w@M&CF^P>fE3x|7-#`XF;FZNa?1=BwRP-x5ggJ2P{vecmXfAg@}_Pv?T786yhq#J z=lIRg8@sXKOeIK?+3JI`?smvzBKMIPtI`7formQ_0_6Kq3sa*yQzuiDV z-k`BYW!o#5my$M)(zmpVqZs_5sYh38h>kln#9UB{v*nGV5Z}m^uHe@n%xfGAmQmJ<^ z7Vdf>7Upa1ri64k0+d$6WcD_?016j7YL;X)P1iG~jX#B$>@+EPoq&ovRT9RM>#ex4 z%>Tc0aDd@tVFbB}s3RcBUPYI0w5|Z&LIt@RT%J8t@$(Hro=DhKOLpPRV)VhUWgLDX zJ?hnzEOHUV%mCfa?yREl;#fLV+2-k%g)CKyJX|F|+9Pff-^))=b@Ye*En%$p`wJO- zGp+Z;eORHEB98MvdYVm4eFk#A;K8cIE3ibbwat!+hQbsP`e4?FouRB)oV&MM?GJ%q zGeSrQgpkAgIk3Lb${$JBCGHF6peqqXA-<2oHE z+Aachgj29J#Hwq_Q)+}k^QEY2{;ohWu|1C>Ime0d`>NO8WSZ~p6 zF^u!l%i*KY;4r}>Wu!y{7HE_pB^k4;*BDeK_$d3vUIoS1OD`T<;iO%_P?BspH#%P* zJXd>$qqt$&XLph-UKq*LFPWS;(h<}mL$U>!s(Qg9TG=}aP3!us1 zSrAK-HY=cb=tSCPg%Oly!G*{ZZ&z8bAu&`_V7#HkVx${)Re*cjVC>}T+NC|y*G4#r z#9Xeo7{MNoynz9U!l&4zol3t>HO~#KKzDet^LX5cODjtKozJgY^2jCzb&AmLuQp=Nh$EtE)~ zy7s{bgMdrx1CIl4z8+K0AEH_bS4&AAh#@bJTR&-=9}svs>uy%1WOofV!`0BjZd9@Y zM(t&FND>2KK(sUT0XmGcH5Xp)|3n|$F4;E@YaH7tniHs?NYvCgePLx-ILFO~zd)0U z%>|8~;~-?oP}g&!(vq+F`a&Fw)FP6XUjQ+Gpx2#Ok)!aT2%Poy0I{ zwN^|{IKOk0Gbe_{3WOC=Dp#?h14bYpnHWMzuQ-1S`l&h5z54}9n4WJNI)=;e!{zO` z_SA1bDLgDqzkI0dfw-PqsY||S6^*U#zwYZG$b1KcKS}>;;&7*Xj;$zHgfT8m8C=o= zkSh*Mj;?8H?f$5uHDKrb4^VYQate?G!6(ZxLrjcoEkV^t7Z#>4`ZeNk0$;X3lt3{1 zP44!#@2bwza?NQLodeFPUxNIL?cvX>y@HdHgOG?*X)c^vg*dxKgKr_^f7QSElMn5? zvw_QHFGKK4G@GHx#U2Wj&r<^Jp>%?dTcWOvX(S$@RW9TOZ-Y1dtCcc(t)T{fM9_!W zTy&kCbxi&Z_sj%^zGqGGihN$E3L$_L&H3z+c)YJ4R08cId7*;Tqs0JT)Ca7DC42;&9Ih=|K5d0WrSgPp!aA2Ve6aMGI6;mxMZy1nQ^!DI)B0qpW^kFNd zU+(6|gHVB#tRKyx-v>~JD5XE(Qwe~b_d+`-6!cqYZeE^Kr7G0zWNpp({o-@2Tca{45Hj3EI&po)#vsu`v@?kMl*t3*j*-KV*B31;`+r@Qmd=} z6iQChdSwZ}-5;ks81ltv{}830L7R>I9v}rht?^`Wp=J0+yV38b0r00=bU1@5zW|9l zF`h4Fc&T|aJ=H)EC$_3>Y#^7Ag!C$A7={-&z7gCoN}+^)BsM$Xv#me28Ib1-LVFoj zPj>ec(Nf8I2YVu;BVd-m*V=ZV&GeH%h>~dpwsG59MP_M?b0-Y5f)nnW$;P89GGmj# zMYhU{oe52W@6;V8ZQqy$`7tppOf zUb>3tr+;HsBWp^6A}fSd;t+7>HvyvaS;FZ$(~97Ip212N?-Mo!J`C=EP*P*NL17NE zQCE+MAw6QYa0)$wbWmu{`f1k3mV6|9-FXJX)7I8LaCKkMS!mn6HO-rv%WmXyPW0(F z@qJnBcTbjHIrPq-T2;n@?2;t%VWNQ+lAnNHwDz=L$2riuj3I#wJ*9U0a&%T%Q2&v- zPPSB-{Lf&Tby#?!WrOwEp3^D_D$HxU*Y#@^E1z};eXm6&UAt6M(WDeCD=|F4Sj(bU z+q{^1qs!4%lAAC6Fq--j#pgXP#%oV5?5CC-121+fE~@b~Tp)|90~kI~pfPZxqz>M^ z6Bezg!_9q5K!^OWlOxzgMS4uG2X`x?mm-ZOxNt=iVR~L*h^s>HzoPBHc&FIo$4-dH z=sAJVx%%GWs|yX;Y4z!m-v?Qt4g8NcqlgLVPxNPVzZUbHyyn468xdcCmI((wWJOu> zHI=y4H$Q1i&DcK&>I~G%8v>he z`bd#`M$({{b|q#>U-$iOMkz6;Yh2PICt!-?K89Zl!-OtBJmeNYyFnVUlHg-@gN^xz zb5rR<-kjTu5~npDp;Bkj(E;?ZeFO`M^OZi3_zYyUAEDD7TkWB@%p){p$swQ3{6FoM z`YbC> zW>m&Rwg5*lOVfAIaISQN>GUv!6u{Fj+M7|5kn@u-s>RSs?qi2jS391I5#8*6hdis9 zd$)+n()}YBXBrrf_YY0o>)6#@Ya_Fho%p(Fk z227zDJt325_EeJ9JlDh%cnS8q45Wjo z1$250+if!GS#186$aYR5r$ClDS5}KCKm2Nhu{&?f> z3Jm^-##yC*R81w!7-dU^wg-!?f&Qrpzjzp`wNNzqCJ%U`c=@1V{dyrfCl*BwiXiy-}Ad0AW+;hC_GujrfJ-_(% zb!+W<*8n~Y#d71sbvcM?mo73$S+Ram&<&kKC`@pRgW_fapOiHOxE?D2J&^ z&jgAO$prl3N&;EAz$S`cai46El}ikTd}9<3TotEJMfJW=z}wC+sd&{&KI85H2gJ)!y# zdZlP|=^@a8b{UCbeFjcDVV6GfH451q>PmNApEsC!D`!a2XbxEPk0xN@a3IL0x_4_z4mo=r+H{g^m;*Xk$YgGSQV`t_R?U!TeHp= zMY-IBZpV%>xl^4YMkpW`Jv7W#syer?j)zT^3y-b*HuAUeUW zfcOu5xB8G;UxGS4k))nwppyGAd?lpUXm+!>vKZLSH@2LPEk?mji>k)Fw-5e6k2z9U z>`N=%1H4GY8g+hF(U4^UcIfm-L03VPUaZQm=iV2MZ$S^iu(|a7mqwJ(*A_$3J*aWE zIs4xUmY<;9+>j=A<0VbC1?%Q}TiN-7!Ole=@@vIT2Ic9Wd64>lju`AVJHCk)69{-q za59wO4Kwg?4>OetwoS|p-Jmin$!26>V#iWM8-3T7RPifHx~BO~s6|)|)_fC&GzS5) zGd&`aH~C86M3a*=4qT+wFhtA4w?L{`ec=zXr1mY-`EK7Qr9-0PO%@D#jUuGB_GzDZ! z0su$!@bGA|0Q;*I35u?ROGwtYTO;13XP1zy+K0uI;`pXTcFTuamA&zr%OzG9vspG_ zkiZbim|CdrZ9$kcpF10X7X4E4onGE2xu)?r@xrYxuz%-{C^Dh|ljzfomK1)iWa_^fA zO4GrU^}ui@R)d-QF#^@?fz^bpsGKYP<|^`?yhZ$LJ>&jHLz&T_r5`P>xHlI*VPz;O zz<6JD*qyb7!L)Hd3lY!F$?RNJ&_E_^3(Aiz$v{Ah_FLJPp>t^$+2$*74OF-$FGkyf zPr^;IC=wyfAG+-6G3ZfuvAv|u1p}+P&pJxj$igHUO%&JlXW$ly)Y(A2Tp_7w2Duc{ ziYwg$%lZu&8>xInTh5r${!abMFg*hWTu(w|fc)~) z{91k%c>|BB3P@ICY3uVrz)l?NpBc z2MslK@N^}Ua8!zOCsx`2^aY^MAOrfge=>e*nZwPy5q{gqnmndlFBj^ur^u$Wngd3` zc4-rbt>>blyNxOC1!kfG3>c=U1aT?afsR(&!53JE?!17cCj#N5%#Izv+*4~ zVVjv!I1+LRaEjbZ+)A*Ez;J|f3VhnY0Frhc)x5di0zmqs%;ezm-$a`r5dYHssH)X* zvQzOEz^g@xsec9FIVOP$ON zxWOg2eb*C24f){?`@ZsL9qCq7M(3;z8%&tq#Cxny$!hK#I|FdJXV6QasU@K2Sgj;f zkOJ8XWwAR1o?Dp$b!&)g^1R&@%RR#dH-`60$sWQ(bx*Sji88vweI7y4Bj7LW?(oo2 z1~Z;j&+OQBmS=Ph8GbO-O%n^{DjK~TPX9U6vB7Y|5$}=!9EoelnZLnfnDm~NXKHRO zfj5Y$=TI$U(>V883@4j*ObE5n8nJ?PVp!B$tp%6qW%ebx8PoHW4L~5=S%U%4zDKLI z@X-a7a4WX5hkOC8CJPvo_z|9+zRdALDtSydb6G(SG(NQNhX&VAu3}y-CvO&)$+qJG zBk&mNOno3}1$ZDku$GWO9}zw9uBvr#4%OA*6s%clvTOd`dDzS^nRH&~nq>xl2kSJ4 zm*OMIBZ50TrU$eXeh6GQS17HCdifLxpPcWd@%Y)NqFZcu-58vhe4DiQ5h$PUJJbgH z&-Ehah9&`1YD}{AomCX%kk|zf?#zX~^cbKMSUhl&{rR_{wB^9hID1TcjiqX&7Cjd@ z`H>0o-F#j%nn+m?r0N|LJTm9WrBxp7K^bkL6K4Js0rhIqy>rjvks4Hu4k;KfL3>hggRu2xn8H7k1|eK23J5B|q_-u)vz znY*HJ*dza}8@wk#s5KFG-5M?^2pn}NI*oi&rqwLcItAj!uji5w2dz>M@_9_&P~$^N zDkCPiCJd5vK%f7x6{(W>+yoo^Lrz|h#o`L#Tw zw*>(@Cl&H_OonT!CO7mp_J*03=^*#np*u&JI7zZodK%ekAmK+-jYR9ELShAAgz4D1 zind(?ao2pVWj;z2*1Bb_OKgs0c7A&h4)fLy0eH^$vc%c))})M-Yijcb@Q-80Yi6EY z#Gd-m+JxOc$@s8kaS6DNIe%LMuq@>ikQ#2Y!8j9W=NEZXCq-N{2$(X*gvr@`w7Pt@ zX?&{-N@bR85!I5zBLF(CR9@ujIoLdTcigCsx`^-S+u z9f@_4^&PozkHGVO+IwZEY#&;GGO?Fd83>NxU98|Lvx&>5wFgeiw^{xYn^roL;JBO? z?QA;8BvwH(n{7D=7vN2>{e1>J2;Y1ldSzu&;f`&}?wL9o?pTtYPz0tSGA9-hz&O|D zL63b)08lnj7-jC3K@IO5|6YUm0lbxnjR%wn;Nu+4ZR?bGP$1>O^OSa!7qq#N2u#EDZ9u8VYx_MvA0)~=WT2^tmNR+|S zqZ|@L)%GO(%I};*rKEXU_^HV?W95IoW=GxkwlF!-pC`&r`BYqo3RVw{& zLPHCd_Z-&)jA!O!+-?=jBO5=?rGo0Pn}| z%UYUMBn~#uFcE13(BUP+Xe$>T*@CXKH_=!QYTml>NEqw_QRWPlE@#Z2JcG=hhMvMbnaW|N@ol!1zNx zOY41ohPveX&QRz9lB|oMvSR6fh-OH((-NRe?f$%s0zzJdZ(xqD^8Oal>u`+bRUnnN ze{6NPQ0;P>ssg0g6ZS;ay;;}sBoK@a&qIx+1$D)Pv8>oaM@0Jxv52ZGafA!q)XTH( zz+Y@hAd_|9NVXvZxr#ap`3=r%c_o4YYg+2Wt$eAp&xXkJHXh={8;#!?HI3IThffeG z0J`=a_o7hncsXPOvq$hu0Do=d)zt%%$yCGEIs_c$rl^J$Qp88F(uqkj2&gGJpH4QO zT}&D_|FE?9&1z0gw{e4>^tsl>ZWMj?YC(s{YG2ztU}_-&1R0eo)4nq%Sy_$-&Z8yl z>@zjBjYArLB;8w>K^9c%4Gvh-%;%MV*Y7*1SMI0u+>=lFaO0zoan5SyZvWKrRJ2Kd zUuD-HzY5-wkX-C=ngm+NQOc5C6~P*1HoKa2tB}!_5BbMrugvKJz}|i^xQe*&)PN%N zLLVAolCGW2*St0O{(cRfjtz=Cxa0}Swnkz*W80>`RNzTcx*r<7dch@6Dt@$uHYo-z-hJuaNH)>NU;P`^hO}K&#D?}sjl;mguAk_eNXT5YF?~qiEM)u9%z~R&Ax``kW57QlF>fl)F)TF z(3!Q4fT7;R=3|lb6`pifDYgn!prKuFzua=Eab1}Y%#_z5BisNJtUlVD#awPof9h5VwOrwMjHs| z#+10zW~d@nVekPG8}3SjNWJzD8e>v3cl+oeDQT)lU=XNONzGB-&ULhN_Yl|21&Qgr zH>1thVSwbMzo!OzN~iGM0-1}rigPhz_iTo)1q{nBsLp1%&2jD=gLxR2C{)ulCcCpZ zk{wTd?lE-p?BEUXyF_uR?)W`uQY;m#f18bR_E7eZaOs1bs^b1u5%i)RN9{E7{*A#PN}$tj~hKcDlFJ=c1@_p!ok4$VCZ{&_iTG!JZ?CNuX zo5Q7Wla^tqq8_7whC&o_UVlje z22dQnoQ&?|#<>lMUX9$OJ7`w)F5B3J&r)-iD0ATx$_1~_5@FV& zX7k+$PHuGR>w0&NYV?%0^vAr=vYG&WE zEWsJcRZb@!vGrNQ#4t z-r0Xp*`#RH@-DF<{0|P16*2rNCVJ0d#MNI4N}~fx-?lb*%ijQror@{%Eb;n)`@XZ( z5vJvRYg82UAaMAbslVTNpR#^KCwR{xK)TgGj+imu^=+FTvI@Q2@hOjSy<>BXS)<%3 zbc><9tTR}>%JYkXL7+@#gXU0evjbxO)lisx0Sm_0ZgdB*A!d&P;Q++Pf8sN5fQZ>G zU5Hy%euVtsBaKIv!*@uD@sh;R4hrQygS@8M!xqSiU#yQTI3s53RfL8!-(S=CMxdUemNL|K$|~&`-RywU2@1?H{Kx~evSJ+Z?b#^>aump;(BdOm5$>WWK=xT(qXK~|YOe5+WNR`p~dq-*GUnDcv3S#?;4B|YX z44tuX?g7Ao!I_@8gl0-sdO=<{WMG~IcB70HG}nnA{3a7>+ui{T8=|fK4S&UEC0%KZ z)-!I`H7~=MFQ*of8LdV$yvklb5`F@a+97abIJ9+1yOgK$-{_|2c|pC|S|HFfZqEL( z#sVXLrxr%gnBsO@wBT^j+oJz}0B&2YdcD=C)Xwt0TfU}qlHu#hxyX+yym8j~xx;}+ z)BeoZpD>h_@G?;)wJ|utXmj;K$#QvR0rR2h8a+5 zfcH2jf7h_L@kSN@G$D?qsx*#sbrV29~eIKyx@T%gjmB57?sZN z%NR;{cjj=PA<+3Ki_&7Kr0$e#F9B9%(3KM>N-oUD3c9G_OGz>Z$6AP*>i?e@8fL8GOLGnb5B8q&-8jb}2uJ@3r^9ea?f% zfocDc;=)tYbxk>LBcGAEQA$%+H4z5j<~s%7tS}OX8ol) zAW?cWHn?_}i5`ip=i0)rh){RQJRt@iTk$QOt*x#CEJttFKg@ZwfSU}ng-b+`1w57Z zuX>mG5r7=Mup(K*y~S!#Q@j*ynNbZ^GNHb3NrUWLo>w-6Lp*ce@Q~*ke@Kgi$0;GN z=knV_L;Ki~qZGkA8}fagcjpHGVjk%>}E2ttNzy zda1$F8{>+syV~;sGX|h4Lbz75(wZi)?*UPb|D^BFfMP+LR|2 zqD8z-HAXyWa_4JpR_ncB#mB#Ode`MaxJCvV}6ly`DmtbiHqBJ=(85*cSno^@H5$ z%QQAkn^>X=7Ar-1b|CqUqNi9lY<<-9VG&>Xry<8SN}aca{l`skt3pWZQCjqa{A!~W zz6pRJ`~@11JDtz>7Ua{^!T6~I%{WMWSE5l5aRI3b>Hw?b;Jz1KKVft16Y&Q0PZsPi zu3!Iyzfl<01K`e_A=A)zusbJ5UEIr#ZR~#l91#(Ho|BeG%%2nYcXR_9+vk@nX0!UN z9?SKj-oQAd#Fz@}$S{*1H^?6Qu5vCq%>dym%{tfy6e_ozR!%Iksc5O!MeD1>H|rT7 zM`>q=t*Rm{cxJeZOfe`AYzQw~7G`YE0(4XLDues(4ZO)0mAWolVy^@LAnY4C(XBBw z`AsJ**|2LA&sKooy#coXHlfpVn(JXu`Ilx?&oEse&2?beF&af*B&(7yE8ExF5*3z8 zY15=`SXU1$Y^i)4@^HMs6Oj8Bkf^l8@fP#JQ92>mU3LeBF z&pllC7;bY<+P$o+H?3tIPtqEu!8uO!(?R6KV%?g5$*etR^j-{g4_Po3-9Qk9LL34$ z41lHNNLnnD^1pKeXH9k`&+8inyz5}-{+oWa=NcnLf-V~TDbOX_n;5;RDdlIg4NqSv zv>WH+!zN;Xi;0n{5#34Jz}$&PcKAdJ6gd(l))6*ag!FjXn?_JsI^}GdLckC@@Mj4k z5bhDwx)vkgGK{br6vHWQX9F3wf8H$O=I5ImoCX@2pHx%^-h>zDfu)sS5pRC~jyJm%hh8;EL;9*I9sk<>);5)b8VWQI}2ykdnUbydc zCWb#7S-`D#@F$DN-wd;uuN3{N;gpk!Dne>_P|mgn(C!hnxWV?OE?`XjpJoloSibC zq%*$`fAZQ1U|llk$#;JY+cCkskg&GRCQj#GByla$_2klgD+id}N$^9(d^)rVM{y5A ze%_lkcCq8L%=--R^-YD*Ypc;O5$5dd*k*b`L1&MNb|SHPJnG>HaLspul}hPEYF9dD z>F#(0lbTghNQQUlwA>*ra+Hi46=TW(1q_UG8R@}gd&cr1{uN)NaUj*>vm_OTlj&tE z3-VVG=<^;4T;EUsW;_E04k6s1Z10|FT2#W}q0RvRKLEh^{z3@cX&PO`0k-he$t7v)Xbev9<0c|gGr6MxU22{n zPz|h$qY7kYv3bt`534GDmvYZ>fhr4*e}Iv{0S!}urpdI&m{|KPfe$f<5H!IPl6a0i zSx`K^oul?<6X>&I<-o$!EF|e{y zV|+|qR`H)>KJ(NTpR>(F{a!gTCned336nuy+INx?4M6?sRTMvMo9q)C;{k9LFKy+_1nyjzF=K0VeuLVmG>32dPI|^$b1eu zT^sKV+lfP`hn_-kx`ODMj+H4YUTQki*C}CI-{*SN?)I9&<`LfaG}jcLmMjc2$5kM* zUUe4$F^k&{olrj%30*W~dssS@E6wLkMNF(ekupD`{2kWaa>(B1<@VfTfFB&+8z-;J z40NtX1PM(ic_bed|NKNz%by+jS-re3GbI)|&R$oE7RdPCc~Pxn>ZNYD44=c9Y7QTx zfm881oqYKodou72QO!v#0(H3vMsLzdHkOvygY&3yM!}@m}7g zdY{lLl}F92=)GsuHF+VM?zk4!@Tef&gV@coIAx|)kB>%1;YYI*e5(@Y-qnuBlR{HA z`l!PBN#;w`ov0XOE^7g)K;?)7<4tSaO@eIYX+n!eYRPWQZcxPJElllLg=%A1+9vY{ zM*M$Hzn6Z#rM7!fuf?r@Sb%A1ElOb7{Zzj+$>ST@<+1k>(jdrmFfnUFC0HU#g>@4= zY9SU=gm`ZC)A=j$mP8trBzJ0K51(|J`Sr6A&w` zNd<@1O;G-FkRM5ej`rj9;~^}Ni{O2>lgXDomLh(S;a@xs^;Iqf=gR#OH?72^;KUq_ zycFs>0!W=s9+Y)!N`+@(V0|}~U%)H6PLm)NG+STmTqs%BDD{CL9@d0<)`yF?;jBbX z4I+NTA8}W!MUaERBh70gA`#JE!vq^u)TEZcB=LKuE$Ht3o%3|#3{k@zqk*Isp@Jir z2ODcr(bu9DM=q`Wf-}r!0@#=YBEkfd0_dlUN$;DHb%fxygNdPg2N}9rfX|q@xv}^+ zhQdSx`!=wK#CKGc+cYv>%OMcGr*|}^=c-(*sm6R5DPQ?#t_H>Oep3{$HCDA}GcewA z%Lae;h$2~GcRmtME!Wt5o!9|Sy&zHyhGKTk=?Z)ETz1?s-0ueTP!jVoQlj6h`oyz^ zX;7m~2tza^!oR~+wO=P~n3vtTuR~f}(*JniWyYxk$EJ4%y$Z{zqhp#xM*=wtW_GmN ziQ2-Y;Eq~|-t!}z$!@m|Puw7)A{jqqt^<*13E9FKq8nDO$9xP4X5_wx#P1Aepd zVb3{5)rY87@*JUL+P6)2a@YLt!D0sL;KNX<>k_!%&$*MdrHd% zIr^jM)96HbBdpEc7-E_sC-ZP;CBnJ7l0`U0y%nOdtWqygyW`KI^yF#!r4uhCdyD4O zv3*ti3tVY4LyVmyDQ01}JG~JAZT0SpQIJuVjUu%J$vIzYn|)GCqVSzL3hcub^gL}oP)2%iUKlaL=Lg(<3!*QWD@tuSaVo_ zl=lfs<%hYE;+Bdt{q&(mhXC1H6h5B|7^GNIhzYZF_ zsOGu(sM*?fwEbp~CSEr#T{F2RI#R=M-Aq{#z&*vpsS@jJbX6;mEfGVgOninwq>cwa zY{7(`%wOX?;(CH}TBGPocLTA5p#^ptOS=oSIe!ROaY6vxr>j1cRw_w|7OdDf<4a0> z6Z5kO)!vrNh>R@va1`&1plF$(UN!fF##bdC5cwVRF`$d+HE|*-G>q7-<&PNW2>WA% zm~>~=$?!oSSj`ER@YNP=m)oQL*^P!(iT`xyG8>m3$7nnvKD;wJGI8O8YIWB-K%3;G z$2;e9vr#FzMmSV1_R7+?tN*UHQwpEtT+d}5WYMBu>jC%9R;WRL147=p!I%vvdVQWx z$^fsh?Q{RE19}(10G>YuuDFLhFL6i;W;@0rJlaPShei@mM^cg#Z8@O<4pNo0d~JQ;o> zJ9!#7@k4lz(zj)j{P@}Pj=6G0V` zN^E(a9&{9xmfNA;(*nwubRRipl+%^~Ny{i(1wfxg?Wt~GJtY@U#Bs>5@#cVs!?>F; zZC6O}@w|#dY8e7^nG~t|Vl%L&Nj0>@PG&57V)Rt*EG<~Hp6@=&(2meLtc3`DO&+yY zIpnVK;$}XFif;C#h*FCqg}RXivBp^CHQ(sl51}rR7=hDp1^aWRhqB6x9i_W~c>5G% z+$lqnsM6dJ_1TVp%ctCWFeN%{?03w{?Exf*M4?79$mAZw2-x>9VCoR1U85LR-t`;3 zqrAzA0>G>Q1&(3EQ51up3u-h}JK-=$Spp&%1bQtG56oU zY>s||`Qg)pnLi>P{e%Dz9yc}J4Afivb$ytJ3Z35$D6kC=KghIWkSV-ixGW#pW6dXr zR^&u-UIdh9*&J*W_^Aitg@i?rTx4mS)-m*m#p&FwEM@-ku4>mn`Z?IH*z*mlRc$2V zY;zz*#6H>xe(~XqD)No_AHjD8F|0}cc6m=#dJGEe-;=*v1snO6VVEht35Jtk+OTt+ zKhQB$d=^Do*Cnm^L|5N7*zO4$zGl(wB1df)cxI${X!jc*EM+6Ug0e`IhtX9GhZM8? z9vvi`v}hBVx0CbG28dXkuZ6a|@M-C|1X&VXVt+ur4V?nrD18y>iwNOAZApgEuP zoBXUXrEytS=RH8BDMa5L7$sv+OmuCZoUYpJyC@XmcB1<8c>=7y}+5i{=}=i`4^ z!{?O8f{AL1u9kgOqT_Sg?5oP5jTpsUh}t!07TM}QYiGo}Zajf0M7X@i`bITlP76ex z^M$$)9K{oh-&-75i3@dLBA7;X^Xwig zg7VVZBb9()qCap{y5zX?y!JGM{S-ffbx#bqHl|B%OXHxg-R}jarD4mVu?G@ME2iX4LtxpuqecV1MIFOuoj3= z%4aO={HIuTn^ZkU&2pPxavd`VgvLFH>J`D%TTrP_dY5oq6~Dbix8IN{QX{~asCPrQ zitu3pJ^=zs9a@b=UJswwgw6nb>{p5Q^uL-Q{w(b%x!4j$NAMjZkExba0zydIB9ZzW z2c>ZpGjQdA?CTd!>9%Y9lU}2uGLJlW_k@FyO=34HF%{Jb?Ma_vJgmfU^tq*juM8Pu z)+*p)yJ!TAYJrHKR^{_V$Ts!Nk}-EU_)AR zy56mEz(Qu8Sc6uScO1F09CFIEhqNofA3{C1R)-~;h|s7CZ>jM-b0CP@e}*% z;(e(SER5knYwF&MgMPikNIiq47lpB@iC9;+fjC^N1Y?~lHv4vYXx-|ZA!|DhTM5v@ zlTBP~h*ddA0Q@e%CZ#|)+9b%dD#Z^D<9~a96ND+Wn#MIP;oRcVXPxKae$hpq!DGet z`W+~qm5+Zk?4nt$Vsb+Eay7eZLzk~hs~(&JfiiKQXXV1)j;kvO(x z_F%1Pz&}Fy`Xv8c{O-T@Q=rPd>1e5-l|0NEwWS)$?z^`?Esd#5VOh2l=TvcKBZb)r z_T!5zebjy;4HI!em-pNiMT3oPgk^zcxv5jWq^h-#GQ7LuPdL-10iFQEK}9L9S`o-& z-hi4Mky;!|Yu&T5K-+gnpQop~h+hgb!+((@F)}ybu>K9mn#*H{WccXSVGeno`)z18 z(jE*VoR|S+0I#i8SE}a5(CiFPD*f8{5t2|i)jZt7@oTNwMvyNFo5#kp`dZcBKm+dV zTw@?gwvJ%!mEa1rmm9Z*-@qOyBuFy{ql?ez=Z}VU8%7RwC|N?USa8im->VhCn*O<*Xua_ zGlgjuuT7uHU9M*M!=ze7NEAeJUKD|a&D14HV4$gR1k;cA+s5o;>V6YaHChZenB7aT z$1~gfgZI+lBey(Hook^Mb3Sq_6nDA}2xdu&J9^Q9`IaM-NTk~`gDV&KWsuifr$xPT z;3SZ$MgSn-@|!W_S>Q}%X~&U(1s;WemrQym2II5d-My*rDpb<_Kr{?cd}V|p>9OOb zz*3*X2(6fZkGsf=7lyT4hh!J_FlRwZ4Nlothkv8Gt+@@s=%DaJB>h`XWI&NKzsuY( z7z`tJJPz7ZF^AzKJg0%J5Oh$0=IU9&pNX&m>`U?Eg#hd|*98h~#tQIvf-#A% zd)-qv7EeipG6f?zZ&!h}YOCIHEi-ru<601_ppY{jQ^$V<^!piNQK>QmsnrGA&y3}d zh!s`jWmu<+MV~d*&a#`JX`T)U&qQkkLr?7!Ve$(IB0L`B2$ptBtopxh#V_t)AGfnX z$5{F{Dvrv-Nu_}|v!K$rzm4gqpd^g@tDV3Iopo&(rxu=ain4uu4F5Z5hO6y}rNY~R zJW&lFkN_P97UFXR@oR9yG>m2%IU?3?UJa}C2Ne0)>Ov>uO_W6SYGm&Y8KTzU(j z5!H=~>rC}-gRQ`#+#fW~{O2t|ES|f~O@EH~z-OiITwV$H?I!VeoSX~ZBE1V!6FQDD zMr^e8N>1&Q-4}!Eo8+3Nxtc!Ayw;?vA>51N2A-;iD=@;f)_az%7XxFzf1+LXY1$vc z`3^5v>t26`rTzKk+he_%-@wo3-r_d*E5z5a9-Ch2o0g$MmwLqDT6^+&jAEZaU)b~f z;l#ymIvBbmo;uMgHpad>zf00+yrT_dhM@%HCwo{PgqUYzW^i1lI+$XVy$g#BzGV&P zH;SslgZ>$wL1RLL;i9ZFVClv3Z=M(00rRf&i^ei4&P#CAQ5(c8L-lF7#uz|x#4FiR zRVM`t4}B!mI}`+HqxmC}D_hiXMhFQav>1()1*V;_&a+@4&@vr@yL;<-ynmG`lxEYJ zqpH+F?k$$lw!8DiOSs|yyt3M+N+0QlJmTS4*7ge1&V}YFv&^Ytv0iF2sj=4ddo~2p zz+z4sOY5w${cJd2HZIQ&rF}FS6SZYLd43+kKL*=akJzl|h}a_?Dz)JlNm~E+Ee;dO zkp1RkD<*XMs1cEC-@Qxfx!HaU{+(?p?%^hE``{|LWUccXM}P;$Iazq1;nr&bldKsh zl;+QX+Vnq5G$JP3qgq+`{6uduv9Su=2+aN)r;Z7kX7=NV)$KcMX(~l<{fgr$rU1z4 zSwrNU;uOY4Il9MQC|NgmW=XQudO4Qc+EIxU-?GquS-Z@ARiHee>j2AyW@LNHWb94kVq%U>dh5$$aSI^p9N~{jqE1RX}H<;|jFfNW43~(s5O$#Km z<@hFfGJ?lnDq6a5@LeB%S9DWas>18W%T#T#yAUE4dL3XsUOSPSFn^|`aoHoX+M9LV zF0P2LvlTm=$V3N}l_8Y1E3)t`Kc#cDJDMTKnvqphQ>h+RaPb%d27(+WvHn-mpVX?M zObMGS!Qm`jR0e@dXd8W0&xm*cORYP{u~Rf)KU*NVRV&F05j!Tl&|Xw8-&k<;ilv>6qM{IYl&Qrk>g<>bwqu9@i9B(g zjd{nJ0;JrA#>^_yIA;!m9QoU$IgAW-brP=dU$kNBP33Wd#W2pvAG!#W*=JIl3XJlbx)bFS8g?m6} z=^Wa!P-!_5Xr&t;v&Ilu!x5~r9ey(tN*;N0Q}=3X-%-ZL;x2Wv>Wj^_pFjx-KBQbK zyKs4Yo2s4J?=o`yD^O39N^d=(o?JY?n+#^)Pi%kVY$q2fI8TyC543%fX>)~%gjY3d zO;G8GpT7+_IZQGWSaZR4HJif2e$dChW&cM`y%QKBTf5ke5sBJKc7QGp_CDVRRZ{wD zZlw4kJS6q3Js3#Ygs-ORdO z9{mvRlyQj(;9p8C;Q$Wt_9Q)I^CYPzZAyLF1)AG?d{`vGJ96|l7{z%FQbw6#l^tYF zD|>VO8Nck&Z8C$8{y<>Vk<>9}84c-8D`5(^BM}WAN zgm%}AUu6@B@W5i4miBiCRA_3H`wcUD(X5EfyV4YgEVm%zVU2pIN-k>$F8u#J0H}q{~Xj7w}WRD<3v37A)=|29r2wp zPq}stV$(~f%;1c$^6}zI8Q4@mgzPkuTZ;XS@O|bV4;h*D^b( zAPVs=pwzB8}18vzEifxtNG)WK~R;I=6R#V$@7D*PHz#wo;`}}(4GtzwAQ6ivKN979p4rfIQq*Ik;; zp{h~#2VB$j4Z7+3KL8V(j>&eG6p4u=xG{Fu#IyPj@BD!de%+&RDPxW~9*zJwu7u1Y zu;fSA&9HU#(p8P0+-CF01tX(bujkrh62*zlO#69awO639c8ZwQr7qMIGePtay^rgX z4}n#EW7nN(`O*Cc-=(LZir1&Sa(_)x7I)}cr}UDpW${7Z(iSQFzN+W^n3!Q&l3P3v@T=Am5}=PD?LFRPNv_JJ!i6e!<&*x$Tr}X83;GxM8DWI#n_E!C#k@r_7Ef)ye^5*unwod3YC733K(8WPmyR4}(Lf}VW0PV|b?>%24ziPWJoy0@ z+X0%@wI!1PaC*Z_2gt^}E#FZG+c|gR z^3dWJst(Lzd!`=RJ z1WF}!P|3(-D*#&Ta&gkZ@v+qxmwl~1v zO0|vwf?F?$Vu;ZoaZxE=W@=-?L%+0?4^s>ArJ(y!J>p?PMb{E7ux8nn8L13t-*M|o zQ6&^vErJV;HREnc6RlUmRaX6r=O4E>S3D(npg*6_8xURr_m$QKYVI2#-AUbM$(i}b zf7-G5%0edN(6ETg@=;ROd!EkPCdG^+bDvURiwvH_Oeb|? zyAteToih#L#Hqb#oRX&fXi+;-z%_s;ZIB_;G^ZcB`hN>EQT9d07_5CpWPnpO%r1ga z9N@gCO*k_+cmrAh8ns+^f{q$N;1tH&{&v@^C#hst_r8_U;7Fr7A;cc*Q0hECCo8^q zsD-v}6Cn3il0}*UAH7&K2y6JEMX2SN_wJI{fPy;Uokw8P_tNGZ1+hSH_N8IpA(Y2b zFVmpXW-UZV`bOfY3U!^90<#1=5OI-{D?Jn?Q?wIg7O>3!TXGL9jI?ay?hnO_M) zF1mb^98pIZ$H=Ot^$#)?iMRD6IQ2A{@+N=5{ELmbgY)fpmkJ;6xRN2V=kPzIH}Qzr zfC?!|8d|W7Nlqh&i&uS)1ZoTF8Dx6>$rRUspk3)1D15XT@5NeQlhE+zJuyWBhu}K( zih_^(N0~Z!^>_QZMAP$ay^%JY{dzj}5+5FlC*y3Fh%h><_g%GjGf*$FU{I6us%3|p zUPv1xuS}E%wmto6p8Z}W%tFr(pw^d;fL7Qod#>%J{7$a_raE0ncR z3ZdQj#SRh0yv+5c7h8k_xEt|aXeTLB)oH7NfSFQ9hRfPFZ7I!wkC5N;FuI^Z=u zdX&nnyjYT?EPPje`@|DFjp~*rz)}+=I@@K1s3%SCirTju+DXbx0Ux>(Q4Xf1bI3knTlFfwzIP{EO)+WgJ9 z#`u(rI1$kIJN}h43WsEfbtV4;13a{trb9A|e&hGZtiMcN=n9Y%G0{F&=&qiok-ikY zvp8=Ci69Tu53a#lt7S26Ln0A-VSCz2EVCa+xRZQI9;&^mB8j%&td&xc!*m<1NBmA{ zJ-|(iu$N_3?vA^N*z0x@H|3NB8`%y@QjYFB$!5uya%tjD{}6u?Q5kf^0raXLt9nz# zQT)p`c&-Ifka=aYS>xX=y@78zSNDi8V05MW8{V@m-I^gxdeIPGIzEU9Jf2#+u1{uI z%>e;8+VS3UH;vr8`gV4l9Dajh5$`&{$q4nioU^ur7sde2Wcrskbx@ZZq0sGVK`YC} z|NqY|OROHf@AlQGSi?{2%1^>;I8-Y?h4(5zeUVNtw|lQz?(hpM4_)0)V$-nuFyxW! zF>FkN{mE7#1i#g@nYr7fsirn;>uRsg4wswD2MHhbHxARiYGi8L`i%AmXbxta$Ev#+ zJnamdn!kxYo{b(df5(Y`7b#>MzCD0|9|Wv>C3Qn%fhheZKM`xgo>%QOgs2k!{wjnqrI*T8hCXB8f z=lUrY)}i?XBPH@I;f;Ml`XfG7nUVyRs~uyfJUtu*o&v&-RE_%o_oPIm!{b%qfi!`jHcq*D=JAD1Y2)tycI6uIm%a&yl- zG>@EU7e(U{7%iOEO+iLcJU<$$7zeDe4{1G0wze{-|o_=>jK>Wg%c5GoU?M400=O0 zC}z`&uSt2!BE1aicA zR>b~wh;C7=xz5G3kT%gh;@&Qd{n9Nak;B@i+55_Kvck01bX$l)u4A&Dti;I7*nF6% zm4itYgr#qn!rZJgAtM*rwW}RH{~FsfQ@Yvg4bYAI$8o<~pcmjQvd+L}%IrrNso+Wj z*sWSQ$E$5eA?5~}hhBNW1lu*E^aWUQqH02!G>h;Z6;*tE{siru%#%J^A3y^{;0a=! zyT;C$RB!j+riBCQ@|&}jW<2F==r~w)tr^a{8!G<}e~L%ZfiRp^AT-#)ewJm`ol_XB zn?rP|-zQju{bNHb82V<~z6IE==^Msm^bB4a_@wN_)if{=f`2pm}fSHCk*EdOa_^$ZJbc(jAcN{hjEg~b5G{N^-cm^c$BL~i~m zVEaNRT~RaxF1RJO^1o9ZfytKU@mn|1)?E ztSUy@SB8Xw1+eM!@5_k^Umu^2ji+JW^MmtNbWNc8_!%p%XvaAVt~=_sh-fb29X%ZG zx~YkJwmA`iZwGJahK=Tzc7mCD_U!M>Y~u2*{Sv#I7Mm-62$o{xtPahTvs`<}B4}6U zWzZ6Y=njaLp^ypBh}*Z+-eGUi8c*9Q&k1R=id0NT=7(PAS*Xv z>S%MP@DhsVY^g9Ww`%zta3R!ATDkLu?!pg!h-X&_w|uxP!FF-+`FlEo0IcxkB4k>}L^lb-Yqo2c@gaEMpy6M=h*)0@%c?zBmX1zR zMccwKp^)r0yxqblQ1W=)$TL*Dr8e<5BkWtszE-?<;}1Y|=akW18jx3(tF);2My?-* z#!A2U7a`&L8QBxpZI3oWCP*d)j!N;xZe=SX(oea25H{bKDd`7+;*ENj0Fv=6YsI7N zG`%;AyITU=5JW`-flGYII9_l7sk4T8b@4*m1RIzmkURB;cvl4KI^e3_2q$s`FZN}= zugFxPbQ~l*c98PrvptQTJ8EF5a`_|ilaBrOwF}qoG~f%xQ7LltT9PhA;eop6pGb4_ z$bc_1Q1^c8G-GzEd=7DMJ&u0OcQ3-=32DJW!lN0u193Jhk9hB|^nzYRM3)ZlJnh>L zb1*qaWxM6IFPB*PSSF~k?&26t-8SX$610?T^G&b^oy)`K4$FvJBVcw=){&vgLwBBa zqLocAEhwEUh?MY7B4ee_V3VWhg$;&fzmWw-?#ju*5=srp{vqoO8;t$jkH${WK>9b=K8Lp2fGZF(S_*in0wlKHEm@V;*CEugv7HD z_;9NUmoamxy^gAt4+dYmv$AcNySM&L_OP3(4o0p3eWX^Qeh##++0!C`_Ng;rfHH+_ z+_BRMk<`j-1KFqJ^E=+dwU@g22YquSG{{X~Qbk^Sz@p8q;6I^{W@WM^JJMXc^trOR zDm`(I7rb?!x+%m4AXVO7sK}yguF4%N0}#f=C5f7JB6?7D;iiZlG2dx$JhV-F`KVRh)QM$TY@`~%sZJ*6s^WqVik%X(pl zhu&+5V|pP5%<=RkKO^CnEm{R1Ckhcyp{QF863%Pe`wdV_lP4tLDwhT?4gYV;Ds3~( zG$ZBhlYfPC_FO_E%gkm@C2a;;=hw5U#YM6-L8`b=(-KvKvCcj`7LS}co)mMhK68ZA zd0DUe>;6&QE z=ycz%jblUY!QpX*)5(?RMUz%0IJQ7#I2Ghm zCd$q@avo8Pz)i1~DMV@mT-&>O^~Ki`AtBDz^)aHyVr)4qiC1P)T(l^4q-xSOMUhIdw&n?2&BNlgima z87_jPRyDq#{cLs%U(g+SV8N3^?cvb(H85jt`D-_PyfLYw>}@c+S}2FWf4KJo!A#g> z$3GJ6&C_GH>LE~SOY=ys>4UHOrkN$ctKYQ#*jo*uMS_%Ra9OhY64%TkIQ-68&;afz!GUU(X#0@2b(dGLqg26T136EMFl)E$8#!y_;7fkQPnu!_FRt%htPVsEB)B-5!WbA(=#uOni~Q@X_nx*j%`ryrav`k**lW%tNT=@KKw7W)2@Sm1p zN~DwuXcw6WC~Fa9j?#cci>>s@ZX1Jk4uyG=Wbe>uJj14=ivy4c1+z+GC5DtUZ2P(e z9a0j7Urhj)zi^39hz<-=WGAhRTM^jKTQx*ylB`?qF1UvKIKpMH+$C(BKHKWCo(q6r z)zNC%sp9&@f-?gtzzjaEd~h0{JsEri1#09aygx|{;3-6eYAF1RrmTy3Qi%6_1WY<6 zhw8zg0bP@~G}bm=19){J*<;sSC(?PDdue$T^h8kQ?lr9l5kk#p&Yi}?(Uc7& zl-QhhIsw$#+F&^iVjWRrY52?0s{=!x4@;p&CmRRa!I=gQ7D{eY-H)$rJm0US(?z@< z$eLQ7@~yv!GQA(67%lrSKgd~=aqS}}LquVMy%0&2$#}^yzTEUh$^d4E%B)=95X{a% zaAIaK0qq*QQX2gO4Hc8)y>!!u$pBWTJ>DKr%IMm+Z*@yvxL}yrZ4kI?{-C@}0&;-^ zPrksxbi&z#PR7&3V9a!ku1N|t>8lS}=9^^97bXMyG1>gxc@NK(XiI^auL6#E*788F;iF&G<%{`sE$o3??3 zHX2S(V-*a7*e9HZC?*xOSnP zXdT-bsWph?wctKq%Ns%j5=G^wHX_2Xr4Q3@q}zIPS9S|Gq@`$NJ8h8wu&USMU_Hun zR$O~uO3vGy(7QN~X7m=scBP_5LE}qL|GuR1=rdVfFL^=8=zE0woQp9m1B%Zfn^|Ys zT8Qi%8+WZ!MP+GqCdkZ$HEzAR#caL7G=~921Z9E@blL6XAYTk-_ZvNok6tc!2mt~_ zYm=q&Lv!7P)Al?3dhESr{TbYHJq&)2>vEz};I9{Td-)$g#WxvNQjwax-MHhy$+E3N zumqhw9q$uv)7cMV;A}#;|6oWci`<$tph5VxH$oX5bML?Kt=d4YPRvyL0hgqmizZ}* z3>t$($$Uf7mZ~CE6YwN%>F3y^N@$O`yPFPj$zhM*9`9q~1Pddua2LQ{*?4@Xn`;P9 z0Nk21%C`|78i^yn4qq!L-p^)gpT48Y^xW8O__Q*bmXFt^{3=p;Oa5%VI`{Twk@t!w z-I4{CGXQj!1j&qh*4P0Imwebh8Y^&_9o8DtdN;R1^xxG`_*?t?44-|*PMl#xV}avu z1G+mQAIa^#jH_bq*-Bs}8`ZpgME)^cm`q*K5^oy$uY{=w~ z(?$3_nGNx3qrw{&0KINryHX*F34BJ|%cae4AizzThQ(?P*Fym@HF+Fb#0+OO$xbq- zJg=uJP;?kuoqu%Wy4Tkm1z?D#6Sasjd`u&FUza8IM}%zziFVja>TZm&rouK?+7?Is zSEiKL9L`?aW6s4yMbu(M$;sSimE8ze!%y7T%wceVqVE;ei6GiPjArNiS#vm1AP#2@ zDr(80sw<=C%Ff4tHkHJ=LxC#TagWra!BU(?o2LdkmQdzWQ62zniiR2{WNk4^b_>yL zg|z!vO-ePE%Uqd9(9DyG$-Sk_>#d1f0}K233-3-KUbUjQLJUKy>3CLZltIHOb8iFm z&6nEmFhG%TOuNyn4D?M~h8_0#a=?6uFn<*ds%ygqiRne4day>Nw{$EsFyCL*=d@piCDIS&wm4K33O+fcEY&;Hup0YmSw0b`7l|G^I>xYnHzJ>Lnv zCMK-sa%o~wDcO;yf}GH&Rn;@ z6Zkh;daR&78@S6?9LAgwK6Br2xLP8#1UT<#VFKJ$)OuMuK*47W&tS_t&QCfEsZa&> z$(%Fq>VBW$%JE+@viC4r;hZC1$@^xX(f+F)8KE9x?kP1u@WK{*uh1qk|4Y)W(j`(~O=V~9 zq@vP>N$4|mVUp>F1wT8W!V0V64dz#z<98S-78to}7!A8gpkFg`WVjso@0zXO#}ZNb zIq52dtlz{@)0$(}lpsw8R2--r-k9cE5(^Wm14f#UF#-y z*VG-~BY&~1*#L=zTG{`S-rJ~7-3q;ZXMUXlpjjA^;csQhu@sngOs~ssPK^ar1S)WG<+$6OsZv_1%dUu+kA7d$ zuOk_$r*oWQch;`DjPGgVTjOzmG9vv49wwcqg6QxQy8_D*b1~etT5p? zpWk8&)kLzab2c25tJX19JYGChuGm?zGZF}&pGo1C`!Zg%C9Jl^COe$*WObWvNHZVJ zjWT0{^4F2fGXbwDJc>bl^_k}TYmBGSq*+Svy=P)h46OG|(4R{3V8U-I)VM-<)I&`S za1iNJxo`O89h60Ew{;1sqi&GeXl2k=ege{oQS42d`2+1rkM1?$B$d~dWYS*iiW{!a zPCNr^@i}e|mv}9k|1m)F3OZ3K4_|87Jq0p>M=F9%qQ$V%&wC2C&V?x}q+;C1kEMyp zVa8gY`qyJgeqX3fXD%erF!|Q})`RxH$|+eJuAHHXmhtM=7OQ0gya1#Vq*{}H4(z72 zfeZ=FXYa4*&NZ>cEC?lDG<#}9`}1@p1K~B5wYkUubE5yKPiez0jEoSW-~J(gII-i$ z)@vKq9-q0er${C+XD7|E2tnS*G0csFYf!u-aqYLxfKZ_~`Hyv6Y-*EJ#@ho;V z69E|v8vk#wV?f<7(W$J+?2~zU>n)}Jcf*H80X86&+{H7~&)mfNohdvRnFO0;PCkeQ zqe%a>Y33go`q$g@_{RI9l~yq=YYh zjA3(n(KQ!gXKy;qqS*8{^~LPTKTzn-3hFe%>M%_pG-OyXy7C6R=60Vua2J@JeUSPG z5|MmqTaYm|0^dt+9?m}P_z%_^9WbB>pW0rrG68STkvaey*7YjxI*J6MM05yg#LT~5 z#H5XSIkqz|6A-Jq>ZP~r@%|ZN�*2NfiH_uWcmbmTic=OEQTW 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 z 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

u3Q8-Q^QN&T_CO$8SBw!_#ehtptEOez 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 b95XUC7e2!Ec#W&2Du5t\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global 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 WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :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# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n\r\ + \n/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 doh\ + -max-server-connections=20 use-doh-server=https://security.cloudflare-dns.\ + com/dns-query verify-doh-cert=no;\r\ + \n\r\ + \n/ip dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n} on-error={ }\r\ + \n\r\ + \n" +add dont-require-permissions=no name=AM-ADguardHome-container owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-ADguardHome-container\r\ + \n# Script comment: ADguardHome-container to container | by @xdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n#/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53\r\ + \n# cat adguardhome_container.rsc\r\ + \n# adguard home to container | by @xdenb43\r\ + \n# tested on hap ax3/RoS 7.17.2+\r\ + \n\r\ + \n# enable containers, follow https://help.mikrotik.com/docs/spaces/ROS/pa\ + ges/84901929/Container\r\ + \n/system/device-mode/update container=yes\r\ + \n\r\ + \n# MAIN PART STARTS HERE\r\ + \n/interface veth\r\ + \nadd address=192.168.254.5/24 gateway=192.168.254.1 name=ADGUARD-HOME\r\ + \n\r\ + \n/interface bridge\r\ + \nadd name=Bridge-Docker port-cost-mode=short\r\ + \n/interface bridge port\r\ + \nadd bridge=Bridge-Docker interface=ADGUARD-HOME\r\ + \n/ip address\r\ + \nadd address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254\ + .0\r\ + \n\r\ + \n/ip firewall nat\r\ + \nadd action=masquerade chain=srcnat comment=AdGuardHome src-address=192.1\ + 68.254.5\r\ + \n\r\ + \n# USB flash drive, FS ext4\r\ + \n/container config\r\ + \nset ram-high=200.0MiB registry-url=https://registry-1.docker.io tmpdir=/\ + usb1/docker/pull\r\ + \n\r\ + \n/container mounts\r\ + \nadd dst=/opt/adguardhome/conf name=adguard_home_conf src=/usb1/docker_co\ + nfigs/adguard_home\r\ + \n\r\ + \n/container\r\ + \nadd cmd=\"-c /opt/adguardhome/conf/AdGuardHome.yaml -h 0.0.0.0 -w /opt/a\ + dguardhome/work\" entrypoint=/opt/adguardhome/AdGuardHome interface=ADGUAR\ + D-HOME logging=yes mounts=\\\r\ + \n adguard_home_conf root-dir=/usb1/docker/adguard_home workdir=/opt/ad\ + guardhome/work remote-image=adguard/adguardhome:latest\r\ + \n\r\ + \n/container/start [find where interface=ADGUARD-HOME]\r\ + \n\r\ + \n# ADH available on http://192.168.254.5:300 , configure before use\r\ + \n# Choose one of the options below\r\ + \n# uncomment lines before copying to terminal\r\ + \n\r\ + \n# OPTION 1\r\ + \n# Just set AGH ip as DNS server.\r\ + \n# /!\\ DNS FWD will work.\r\ + \n# /!\\ No device-related stats will be gathered (all dns requests are co\ + ming from mikrotik)\r\ + \n#/ip dns\r\ + \n#set allow-remote-requests=yes servers=192.168.254.5\r\ + \n#/ip firewall nat\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=udp\r\ + \n#add action=redirect chain=dstnat comment=\"Incoming DNS redirect\" dst-\ + address-type=!local dst-port=53 in-interface-list=LAN protocol=tcp\r\ + \n\r\ + \n\r\ + \n# OPTION 2\r\ + \n# Forward all DNS requests to ADH\r\ + \n# /!\\ DNS FWD will NOT work\r\ + \n# /!\\ WILL SHOW stats for every LAN device\r\ + \n#/ip firewall nat\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard udp - NO NAT L\ + oopback / local addresses only!\" dst-port=53 in-interface-list=LAN protoc\ + ol=udp src-address=\\\r\ + \n# 192.168.88.0/24 to-addresses=192.168.254.5 to-ports=53\r\ + \n#add action=dst-nat chain=dstnat comment=\"local AdGuard tcp\" dst-port=\ + 53 in-interface-list=LAN protocol=tcp src-address=192.168.88.0/24 to-addre\ + sses=192.168.254.5 to-ports=53" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-download=yes crl-store=\ + system crl-use=yes +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=::/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 interfaces=wlan1,wlan2 \ + lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.4.4,8.8.8.8 +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" 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=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + disabled=yes dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina \ + log-prefix=VPN-all new-routing-mark=To-VPN src-address=10.30.30.0/24 \ + src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps dst-port=443 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat disabled=yes dst-port=22 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=22 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +add interface=WG type=external +add interface=wlan2 type=internal +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260506/20260506220002-Diff-Config.rsc b/MikroMaster/history/20260506/20260506220002-Diff-Config.rsc new file mode 100644 index 0000000..bf90528 --- /dev/null +++ b/MikroMaster/history/20260506/20260506220002-Diff-Config.rsc @@ -0,0 +1,7 @@ +4438,4440c4438,4439 +< disabled=yes dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina \ +< log-prefix=VPN-all new-routing-mark=To-VPN src-address=10.30.30.0/24 \ +< src-address-list=!NoWG +--- +> dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ +> new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG -- 2.52.0