From adffa769660de442468af72aed9ccbbfdadbe21c Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 21:40:17 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 21:40:17. --- .../20260503/20260503214001-Binary.backup | Bin 0 -> 218836 bytes .../20260503/20260503214001-Config.rsc | 4000 +++++++++++++++++ .../20260503/20260503214001-Diff-Config.rsc | 5 + 3 files changed, 4005 insertions(+) create mode 100644 MikroMaster/20260503/20260503214001-Binary.backup create mode 100644 MikroMaster/20260503/20260503214001-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503214001-Diff-Config.rsc diff --git a/MikroMaster/20260503/20260503214001-Binary.backup b/MikroMaster/20260503/20260503214001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f1629ae1ff44b084feb8263a20ea18f4040feb95 GIT binary patch literal 218836 zcmV+aKLEh*sF8EjRs#Sad$<-i)0R?IR3NJ?P;a^b000O80004Z`T(2&Lm%h@WW&QQ zA=@6t=&)eK$j-B29sPk41}zBjxgSpE%?$Ljrqn((GZc-!aYw6bS{k4D*T>C3QlK? z#pRR(3B%xJHD0f5hqgRG*x%XS4)#ZVFYGivL5lG-34Yx=W}yZM@LU;EG05p5yMt#g zKS3g&lyxmhl>BYvkj=}T4lKEKFX}S=ya2PD!Nv6O3;Yt*Du78?;#a0U7wf}s{J}y@ zc&jyC%8^0uX))b8e4Sa#dO}dJ&W^hY?omFDI_=vwwSS3iV%fKJwt-$s7hH>Uzo{9p0}nn;+#bFIQwy)4=10{6uGLv}THG&LcB)u5cBwKmTM zc9tm30Og4jcCj6$G`uamm8@6Lr&JISbtcJMox}CL-=>6g;-8w*7^qbyDH)JCP=(LUqV--@T2ZIMAVk8p1hBa>3&JXgWo zEaXDawEV)e{i|~uru$$pPSsHvfJ-Q@4Tmq9UBcj3$7JD|xRehWhaVm8TZs4fVVs!x zOMEpNDQiENaQOT?;0g-8V7|Om5nOnBBb~W_?eYnIXT4*R2(4uQA{*ZQIpw88seCAT zU%4uoP41N3iex;TTm@mhh+0~aD7(URwM+9=iZ4;a7Ik8>!hWxI0Ia8Yuo<&X-~S^^ z-hHU723^KcfhRwvY*E=v7g{mU&H!$Rt*ZjOK)R6KKV#Hwb~|a1#KnC77KY*z}JAupS8(Uglyr{ zDAJX&eeJk}kLg>F9!?W#e(;ztr&mV{c$p#>WPVmu!=UG z%*WW;BL__OCEHzfcA%{EN^(1(HC~DlPcx)sDFx;Saf!p7X_XL{9j$R)UgucgQPRVS zA}G6aa)Nly)55*QOXSs1Hd%)jWnxzd#SyXGPgUTBZc{ojm(wFBB}ex>!Q$!=WV`;~ z)au3~cu5(Zk4RO;pz5b)FZw^Y%F0F1(&usONY%=mheU;|%k+s7-zdL1-UKm9_pLyW zY0d2wpa8|sy(tU)cTH`biRP;jDYnNX9J_))$16r!hA9DVB}^tmq?gyki>S3}2Egc? zUQPOCVycbw`}WJLxgcgds|wk{ zr-9w6@kE7-uAOUC&~nFad>75XqT{+K(}gjrQaTHaage&Shoe5jB=3eLeHUMxf^N!*dIs)*Mh?#E0K#3S`m7 zU?E5dorB9IQS||n`qaZ(CvarFz0RN_kjGd~y{pzbddbSQ>AJ^7n_00LK+6y?S`@YR z8TZl$gH{r+(nZ+7ZSn09_7CjeR#xTq znBlOJ7Sv92r;UrNR=ktAWed~kj~Ev^^Ee;kObqyq$O%_K5o}^@QE*umWK?Jc&8CCp z*cSK19CO26UxP2PMC`m}@27Vju?R`=p!B_pNG}Z!p=T{AVT(N>s#_*qT~hdE)w=O6+s{WA?Uto+W{v%*{y%P|Li>KV4%NbZ6*jo`pidQgYzv4y0LZ zfQSa~7`3-Klvb{ATS`&62i-~4sZze+K9V|d+L8NK6xtPll#pXqstoRbJ^53EwXf7p z$0rT4G=tQDdBd%gM)zRzX_ zK@t)$)%@(eMN5;j1bTTUnuCEsnUAPkC20z-Cz@L+!B50g7O(%;CtyW1q$zWgri^H_+lb`I`%?!Gg9Xv>_9;GA5CLTc> zxA{1dTTY{!wW*k}xidKUCbma1BsA;kakUe$52K)!SIWC@E%)E)7s(gV$cW-_yirfT zeqiafmvc%02BK{B_5e$#h|pxh!b>L~ho9pR4PPVqK{JLbcxlH+?=HJ1XRA6tx(D8L zM8VM{F&0EL3=XikQ)BeuicZd{UC4@C2No+zeslx+CrFULO!~vr`@I0M%ssgO-~ha` z66gP;-6Z!tLowRYrP{OUJ)2a)o14Z*zwR5WPb9^O6W}P%Kae7>YA`2wU49C>m9S34 zYPJ#!vw!E+->CqezFOi^eg8N#>NGu{V`Yrf z-D@Kzam`qlH`=ec4(wJPZHtW7K=v^6{!y%ALu_?qcE3-Q<4_TiNW(PBCpS_q z|IHuB%}aK&l)Of___YNj%;|wo1r-He%3d=sFEEA z;w=p5e-FW+tUW!@3?~$pWDSQQR<|QY8hZgQn`h-M2yfQ)_}1+g zlusb-7na1w|NF;r>uO$lmlxXj zEE7>WSY^;aH8z#{?wVRf>nvTJp;AZm#bxzRQtH0)6d8?Iuf(t~nw=0f97xSh>_6?C z3*+>_NGc8b>kfzBl5r5i)6T+}u!5o?GXkL&31;vqy1fYCKZI#W#3dd*g|42Plnxtc zOngO&u>wCswvUA+18B3Ri^Ub`1f|43R>b298NGCo!81pVwP|>9=aEMFVgc-U{TAmS#&q6+p!K z;A>72i*29xPjVq>xAzOJb#$8#kavR}eg{NHd=I)GYh+-}pq zn@1N&uXCtcogpq2BCvT&1SAU;ymkhGQHYN|gmp_Ux<*+@!t-}+u z+6GNeESEJRGHfK(NE$g0npcc zJ7WZDJ4vyjkzcJsIM**JC%?VU0Ng&XS;1u%w>O7hPEcz-v})KEp(@5wx}1RF zwXI`*YGYhbM=yDdKYau=Xa_7co3tGT!LJh{yE^-5ud*Y!On_e&3_`u#dWk@iRZI?k z)`IIaJGvgT;y#B<)0`XhiOudS0E(6F^i^S|ZadC`uX1r@S|wwbeJrJmU~9bQL^W=Z zdF^l)x$T;F6Zp}E;VJk90QK##cZXSS%P_y(A?(PHqb^9A+c*b%3Gl$0E{LiVBTFhH z-ne+D;V5#VB-ZN`x(MUkLq7TXpq}=wu@gV@g*tbLJJ^!J#Y)aN;iCyc%4WFUCLj5ZhcIUPLF+Ar4SNz&Kv;KO}JQYGQiUk5i#EU(HNywoA_*L(&N2B?t_<89w6v z&0wVB0@iyo>%u%e2qzP96Fa0l)ote01)e@>!tQ)(NBW=nIJ2q5XV{HY2^=lWZaqJ? zl?wh52D)sBFeAPK`n(pHMGa;}Sixq0mq_jZz2F-OclTT|mwgruFP5?Xbo)74V%j%d z3Lp8Q;(w2pn@q(i>|GvvkjkvB&+XG(A}y>2Y;FEP$LN&urZL)2XWYgi+>LhRREGPs zFIMz1N#`d36&&Xh%Yypo4k$bfR{g1$?2xj#jyInoyh#Yr0^#Xihkr#$h8}KPCTP{` z__I}9GDf?~(D9-`Kw=HW!+JB;nsUCMNY~|C{kIbS-{w7CkVh31uA;SB*zFeudif%q zfuKhu>_Ll4dkdbHim9Wln~;Ff)#X_-Rd}@X3|e8y;WD?J>py*qOXKf$f%iBbSM-gY zKC01aI4E})rKId`3?Ch2fU0r_dZp21+`hE0i)35TYupwx6>w}gIfOzsXDtSF?364r zX>c0--IRQ_bWe8_aWn(2wgFrv$Th%9X2Gk%f>PZsdZdV`km)-0A9Dy%^@~S>q9)cN zkd#Bivj5bzO1(gkF*ft<`bu6;pOmT8kCV-C)fuNR%~3Fxgb@b|VGUqa=L12WXjD{X z#z+UpZrP1(_ZkPsHJ00moEKv#7t%Df_jWyin_1gx#(=bLP#tAg+~COXX5F119o7oH z0t^K|z-x)B2%R;ExmIY1nr1F2p&L|)VHAc zF%kMyd;axAhkY8mrs(n7r1+mSqNQjT^ z5$!)Z5p-u6hIo&N={x`h_e3|-R^f}aehCv@;?lj+kOQbHd^RXPR{t;7R(1Q}MDFyH zPZo!S2?qNQp+xh~d{l&*QxKvGS+?N2uG4iI!G>PuW}@)M=!@H{^_B2@G}UQauD=JoJnK@xFfIF&HKcTjlX3?z@xR0K&~=EP+rb7^zOj z>YPR5#}JY{6BK6nJe1z>=a(R?OVSD116`8Y+D%HB^}I5P|1zP3>q>`^>ZUt@s>%?N za2}))7-4ka`&TUd2w#&Y18ksHV7GpPvJ(9&%fwj;2FLw*54Lutap=p^g9$-2(cxnX zmC_ba6_pz--Mh+Di+T=*_PWoU+jD$t-^Z7k1#s35$RF=DO1mbTgfn7yHx(?3XF5?-?gA} zR#WWe`ox<|3ZMiMTmrY$SyTi?%rQKb0CbMmwL#gC8DM}{7VWhI8^pd-%iTD&`XH%C zLVzhA-u6ZBW#2F*DU@%HY$WNzKU!@E;S*T%=>*Ya`iy2Lm~;*5tUCM9^`u)~YO%RG zEOaQJfy|@v8cZ;3!&0p7rsyj-^06ZuO>TFB237ClPk6|6!mwlvN9QBq*=wv6D%T_D zmjD(ZT6O>r5iZ}9884;cW}>J6FseO}Id5`Q2qZr&lEeh2-#Q%t3*NDIl$tKnl#LfR zurwhg(XYlL#LxAnu+~y+i2R9uX^_v)e~FvVZqGwAlI$%P9)K!RvYy9Y5Y?mL{JmZq zOfAaAIsGx|Pz50htZbyY8!DBaE5k|V7vS;EIk{r2#{mFc^5=Au8A|WsXjnYxLa)p& z4I9E9WO^2-pK7~dC?|8q5+SxY7JNqz-aKu@iZSRR{ zXW`0AQyGn%PpmJKwyQp_yykQ-A9h;IDfesLS$EwN{}u>{hGsFTjd?RcZqJUlJ2=-l z(2ISin0*zWT)`w<6bO-*=fwxauT|M9e)gc}Bf`k}t5gU&FUJp&V1dt!Q!Sg&y;f%+ zN^)7;zzZ=xsf&sut`4lEELzCQAV-?`Grw`Y-{+;BV^4}Q~xS0Iqp0aQp-mOISFlkfE8UbQ!HVFc#ZXSvP{%6 zYz!niDQR);El_USu*lj(@_x**eY}H@@$k?#HX1sD_>QB>*FgB3E}Jz8;|HN&ZEcrH z|Em%ziD;yM+HUF!{(|@U!kV#B9vnyQxcjS)pCShcXRvcVR&W{;+peikT~ax;N+eG? zb3Zj=h&1R`u;A>n&*mkmg%s z$aObFKHkzVnG=Wzw|L8COa=}B7jl4a3q0a$rcjgoJ(-l5E?j-Z`xGuj*Q#K7_2YPV z2u#-M>2U$?{zfH+J;r!qlI^=FvTr~T^=NR{X+$;VY2&@CE<2=0+sprlwSgG8Ua{;7 zP7d1boL4!l4WY!_uz52C^KBvDa9VwAwlvro;7+E~tu0&p51bG8-DxIPg)qNJy^iiX z!t!?3o|peM03BZKdNBD?&FLtqp38oUzED++8I0HNaw)sF2bj1v2dHEHo}SCtG~lmw zd|Dt0k(^Lyy1q|yn1!`PyCrk}#n}*(p=g{%h86%er7HYX0d2d|Xsf}4koQCbmM4%Z zREn%PNyU;^OaZUieT~0?cMZK)f1(%=hel&4h`ZUC&kWuU2X=Dl&z4pwoUAWmOJu7P zldd`CEAjP!nZD3xc>mqA*xPy2g&1-7>9-}abmmiUl1{PV<5%K zxlwCS3?j>2{91K)SeG$KJI=3CC?vr^3bSYLqPAdk;7s*GKmc7DaE^9MAoR~E0dib^ zr?cW?z869ua7r!)I7oMcA*A7;7n|CIFSF)nb;$e>`~x_yL_`@S2&e`+AI zayjfDYjCUC0jDsi&bDUBjj9@aGCfTARwEbG^I1#|27wX% zlt>!${?*dV1O;Ys&M+7i5d4cSX8E3hv2m$}!#v&E`?Vp$q-3!pFE}bTlqad>+sJzM z75C^YsP75c=~gua$fxda`W2}Lb*82Z1JInEQEeA&e^MS5_!b*|SR_joJ_>#l-eG#{ z_yn+-e4NVD#c&JGFUyQG&W%WllOXc}T=u1NeIgwO<3iaTrHh9uTM?v7)IooR7R zopG6!$3_hme)8mUz(CAFWr^~5i8I2CubkA5#A9YXk+DVm?zBr$Gd_GJnuhy2*bnS4 zCJGeaKwALKBWePxPI(ZKZ5I>6)HP9B4Sk#q$QY=D^kyNXDSNB@R44+fO#U!-ii5^e zmOub^f z<%R!M@UZRxAtqBuY=(xNZ)a#ODRHZ9trfw8^kI_@l zQZg%5jK~2B##;cvNPebJlqzuHrqg^JDm&d!gG^t8={}I>r5@k%X^w%MJ;u*ALV5)~ zoa-(2^3ia(yr-HGJj;m+ilx_eQ;&SeHU~8TPA#^7ziq|LjtQ2C?Kcrw$GfRJgEf@6 z`@7TwNDZ5LS6gL~){--N-LIfXaO;<;VieS$4NxAw{I{g)n8G1Q zEk^pIq8}iH^{V*SIVwV(o+Ug|P9f4hwL}#70=(j%1mWmqsiyQ1kuy?7+_=!03{#u~ zsdG*I+Ma!XVRUq*9jzzbEQzIB@(IgX#C~x3msFjg7nA1yhIhVD&n+q31H+d)P{)h3T22o`$+f1JgBIHW}k$ecJI% zc6S(DIBSM>{QAWmeKFCtZV(w<^?Vy~s+-XTM9X{@IW+A}-bi~!b2Gev5drSed<}hr zc;jN*8Ad(c%|ebt$( zH-mm(nM~JBt-5W&Rg5p8BAZB8f>&d(DAXFQg56Jnf%}Y?_T%G7j0NEa$As-fIx-6N z)5#8DOPJ^s%L`|2AL_F`tOKax&!?qAz&E{&>)QJ5?Rj7QD{dc34Yfm_%D~Y1V#D*HApJNdo>V`GwTaE zZH%nm3Yt}HHLotM^Y2hruCjcnsS|I#O>NPIq^LmMN7K|4* zVw50Ut0LB6%R`;lq(HV9>`B?ZbMQGw9wS`48u0<1phK5=_#d>CPY*i=YY6@P*mqru zv))?|OR02-PQdCT+c^aR2a4fPqGfy5qTCB)JNa4EPMs<<(18+ZPbm^p*wNb3cB6g; z$LbdmWaofvY67h=FHF$b{9`NvP7m_0UI+gt#AOT*M{Drf%Q*ho=ZM)4g~< zkgu_dd7BV0tC`FYPe#Bl&}E|bnuk?qM~}uPE7_x~QZ*_vxehgRD*bKo;ZU?3)7qR7 zKy6a$C3A6e2e4s}lY<75Vf)ybCMp7)k)nCmN~(imc-xn(A3V-L7AUVfQ>1S@yk!xw zS7WF_>#`v=fvuBx-N`f9sWV>4XZq(<2k)uSi3J}0uo&2x)KPdn49Y!K8!hdRzQ`U7 zjGFXPULzN5wW5uH_V>Yx9r_5f2F^4Y(New9^y+S&UH#yu;v8Xakca*z(j8veA?YmE;%bs)e9VD;3Rm& zOvnGjwYKxY^PZCin}kx`;FPe zx&3Z<6PUJ5{K0r>_5J0aCFq4xXg)7r!mqLt9~Y&Hsab-026z9jj$=4;lh<8WBT)yh z#;D>Te;H9gYJK`5+cbpW2#>mE;Rs&0Zs%(8DSzwg*IRy2C>`E>0FkgW6DAok8p=1+-9(VzL zxPk0s!tHo6((t+pOs~Pd&+DwCO#0vERr#?!ZHQu@=OoYnMe%C zBjjaeN^t%xdhWtswSf@MoMm`K&#^`2PTT)@td;Aq{9RrqUJTy)y4{ZR7DX)^0CVk9 zD>}QfH7WW~vd}k<&rX<4t76XnkA&|TkI!k^dZ+ktD{!gPQ}2T-GdTr8*v_m|2$>SP;(C+8jGy=ioiNa7@!%mPu1DlyXJ4AKMgJu`LiU4fb~|n^1fr|+7e2Ku_`tae zqRYx9lh-oA4uSSfAKRSJHLYP5%GJ$oKFt)6r|Zh(I(hLs9(hl>G#7-E`V1(PhQ8RZC8bul6H;J|WIW&X*#mrL|QqnQX% ziM?AdMC!{f@T}Joeag*}JfAY^>=h~@j;p>)v2Pj=C&C10Otz`7A58_4!Z%3(NT zG&b|*`JE>%2@t{iXEnf4;R;GG)Fxm8HOo&X#Ns6)86wy%s=nn;9GK(x~{y(MAYG8z2v7mCqh1*_O|UUvSgW>ux`lA&1R@)T?bqSRy#okxcxM zD}Vnaj~_!PhQZ8|r_wnJQ9`m#<7AFZd`oScKIcW%_9i`Q1N-DO+#Ng)R^rcxXJSh` zm_Z{2JmqSu`y<)aZetCsap|p3<5kW;mq8OrQ!l7hP^d?^?A-Zje=MD`nL7s&AZ?&w z#C{}pqUqie2;Rd86LP{5y)$rvpTkudE~sPl{n=RuF60^ znyj(q{h@0kW|Lxj__C7EwZf^`*k!v3gV(Zg&qCU-2Ubr|!(53iEvhtHxBdgG#%BmN z%Hd9P-9B%9{>(xwv;G=}csTZpS2q(E4s-vB3TzxH>+d#HivKag6Jj zqQgA|oQv{^vcmTUl=i&VnW9p4l;O5|*%{r`LwqEKn>Q}b859{UKA{;xg;m8=>~yt8 zWwc6ZNxF5{UBp+nCsOjA&djRSJomLCXs6Z@X1JO-n&JF$H$k|j{>9X@ITm z0@pK{_3qyMEotGEgI<9dl%oJrhb+eG9RU9|K;=N!EPb@{5i}Dfd!8PwXIuCE&~0kZ z#cbL^E%ym-c_X;o!f5z^*6s6Rz2uVZR-m_{6l*^=mbd}YMw+qHwx0hGVM!YeSInyI zrgRgDgDmK(4@XWD=he7rA&);E0w;rXz(FGGW&4-PPv5ws7$9ivG zq_^VVb)i~W>SY1ERv6e4X#5PrwOiH_=<-Q~SAa-*VNp4Mv{th7orp>8S`m!0X3m0( zeBqlc zgBDh3uuSJsO+t6zZ;dX@5!tt}iB*e#9PLhS_MW46Oko^h0=aTfd)mwl0eWxnyAYSa zN+Zr=@urD*^9^*KvCuz43r~=IPx3fnx@`3sIc8L(HLr;eREzEZnmLqR^ARUXb3%R~ z;S2d)b$%B(1WQf!{J31+CPw(fbpX|U!bL%&a^7ayNqNDwm@BgtmqSXiGt7IYATG2_ z+o&g9@vOV~RGI<#GR;xo*MGMbn@v$}1#PLtlptn^y~pA#b94SkAm)!o<|c{?eglA^ zZZhKN9XSxnT7YmKZ!G7U9rd2cJeibeA9{4yI8H&8(b)c>)yTbc{B~C87JK-7+IvDL zP83Gt`k;mSESZG9QybdNnsM6|ygtt{1%ACu0&g-|$==CwFy}$``4K#)=Og$FRrMSy zUGQdAOyM<0e(S570t9&FPc}j^!?&?}5+T_-W9yn4(o*+-?~&)VKRyR`aUpZ(j)h$x z{y_-VpN&FV895<2@m|)f8JaKv9iR+Fi*PT0-TsubcV!VuJf^qDD+gWSjvn&0#W>F^ zKzysN6^*nPFq|{x{x_6wqi>&A3>yP20n-BZ+%CH&-$lp>ckRe~ega++*0gmN(2E=_ z4N?%uPWiBx<7a3$n!nV3?CX*1QihHnR?p~&lDlTnR4S|3M8OcEbcG>^i+8+sQO4u4 z(bZ z2DpLtbl-0CdFiC--);k$b=b7vdPK%hjB$$aDbsDbM?jm*uZRwY!-_5HAp5eQmc#=5 zLHG(q1ah)KeRsIx8$yH*R~y**B|0hw{JrFWf3>mLcyNxa?py0aF$^K193O6s*c+c$?)9BR*#06LW{$kwqCL7gyDc|Oq&Dmuh zzF%#^ZJ^Ryk8nx-d7SxBPyw(I%CQOVM7v1JGWl9RC)zyIuAp$5oSUqzfSf{Dp16&N z*V^yMs}(8mnbZU?>HTJu?Ga7bU&{f^f!G7bViz?yD>YyrUyig$cZy5_R&tao(^w{% zoV*duqxKbphVOM-uFf3aiC|OqF|XIjU$10ks2*QJiaY@ zhO|Bp%FO9pNP_i-k>9l(5%dO$F+iwnh4$Ac7gL6!l3D^^z}4ASG}`J^XB7z2Uu`}? z4B*T3i~ZU4hOoN_jDx(t`BV->dIBR_YI?ErMjqO%>I-^csUTob&<4R~MY$5qpON8I z1D(W7v$Q>qe)sa%cBP7CTaspZs=l)?Wrzu9?L%Wif0zKEc%@JEX zY;JDIHAf?i(Y_Lr00Xy|(kTeB_@1o?OT8(MWDDx$61>meB^F^mMa7)F&}?xS0oA~i zd;3ji$po(u1|@w>JCBw}?HesmMsvxzLgs7qPr3V$27UU&m4-5qJFUOU|I*F0cwjUF z>i7U=s_7vlD?(b-`y{EjrUSc-h=#{kRms9L&f^O>SBvJNHz8jte?Oi7v@af}BwMQ& zLKZ}MxvgwhYRbC`M#sBY!1CAEEE4>6 zOWebPzM%CZHD5n=t61(x~1HG>d1V)kR6OMXo5rv?Y(|ZCbSiVe{AoOFWU@1BWnaRra>UGkdA!lS)z~J18pOGT zi@Eqpa1E3}N79Gj$o1BGS?hQM{c75b!1sqpCi!xBJAvo;G%HSQ(y%`Q;@?tvo`xcl z#;Qk}fCj$TScT6!(m<7NyWQP7z;09obkp>QrL8B^HF=6Q=jAql@zVS2;!c-dA2Sb- zP9RFzaJ=*n1^~Fqar4Q8v<-OS8=cS;DYF@ZZmdCRv67IH9eAJe7DvGJYQDGd!23?c zsP>Qd>+F&VMPvRNes({D=no$90*f4TslGVEh;vqb?V9@LNULW}(~1s#7O#4%@sTs9 zY;qRETdTtC>nE}1vpq2@Nt^-N;Ua9C9cEQ#GC&80>D_p+x_K@Eg?u`{dKq*T1-cpK zwAsQ)a(ME=din&y1abjxD^*CAwUKY9dSP2kG~J4@Ondj_1PW;$^M7?oTLS1Y>y;iQ zt6zY=Gvqf#qaw2UT<-bJNSy;b>@m2^2WPrHmaDclO!bX5MX7}0GU3>$0{wHL1=+!1 zf*nm{X`gu)!c+yf?;zh`+d!~I<1Ow=o$N28v!rCmNh%1)9ziyrDQOYsw4Y3@2RkoY8R?KjEPokc*p zVRpl_gu7LfiUXc1cQyctMQ&oWXx*_pJx(>lVQm{Gd;s#Ot8uEg#fR z&x{Gm09t2W)AxXX2hd~9jgjb%cd_}Q185^P2714QNAj>{iw|l~QJ}0})!2T$ErwSk zkG{bV;%ktq{q579nPo*1W3(14TvZ^6&1bj`{I4%-uRVeSqZ3mOu}w8!a^Y*dLLRd^hPBI|zuh5h9wfVe(OwCToMIXi?Z@A!!GB z*7P0S8p!65S*33t;=0Vnrn_vgyk1fKM34Hdko2Z@KuB*PGjb17h=f80K;;JX``| z^j;aLPHbf^-RG0DJ^cluYHU=6W3|aRVs{H;v$`OBEu@xWOKQiUlL^gA;z!QB) zs`m$ZpvT*wjCaJ`6UlIAgwUzxEJBk>?`Jt0#Dd*xrMLZ@7I+3@e!N&IeBRk=LS6`V z+XFCO`~&XF(*P=%t`RMX|9%6WC+iECdaNuN;LyAJlYA;( zjO+G7yyC5SzK92?ZQkM8ksT-m>O3+Apuu#a_~pLvec#{~UW`kTZV_Fybm>SOW9yov zlA8xM4FzojuV%=gVr+Oe)sn{~-yf!@Ay3z^0Gs=BuEUR|H0mvhosMphcRtzd>wA>f zFne3pmo%_^(^-CM9$kdHg}q8-Bf}RZnpT%;QS5$>@^*M!3Ew$YP@4Rp^n{l`uoCV; z35mwcO=g$>`~{XxySBE?D#t8Z$&uP-uyB>vJPlw0Fc^3y{o8ErZ_x|Tx$1@@Wq}L= zqLt4V;m_cTp1jhAN|Mv9&DKEPYOm!%9^#3XZg!mvgnA$wAPiPP;!&NStIMgTe-aUU ziM&a6E72EU=!tn~A-v+xC+^va610bR95hHi!HYRl&h&nkeI&7MM+LI4zC+>i_;rEI zzsEUA`bRx)in=C75!)la}7Ie40uV#O`dKQm%vP~MRsW8^Gq60jG=QDI}R}i zfs2{40)7x2N?F}3dRG)h_9!(VkoJ|F{S$-Gj&awbeACIIhjmeaz^`y2jvZ`L^fBkn z>AFadsTMv@4yA&j+tJGco zFZtvw{X3@PA^bkSx<(}Wsu@v>l6uf#@Y%=*sY2K&C5mh|Mt^B@vy^0c8FH+SZ}!3O z`~g!uOtx&lIfzfEG&~CBBABt=wrFjvWh~2-am7|=nOHDnp~hET`F1v*sZ5f5p|qMS zNoH3l211xyEToZLOcF`dZy0Q|S*9!HJH_6;zP6BhYW9+tn;RXK(cma$D1k;Rm>O~r z*y!%}{o=UE4mJHqD_*Oz8}4RKmG2wzeatn_FkKkjHkkwh<9~^JdxNH`C<4(TbK(W0 zfRs2I9{M?jHRr{xxpoO}YYpq1*nD&&!id|a`=0o^C}0sXq~IL{?`ueAEg`(WpmQv| zSu*|}#LMQ83?SG-STS#_?5jkS8P|5=>BH{kcH3ntBD8uU5lmmW6*aH}*uvk3++jjT z%IA`Z-_wS%@VX<$GdvYkva;Xrd3R!>t})Pb9`)5~zZvs>jolcy)z*!zMiyUgb`LO) z1}2c!f;faOG1ka17(k6!xM);58_36>KQm8DHK2H?l43gw)!R5x7LKY9bS7*XuJDn{ zFx&i|>&iPYsMMvf@2?EDpNK)(B%VK|%gkCGBdR`w{l8stC_8XN?%xQ4|OsN^F*Uif!8kn5hYPzg)}94Jif686*CT(~qDzBrVArQBDZ zh!?$>b`gQ!C%zZGZ8etRp#!IX8`1J~q=nD>2GfHgz@w$Reg$JQ7c>z|71)rq`6+eX z8~T~EO>gr=W=R$DE-VsYPhH%xv8ldgb1H7EQSF;N0xV1JhO1gvX%sTy`+j^cK{qy6 z(ucchiNBl-q@$(LA!hBt^11`9lXwDOBFR^$0(>WFNBUT=gy1wBdXrUYu&+VMa+klm zW)I=R;U?p&$*UsbDIv)245;|r`RgOomG`g#D>d=2(-K>r>y{AXd8WrjM5G;R@y{) zVHJ(ewu&Py72>q`=t>m7Op@4^O?;Ec`MlbhLLjxq7}6|&R8H!F07Q!gAz1!li*VF^ z@MsRq^78<5w8WW8?M9E`p>~>s_%4F(4wHL5Ni`P?LK_H0BF0th%U@eK%!j%Ku**vj z=Ol!$-Ou~RBG&lrLYR@jFiT072@HeYc+Y_;ie4!b7^B-M)<`RVR!9Ef5#VH@p#g%^XpY^R!SkmiH#9W*!11?&&te}<5kl4aL;z+WoQLeta*ES6}6ye zwDBTB(WB;mq@btPauiR%)v!}+Rl!mh9XF|3v%@IhT=<^W>CWBZi`t{1AH8#Mt~1PT z*U9XDKLEh6ZppXr$$IuyMv-JZD@>uwGw_Mx@&UoqhT>$tDE!?MOl5OS zp_fI}?wObk1Tzts2B5~Sa4F_p>t-~fz>Dd%9ISHj!JnrF5F2o*9K>>iNc;=Z)8>NY! z^p+@)Eg!&KkE3h{)F$luF9|czT1;NY?A=#(9c{mC!9h2dX_PQIU`^&Lg7&*tfj5h6 zfq1_)>vJc7%oEvqYiJo4GUgXUJzAg<_IyY}El~ZV0}GZo%j#c>f`;9$vZv;cQ54|d zERG}YcL=cJyT`Lfz*uA};38a(f1&G17o0R@#f5!x5#SYAGywEGHWV7JB{L#}R`nKKE@oYqG{|6Gv+cUlrmzN3TczxwIvgsy+2;(d|XUYw) zR2|DgqVDNnv^e)B7a7j@LKM%cUa7ou>CE<$3fW<17Cfjn?p@0#wVFd>gKHsNJg^GX zl%>vRQnTRgi11@Tf!b+OpiY4bulDo8jpR)Jrpa1T8`GA6;*9waxX|mgOSl+=nNT)= z{wpHipd?KpUnD4rj{PX_Ln?y5UOSDUIL7?}Uq3kRiWB3yQS9SZ)F+18IWJMcX90Tr zgA1GbfaY*Gk|yR9n6~Ls+<+Y!0Y1_$#g3_tQ7*7(CRf9!69;NM7gs4f| zc8BHC?cxqn`iEY*r}i}KAf}2PAWl>>JA#M4%@=^wK}`}w$r5k1&h`K;hXCt{@>Zgk z;o)0F@9?-ZN|B)XF~Z^{_XdyaLAGWUGsi`8TpZC*4KT{Jlz?KoJuml05y`r1=p|Hv z-YxL1SjX=q&lv%6PWhwuBHC9ocF4iZR9&5FPLn&62RQ>QX@7I}D9G!PNdzy%Jy)bq ztMMxA9J*1K(rqilBhBJ@;d%Ff2j{;g1v(T37fLoH>wyd6OhPKp)&95!SC;f@3qF%% z?|txqC{)|$i4yv;6W$Ov7{ipuP|5Fy7o|8##^Rd3R8}|~yAF@IWJd$qa zJ%F~N*-%`Jd+k{5yPUj7@8oj^$5Y%`49Ww2!Uyvq_z1c9rD+asj%rWz^CUr19VUD}bkKJ%Ru#%B@yZZ@9NR`QQ9@ z!#tiO_skGUJ!Z=yN=s)+DKsBb*PLU+7F`W#)pvT6Qe7IMigpCmG+pv)PH?ezmKs=# z&`uHZhh&bZ=xMP}U32FHRu42=9?ICod`Gshck~cYEj>LCw1(f%A9$PVUSlwzT-OUV z7F4cWOG*pP`)4eSjxnd-6pPK*b3C&xP@R1>rxM-jZ8!Gq_EcLn-j@vcWYgBErUP`e zvC6LVPf|>Qcp&Y+Z^iK{f+L~?CSaEze*iQt-RSHW##{!BN69&xPUP(7&?a&KT_)fq z>EJ*~faJGmUx<>z11rni0#oEiCbIYI#|c?=tSZHHzh=G*b0H1KE;^<2bmIuYv}5m{ z%6`*qqtQsdoUaAjRUsa=%mxoYWYDGxUi5BEu;4HD!HF!G9`64^1l9-&nV> zx8*V@jlMrnZ3!35Xywu`ZxOfvg*GA;4`?kv7KbHhn2uuC-M%3FCz{c<;o}A*8YBl@ z7#vcTp{DLQoLnCY9~tK1N5Oe5mekzJ)rBGh;>CT0F{dLOo@PJ{#LtD>G{1$!4i$G| z$az{kK3C7ylAyfJcCEF@J2osm1qF5^@rJmVIa;zF4yQ`}i23C=|A z^etqftFDin%PWT?28%v#+Hno~?|H7e&;iZ0D-Bm>xcM?=y1w-{-=%pKCg3Ii5#kR^ z1ze|Wb)RWN+aBTvSAV)UM{n;FVNNNQKI5)bQkXK}*(upm9STrJwEdxyFmo!sMVC;I zzO5Fyz()N^($V4FHmX0Z!DbZD>CB|=(5_2dbiSt(R}}^5CS~T7Rec58#AQD-c)$Iqwt!rX60(UOPl-pV^i)YE!Xv1{jEA0Mu}zl5r{4F;6t; z4s1?sOB}IPxPB+hewX+wV1TFwGwTKPa0E#9xVuIOY0s*WB4a&FsK-^-fH+q9#{2UI zRwD=HP`L+PLNf>9FoU$+p&Hnqd8nC%MY|Y^{_q!z0nc*wr0rRoVOTfs%VKne4=#PsayYjj8Hd%tpzB#P7|O<%`+G+#>V0*=Q|^6HyYvwe48 zz@mI|siwUFMW#8QdN~Qh%?)87f*bg*N;)Wtkuw2KtD3nw`eoLl(e$j8f7n4(a%?Hf zi}w?`N5~t2l@$cS&%I1xr9#8aU4E55=(>q=7@VUa{Ogmj%}x%m_U%i?z)9;tJ2v}- zZy>UjPK-H2)-XGVeQa7h+aSQt)eV~h&5uhbEeH??bk*!BY{eqn?AI551Gf(5LvC~Y zBjQtLKhIaWw7Pj+D=#rLQzfOX*zSZN{j5xs&cazKF0_Cm5;$F|4Jk>C%lYo5jbJUe z;3vMLW;vkGk!hYh+|wLOfiY@aEiXev7Q1WtV2HcM?LJ{gj^Z;N(L6Nw zT}SNr<3!QKjNMsiMc93FPSE0SS5rJMWf(Ydwy6yds8!5vDYu+Mc{QbK)^gpg7>egU zRdKM8%s;C@PctO&Aq8f5B~gVLZAN3iiU@W&c`4nWf~^mo7&)5xfAV&RTK_S?VAufu zP|42SOc;tW~SZ@ zasc&oF9G41{b()Xa=d321>uxAB!Xz-&@!^Dqb-J5;QK5|M-O$2Ke#-l6<@U2^WZa# z)rAp(vF1Pcy6eQ9BLkWNtA;)mx@`uf3y9e@g8ALQKN*nR)+NOB1wY;bJ7Y}#t)|yo z{TtvQQse!^+vhN`0K(8zP>sU^!9kw#Tc0OO!!Nqg7-eeJ?V8s7g&$Vp!8%6#r*QDWAm+kE3s#5{8flv_~)#(`l2(tYL)>$lmp%amgfUJ;P12# zXm!%yrX;W_JLN{aBpXlPozda`e+mPFD6{Hn?Dblld`B}2 zbUa`ZA1wG?KonpURF<49>(Awrdx>|d27NP?Cspu|UujfpanLDf_)mUs+kb;>m^7gh z2+p=^M{5t zcs9Ov=oVKwI~j@Bj%TS>I>HGTzRZu zn&K%TgxZ&N!!s`QKLnya_%O`ta;6tmTH?DiUeOsjw$37)6 zr!UgjQO$&U0=QPJ*5XkmAk9^2YyY_~sA%*@KL0aT5q_I{G?4B3ktrW#Bqq22H2D@u zG0R74F3pnjWrCBf(cmECHnSBnkZI3!7ks?E%+M94QD0&ZJ3X<}8*vB_O$(mqmK{*f z<6~2%@!Bu2*PqG=YdQ*D#1|ZGP`jv~#PF9T-NY642YJ#c)g$pb-0U@8fcuM1u!j76 zn~I`Z0fDE7oExzDc9Kard1aOQWB^reH+Mjaqfy<+OwEYqesM4!cU7)1tG3IWQWba+ zjQ{ZHurWRKunS8iCEa{8oLMarlr6!r&Ng`KJ7_B82KV7t7$PM^i?KvHIhEkbX!gIK(xOTdKqMPQiB3RwgvN7aeCASRFa-U%kdf z13|L07tH9;J5<Q7U)G1w=j{VhnObDX>k(bHg{-zvRH(cq4dlELS1ZpcmP?@xZUVhTeBK?F0>4u38 zl@N}ur%fn1&%o+kL)GOF+F_s<JRW$m0S*awt|_h{%m1&# zDXmWr)9AZemqrXGPasX;^lPB5oj#>^bKX;!PE7knF6M1s&UTrWR%^CI&#|6M5145) z1p)hl`beD7>`p=*fQhcNvd*Vq?E<>N^~1Bqdf0myKA`qr+LnUpO-A!|B}H#Bd#l7g z5WUCjG}JiRlPle&vuHJNm)f->QKS#z9te?y54D zTVP;|*chuv8V-f8f?=n+#&pd7o5@4*y4d2L(@@(A`_bk&EIo%WK3snoeWVI@E8naleacjMwMDo&CK)YfTj!@n>G5hLt+kn&s-~;K_503 z)8be75cmJvCO=yKhpYO>Ry;dw{LWCWf-(S!6l-s6p*ng9t5dQ=_WC1vE4fVYHe4RQ zN6zU(t{bAVcST)uLmIph21Qw!haZ_r4I40k)McU(F~c6?UuI0;%E-k4JScfFy(f_Q zWh7dzEWzmYUTiqd-h$c=uxKFVaSiw2$6>B{*4wAg-Pjzsm<;aDN9NO5TAImY%U#F| z{iDa0J)+3kRW#30l`_FSQ#)MZa0}5lh8@EOYFb4VRZSgB2roakHjP&wi6bT}KcdIE zXWcv43zgm8*ub0%T|DLfuhlCxL&B}Yw&*Mt4Q(3TZ1AmMK_{Mu@I9Ih5?GUKejXez zrEyd)s3(Ap%Fd=dZ0-)hr0eOc+jiXNZ~&>g@Is6ReRAvACx4e7HA$zA-B_Q2Gm zu$KkoEFk^6OQ7n&50uB`$e8H2jIPNv4m|bu_{)SKV1#7k?(NYr(6Emc0Seq*a0wQH zMckvcyVVqeL=wB1-T-xf#pWk~C8;iCBEbj~MjoNeJC=Dovj+*(KFZidixk-52BB5w zr-ZD-)d#AcBw5Hd6wNsfU;8C~CQq0wa#o+(<1D3`R)?fF6Up-8tyYDEH1ryHqSKp1 zi<AV#<2xM}U*dCB0yD=Hb7i`N=N1&gi)DH?`ZP9cULxPn7w5Bw5GRSRtp z<9-Ci#{LhnQos}L7_`wd@!Gp~KXG5LTYa#oMc$>b+a&)BR*7D_9(3Oj-(XAVq>eNC z$!Y;Jmdz`eg}f5_nGLr-_W$9<#ycW$C9JX*Gj&Xf0Xjif1Ex6jgO|QuJrPJ_vPb~k z^2i7_C7rH0cX9ZKGOfSzZ304P`%*YJ3#8%F=C_l+PAaAE!2~@rwHdEtdH4{tYLP_W zg7WCwdoB1bT1@T+n93-1?WbxFQAL!5EBoEVxY&Kq2k|6J7K%}fe#eiG=`-S0)Q+66 z-*U;J%hT&fvL z0r!WoYIK0lBHTTb-CUW z3ZgZfh3FgYCiy63o=5I8eT;wAt}?y-15diCoSTfhMIM)C zU+%Xb&M^ZrJB4!IaKcy4+H@>WGIc&$Zvf|KCTcNXe@O-s=J@FIH6?jV@E9Ti`AD7O z@m8OXjZ4zN6cfsnD3z%PAI#-()eGyJe)M6mKUf8N7Tij#sxcFbJl89=6r0lVj^4KP z=0#gsYvN;67Q8VeG!%ap+^)WFpV7w|Y|nZKE}tI0FvMny(WhX+?&&SNuRO6dW$!13 z$UaNK@CIK3bSehaf`|qY)f0=3H9>eu_FV z+KIw;8)ki-gIE1z63bY8^5rQUWPyK>m&*(Ra&S$n2}iPaSU3Z9u6GEu#k15tM0f3G zhZc0zdc^2|eu&2-?Au#J=B8Pqt@sITxR>K$PE^ zikU#SygVXFsr_K-s zaf3wX%}-ud}qd2Ch&@iZZ1EfFHj zUlyoHvY}|JXu1Joi=S~0MG!T|=_jrMQQ|LBA|IZ0splGWKLOO;+Q}_QDE+$I{_XsA zUPdBK_gUeO4EaZqHM95GycAunydrFy8rC9aSHZ@EJ1O+TeiNV4VatJ@YOPjh1i&UA zss}$JOjb7uOqQBnKnwvP&m8S*)JhX2%T(u)nDC+ngk%cRfs}-5+K(AlU0+1&j22`t zO$iE|)MkFHf{Ivhy4qeZUaQm=IF711L)PMkA3=0xbk)A7jM)+F7e9o=D>P@GGsmSH#rFr~>APanW*Fv{s(krA*?Cv;S^0Bngm7Frh+>*6)Gd%;i$ zHJS^FmH94Nr(LD|Hui>UXputN>g^@}d2$jfuoFJlJ2}122pY0@F8)R@p`MD(pM$&> z9!FDgJ7R=0tHoA)Y=ZyEnk97NJAEh7of?IqJdZ|?+Zn5J@arP8Y)a(Wp*6c1dR=27 zQ4v13v+MiD>F-f`xz9D89V0_0tPzqg${wx1ghn{c;n@H`X|81Gt%X5oS{cCZcF$dbcm`U!2i=_=&AMRh1F z6q?XCZ>BQ?Jqkx1Mus21<amWYIIjAnh6N1X^y zDB)<&-0_uFtY*vQY)Qcb@?!{VZrVK;wRF+K*i>|fpEI+i6-pyC`Zulzx)~BP9XM+~Hz#JhtWAkn0pM>O`G|B00)dendVNJ} z&!aNS&Ogm;Xt0g}UOq8&r+On=5#;77UTv6pR z*sF;D?3M9C_4}ip?wc^aI1eV{FyaD!Lzgu!rQm+ETr2ZBZ()6yxKnjhhfK|B$T;c@ zBW>~^9wBe!(bH3o3T(Cr2Hli;Q*a)}txy%JjeBbzEGF!c0c!+T+X#D<|19p&X(NzZ{j0?pM}A^X-6b8kvJiI(KHoM_!TpIH&* z6s?=N>GhF-qD5ch68g;kg+|GLyvZyVx^j8}^p^V0V+v+UkrfAu-Y{a6ghP2GlYQj6bZDo71vbg!FOG2zQ~=nG`2e-JS` zq_@gO_yYTa!NXt*$Na%iA$teD@%fv!umc^9OZ`Vd`p{iJm!!Ck&FDcQ47*xT<9Nir zFmgLSd&$2s*VYcdPk5U?T=b~BL`}9ETdtIW>s(&@hirj%rNVlq%gHw4MBX$JS9Hsn5I9LF|zWqw9Eq`;V_M{ z0*uW(227jUJ3c&gmy<35zMd{t;T=~p zp0ykj9R*S;Cx}(oi*p4ydMTv7sCZkH#vIRKTA1GtJa+I>! zQdeqZJ#K@RKtiR0L9^ymYN@|r1?hbvI@jv)2e9zr82osB22x$S+#<8h zU|X_vlQ7{E!1Hrx1IBAM7SlamS12Fe=vVxImU%GxMuPz<@#(X)}*6%`@9 z^;~s_%qK~S6MA)-aNUyq%%>x8dj+{=iX}~!#Lc2o6IyYWE=O>)nci_33l!SQEV`LD z4tKyJg88vO;{+nm0<lfeZ(wvO|~ zyPynvoVNOyUV!eFOMjd^&K58AiY8FlX*u(c`$(jkgm-|Y*Mr%V7?PNP@-~^q3>IJ8 zAYkUroEb^XC8t{s?Vh5`oo(gASf=GCW$-6cZn0Fyile9PmQ+iq53T-ii$ZsO?o z>EGyLUmwMIxUHjKbZq8-=1ia0S342yz$X#}n!qBNvLo1L9eY>Jl%(0jC=C`eQd%rt z#y!`^MqW2O4UoknO;gwFaF~tqlqpgjv|s&IyAFRx%*fVb; zstf?*<$)W6d9t8D|FoW|;#_SkNSe3A8P3|?OQx2#embn?w8kic6TPyhwWS6uzN!Sc z4#pSV-X5Y1FKUs$KryB82FWrDQ#WAE)P84}up6QbM2xN-x!wx)x~*HqmYEiXYr(x1 zNw6kR6%z!VxXAmu!Lv9Bt@Y@H0o~2N_91TGL4xhq%E>TvQoZ-Q!x;I7x%_%?X2fRU zAN$q*!hJ)LYx^v(T7tqWvYoOnBJ}al@m-5SUnXFIyb|LPLa2&%T?!3E^^DDJWz*J? z&ZQTz)0mx6uj-hKrahRMR`ng~!q6Bz4x?SV&&lM?f})Y1Eb{CFtZWpa8}QT<>J}KS+?a=3Ka#s zp1L0-a5O{uyI_W0=uW~K-etnd9E|6AShpVhsl19*;u>xi38YYPgCGN4+%MXV5LR^J z)vHA}CH-}4U`SURPUjG7bRv2N73e7jjZGvWUwV;O?_Yw&9bysoRxv(%Aa&fplf9x` zmrdN9D>Xv88pQ&M^s6w1OlrXfx_2_mH~LCKo8cwdDu|z*r{3%kmuH%IX7iTQbSnxG z@+lrrl}cuQWW1!=w(SyGJ+(L$PVf3^|9_YL$9FI50u_UatjMM+t7{l_MTlA+fIO59 zh5oqDW?j^yBLF}bbwuGHd_cN66YCJFuN^>Z->>Sq?JV-*wHA$(3!?z6DegkKh3e?s zWQxnPVS-A&+V{`GC2(1Bs@=1U5WjC#wM5~7>$m)xKuE)1%1h+s4v7AjoA#`2!#Nh_ zR=!$@Vws5T4q@=uhN`$}IbS;l{QbdB&OFzS(#Lt)^@2{7iZVs9iEMqZmyfwAm z*EJ?JTT&-301A?SAGLqs-btYitCdZYg#dK^vPPtii3WdgeXA~!_LmrseL&kbtIlXa_?uTGpvb}PP}BX+wWa_JnKsdWK+A|@P~V5_8#eX&f8igi{275s`X z!OJ?WCc7_XM7?PF-;v#HcXhIG0+!V_m`68)eLw?d&FDm60SW}zkLnH|2uY?L^4(K7 zUBMP&aa)Qj^TR37Ss;J^CtoBKWXo`W4s*ha!wOYEwbnWCUi+jQ`682PpyipgxL7DMs#4@k~7A8t>*XcX!{Kb~yxT zKmxD^L<*cAUd69NriACro?JIU(V!3GHba{h#5s4IZwG;2O*DMJ_X!z1pgWZmolxHN zKq}H|I1zaif}vdJY@1gYMxDc6vV6yzzy8ucZ@`3ZF!;tX;3X8tErhM7nG;yY9{~Zt z0yqBo4H=Qnb+NqEKu!pvjml6?|MeKwqG0SI{;LbetlF0P~ zEWpa_C*GMk>?r*l7kwA_2rA^ja(20y(Y_#y+23;bD4Jq%VBsEpT=!w>qL5QjsJDNJ zKl;_Ja{U7)Zx$Cw!#l`g)_B4`=LsyK$o+c?PK9PSTNx{s=*r0&{MON$aF6rXG-Ezk z9O8hhLf(Zm4=y0-^?pUh>epBw{6bIOydb^Ah>=T`m)Iy3Hj4DZzHP5~3u1I|-bUeq zDM^w7WKW?hEr07l&p53gb()4|dtmGR_#s8r(g?oFLn&B-hDQuF2jKG<|lFR8k|KyBse!!WpeCLLI? zOvn%>Sb0ov7ev5n39_?akN^{*UFT3z`f6|loWPTJ>TE3h=`8k>mdfk!}-e$5R?CY8E0pP-SW~ z6^vX3fhK%2QjYjsV*;KkNbIO2)O|uKkzo5a{yivs+_lchp#dhez2nn1TJva!0*5T|x*)fv>QEh^X9txN``w|tz zjHoOY9G4QGZ);IHZ+F8XNG6ZH+^C{eHaly}?ygFw7_AN1YLTWiuv)9gzZ|dDG`}O? zo`rvlg}h|hBWk6~7)ky3+_oNd&`-idveo|4L4WFI+NE>w^z*4tmm#Q1)gjSZY%~yj z73_3z8=!XB&LtEQUvI3gwXQUTa>BFsQT!J-vePWQna}yR!jOvq*}8=`hp`jJbGpI` zn_FZY0hlBWhRTB9@QF%&+A(YMriV7rCRSe8M7m~;+r;eyD`5pTBs0+dr<&1(#_9^$=EVoi<2B)*_ z&ui5{Oz%R7r1^f^B%0Ewj*#wnG0NGiPvx1nCf(1yNS7(w2pHeoLZ^{I_Go}US(1JE zpXJ2;x6NdV?~&8(@;=#JAhKWug8rq&T?WN~K#rM5kL>aE5|ZcSBa>)g6|LEvFYN4w-y?mVl8Cv#`fPF9#SqtS zRBENyM+K1}nrE8HAmIxi|LALuh-4sB#794r(VPbZ-lv2sc-?sr4wpQZBjHQ`a}!=l z*-mhD=iyNIVgLGQ=>VaTdc6sHXtIMU_z=}DmzS^^2rJksJtCLq9Y12LktT=paDYep zTaXvabo-|uMrd@eYA&kV#33`w@ip+9+zGH|+VsjC+lLFQaxrm`3+#C2LU->&G#0{` z)@qKd?aQxq;sS8VP!XsR&O`xP_a|uLV7vmdUrR^Y5+{Cd_~U{OnqqPc3q7C{6K%Q- zB|Eyv=Gb-j_nEBas=u25Qqrp7a#W+-9YV^`xUMwwSe_AeU0u;5`;WxyLj+3Ga1p|v zG?e|K`tKE(r}U*09mjHvQy%Dzdw=YY}a!OF>Jae}AtBEdiWYf?pf? zm7TS*D`iP3aWGTOd2HN)tJ<+d#EPa?)4cG{*=P|v=`$hAahp`NWK#5>dtvh3tm>K*U)SNn&?w zcLBzoNdi`*MEIh%?+dd{ffQoV{;)bAi|jUV^6s}MidDAyF7*E0C8qmlq0BK1>>-NN z_TGT-GDsm(G=B>6llb5~e^PyDk4UwYu4!C*8d>zEd2NJb!^~Px`&#Q z8h52@CGpISilc?%F>=cKG%R&{9R?x2Vp>g10K{Kkl3mnL`Kht6U^gmfZuXtoRG(cH zipOz#+he5n+^*^Jo#|+DYjBJp1Vz$1z*;_9LjoFs8mZ>7=ef5>UkAU8L|o~X)oc=Q zNXuQ1O%1M%@0PQ8T0IDZ6{h5YHqoYQWHgvn2K7SaCg;@pW0tJi{FWuls2^~1qWNms ztB}$`o`4U50e|?)Y!`rAVDc=ZCi8fN<_=Gb;7{%%qD6@^I|PVsu-z>gtQE)|7wbJv zn!J{@T@uLbc+<<<+xsX&iJZ+un4G#b1^Q5X_5nA2vf%6LpAHe8Yjf@3>SP_I zM^DlXq!STwRl$r)ng2LmS>u=v?Xi^8M5-DGDm9*k+D+`z8CmU;lkMJliDT*kfr%SF zPzRYJ6M6dB8*#qg!JX{qz3QMxjGFmoq?hnq58DO65?wXEFqgJI;If{wlg{mYVEnGn z6pxo~iXmTm@p_bKLN{MsUgvNL?$<07TJhXdPA4^1?SYNK&{S8XJ4!d1M_^>li=o)T zzm4k7uN)A2Pe~wxd1~GGnI5EO=9}^Sq5IpFdsDYIBM77H;uN5INsZ|+(EQpQl3f_R zK=s|R2_umbPt+=@xUK9F}Jy3Oab3 zvLewBXiT5E?-x7SbsjwD)$l$M(s5FiJY%l#g$9XJ?p-3pDM%r$<{4fcY{RFBqw5#} z@9l)q5#%E5+rFmcWcFt$D4MJHn*gkG?CfK0(_5$X3W^b#}{7# zLuqaAQZ`|=9eerdBQT{1x->wBG9SiW^j85r$^^_4PYPdI5dm|Xj*Dh+hW1ZShTX=OA1XxJz@ z?$<#!b_t5SPJZt>{XsqeeqStF^a0B0zAvsK%0tJhfK(tqHtrNvV(z%|ff|&AC#Axx zczy=-gJ3Osmp?(hZkf_7O-f8*P=jYP$V^IDnBbFnN$h%!ll+qY$t0Lkn) zpwdQk+3H<(;oB;_PM{Q!iye8n#1Yis3Ve^Zj_lhECBtAPNJXeMLGAeFSbgA&{%N$Q zdG}=kj2a7GjxUP+4DdD0=O_LfP6%5vD5h^4(j$*HekfWGFhx7sbSQHpSmcN(&s$(L z6T@>lB~!I*UFFyY{2-_qp`1QV8jZUu=x7djIf+0J4?)LgNIw~EOVPQuuNXWPjIMjy z%Hza8?GD^8)MTQ%o9Bnz{fm>vg#f1^J?UD(QE%f1;N_G7`CSJk%A;0!mtPRf7$JI1 zwBrDYOIR18^yuWPz)PK>FH5_X7{7gSrxoxhBn`tV9QbCBy}sleSvo#UzAQQDvghd7 zpyFO(aHQ7h1n)z_Pd95W397$hK`267L^-qfv)7|2VeAe7lmqH|P@TpnXNyfW07JdT5A*DA*8|*p!l9IbF!AHP^|bo!a@y8#(}9iiciqTILb(p&a`<(RD9}zrf}&6MFeSG5u!W?$oHyW;t|9Ybff-^6*TWP zB~shtRp0*VQ1Xa4pNeLxoAVLE_gknr~SF43~W#Z z$!&x6U{ZjO-TkYz3T|1y)yF*Sw6EGhyr>TK7F_y`OJA}v8xK%(avh;r6%1Rvp3K?Q z6x?mKgab_bF*NKj=ipQyxp{D@5jMS5+8sIb`)lC*oWCoa<_HP?YT{F;%Pg5O&=0{y z?P?-&(e#;I=I+&-P$;3ZLyAL7m_j32Q@lQ5fJQ<*V7#&&Qz(|aQ9|J#aq-Z$^w%b` zVssobF!>vDIPmIMEi=;hop2M(Db+YK9r2cJ(>57Lg=^7p$jPBKm8#@IiHVhDW1k@x z4K?=-s{+hTkH4mOjPDpGfUuB~-_Tud!ve^!a7wm7+4vfmpU~Rmh@#=9Z>i>`h~YJp z4mVeS8@YU&<6b5e0VMmC8HSJpO#q;#s0I1?w_<3x%nw0T4<8e|pecC*rkwfFY_Z~X zincuWXjZCID7Dr9IBf{@H}8o<SUQ5-ReYVyYL&_j&PbjYHsfAn3P`l+m^@=*|$|QQVwj4J*Di#VJ6e6 zl`iN?v+85a@!QPx4|d&@O&p!vH#W$ArcOVs z1RMq$LaJF!Gi?$HBeDN=6#mvBVcjGRDQkgH!?5@BAK!Gi6zK?HbDy`AveK6&XFg7X z=3>fkhR5|^SZO}kaclX+Agp@dw(cA1G6FDp;C-<`BYEya2&e|sUx!m7YDksdA zVSQIW%EE%cS656=NFP>pLebNS@l2R)sMLuN!#lIupr>NC*TFFTW7z^8ayE-;52vreO1?6-yAtj1hHcDWG|DbTw2n8v%K1=DF$bdO_Cmkg`SzMo@N`o6J1tfp? zEBTh)VnVF_+N3Pesxv;dhT|}&;t)R2I>@n{Q^&^$j8=BZtf4)mMhr-~OxKQuANr-dK zf^l)}765sHs;~ZD61LBw1Li`g5XnB;k(wkeh=E&{+bFBIbsAFT z<@&Lg-(VIg{~d_jH}1P34tlPp5E&RpU#J4{eOM68=-#ch&FJWg#gD^gtB8B=YRqw2KqF*hSFCCebu5&Y#0v^{O z%bZksEmsA4%ceM62O>G>61AdK1iDDvn6kD$N4HX}g*;;E569@?{5udW4SmnnXzPe! zgoERC$U~4uDd9Bmi?0?TRaq}t1C_@li*Cq(9Xm_LNdF~iOD-o`dg;dD|M}As>%em;1?POb_(+!PUuTuu-q_woIs5@hhNWEvy`U-N z#e4CE)PH1TGE5X=r{UiQY^Xgx@c06Y3SdR^NJHNjIL@qDyH6J5`jy9FBkZcs^P4P# zYA`n=pF*<;B&y9_i*};vBbZv^BL#tTGa3x$A(2IPAP~c|^8`aW&W`e_q^nwJG8*PW@Z?xxd^;B z(52@10oa_f5zI5^2tA{_IPC!cKLEgthaTx^hU(m-*L`lH7g}vp1aaBpc%n9W5=BbA za1ayx`{JWi@Tm0tV%sk39$M}twZzXh)2P;xY*{8;LTw7=XAfB)D|)$XhJ@CDBi;(y zEddeAPi|bO8h1fs?<6^Z$w{D=>qnMqmR-zM^SSKQ=!pfMH@#4~|NZ9LmVW>baJ<^e zr1Gs%q+j%n1@D{~c~#OLPieE$DoU*KTBk^9?ciu#Vx*O<)u1_TCL>;1bp0K*#{Yt47}V2ONqe~E~+-F%%4q)ke*0LTf)|RUW!p#hBQS`P*JY!I1Po=I5`(bMk zFjxEdloiECMbc-Ha6EGft5@q_1WVSiA|)<>aV8NT>Us*>N@=L}fW{T>+){L)bh5g- z!|rdQ(%FvQSqHs#$VO$0j}mfwnkZsbdBNJ(Fj6jOA-@Wn-bLvu3?O%o`T{S`1^U(_ z>;E9!%6$qO3!_^}0p)t9FX^Ne5XAutrbr;^j9gHY4EJ1b*y#wBRVebVp*&Uhu}_e$ z$Y(`R27<;*zdKF0NJe4Wb3*XJ-fCnBl}Fr@AH6JeM#@eV?9lS9h=nHUy$^ea$iWl= zSwPOEJTKpbr3lZ1c+%blF-mXsW*pk=x=gTg@z``ESWrX03m`pJ7QV(axs3-B%38kb zj|siuG5}&_)Zq&?q7&pGj2%FgwSp#`m*N)?@Wvfy!qd)U0u0t{|#u}lT z+nRAFPgaP<2gXUlOx|4T&2y)q-dX(9+STg7t67D<}o)*i}Dk@yyZoL4}0> za)6_Jeh@^Wl%Bh%s9l;>q~Y7LbL^;g#uK^A$H+n?H zMvxllOz0*_4}}Ue3<5%spRh=S0 z=LgNmdPfQLalKpL0s)>Ap3FO z!U57$=KbpAk8$!sBYlNbI<=BQErCYs7O=(zrfnvFfHI0jg=p_O0kUdo6MB$#vp$ut zXme2Cx?-E(Z-=EVZPFv%b(IPPL*}x^fi@x@cOg9!DwQjHYlp$IjFJG45=U^=RMM~U z1c;8QY?F`U%ug-~PaD-_hwbT9YZN(DVmbg-k&CPQ{C$bI*sb5yPp4d($uwW#VXjcq z6{@1uUk1szbP?SbnV?J0;WL6#^kV#{&l6G?LJ0urFN5{qh9iSxf6AY}+A2o7Q>KyI zuuyWJ&hKN_+vHFX*g}W67$OMPsLS|bqp4doCqL>x!seFxDVcp5)H3m| zz+r=-pO)<_q-%1YeXo0Sc>i%7HP>uOU?4-gdCoMOvjX_$GtdvV%FzBlL(0=5S;D;NsU*{2WwOK5pGNm3N}2F*>B20j;4eFEq9+{w2VzkXiO!XVEH3PBoNVC(wY^=WB3 z=nGDhQ76+6g&R`^crN2uA72Rx1vZlv&?@#u5({ne9(HmfXoa3{(wT3=`B+Ux=l}(t z{>K+ThGMyvh?;e=&Gc<7^o>nPWbp^0X$d(3^d^!em{QuDs&SxCF+(=^)JQs!XMcK` z>o~(XP=6jCuPRBvm7_bx$J$c6sy`BsnxD|uW_7|R13O0A!n&WACBOTS-;+$O+TL84 zCXs@DY9~1#SZGPn!XOnl{aEQF3Za>0b8ODB+HBlqpIx8Uv5Vg>)g6S-P4$#0gMY&5 z(VEXGe_VTz4`N@hXfp>x7T?wJqNAje&OwjgZhcM&fzHA%pXmdw1VCcdt*Ijj;ocXG zwI!S?oB-Xz17r6sZqYfc-=(ku39+;if*0KKH)Xg#tDxD0Onknjxx|6R!|a-tpkVbJFU4OaZWd7-5(lKvFfLN$Thl8AVE9K3MZZET$Cb*$gA$z$fi_ zLt~Y-N!XZ5@do;q;rASeGysUZ2dd>gnaSZ=E+@`jxc?|08(Ne ze@M?3dQgwg)rk%CKLU`!Hw1yF!5UqJ;`LO;l6LC{o-x$#IFVszwz}hK`?eiW5pgHI4E_8q zLOF&9upW zS~JDqgu}0Jk^K<+=MDaJeVulp!U6xw;*F09^z@HDdH6C>b+J@A;G3JqY9i$_i>m5a zU8=O~2DF_FL+37QU&%6a7@}La{1KXM2M2Md0WPpiS_dBvcvwO1>fb$XchrscXH*U) zf67Mm-u4Kym^pN6{N{b`LB_6e^K=u0)!Y3*L?2T)sxEtEh>4 z--1!aYq|NiZ#`kzji~q>|Bw~TBUYy4mGhsMwqLK8x$mgf{#zwUUmh(xVg`M87f_1M zH)^iFC{3o9sas%y_o&)mgB7vgX|b_b|5E+pU#p28$f?1S?Svu;WMj}F*A1t*JvK{f zLiAb=Svis(N2z)*z-i~)KnxyWS93No)~y`RdKsR#9v3`DT#I!vQ9~HhJJ;}s3F1yW z{?nELzbkAM@zsEiN&xTN>ARmJ))XHioNFFUGWq;Q7eTx1MKIT~sl~g4ZQHBGQ+C#& zb%5`M9M)pf_=8UnU8e;7@gRZ>A2*=get^6K7pz8P`(n3x#H0@i%r6Wtqd}BI7e{|0 z|AV_i4{{J&oHuC1{r5ruOg!5!5Lx4<{l%MUFYYQ%mu(}7FlraB=f9ntCej@pn{}Hj zNv}(I0RL^6lL)v31v{${kYe-47xPQbPVu&^&3{^wd6s6Rz({*llOqp+-5O^9CF3U~ z+k~T@^jp_XulxFGnT6t<{H-NPhGz0-a(EL3zwopF_U#*fpj4;7KGbhtRRjer!i%rO z8FK_AtwsaE5&^`e25l?Ir&z_w_Ors{ z8=990+dWM;_jy982^gJD?rU1Y1=k@X{HBu6hC$v|46o;ATIYMD_?JU-g18KE-yCPvkTxks2BR0Om5 zw-2Lp|MklZ#Hv)Y?-_;qe>?=AmYB&6m$DrX3&rQMUZ8!IqFRo0f5?GyRV8ghbE;!_ zrMZ3%U4FoEsCWsse@V!vk9B_`E-RBSTfE||v49nQZFLlSZM9_6<;RO&v1}R{2-J`4 zaBp5L9b1Tb+Y6t_yXFc&u^XU8qUzl0NYN^lmYpxEkNA@j4@-*Af-FBTrz?i4DZD2I z^&EN|{^G>*y1bsL3#No9*ykr(Iym@6D8%a&Qmb1N3f6Z(I{+HeN@OC^?W8rV{Io}! z7A?63`sItoHJUEhcWikTRs@)4K=IYoz`ShE0+2f6{sIZv_JwR23}{2J=wnhy!Mv|? zN`lAA$p@wt(xRs7pVNVtAuWey0|o|`q7Qx9tA08Gr#I2rf;5_p8l*{N)Hh}69-kU^ zU_ky$J8Z;_#>)PKIr6t59--g`B8LC@-7Fz7b5w=ADT7owN4vb*#KYzO*IFT0uNJ3pt#BZ7CCwd_#C!|_pDF|qL`|EQ)7FA35JxT~|Y zh4xYP&&c5@qovkJjXA2Jdny9Db3N1Fe656j&DnpMO{%L*#SR}e`~$!H%Exz6hCSid<PY?-F-B~==lUN95PH=$2Y-=9S; zMd5U#_NmPHB${fMt{U)d6j*yu96wK|#8-}`5C!w9iIZhy$Gv$@j8TgPiF661$11f) zFsL>3z{S$65)AOe8%8J-gOkELV8y`fgmGvr(&isAKu{yr>QSv8hMd7sn-aSPxn@jr z8}!G6P&mln2Vwh5K!w?B_BGg^|Rg?hr|g~etq2iPVHDI z_q8DUQ*DTfvhOuRr}Aoqf|VVySJ}Li&i65nCjBm4H%e)jfeD>In)o2S1K(x>LF5Cb zx0Bd{Yxe*pGu>y_KHV^ z%O6OhCCd~KM(lAlEggJK`XBrkn!Uo&u6>$3OnW7XMM{CqnkB*!nb{7;gZ0QId|fVY zQgO>1V!9a%V!@kPYG8Mq+zDIGNWv1p1~NX)pe{#0-3@<_qyN<(`~V_Of?_z``FwaD z^)L>uzDn*M8GUkj-?Lr)U)bRnT`Diw-5`_FAFqYuU=JqVQni{ zWK|_siwq~o@-05j3k4z3gExQ$JMLU z78IuF{$AT)-7hWb___aT3k>z$P<#@)ohLmo@>J`<^|yFmGFSejllH$D)BXAgmf{Nl z>##1hpFh}OaATsd4@)GgVy&~Sv{H*>prD2(W<$ElMGnar_3E4oT=u$H6cZhYOWXcb1jMyk|lY^+l%$W;LR|RoMzXwj!%3rj2y6&Hg zuz61ii;2{QsI9eu`iA^S+$IVLLmcaEtLa^^WU5JjCu{%ZVq~T8Vb^IFJX6j|onhOL z3e2~(>;OCkHy*eI(x0^2K~Q%v{8`jYNx{1M(CBSC{xS?@!`XYOYpe zH$fE>DGO}ud{0R|M~_3`CQ)s}f*f>D z(M-53`mZwo3{f4o#T~k2WIEj+ZAdb?0&G7opf$Sj{*O{jD%Tb}miyZTLIvI5IJzl6 z?q+{Zz=t(a;oB?e{(Avf?1eoVB%cPW3=^p&zYr%GjZ}BW4m&914a86IZFl?t z!|Pf65o(Gqx4A9cHMi|aH8H|l@3%%L@v>PIN-|1T9RC7KVnuaza#lP7%uXbjLNzr& z@zt)Sw$q^JW%Vz31(u& z%+w`&;#jO?qduVA650s z4;h&8iYebA3cZbe-07+@QmystO-nqN1SWSsznNR;^)M%6yXUuEHoJtPYi1BD1`7cY zs9BrrgAV{4rCMsJnQ8#LSI3E%P{Uvb*M$cU0`o-y7)*?W7Z`r5rlvuH7&nnFq~S9<`r5Z#^l z*MEEQqh)vxnYc`j*cXNOX9ct(IY{o?e$PGVne2BAj1OE3K9({|f9_D1^%+EBO zUUvHn;ard%Uk{n!)|p=3i5#N8{U3UBz3eXjJAa*BtBp2^k9h_o?vG*JAsRByJQZa@ zB7m6~;Y!l3qI25=(lA>?SOS=O((#}H;PiYt6LW(pCwc$QD&JrJ7YmvMXlu`ErG?i6s-b(ankX_|_bfLZ#sU<8z9*%Cp|#JG`W1 zIyu5$#_n4+N$^nyQw9{di}`@3961>)0qCpFj(cCoST4DGllOP03hW{apR)vzbkD+M z6cME4oL#`~*GP?`4?e(9?v*?jf(NMA8Yrvi*mvmqqe56UJCf9AjM<+w0t;j1}RuC*dtb9Jcg& zOBZ_Nc;ChUz@S$x{OzDk*RLnx0r8zChVoL24-^Sle4EdC@~+ZgD3G0D>j4oXg*)5w zI|wi<>a0=;-gdVRVcnKUyy?KwyRx=7I!}Czgui&~6a)1RtQdz5M|Cs2R|>Enpst_I zMl%WxR+8ypQ60XVElxhMns9Ng!&nL~Z~0=jOL(JKCh62pkW#FU@K$hDbT7)xE00N2 z$~q98+t_y@v!|_1U%21$-F6q0!@_&=P;?>)a$R;2SzT}g*jh0;h%iKDAQ$mI*o5nj zS{?$|WLBFPkEMPP@luflc#7e!DW7_AuUI7+L4{ntJyE+;s@zB{fT3KyBb}^;uftqT zQ!yW~aa{M9z(M(+>lUz^txV664e6frUYXeG5q#CP7uhPMfwIi1Yajas`Q|An&$gD5 zZTRF&i~O6^&0Eu#h|j$K0~{*1oIT;T-lVn}8zu#{bOs5YyzJeWHAeLe(5_OU6fTaPvSjUDN1J-`;csOK^vEHf zT%WhIB_bG-7bnr!Chj~70xqU2SW_cFHLGEmE$J=ErM43r5r?A}29b9S^%GJdBlOGi zw@$O=_qd@oSxLViY9Qr`vch*ukCp4ha0}0L@j5EpnmuG~iV*uE(pP@wL+|t?@_-v& z!ASs|9fSX!Ebn5`2?GX;<=F{X|H)mBNsR{fW)w6$a!!!%jUGg{Me9y%IDyA2AOfCG zbJ~d$2>gLZA}6(x;(1DHZ1xhDh#iPlA)Ahx)6k*J(o?ibv8G1tkN&0(LMfHY{P-7p z+8JcJ56uV>6%78-Io>501pyl-Yy_$_aK6e}HbFdoyZoi=1k&2gnaWJVbVy-PpO8r5 zA>ftJAzdNZkg;zpbeWrWM^Nqf&IgZif{Sdq!b+-3sN=Yj*qD;IL3j>S)@!;kZjQ;f zei1>tl7M(xG#~(+b>HpcoNvkbaSYk*%3yQ7AK8>X;*g#kw=&@Zw~PqF29fh-09y(N zlPh+LmFkmBx(SZ5UK!wgib}#M3bJMAeT0CIhl|)pyn#ZhoKsKM)td(#d^lX0=Jcp=G z*knuDymxfC6m9*%3|q7WEH$o8CgP&PDUet{t4%t;r)G}i)M{^P;HkztmUgx(JW)fT_sk=cf?ZRA?iAdq-s4&lXg zxDk8rVQS`0n!K5kHK_GYvS~b_4}oN0<~x&)LlSISDrge{a~8a$+|!^x+^?+?`M^UF zYvDM)5z9!)U*wdlpu{6bdXsyFe&I2QgwYIG%+=~dNrM$?+1KbpWv%UI|37hkKx4t7 zN`-nV7DNSo&o;#e%p&>g79twVRlpp6IvI(^z`QI_wX44dLi;y>a)=uJf8gU)yrWOm-hdd76!SA({RX95&oTXF%G-bCZsH1T69;nr|CV=X zEGtyQ<7Q#32ll>O{EKbF0%Qd{>Zi5d*~#o_)4a_6Ha!0X(p$y*9#B&+$lUbMzo4c9 z)L0QrI%3T9OVOAA3dUYrqH|s(!qiTF$vX14M$|FSxUJiB4de#Ys7k>GzDZ1i=<35M zbpLfwD)B$yc)PWAtmAiARAYXZOXicTi8=r-^5m(rfz+h|Ikp**VyBITFg1HsOoK=? zIR1ns#G|QWcP=(Ku5u7bl$Fxau)y}S38+YMKGbt>zG9cc(bsK$h4>i70>}VxQ0Ta@ z9l@z>>RZh$Jby{%MG*pJQ%tB=z$II-M&@??HBpCgV{#11ceJ16iMu;}eMQ_p7;Y%J z5vMq`@aArc)eolHjJ^MjfN_>{Ik4|EzI zrdkV_H$4Wria8jww_}_vU>P<9kLa6IRC_vG?#zhT9Vi5zkZk?P4>0g!%C+IWqWN2boE3u?tVuS>|DGNbCuj{B5Z97K)AlNxJ ztRe=NB>miHBAkON z5ZWaW*8*yx^`$jc9Du}zfig#3QF*s8eRBOZyps*&9rth7a~#R?dnT1sF_ zXcxN$4AI<1ge!cRK zd$%Ui&hzT{$NlIN_mgs~Uesm{h(2PS$LX9?Ewh;eqa7&A{4CD$0ZDm`SSAGV1brSl zy@fFxl!gAXfZN+ESgt|i6DHW78(a<1geOnQ(#AOA8fZK@2gJ?@&^NmPp^AH*fK2=J z1%;lMM9SPh>@%(>pU>tJaBv=nUrc*1 zx-bxT3zNxktoT^&&>?eR38o}SzZ5dyD&Z3DgJ*k+S>7g%4J!8JOtDnDz8bTV$yB4N zLFfpda|J_Rrz0p+k%(X$mwmoSo7TdiBOMq;PgxrZxL|Z}LmF3T1!2ld>}GArRuDKT zWD540w--LB=6&{05A=X69J%o|eE{Vz#QJLPa|QjStK~kJa!9V^X$cC#*f=3dhuYa< zd{cJk1NKOij7XM0yvu-30axuQfyIalixQbUjdLwGaOyQT#r=6$VhW(D>-=eeUJM{e z+adRu$ccLsb}WB^!BLRO`uU%PxhXY2h^IA`xhNJmdvJ`>dp5ZtlO4chze23@%~ss0 zc-uL2S`JTQk7vZFg<#Fu9B8Zb1u)k(pP1RZz7lePPwo@igE$uIGgE_BEn6?Mj6bJQ zT9Ztg<%hGTF2{7lM$++ZJDv~iiK&z6Hfl>W|3Q3!4-Q=KTRr8YV-rRqx~!YdD3x`> z$fehik~s&FW)M)33o{1ew1x#V!Nx6`pc<8n8^0wBt=N_|}86 zeC@f$2&a+(nc(x86)?edQOA63_Tnxs0|gL9Ye>!X9)_j@Sj#ggloY8jH|n|9^&3D+ zq#!Y3n@Z0c>~=&4JH;tgOSB2LIKEK&MRJ9q;1oOo^eGT~2-OPxTcJJu)-p?PS=bCD z9XIL`nCcVQgaa`LHAFI}P1@vuVP+LwN?Bs)P-dys=u3D5amn8Zr!I6(wvb>PS%4yO zSx}4%YobHMij`+f#t*8h0%%!tmK+Tq6S@YQ5G(3i6KNN}To=X*3zG?+&ns-Cy7`Lt_U zV;h9Fu^97p+i)I+#G5uUl}xPi+H=~PP?7mz?;umS)}8LLkfbrci2V7jSc@i0ZJrZs z0TlzDouY`fN1T(C{?JA4s`##~E^7)PF|kqt)8DN~_a>a{ux4+fvpJx3ZsEU9oA@^q zr!c|21W>~Z#{_j%j#ZhMp=d`FG7Yp){D}Bdqe^7weHi@{T}pn9H;X&nK4L^Ll`3q(Hvt6ByU4 zw!=F)%0H0qMZ=id;)r+N;yr$@_L6u&+#1vfBPytt049du-59XU=pAD$u6#-2e`iq<$L3mGn61>LxCv-n#R9oRIvD zr^lJapP6!90arDRoi0ZCG=mvYKbaI$(VfTC$c?@I!#4uDz?wTR9)e+GxGe}7i&*Z$ zWB8QjzJ$8A28iAi57R?$+WWzCrbh{Qy)h}vtLmi=E$HanHvja*kSWJ=Yz^o_EIp!s ze9nsww)h~Y(FJzqvr2Ew$?Cnr%FF_7H!#~?%)I#Zc=RsKjx+>YIqcXESAJDk{b#5d z>7ExYA|(OO`=5*z9FcjEDdZCK_p-QBuvRAEb++Z~R^TvjM&3@&GhX-Z!5XkI;EYOQ z>nX#<0c4*oH{89hEb7+~;h3dnrV_~F4VgRy6t4G(H>TFHowl(dB}g<(_wy~vac)M^ zA|vTB;Fj_-kBDo!IrBBnM%>S|DfX$+mn!d z0Hlw8OZ=Hvo_sU|Ud4|-NEml2`-#0hvZ!Zo4}2j`qHg1*%eIfI;;Dxy zK~NZvEXQPNC+jy6#6_OMkVZ&SuciADSntAdW?N9juZb1NMX^l?6+_8Q;s?P>yd@t) zq+w{j1?*Hln%#N|E752*%jfwC@w4$hs+_n0&+b5>@zr_vA|aROk5=U|Kq<&$I>sn7 z@3!s0N#3J<4T=)VXsp+vp&hhz`g8kT2tE~$&nQ#k(ex6eZbY>r74qVdS?jV~GekrdDSbW1T9H(R&w-S$t6fo~F(WPWVZt(V9G)q~ zQC&7=6~|OVb4%q|dJaxm2o4fE%}XkT{xnkwn! zs#h8Gl#0>9i7N>fK`z@hW0mwVvmf8*{ zND-}kDez1oxqhctz?5LWm%c!UCj>&F?Fuu+8PEtZAe(!&?C2(-8V|pGs!(_Na7%4NIMK?+g?Oo1%l=| zw$pMP4b)0F9ELtrLsNtYY&JQy7unF;saEEWZPP>Ddk%7rmsjlI6B1dePF0Me>Q|bM zC{2RAAY0>(l8dB887f@E{e#{#35Y}e39Tij1mET(lTP&^5B9MI0eWdKF~7at@Pac#_TrARx zOV%T`mKoFJkL&*uctgqU%yGOsyB~?4HP{K%=j}}P|4wK|;|-*O&c!nI^lw4+h%=b8 z{0mm3%$%G^Y`0PqOn|95)}99UH=z-W5sZ=*279U1RVOBkJHF4WFA4Tju2X#)m1d0a zm^=aduZ||PYk~nNqjSSXF=2#L@gbXC;wrf=XoDfdZPvn=k))(@j3pBg)%1+{4}L>^ zBb;)(wDMV~URY73;XowJCxv^t*v-)Q=>dMkBQL;*cEAkD#5&lv`-&_ho`?(K?t&ph z>7m-vo-v}PZ8!Ps(L4Wfh+_;?=aPc+zwTn;1CtVFC~ogVY@%v6gB0Rgy<1B&yL7CO z?K>p5vy9lsF^gaTLHO}!+4M}QW*Q-CaMIeu|heKeF(L%ZRWmh4P5!| z+HB5{63oi-Fz_{ej&`p#pHRFaUy470c%L>wrYKfL8{?zFI3%T7P3-@tan>LG7Rk&! zH7_oIA824aPCH*nxu4K-C!Z5sP&JNlZA12BXJ|Wthv&>Mw%rG?W{P+a4(lDPCO&?|$JT=Jyt@wwm}80*0crgUHz zA6!V6P|Qd4^_hdpKP7;9|-;eq2Nf z7{0Nu1u9tRD9!g%RC?1P!#XdjF=p6(>oD`y%*2Yfv)5=LQ18azI5-r0ulg9F((V$! z0uPQP886xd3no+2RQ0D*_XOUO<>eC>mO+Au1vPgy^{5!FKx;-~-OSDxXHml@UbSo&)q6k@cHy52js65Y?+<#gyi=E4Rvq-z)aD z^$#YG15M3?tF-sG1gvFK3=-M1r~WM+0`p$|1Xs!H)2kA7GIwkKM7WLb$cNrJOX)~v z2_U1tIzeO+%Uh=mp&4Rv1;h!1DJ8sw0O8_=a0e%oy~SuIvi8#c?r7$w*t;uQdp-Gg zfZ#*IW>*J2om;pXpn}Bbr7fvgKpvV%-@?0M)A6c%lJR?!`-P!0AR7m0rgQY1NH~NNQ7CC?I=B(C6N1~cfA(_Wuz8I1xVShsx0X=StCVO|YT5r_~5ko7I6q3Xo(z7X-oXO=M4mulSrOH=p#DH@6GWs?R zMtC8Pv!j7QDHYlRdL5H?5ru}uhk>h=OV+9&_aPzPqA@lRlXD|At9*Oo%$&eXIW&j?K?ET*FBlLOatXY zw0KK+sEGOa}@nOhy95~a= z1R>j)OVGn~iiG?) z*3H)eeYiC)c5q)+{s;bCu-TE?y!({F4KN|lMF5a3uCKx6VqAWtngEf#FMz7J?ZnEL zpq}{}d{&3nAn&8Rf}Jo&|A=A&)q%~2#lLK+v8!9j>!ODMj-+;^9oA90*5;E}dzC0LoGH$>YU3R0=d#eti$&B4K}wgoqvuVg_+qu;y$jmDt#DZ=)btH{ zXc~JC)OPdImD{qOGxUIo?SFGle&A@+QkZx%CkF*owcb)Sj!ik~B zs%S9;M`f6#tqF!~LtqoPIkekz^!48hWxipwvxZgL7cgUo#EGM;IalTYP^m3rcI--qT$l&F_Y zH>=)Pnavwt29utJQizUp(<-Q}_@tdxv!x8JoR3>C5k~*oMM~WKuwi^L$X(r+<9SwS zDvK0B`DOWBu*gUAB}+{rhw^?fpnZq|r;0jH=qkf+=DZ}7!42M3R066kvx97%ujXXhA4m~jy%7K36hS~C#1%OS^nYfS4(FinouyF2wwB8-O5=!eiCOp(z)g)IjA z!{q^GYczeA`@`ksehdisZ}{eY4!k@kEGGiB0AUd7Tve4X9or;{lZPcSS`x;1OK|H< zU6*7ro;u{U{8-#u=AK#XTeCc$ge6MG7CS0dApSx`Q3>g3y&bSplp>dcFAOBKX$k{` zLBPX9M%f9ni$A_Z;%4)52y{Q!O|`s^ zhJ3HZwU~(^HB{UkU5+gc6?pEt`3~!(kAW@mdx+Qk5>@weN=85+lu&&+$fWLd5~|#R za2y}T!>7Dz74=JeOu>Ix43Q&8(�hvVr1FMzxY-FIHiur$`lbyK47wiHhqWzBa} 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260503/20260503214001-Config.rsc b/MikroMaster/20260503/20260503214001-Config.rsc new file mode 100644 index 0000000..9e6e863 --- /dev/null +++ b/MikroMaster/20260503/20260503214001-Config.rsc @@ -0,0 +1,4000 @@ +# 2026-05-03 21:40:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="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 true;\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 (!(((\$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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\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 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/\");\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/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\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 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 FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\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# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\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 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 http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$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# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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: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:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 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={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +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 dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +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/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-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 \"GTS-Root-R1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n:set CertName \"ISRG-Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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 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\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set 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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Setup Global Environment for scripts" 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="Windows Update script" disabled=yes interval=2d5m name=\ + WU-script-run-schedule on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ + on-event=DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" disabled=yes name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +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="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +/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/20260503/20260503214001-Diff-Config.rsc b/MikroMaster/history/20260503/20260503214001-Diff-Config.rsc new file mode 100644 index 0000000..dabb1be --- /dev/null +++ b/MikroMaster/history/20260503/20260503214001-Diff-Config.rsc @@ -0,0 +1,5 @@ +2831,2834d2830 +< \n" +< add 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\ -- 2.52.0