From 1c7451bdd322bc1068639a637249f01b4617932c Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 1 May 2026 05:40:11 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 01 05:40:11. --- .../20260501/20260501054003-Binary.backup | Bin 0 -> 363327 bytes .../20260501/20260501054003-Config.rsc | 5865 +++++++++++++++++ .../20260501/20260501054003-Diff-Config.rsc | 328 + 3 files changed, 6193 insertions(+) create mode 100644 MikroMaster/20260501/20260501054003-Binary.backup create mode 100644 MikroMaster/20260501/20260501054003-Config.rsc create mode 100644 MikroMaster/history/20260501/20260501054003-Diff-Config.rsc diff --git a/MikroMaster/20260501/20260501054003-Binary.backup b/MikroMaster/20260501/20260501054003-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..44c3baab0d368ec1607b2c54828c75fa7eef9680 GIT binary patch literal 363327 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

ccHO}Z*x}#S#7tIk0*{9k!$%# z88vsDTTcgclkuWvrlqY+?^rD{#GQhQ*)VN%X{4y02#v(hvq(K&7N6~4S}O$IZ;nfP zOs$EX{p~mgymA`$20*vvSp(oK9(+Vu*!}pgDZh#h3Vdj7h(5W5{Qlx>3D?da#1}*c zdHmwo#_s)&{pOfNbf6Yz1w6DDg^YDVMlf}Wc8Fi|&_&cNZz9NX+;{4`f~wrjM2dzL zEjxXXfQ;>r92I5kwqW-f_=gR^BoNct~+M-Rpc_C+|Cb#pn@4<8TVq!yMCGkj~~{bKq+7XRKb} z%oIJ+8-Ys)o`_2;L(g*+?8hmW>^i;38+n8qp4mpjVP2xYV26EJ>0`L!9*v4=DQnIZ zKW$??ZfPBs(xPs5uKJqLJ=KR?lo(q&F%#BiH<8Hqc*G28lV3ao_1mUXnY^bfNyXY8;~6`RkRPFbO{$D5Do2s!_jbrL}r zrOW{Ody*(sgn8vt!oq`FoJ}uocDs+_hY_z={Q)$W+YCxtD-pOYP+p9u2e6CY<^Ltu zR0~dwfA$?&+w2^P-}PtDAv3zEj@z%yFu9dNKQhvH(eY;UGD@>=QM6$hjE6Tc7%hGo z#L5$SH$oMCm>bQRmsKj@2q5?G!b?SLCD)aLVc8l`BpFY{-WL7PMXX);&pBav0MqqI zVL_aP<)K2Yj{II4U8$6&jdwB0S?rjwJ^LB|Km)C@@@#BUbw*+O6DuAW8g`R0-lJ4F zT?VqC1w{xP)Z2mE^izO7kEf2X-0|Crw*8@4MSCWPI3mxUkU|HdGDu3Uo7bK|jj(PB z)0?+JPH}wTqsf)2f;sLYLF}9dAHCOFByOw?P#e`4h-b96f;1v2DAHUw9zK3?#XWnD z6hk22K;3jDf`1&4@8UPPa%SSKG<5sShes0hZ zZxqoy?PUix%*1}kJr+q#V^8R0HN)eHFSzLT@4u9a^MPRO271QHy-B?_xhJH#IlXSN zVk>(%^bEkP8M*YS_{PR{f?V2cTKY{>qOW2U7732nwn|H}9$843)K?E_>EGWZ#*gligbgNZeyzRsbd zCiBQsmP8VDt>$S8nT;ri@UuyK144A=iD3pz#I^3Gd)I zFZBQO`#1qD$tu#Ec5V11b4_|FPH$U`behGTe{$I}ByjBLe?qE?9Rp5=I2aC!Hh!W> zc9|oK%WxAKZ^u)GIYNwNl0g`VA>6#?hPGrh{_PN;>D4PRM3HC}pXkj(W+IA(qUxNC z1%v&Idr~kl#_ARyQ96XlgUn}ga$47-wspI@+F+nAK%*$7+ppt7jA!K7$Xb%z3H8M{`@65*LuKpUO6B=s@*}8r;2EuT&jp$2pMR!edUf5qoC1h}Fm_vX$jqxft z+dwyt;Y!&pp{mQ>qM@ryM+4B!tKt%T$s6k`7d1#6g4PReq+?+cTpvnNPxoWNBeM+V zH%bB#A||MeR(2!&2}$z*Sc%L zwLmsv_mJPH<3(1aDC5(6$hqC7to_VobV!__T#QPP!N8#U#P{N*gz{uql` zDEpb-DTl*ob3JqA!Zb%!n6cvO@seNUSf_mtBC?{Va= zb`k0SSxjS$6y)@VHhS(uTC{OEN;`nn_*=&#y4i_^hUc!Bl}S1Ktx`=F7fJ(Q34Z5) zxq_q}!1B8$U&t8R>@}zMQAFpdw|cZ2bAnJ~d^%j>Ztp?0Y-xkq%N>}zxI0$2ICw}K z;)@1ZW{MV2eHiNA0Jw&ALR|cs!BLs!lBYFzWyElRFJ2^1%FB?>5vbD(?vH% zqDPd#3w1N?gxxtKT90ZtrjB=>b)~{2IT=oMK3hq`7aV+swI;(b6qT;W^ud_r!8VvmL_6pY{?*luBK|(VknQd)r5y_Jgu7hdSlG6wajck)#@9UytK>0~G!n{0ee` zctUtK1cTU`^emRa-xsY_3l znqO1jmHZMqs}?Z+n&7rn{VoJQXiE{eEA<5fQ>1lkG?otYI_TnEb=O-OvdgPh6rD>VovH_$H;dU&zL9_fx$-Ba&2o_q z(GUoG?(Adkhzz%sZtNU7wmYOAR*Y=6z&7}!JiOt2IqDb-q;cml(J>Fp%b_zKDT;AA ziH&HWPWj=8DQu{v;qBvF(5K?uo;#jLqy0(F17104uM~#vP66I=jJ(gr4y(1RCdGuv zWh;UKI5%#xTXx<48s-CDW%)JnAObKP-^?A))X& zr!&}G!aZ99W{J}m{%(FVQbK0%r7G#S!A@LRzVbA9uO8lHKsinJHQ5z$yy^tQDBsr& z(I7SF+bn1)4B!asWQKpLKFzv}Xm%3vy;!Aw53WEtS+EK+QRD-SADL%q?-dBlZJ(my z9J@XhK~5r{fj-j0c(lPQ#jD^LYYzk+oXqbZ)bQ&5cZ=&Fqk3nMH3ps8UDTjeU>xH> zR~}u|E)4;Q_PAHD*WBi*Ypy#o+7}O<2*Q_dEd1Ej>7F9v@KH*on1bXrbfUR`1PSI)8J$ zlq<}l2}(E~l&h}>P9D2glv`;!gDgLn7Tr@V`pFs`src9mv4C&P8!6m)&A~2Z5`!Cu z{5c-)^#|p~BNa(qx?YvM40ZGp3rJaq^cl~t5rgS!+^HwqC%?}rr2OXbvLpM%k<YJVck^syj@j2kZsENo)z5h1wVlJ-Kr4J@d_sJSG|&%)$N!15)NZU+pQAR|MOvH3 zYZt)pskCBbl*TETH=j)T@*RuK+pX)|Uj7_`)apoh(e!qs zK^Yl|Im+KPt{~_f8*%wo2uBatU8j5(b=;S#HB4&cvj(Ncud-TP>Xy*#O%%{h%EiblDU@d6j{40}j&f+(<;iGbc6{H>!Ml!O^vjZuw zjS0)F00rQwPYy_~J5E~T6yWK_bzMj7#D3O5meq4O+&+DW!$o;}wGx`lbB`2?&Qz-Z zFT!hO{8?(K)byyZEHY8La0s~PV>4W>20quQMBCBFosn$kDMIKhPjm)+H-nky0`xf| zcTi)8O#3&RrO<}GN_HMZ_3R>ksf+E#1SOl@#*ls#?7w#P>0DAY%1jcRc4}2{R|s5q ze$&Q5YpIr~lGUt06ZcR~V-{C}~tm&Cw5}{WQ{f(vlWBXxl@LL!kX#rz^t|Oq+0@~ z;9u-NeV8lq2Sc-YZl)9WL2IMav{KdH{Zf{(^U%!G^M zv1&uB@O<3;V92S@J`xqGpshL3aM^-orGl~LvBdNVbhqYOtsOpU+r&xpZX59bUG3Bj zBCwjG6^uQGnl!typkT`EVty&_Jv!$e25Gc6L0{QIzmk=7UWyIv{#eN+rLfN z31LaF$sP&s%&R;tH?3Y8&`<7G7k{`N2RwK=0%-Ca3EayjdaS2SkI+5P?5e1AzwW?z zEG@C?Qpn+LH`I1QhgLTEiaS^vbIyEirxy}*7?hZ)+LlZ1TH3lUw;EgBZcptXyK3lP zMQu6n8=Vxrh1OP9T&EoGS&y;2_=uTX{Tj7V1O*mM4_tzM86bA{Yc>k%!LqURd{!Hf zVsoPB*bscZ@Z`vNTUQJ#4mY~!p&iX(LYrS-IC{k97#1blu4?Z|yUv%tNQu35$uur< z{;n05seDO(5I2(64PG#Vox)yOIrM+B;Eglm+|ymt;L3#`2X1+~p^CBwk`Sa#DMH}T zRkR;G@7c<2_$lMmQ2&+Eb4bEK@9&#h!-?JljiR^12sDznDOXHAUVX^CK4SFq+E&|7 z{8k7PK8F;lZ#grDNA57F*qVpOz<+T(5G zDhd@PwL&oU8ibD6%sM*@-s})4*8*N38FG<>fmq16WOtI;u^l2!F|7xEa$23^$p6Df zqvWhXbqqtes!k4d+AOQ+;s}b^*x2l^kCGkvL4m_gcRRIGyVylIZRFWH8^cS{%K57= z`$YEaY#-J5-3zT(2CF~0AT9?c+CNv&Wix=jD`#k*&wS$%H6n}Q9Wbx74f**6LW%H} zE_%mdD<1s2eI8DWCxF(5i}wT7p#gV=i4Cmcd5Lj+Aq+Vh7#Cu-RCq`M;A+921->o= z%Y_az6LkK56rK$2AsRj1Ggd~L@5y-Y=&uv3t}x*f!#i&Gu2ghywt%P7!j2|d!z$0? z1AKcJ>(|tRP$L^nqbY9YW&Ov8ZT3fTQw22vkUR0tY} z`8984B>>*d^Vx{!x3_-om2jH2RkOBhb|){oWi4i93cu6h@$*~}q>Rqp9wD@{n_NC)1+nB?FW>ITLzU?#Qe9ViCwn8vg>tSobjcK2OxhRKdXG{kC=L8uKgD%R$GD{mK-Tn*9&q9P5I@ptPmm zW0yzFaMTVjvb5OM_t>v&BBNlSA{8WyNA~PStX5ooA}*=&#keN28cr6~LB0tp)PGmV zK6o3gS;L+bN$mFuKk^7bK0e@mM@6QdlvIa=^yxi$v17S!M4?j|S&;EB5k{{rF#*0k zv)53F3I@R9%+2%9_OSs^#WQXK$5Dh+rRe=2BF)N8EiJ@sQ&`q>V>K=C)AsLz@Mj&4 zC}7pbfNS0qL*HOT^*YG1E~kH0a;AMV7|Ea(Nt^qJkK{qvt>K~RtL$zI4=dOZhy`QP z`hRG4b$anvL^Dj`s+nDiIpG8#P}W@Xr?--`Cjin&8_Q&nH1X0fIR0S?8k3nkj@W;8 zwENGxJ#r}ye2{KtZMkh-=wr9IzW7to^Gl+ay7+=D!i<$*dmb3H+Q*g#D?L@^G{!m~ zk<)h-XQqr%O0@aQNVe>z+ejG`@xoyr!PlFQkdMrg`oF-Tn=*i#DYE*p z;D`v-Ub}wL)=kHWh#}?}R|a3med=@^N<|Azo=hZ!9yT^TrOFNm>2HcsMiyfB*rk4+ zT*o$XMC8jga18gv1al%NwI%C1W*p`v2}i;Mn|fQu?g1(P;z$gNjUp|3Cv)Na1qjmD z;Z@GI)F3)TNegvC>nJiMSS2ik0+mEFi5T=7sV{pqHJWTuTOM=)0}?UlG%~t<@VaM|)_ely-LNK8bP4!76L@StoaipDI zyi#nI!XtaR%X&m{OT4&%HXs9J|5Be?O5rB8ozW>Cdj43PIgjxXoyAqPqKOtM?oj#9 z=(_WY5ZhDsd@wk8TZ|)k1;;%ua4UpW)NaD=8*942N45us%Jxna$!eDI8^C?jz}|OC zlC{SOiY{S#q_D@m8ZrHu5B6yb5Q=B9Tz9{y5XhwXKBj;=ZF&JmoqYu}?ghYnFK2f^ zXXSdrRb|u8U#yrnwhv$=aO`o@!sV^Iv_VIZCTu7v^R^4=z2AvE=h8!N!S^IRbyuQbR zC0Tsc?HAg)Qh*y}N?3VG9z0~09B1ngQR;J4w<{Es zR=aZ`Hy^Q}Nf^`q&{0>s#R&I5J3&v@MfKTArs@_qIqSS2?1AZUBQF4|qb6Ae4+M#! z9XZB93QF99#P&}(WDeT5DVfWoB0~ve&Xxq!Ss?OJ=kG8I0m9rovN4HE@|DX_z!$yY znF%}yaUiml&2=k$LsnXinL1e{U5CPkpQ{Cb2FcS@e2Zw!f^EI!6JNa;QHUcMqubhk zbzhs2>D0Rwgu=pOA;scf#-i}u=jE* z<^l@Km0$FeP)xkJg9(IVfkC7tSW`+u94!`L7?B2p@{;{MvphXsz#)Bu5Lhmqn8;h~ zK$>R?X~lrZS-0F)YVtaVc~NT1qH@mnY%*B~DPm9QOhym#R7*xtQ2Et$Mx#a$%9ZtJ z#fUL=k{g^s7M~3amjZ(ctBMOTe3W&vJIfo^mEm1T;TJCLm^9eV*q3Cl_Z55HATDWv zLQP6@B|zXrbrqhU7Hw-Cd^h)NkIVWD)I3k*O-exAp|^ot`7FVO zG|x5B09gP;)LJyl3tvCm2+=2unhkgTW{x2u%t5E|4*9CNn|CrEfW;{YY}*<-o1`xK z_OS+(p@c+x6ZSsy<;j>r&GEkgODLgp6A2K?U844aV<|`AFd>@~3E5Rev`q*~v9r=< zt1CrsUtZ(yLP-VJuIv9^AXYW9`4%vEALqJ^91ICHdHLQ0+%%|^#7$6$E605wb`(Kf zhUy81mwRJ6QcE={xBXL*19KRJ3!S8xoVLRNJd6OjNz_r)rcCO1%@Qv(OcWJ!yy$A(WM{0&@}4u zhJEe!d_|RiUsQXso;7}uoAk1H(LjqoZ4qFsy!Bevthkz$fd|bvSiOH`*-*H&TBEEO z@S=(L%8tueDbs_8ws_7;UsPlC#!?`&Kxh!UGw-%o61ILsQ1Keg1ig92wX?y$;9C=)3Fxw6%>FlSg zcY%blh5J$|5Z#F$YvV$B!qz^#liO8sI2*?=pw(cd0(&Rmw6RgExa;FsvK7E|b8@Ae zIXTA&5+8{bjlGuQv4J9`GT6+VkH8+SXfcD7AwzmgE)RSWD|Rk`=cC2${j5v%3%B2_%U87|SyX&TvUzr+3G%uB8^v zH2ld!oz7*g%(9__2W+T7QHQj;H4UZ~Em^1HImxP0c8~iY7ODa-4U4ae@D_1Ps;JgM zfhDxr9%QMgxR+Nz0JYy{44nK8mq!PY79r?lxY z`^D_KyC%gc?Ikacq2X6g-&m9OWmY1sC*sAMlunPP52Dr|`OIqhTonB5_d^x7_@w!{ z3-9Ac{RJ@s1zLjl=S-=t#3IQ zKoWHVJt-)oR7w`&CwW`v`L_n661|dIegHg*RC6!72_6CbT;)7~8rQ=zSfte45?8SS zQzQB-p<8QVcx&=HVOWgyOmvg;_-$0u8r_(yt=V1-9IeLkElKg@Q~!0zI{rjY`38I*3zEOlZ)sjcJ2q`|0y^3=7#;Ff#$z)XLLtBLbH}}wkt@4bfl z^5rJB2>5zDzUd7z$bMs$;Akb&%4XL5->8CZYLl?N;}Wt`3P7T*=%)}GR_Wd;1{jy# ziG3uygfv~UrL--OQJA#xr(7Vn@Xk2`$J79R{ly~cmW{snX+THpmee~8F-EU#KXs>U z9!H6hGcM;c>*??DUBSA%%mpX_GS0|t^ibd1-+ z2&(fPJg>{Etx3)k$gI~N7dIU_4Od;$U`&?z{|J2exnqZP9VXd4+s#Mmqh;P%6N@P^ zHa@mT4)^QETwh0Cy5_qV?%V00$Q6aql{DY z81qj87D6#?Z2ZB(AJb@s1tID%kkFiDPvSPJRrS1?jC7_ zoFE-m1+Ck_w7u|)=N2be8HcwcEHXpG@O_&4Zt&7O8Yx|{55Z#wVij522U~vf77@Gy zk2&p*XnKK}dkl};4PH_}Zh!%E8*n4CrU6-8zz-q%l_}ldU`Np8s%CERRq!)PBcT!A z(GJOQZ>DOIf&PJ!KrRyb`YC(VFnyF-gvjv+8^dIgP0a$x?oAUqF+Ej2^D30d$KKCo zQ8Jd>AD08}I`o#vS^@4W)=N9`Ra9k6aB~=$ogH8lOwqVDAsByPkw3+83iUq@UBxib z*yhoz@E{)KfDvdDPtOkVha0-czLS0%MJ?rwE&B|r>Ih$zkaAQF8M23$0^AWw!5uX0Ax`R)~@pCEx4U*yganq2v8zv>0i z6g<8&v+Rp1oI2!jISFJu6r=YPjFNg`o5WmTL&Mp!Hk&H+_TYtf%6d@Hqg(K%nCgt; zjoRktjCQZ}^?m@k0O^JDkJ%pc>jeT?0-EjhsYz|&FgW>`AWk!X!j6t9yDB^;yR651 z+kedMlyhry6WhX-JG)6L8)^vtS<8&rFk_Oc%ZHlsua;mSPc`SpBgEiUhm4ar6murm z>L?7oZ{NqWFVn2E#<0$MUe;ZM_xm%w3@_vzivX7f6bdr3O+?ji_F4cSg7v7I>}!-)Q$X%x8^htIMau-`M>WKGGj@fS(yO%XW=7Q0421vy>=Uv zh)SASj({gwX3+R2O&~k<$=Uj*#Xso~Dt(yxPuE>UhEFnrZ=I&hy=xzty5}{lbs@7l z#|Ng{aFBAN_90_N1#oo#j7!0>cG|>0#nycp3l!?L7FHgoqF~8}!NV%RQP~z%bt6kK zSGvQ^QHfAOaqtHdv%lA)_Dl%yL7F0ZF`>`-kdVRIkWka3CN_6s4^(yeH^Rc4op$hi zvya=o6!pmxEO!}|P2*zSs^ui7{S$=5M!vs5q=3(VTI=Jv`*>YQ=rq(dT z(gG3vD`U3?6hwT0N)~8!DCtq_ooPrY{bLMo@LYsLTN;mR6qV!G?Fk7Sc$=VM&mEgr zD+LMqV~2=wTC+6Cu$oRh!6fKvd`5fKg%`@P^oC~$ z$M3^X?PUy7OM%u4jd1`=RJ}DPe-3}?g|_ifLdj1V;0*=I;>i8^LPoHqb~bERSjrji zUCx4GI@V)BH~4i4y@6MEbCT^0S=%s<)7-(EmLATy5I8%BZ2s;wlzOK$Il7M^Z?j5k8GpFPg4T%r%RHub>$r5j^NPZ=nhhzC9ZK z!j#fI>-YOG?Yd;knS=v2C|yz9loeL9YWLyYK+Z(Qc+6i(XF5yWHzJQs8be}T!)&4e zpVujZ6V^$AH5@&$AjDEQ@yK|DN#-2J^BI7KMuw!;D*a-$UPXSgok1&{Xl^Ye!z#~Q z|JVw=vqr9%_L`Wvp5ha)?US9Elw$vZHm8jpuN;g3G>R2ungBwN0K-Q`#wRTNxS#{N z((Ib!5Q0HDJyFgffMG6fti=Wv0u@DBF;?4;A%xy3>~NObvyEvTUYnPFv7q6w;*(aU z#kHnGrT+v9yB0>519~OwGPFvfsYXQ3qL6-2E9!Y$r@%2CvJn=_3H}}m_z7T4K7*JO z2S)v%I7Y5eBr>bQqH{2WLq)44oEN7As_SZU`82>bdHeB2;VYqf0Qyx$85mmliV*<+ zKLEg-j}Mz!V67)%tu(rga?0$TRbpi4^@!|bWNjr*56sc}A1!L`y^`J*?L88dxta2m z2S+A)3a;s%5ZCtUkQ$SEgqzJ4%Ji9d#EnCzCb@E5X?TJ58nx7{BBF_m%Vt0V86Tgl zk4HdD)w(ORI)S-jTgY&M8D77;0HsU|@Mme(HKNMip4yKJH>{aBH7vTgm7W0V2%gT@ zoZn2$7jB3!JSsI`mK{B{Q{uE@KD^RTr;2+3IWd|f=fDQWuk9@vyZ`F<-0Agg(hr?4 zAbmw1N;!KotbXkb#d3MHoU4b#$L4nhX2-vpC~l|D(2-mJE z8tLY;LZN*d@}6iD#MAQwNH_|lO2|^T+KQK3cR#FMlF3KlZ!C# zfrw(gRG5{OXt(EiQkBrVQP~ZoF_f3wNEJQ_b(c&7BwiW@q)R0MOJ=UcamEQMTuQnw z05ZjJI3nkpq5eN-FC6I0Qz_2xUA*UpSitUEri#2BW&Khp>1mhkEPcpcr@tTcwO9Fn z5qxec@dI2anhuLPPty8l3$DvWS4CiR)$zHsqS+NByxAHe$eBnxrRnaciwu(WcmG57 z=z~#QAAKnPQy96t_RG`a*;hQMT=IiSIg!ecu=)l zh}IT8;XuyBdw9f+W!n@Y}5coUX^ zbm6vI&mwlrrAkY7pEA|ehup5Q5F*v?p%oo>!~XFkUJl?tfUs&z`qUvD%fM&Rk7P9P zNZ-ol9R@J6h9qm1ot6VT@&id{xods|&Um>|;yPqUhm^#r!Z@2cFOesGOyJB@P)0Wr|Mw=F8 z0uT*(G^s&=-ujc_nx=LJ*xMfs8oQ|dVQp<-zT8T;UU@q5jj^}u2lGdT3~=#`KNU17 zTcYx6d{Aoy)L~HBn^^MD5awG|yA$k0 zcfUjT#sf`p1T%D*C{7co8mD-DcEeTZvXCHqa0p;rWw?is!v^Vf^p z>!0&V9amsu_K6B+x9;omXu(g>Ym>K+Y-zt;VT)6Y2Vx#Ph zPrboKee4^qee!ePGz<51q!4>Q$C9yrwf;j`K1)SbRz2h$uzP^C3T|*tmfO<5sABAM zQh9#67*#i6I|J-|m;x?mM--93VBT0f=aD{BfSLNo9hF#=uXGnNTpfuB;jtwENDFW= zVvtE3%lro*%JNB{l-v!Is+gKl7w&MY2|QKC$c0|d+RXn ziN!F3!51bi*?P|!xXqzB_W;^!BVB}eQZ+8^v#ZH8#N(G(V{P;zy zL}Pt<#rURKR}<;qIwieOoQ#TO*5i!dR$mUNd%s!^Q885Bc#KOKv3RV+G5VowV-OzG zdGowL8P(j@SWaa7Q{lrKKgs#9VHc-b7Y~}uRIvnXPCgazwgVNuVmwQ4$q-MPP_u9WHQSpY%Z-fZ#XN`R^pJdK z7Tx|ds=XM!ZuEYfNAA>+HFhRMu*o7B1Uu39_HseQm;f@X|K^>IV;YY(x8JkiwGu=s zu=t1sT9Yf*Jb{(F~i?)Nb+_ zp3P#jC_|1-Dzxn}{>l#Q3IY_~&v^+X&LN)N(wA-(5i4-O@_BVN$SvXVyFE(GoI~XVqyBBUE_FI%xDfcl$R!EL=Tf+WT1n4b1 ziLzO`xK)0`IBKk?p7zO;1N|-9qzEYI3ww}XEGYpdTlCzP*P* zstZ|_`%xh=<17Xj1U7z1#gsZm<3_MCbvGEf)UsCp63;xEvBjao{dslJlxpE$k*2#$c9W$Y6{8c@vZcr1;a zc}4KB?*Y#Wpp(kohJBh?!}Itia-JfrMSxMfA_SR|t-wS;JgKRk=EAWkaBFh&AT$Jt zxtQ8q&uh^3OtH|bmZKtio|yGk(C!zWEEN96j`qaEEJPZD%yJZ9;)R<%DI=nQo1Op? zr~V}=F$V^*nDUO)-J>h(*@yF4_13F{P|QFoxn35ppLqI>isL>hzeq2#IfNOFnEGD#P#ntNpji5Y#=V z9Z|H0s*A8SV$xg`cC;`bkDDpV1p9D>yW6R2Wuk0!&oXwaIC+XhSui-xYl9L1jaB0* z`hQ6Ru%ML!J_p<@+dBK}awpqa4Z(rl+&7_%_q_hlHRIoLag)V0HHYNZ{>8HK4&*|e z@NsAg*Kfjq3!t&+koMPhc6jZPuRMcjq-LhpqfO0h1FRET*5Q9y@x0=X0VbA5F=kE6TbtqS>&Ko>@LX-RwgWq4OH+W%;R zvlGFA^9Z~MIh)ExN&B-0gMzbE`G_t8Y!fOsR@A0M`nnnCdGA{q^BHUlBCba~$g@Ud z;&!@&^3g40@~UDlo$}s_QMBchZX?0M+F1>r1}@b-GS6m1?_S!Mti)0W`luVi25WQk zdEY)RPO(U^9p(w+->*oVs9#1Jx-SvnHo*Qj_)JN5bqnyl)^K^s05Hq&?ap2C zh{phOiAH=$3}u6mtW{VKDP7ZwTcp>boIbj=Q_?In%YB%3u>=*?M6^0rKiUXF$Z0Mp zXb4DTRd>X`|K-;LuELxY%|%Ai8@uN>2d0s?lf=c^U-&y~_sWjr5ieS4 zXI^?{^n98Y6L5`e!@BzrhFAKFd<&X;w6frL1!sc#a#{g4Km(gW`gDHZU62aEVpi>lmu&~2^jMI>Nl_IJiRXABoIYuDL2eKMhzeaMZQ1L@sVVIT`q zjVUBNRf)V^2hxb(uI0;d5R6b-U{NC4`1YjQ^1Gn&nqK^FBPO4jLEhQ!{=L69n0^dy zV>@;QebZJfdN=pAc4}rs2fpXCnkn|^5@*`F$kXv#L1U1oeZQc=l5##(#>qRbEd%`% z@hnnhAaRw+aOupuLY4$ga9;jdF@x68Gz+q?Q4wRH4l(i?{j4u=a~?^}p{A`tSPxrO zkKKiE;_$n4?3E469={_^0_{k`CG)j&M3~mu8rQ^rtmi5b*VMq3la9|&d^9-^#^q~W zM}EC61>8EpA++nn1{;QGz)_hETsP|5(oy;{CjK?G8iebs#F+Xr0?w)&eG)@fY;58F zN;OweW?yas|1;9lh9^c^(v_8H>E#n7^#kcr@1>I`0)f)i0zuGX??OH!V}4R;GySmE zbJ@`*VNmcev9ac$W_z69A$8RtY4vHmZ(u{nO{%Qsl6U~(+Pbq~?vuP{T*yy-2nX?W zadgqLhz$&*IZJO+@5;H$4(jvX?jhmCz_=wi8KxwX-#v&%(bAj!#NAZSV2x=)6W@bn z<@!;=EMCgG7-GX<>%{hKD7ZG!y2rB;)8+HwQFfQ6O_CxxCn+eS?9*ItpF_^*AU4#s zhE6^(3bXm4-zRG{buG7RAi-SiP)YaE5ejU??ImJJFAiubvhF2R&lK>dck1e(>6S0F z8vCs^I8LKVm$iKl5Qs#s0IgWN=v{s;1!Fyp>CgAS zD4N3>zTNygwz9kUo#A=!d2FumD9O8GNc}6q!EWHggbUj+u3bv)e8mqOZ6NXc9Vk}E zsazc$+`N~bV$=y4MpJR&(^?R=HmJ;I=J@t2K%nXo2jYnNZT!H_W=rVk+IteS1d4Mf zqQpZ$qO9ABDF%=ihGK%mXM~vDx7Z`C? z@M^h6i6}o*18vj15=jF|tt%!4#AsaJK->*utKAr+?hE-{0$W|eatXd*iW-%|f4*t& zuFqma^)4KA2U=0jR8M6034Edu-ocqyVWknhP^2NhoUjFk2@DcmqTgU&y(>LJQkT^X z6rG{u=9_{jqs-1D1BorewN>|mnY8~UjlgvayNk#Tz^IyKy5&3feYsmk!zATkNG0oj z!fq|wUE{O#jjr3QdLa{@XDRk5tOYX;u*Y7HC>p0rF?};9k9sQ(_6w_tOaq7DE|ZYp zfB}sHqA&$ONTSFn3$n3i38N&ObM78fO9V4DpOB2BkY`ep(!af9WgYWsSex_q9MeYF zNHCc7HqxmUCJ%DRC1sL+81vo{$)W~ojbo>m8Et!wOj*QqF>psJ?SPZ%9r3`$`XT0< zmWA~IbnB4cDeTOC)H|OsD07U*UJ%ly47{;aLNl01jgI72D*^y*7)PMg<8x8?RiP^h zn6Q^dqM$Nz9Y2tJ&BmIj^gy`l<$yKXz}z>UBsL0c!fq4(3(6$rY`2mFb1Tyk*Fm#A zE&NZS+#rpEwJ(S}Ihw9qT+A^s73AWyA)I)La}59bJ)y3ZxJ{Y`)8QK2_~WMz=D&FB z5}VZI5y+~#XQZUEy<3+=m3k7k;=1NOIt$Z;D}?&C=BN}pM~yCNHs&p(B`J*Dy9Yvh ze?2C8*e(Y5X;0`&)ebVdV^!lbM*Q|qA=Z+8c8c@HSdQczKy0`be1~$#S^sReJaKd= zHG8g==)ht09dHn3YE}EonUx*_Bi53afwtTj2g->ukK^OV458g_8zfG)&f(g~{f}<# zo`w}WRMcq$ZObY_S6KkMqIL!Qu)}uPgJz+VEc0@cKFEZBfK(e;Z0@V-r+<@Y;!Q2K z7(heZ4~2pzIX8sd_ZqFTYr1SR=ehe+@|!qT@(=SWNOiS?^A3MX(sWNPO32|l=05!f4b!Lw+-aQu+)(@8WQfR-19R z6j%4NfR+%8PhjYeoi89L|8xjQrv;8{14{2PG*7j2Rk4ig(4NFXoyM?++${TRSf;c) zx}{XSOFR|@*MBulAKyinW<0o#5+9k$tU&qmrONFR!Jti?#A+%-mBarKlW3L{bB)xe z2TEy?QezGfuY7?1{;JL@o#1e!?n>>6PnD$w?c-()hwn?@Qbz61@N8z0T%s2dsDuRM*+yHm@sDg@|rMkP50b0N*?G{Dm$g*@#;Y2dFJJMG0qzjUbhNIX`c+mPeVm0z8D_#QL2D`Y!&ev$)%RAE` z);FBz-aEt(5*ykjF6sRr_7urXw)$vqHAWri#*|9WH53ZDmTg7gk$J?HL42`B@Z99Z z5*-#RCyD=>PimWY%S-I$IScmYq&x--xi_$Hw*At%wFH8ql-}{O*$d4}Ar5isPb8m8 z9`N6e!FX{#ff37-oB+CA9dl?G@W|dlIspg|q=xys&=6%=vg$3zvH17d^Z-v!OaF8o z)Yf-Xwxe`%Zq#i1R@U0FR!}1E6JS3Xlh=nc*l7(AUj#@L{^^Xpz@5J;K+6*;VB{03f>q>4Y$^Ox?G`FDp1{&MTXEHr#&EN9 z)XkuK!zcHU4_fK!T=XBa3cWO&OJ`B)y{LqS_t-GaB8;lRIoY#rvk7nRCKg<|6XMM`(QQm2UN=1PoQoa(dxfV}jJ+(W6CC-2G|ut=9c?Xdp;;4D?Xk z5gqDr2$8|^+sbcj!Od-Q|WoDW1TXoPa*{;bh-;$Zf&6K zx}Np|D*VZd7%`Lwm#Im(WHje(;|J2f2fY-YAnK=SfCuxlUwV~%oLnlUoh^62 zVJW!Kj39#YI6D5UB(f+&B%Vd%|6t-Z&m>TMMziy~d>Ic$-Qbg8Y?O`*NABfBulX{9 zqD%JgF|u_BU=kB5+OETvySm8*l!H?NpIVVz$eaY5P2(W~~G|C>XqwzBCgf5Y)s zht8+UqW_js$C+1zpw*Vg81H0)nFnlMimEHqjG<74mVcc_!x5Eu=R*yxQIT;zLVVO&idsR? ze;Dl_5#R631~OxUKtZ^!t}fvxh7?wcB9+>6UNy-p?#(fIcJuzw#8+XbE|U$k=OMHB zvv~?>0C|&?m|Y4KivQBJ;jtQ_8E?&2@&9DzxXg5)7kc@k>4|B4R#qTe{ZAaFOw73p z0*V7S41Zy8E6+`b5j$p01z{`=TMkf-p$z0}b0g|lOYob*zYbFro0Em{f=X<8HI;e% z5IA+DQ#xQ^D}sGfQ7fokObiILSQ8(2t&?Dl6$$aG{q{EZpRNZK$^XJb|Jxg>-Rd$h$ zA5YjUYm$kFcfec26paS!3p+n+dl*|}n0>0_yQV8Hpd?OIJTUvqz5t2Oux~i3pd%p` z-=+NOgLW>iMfNE~lG{TNJC-5c-@23dVF<QeOvMJrl1PN7gsR*uO=l{wQS74Vd*Iff8n58{QdF@uk)PiZq23+UD~vchtIP$u4d7+6*Jxr%8j!LB`e;70+$$NhP~ zKh+Gl(p7+j-*c81OiQK3m?yNZg3KI){rUbwr#2XaCfZ0+nbF72`#4JM58SJGSAN^yMaHKuYfv4G$CAltoEc@ANOq7 zb(v{S3Gj-0cO@QqVsXTB_Jg}{+N7{>0Y+A?<8|Hno$>WlBx)t9B*+s&AvHgmQH#%w z8Q)$j5`Rcafoh!+J)ddn3P90NV5Z`k_YLRTEO((4P^M)Jl!6z%loCmN8Pr1mG&R)P z39^z5CDu;;jrTTTaA@J+&AF4of-g0&8Rkyo00!r~AuNq^iI<=J=2Ud)Po#arGnzE=9Bq5ko1>^{g{~b1Qq>nHSBu zq_Jc6UG0R5gzecr9{(pXbOx;?U1zjWAGRUKN(%H| z#97x|y1YP{e_P$mhE~Z#xU@7jhGO3tWIMTrQWr};1}kXPSX%b1n{Fg%w@07^@ZOLe zfhuQZfZO7t&UTiqszz!R&Fij!+qB=LAV)M(!MGpf_AUTF6ECTG$_0X1JO7-4vPp7v zdgQbw1Q0k?ByD6?k*v#L*;;V2bq#J!u!Qrn-NEh716D4Bq@UXx1CMJKv0O2liXbS=<5nL}C&Kro>XeH8$b2Gp9?k`kO)6FRi#h*x^0)f) z&E6?J+8H~6i_~*yfx09y=iNP)P6VY$@sGr|9=WtXlhkmc`jn7CmIhNoP-8iOhk`8( zM9U-a32{IaKZWsU5g_|K$~W~er}~UmQgD9BhVV(HTBu5H1*kZxy&F!PtI}#uqV$la zk}`3dT0>huuF%QBe?rQvVQGrf%h_Z`x>_BwEi$E;4M`~rvtKy;v946Bn#cOtjGo}> zadZ-Gd$mzf1sx(EHxlMxgryvZs^@z?t}OI*GQsY4um9-={pTMaG#+)+Gt9Anj6%TII4Lyy zMhN(fSf<)3Nh65%lkHS_U($2|Hb@V|qkLTX}60JtyP5W$)lvo4R|>Ie)4ediQFp%Q4e z@uXmj{;hd%Gx}_GqscKkrn>X#eYpRCTB&%M2Tos;;xcgD@qamKop4sQ1iEY>$@Z8W zWPL#vBuh@le)?9qVKnT}fgC=i^9`o!lUB*HSL*`Ncp?Ev>$L-W$SnkfD0Mdn**t^~ zkGu+1IHD2<{t;VaCxVY>Be_Mu(DN6a?A}X1;+RM|+P)9WyX5(3arB?Q4nsH{TWVvg z=xLQ8P`?4l!3GD{U3I;%4ww|s2$k=!$gz8M&Q`iPNPlB-p&3C@FnlE=JUN*KcOS8r z9||v@H66-q8kPO+xCK3AE6bSEo5%afa~`W-kw`+C3Jt3}Ua1uLYn4vS1$)2c4Ldbg zEm|6gm&spvAdb5;45s^MG1>W&6>i~?c6__QG8#70_7AN#9htCk+jWi8#IhjBJ`JEl zi_Ixkt%&Rnl1-Y0t3o&T9j?UL2rSsg`D?QuEp6XkV$MLBwef!oUm=gUUkx9jUVl+M z>36QnE;Gc=xg8#NFT-L#I>7luA+S3VV(2!66~Kl-p+f|^l**Do@9;`ed*mO)N=(>s z8P>b}nZF8~Hu+YCXnu)X@jeJEcT|ddFgFf_CA6e69X|LV_$_-DunZl3dq|k#vOzcm zpiuEnlx!@LZ9I$vCkU32PPh6|`4OA`hPcF$k3@o=2(Xt{sR^v&yjV#zQ8q<4nY!9zhCGj)+O+64TYs&w&xBPz}- z-s(Qg(Q;cc2*#=3Ip@VZb3YVjWH46hk&A+w*uQ~)f+CR00~W_UQVyOvv3nlS-#kWKzdp(vj_`CsmLO)vD%THoEO?BG;=k z;XS3{;|G&}-IE*C7RdWpE;#t#hSa?yWm6Gq4kk^AKAnJB`5d&FYZw^L?}0y-7jZ{9 ztkVOh_gpX7KC#D*F26?AhSs-k9MRHM^MAhDG;~{#G@W(>K=N`}lYC>}{YI%hW9Ur) zIJZKL64v)bD@Vstu>O(0UioUt??x*huve#IHOs$i3|b@yA(cmz4xSHhHbk~O2;f@# z69p~r95Y3&_quTguv=%Ctv`uKb)O#W4v8a{Bo0X4S-u2x+6+zOf@@_=SZ`Wq{=fL~ zhb3DP4LfLz3^z%o$3{PB5MnS+}FR#~~P)=E}Sa{V;!(2yC?qqHUEX zRkcI9tx7zQ09B9n?Z53(*y&=8?JnoHob1nJ_Q|JIRb(unw`e?ATmEHIqP@lWUlL6* zoo%2-E%&nm84*mp=6@1HEM4rMqDPz+yjtQtRP7|8K4aDB%F%ZMYY(8ak5byPn z%3_{xKNw$mcx>5?a{D9!tBo|O2||g&;;rF(qov$Mp;}U9kAfG^>O#%RKJS)I++gd) z{kge=wap;>)zJV~trTA4)2*_(An{Ek4x>JUTsW326`ZQV7DCkWI>3;vVG{K^de?_< zYH~fhnv0$Dnu(f$n;ic9U5e^c4>zfPoy_KOvmZwGzJ`oNDlD^>)yPS&aV=>B<(MQP z-x}OvsMoaOJ4yztU+6h0EKn7OgyRv^UU`~(*iqya>EDKfW&#=;s?QP$knh5s^L#n* z{|Xqlo|u+x(|9<`=$qq#|GwqIp)Kc?UG32*1Jp*mA2)hn9_%nNW5sxK@=4dNXGaFQ zp5u{qz+QXt1iwgSheP)sl8mQ1M6(PrA=6^V_XZh%TvH!v{eyr+l^4OVg)bDq-tVBj zu_!d2X+df`9vf7!E?3*b55g)bj2Xmu>V#YHZ38rgvLXLT9=(I{26ckWvt6Rh(#jDf zr!p=l!Ewk(rSwh_v0o%x&kT7;B)|Y#wpgAauwt#PgZg0%TW@ui;ExD_87rHQhBm$zREJLrB{cdb%COJRWN)=ucj8l#_ z-SOx1S_of^__u!o-sZg)QA7UY$K6p1gu=i*HcTE6e;>7be!VixC+ zXqEwStuACw)8Ept@~PBZIA{??QDylV&78=pe1uV5$1!kyey3es6^kR5eqLF0>q*Qi zG1%VA=XC)mX?RZV5;Jo7X9{HbCav5pT1&#;UFHf z1_O|f1pb%iPkwUI4@_5q7^P;W2lte4gP4C7f$mHfqZnYv=Kc9S9N8uN!Ka-N!M^-^ z46OdDrwv;%WBckrloA~L2_U3T4p6K&u*AMVq$=uwvO5^zi^!@RvpL+Yna)=G3csCo z-D^dTztX;70Dgp+VbPi(u9EXr?V90RfPzb8&=WX8M&x9!nM$G2=H=Sc+p|WR6 z^A#!8MyvVkPck0W4|UnrbS+TH+(!or^}mR$=a}Jc0mXJE5Dcg}KEY9K={#)wwP}-6 zJyz|TAL*mCAu#2%P1uvECuRD@P{n?l$^0h~U5uM6aRj)j^qrvXrPso3zQq?u;xxu) zW$eA1cG%)EC(>)XcK-Qp7m4o{r4JYrLRZe1B&aM~Kmc4n)% z6z3WfJdS{oOqegSlUtB4z)wF&XZ4}vq+RU(TxCA&so0tZ#o)0~$fZsz1U!!&J+#Fv za3D<{;j^Cq<6GgG5rKhmjSEIcraZU4(*W_bMy}on0&7^w;h>6J#g_4GHp&f+y13rA zX;)GDyxH7VOK~M6-Q`tfgx}SG>^dk^QQtm&jmcqZ!d!x_q^zLtN@rLI03Y+(}iow@JLh;3#xDFn-EX zt;H<_*<%4js0|ZhvVI$VryrYO5mK#YH~NQXSxX^Zph9p7VbF&5KwhR6wi&rJK5OjQ(3Lk2zobYFr0*0b(5Uaw2hkk}jCjw*1rRT@H70?+S?_k-k9^qm zPKsIeI5U6Z+YZ|y9cGK%{1r@}_p|Uo$Of{u8IbDKdih-B=tqFBcOd~^&6K#`+7S^s z4sH|~g-@M$iGNoAlgS2tI~8v59V1=$+cLN%d%l!Xc1~PkNG_ZGL&*xPscpp0__5_C z`%v79=3Jd$q|$VnE*SKe`+N}b$GEJ71V@;%PYa)(;|bWBSa0-*e77Yt65FhX63YX< z5}atpQ`FFJ_zx)zmPp_7dDA2!RGO>g^f)TPG(3%@AKE762BBq3vlD6g`PG7dA8bIP zRP1X}N)JS7+qhS_Xfs!L@$Gsn_&z6y$p-m$n;#Q-VGKDi0jui?bY2-+XXM|tRKbJc zkB%XVaX0lQS86U~fNl4;6a#IC22-C1&bgAvq})&t->$X>1%35z0`op!C34s<_$SKk z1g2^DO=d+dTW^Ir>-fYA>mTKbf>CGB8$uV_F`%A`Hz(eJ;CxG*>x0HoAoiCO z@DIlD|B&z{qEoe9GNAgP-E>=eU6P#4FI>08BxS~r2<-K6qPAAhZa89}c9+=2qY1IP z9ou0E9;5Nbkt?6~p9}LwsR=d2mi0Q#gywZr@i>DOx&XfzCh7EY5QThOR!#|v_zsN4ZD7Zh02<*j4^?!i zN#dPO-BA{^b0%deq=NiL$)4~*R}fi)p;(T>6g1UEX*HVMIsxes3Pa6Jba@*sFDiHE z3EFLWn(BMhlS>M5%mSc&{UndMuUU43>Y)fEg#HfDw&wXpH--;8<7FI&TJEAJ!~O@q zTRsvQn*HCMbElVzo%IstJf{F!JG`qzTs7F4Txr!kGimfdQ8q(H)_U#n)Xi`~o!8m! zi2h~+K8Kj1ii&S1I-{>*<8?*DG9DSr6Lip;`JAM{T1g`EMQdx$L#S)B?Wfb43Q|%!VK^}@;h561uNym=V9*%$cn+7^EqCy+O6LGG*&ujets9TZqZ%ZS* zrQ9yt(Hmh{vcJ(Mwhqk_dv|=QFTY~n{;eOE#43|pnLctNGlw;gAe!p_*)s@HH-c}}BU1<_1biWB_Zii+ zNAQct8ZZQ)ZKU(DJ|gRY4Hf~A*vGA*Kj8BDfwnqly#>pPcC+knac}QMS$NY6{J|+J zj2c5-KXzs;A3Tlc>i%n$QkCTUryEjimIKK~*pvh(Z5R_8C_7`~x4R zPRxo_W*T85Sp2JMbj`Q3v_ZFK{msCUW~w)zBD&8D*^E7wIcQLvJ0q4q#wf ztUqMV)XyN{FSTSdrfkvp3&FeiAM?)hnR<{a=W1|_|annl8yfDz?4OJn*7cMOjP*x5)rSv6MRL{!zz?_?B)BVc1gh66?C^$fY z1&lZ0^M6(%gRApJ+TeBJt|%AbmbrKX%LHTb>2Y4%t}wVQI{K1Ls&X%39Srrix_;UN zwJnI9n)Kwi*TZOh7oUWMMhV{c^JiDtA-17#EPsideoAx6$pQDQr8b~gS=mv_jtqlJ zbS3{mPEE9)t6x!whHlq&x#~dTB0%dTA;7kHg&2o822h0^2&1&;kxp|NwKN^I9&x7mZ1WK~VZZTizQ zD@p9@N(Fz}4c|>C^=*doNyTa`vd|8ZT>p}O<~AyR<=%zgMIcR1qUN1QxqI5L%)bq`e;d`q@B_MFpCl)*R@3z0 z?5l{2B+jLuKxTah`l<2F2khfrY7)Kw^=5PjO-WBpf236E$kU~rus1tE9?eI)l&8}H z1dSBVs2x^ugykvMe$(qAl2R^?nl z;T}qgH(v^k;331Qp$GP!JY=^`X49PqCRN{rirBj01;@TNJi-XM8O=(K%yr`;Fjnav z_?smRjt1QP>ZKX}^4P#?>D1`6JkLE+Ssxg98ZgbOH?P^+tEkyCI#knRg=!2phTaG* zN2B*U_O$&u12U-l6r-E4EKriycCcD~dxsk|bn$v0lANP@_8`jpvMYrxK3tM%x z=G|nPsw@kQS|~z?a99sPS#Ff3mASgM_T*4#^xvg2H+Bi|n@%c-f($#OpX2iG? z`;#M4+CljC`}6K~p)4CI(z80acZ$N*<<^gbAek*PmLIB6G3)FbDiQe&3}4A2gESa~ zc}Hu@9(AY?SnP~WfX|&pViurx%bK2xJ-gqvEwbt_M^@}{$$~#Gnwak zLTbN<4D7p=nbcns5pU*L<7CAfFoAC9-5|i$RiQ<=yD6A1Rlezmq;Y)okf-&1B0y*Q zt!()Uvs0M3;6-V14E4FdQ7|t?n*8?)M8KfG8g_AjymK6qeUo18l7M%-C#~9$Em`|h z?{}8O`<07YWZg))*#KA11>hgkKv!NQu+ zpY>?dJ(IdnPLzzV8Bw&Io}w%T5*;%(DL0{f7*Aa80CSawK_K*rVvd$z5VbVI7yhpt z^nSf>n)Ggb^@OWg*`=(v=~h+JV3|^&0UryfU`~&2wE5Ehb7s3RCczoSnSGRK=HF*Nmum&|;+q#DBZ@tOEJ&L6iT*BKnc*sStN(6@rZc0A^9+vkM19N%p+)sMC@^JDk0 z%jFEsxi*}lD`4y}@{G1Cm9!Fv9Dtb?DOZ>FQG4M!(gb+{a@Fp`6QFICu7*9J3b`^u z6>`pLT5J9Y&N5qN3po!PjXf!QHDd>52K7TH$Y) zv;cwC#TlSx-tw#4Xy@h>3O$x=;l{H`+F(NLKQvvv;qXVF!+$T{UsZ;I%!GT}MIIIF z80_%UGLb00D@9_S9MdkpSvbv91Zdi{_#h}St4C!&?dnRoRDHrYzSVIz!qGhN1~}xy ziqBOCY=IGtp=cS}M*U%Mx@nD~zn}tX0cNj(ox8s=R}FQT3vBsK;!i3OGEw0rrXxl3 z>X(Z8PAW%t<$!XA*gkEnEo<^GBw$cD0S`^*8IN zIP5xu`ZyiI7znG;fpN;R>JZl8R4oiQ{1D{rEMPuCfXU!XC+h;|k^EodJBGyqtd>R2 zitPLlLg)8-S9UgvFUppX@BUrpYHpcW^Fv? z_<^rx_tZ`>ioxwFo+hx|mnM4F_StR%i-+j}Z_fm1DKk@HQl^IafK!8K(_fpc%Agvg zt!`7RAAuyTdC#~phXlQFiOv(OEA@!A*LWX1cBMdy!9jt=$JT-Qt~jjWGtO~|?$7$5 zvZ;8RP>`z1mfTjb_z~E(2)MqEK_>#i(=zLBn;9d zZIG9Mx2fjqM+ZSb%I3n}ZWjcx5x8#dEWO3vNw_JlhR!1 zE~}xr<+HMy0j#Oz#skYux!1%PX@ng0FT%>dyf+k@^RT&(2bt}Lj+j@1=JS&8U+hD- zRkwNyERYtZ@+e$nx*?7+`jF3teN?bqEszJURC7`=QxO>?2RD)JqmjoaflZadWX_z8~xfIbaf_=@XHYUpA~9&5>Cx zzla8Z^;8kD{P%gWjvUZ=p%%xLe6;&2bOcN?|0A*M&Y~|gae4M6%!&)x&n=6HtjPgK z)~bJ>d|?MTaqI?!E$y?hm`*Q!YD2J)PH2YwUcJkF3)5C?(OeSwV*#22EWl(|FwpiX)@`s zP|&!+FKm~-zt{^aoexHLkZ-z1#kVziH2>W)3C8g?0;9NqW4V?R<#3d{@6T727VQuW z%n1#ynRs#{u?BxjuLQM~%0NSm|9(TocIO95O51-4%<;G7t;FE|75VcmCereON!^c4 z{m9sW#t=16EldIuEM0!iR;0w6$W=iP(KG;t!ZuhIS9V3lHX5?se#rnX1A~a?B+v#c zpyf67`i@D5zj^S|5YHMZYR2E{Bo(c5T2O_vr`fo#vEEhI9|U*Z9PT}(Y1fk2mA}La zaZ~*Efwm8*dQ2qG#A2Fb?XZ5R<2?Lslu{}}wAEaLI#o~95uhF^6!Cey3{L0ICV46& zzL31QKAH1GtatbRV+%G^=S?4ZLA=u$#iLIgduCA(KToQ|*Ec$B z)O$h=HU#}n?iF}gB9pN>57Y3NP>%|UI zIj5-`C(Ud4Y1e}I3-V5C!q)Z|oxtQLorKj~tUfp~x#&z`RKFZp^;+hUC9KjnDU1~7 z(POf(B2@q$58zTtRo^c%+lP(-AoZ^noI9Aq=2&tj43wIBDOUv@AZB^&zdl={uz}_U z#f~Yw>|35eyDU)$v+|)l8-_`><&z(ehvdK10kr|h(Q;SNzuRHG!&1Oyy2`a=r*3X* zBt_fV_5JT0)2ahy+@{MQ!78PZ?#+VDu^F6eLAULBLQpPCy?^sGS5$fIRa~ZB$mzT> zqWVYiKqWpbQ3>jk9Nv+rP~svNy05cGeI*p6yLCu%&34Z!sWub0yQzIcENqW-ow%mD2!$oG^6SZDEURKG& zOvhiYoTi*pJ5l2y_P_wk*e~5?>l5mzRdi3bD}0nMk>mQq0)f3!6?4JZ(4@~6O|xAy zOW>F?Bu_DQtk2g5u+wI4DEn%n}$ghId(*_eksFxy|dG5 zS?S0*4+(;IPpWd^B$C}X$pZ}yE5poSUPn0Rebv5kFpLypT$NKW1oGlty9z(c${f^ z6`_5tKa1v!bro7pP)=x>{1qwr_BLE`4S8)*8#Chz(uzh|o9C)LHO4!0(@Iq;rjjMR z6uCTD6Q%CLs5(=6Tvuc&TfE>hG>uNLTeDRE*-a5QQSG_$>S`{#Wpl3f`XxS z^ES%koL?)okMw*|TCvX?5bphK=M|>8E@kRI_Ok_}x7kVJC?^}4KQ&@ZI9pUa3@uD?00 z7pqqq4JVO|NByLbL3D+;f8yC$hPOn=DHieE$#F}eT{0v^9*qdEUrX&MVu=v=%uKxCEau6Achec7^_4%dvO<% zzIZy%Cc&}1wRW=KB0mDBgVKjNQ-L~5&*;X!;($$J$+r8xkf9tZ72I6{NFBjm2{VftC`T^1L5ni96@Nx6DQ&>O^4!=6Dn40Bcy)Nb4E|85Zrc(^M;H_D* z9(dzsl146b@GJZTy>7o`q&n32)gRbn)00x5wNsv}z{Lk(HT!Pqb%%Vcx<6=VoJcD$ zv#-Q)Dr#Z1=U(u4WRP@}ny_E{)u~#gq{&v+%Uv+@d~1$auyoQomPU*|wvV z;%fgv;nNf(X8SRzIho;HwOgFm^R3OBnH2LCc}pU~F{M%IZGcZMt;bwsose_AS-Vsh z?@xLOL{Fc^0~t&U#2_PWK9^-)Nr(TH*A2xFm!E>wXGV#hLRnd5?(<@ z0+U>+824)7annt4g1Z-I=@Ee@f6*B*f<&qpUUE_L)l9_>TANNMiK~68(Vf31B{)e_ z{_>If6)n~EX}9^e<3DubMOg5QWuJ64Tw2{qMzv&Wm(`lc1FzGPIHf<5iZAWdNI0$8 zl|oAdkx&N{TLhvrvt@CP5w{R=W8`oDOb*49eB9KKbq^km%a5M@wPoh3{E%U0?OCK; zHlw8NZB;gU>a3j!CY4lx5pMt6ESoOS9R^-nqNwBuIT`e`mC-DR2-(D;F(T9xKWOh5 z7fusi7R`bI{=4pv{4T!E$-CZdA#N42Ew%;XHA{kHFV8g4INZDKj8N-WJQ(|z{tCuF zOVR9RV7$V@J&?raY*D>{YK2XE%4nm6WuU=@n5)krIT`S#-WMda{50bL{qka;&IG?9 zW`=N)OUj+r*vQ7{GO4kpD|dwAj*P0eXZRG=*{rMR*>`SxuJ4sC{}#DK`oYlVJhNhO zonu)rb$e&+HrX23#^R&|uhbkODbiMyfCF?lYgJCg8cayEqFz`??cLj?H({FbXx#34 zl16SJf<(3Ot?X$Q!Q(p?Ra-KIW8z+Po%pl-tT29Y$r}T>ei^G*{CU_ZO}DEZ5urJZbHuN|G@yKex+)=Nw|0eE$xs;%JS*{I!m?!a*-6_uJ@EsPP# z7yj#<4v!!xZ*I{IF;eRyK8ksd8~tZ=%2Nvk_ZA+;HdkE5Ubn)w_F9u2%G?!qW1wUt)BJy;ZH2!(#>&N8ObDNV3#9y11l znDAL9BjLfsm`G8dvU;_*WQ9KI+*|7v+~j|Ww&x8n*0xC!uA^ka= zx4akK6>9!G`p{@?b>k$-=NYX9HhJ$KGUG(2|ExH)({KE{_O;4j&HTUdbqaq}1~gLb zm?FIhA|wKWO8?|wfyI9ut5H8q;i+qGiL3)?RLrp?tAd`5Bm>=P@G+aqcsC*aoqWVM zBgyp-mN@)8Ekm(}q9EQEUP2_jRhr`^AbXCEl(D;(UpB9!o54diAD{oR$ro zW~vZ%19xJXN-l6t+eR!Ee!?buEE69qcvJFj7i=5`R;3UqdnB4=-{7ahM^b$M*eD(T zWso4xWVG`V1$x;N|FltbWY+&pKm)zGC9YIsE3z#MGWG*h%QPsE^b#>BI9>~56z@Dp zK`!=?8&cl9wyeb0TH1S5h3t(3{G(o%Q;$B20>8d?%!yV<)3h$LH$n@UFZ7o!)pANv zK*k`h|GL$P7N|1>MFky$I|$*3`+lckqzA?zm@lO(7EpD%QbulmV>H zX%ZfnAsg}JmljB)YQz*iE-j}vbA*)a{%2Nb!}G=??aJ__QsiwT3zLaCl4b@GbMv0Q zp|(RROsoABsPvTUlw$Qtwm70N^S?tu*xVP}8?po@*-uc5+9S#|zSXzEynXsmrYNr! z?15|wY5kMhH-)+W4HS+^0TLihny-lFn5wI4IgMMA6DokEFb4g()~ouQ>;KWp$?uVczE@uL7-EBzG{^-O0hvx5_D%%;H_sYzy6z zkM+K}vAo@Pho|&NL9(LpY$sAHey2bQ9)mW!*+U!~RhFFT2=+sE=n|>MZg@M&kkmvu zq+8txSN4l9E9#kd+#JwpVkp!5d&Eu(F}Bq z4G=Em>idBjH#3`AzhCP+_;1}2VE+h(5Wx!&P`7sOnQPmIMOu&Twc?z*nnI`bCK*xP zy$+Gzp6r3`FIo{;6B+HxBlzKKdJDUPt|ppl`e{0-TDfC{f?pAAHw1-eJ8=P;Dd zqtMZ)@ZwZ^J>Vi^cx()qD2a=cfTO^_WT%51eAvHSisIaOun&5o-AzJ4TFS1YEC0a| z^wu?GW&ot)dqQ6tF-}K=$(im3x~mg(7oOK>td-v4K^HZn!Hdc>7wvf!v91I;-plC} zx~R6YH_U@>b5xdo#Rt|YLv`V6uE>EbD^<*kB6VE=p^cEl4 zJo_Pnc^*5iPSD!;`auQPQzHAwLR?Vgoeom&50+^SeN7IkdgSU07t^qP3MsR_1aLCL zOv5C(R)>jO3zWh*-_ZssYmtEp28_dxjdOS1bdCP@L;osiaWl#p(MY|s1O0rlbhV(J z+iJa_@3|@qavpS*j%xQ#<&coO&fc&^U4$9B-PTLMS$rfE&d8ZQdEcNt$Gzm}JGo(1 zgIw#g2X!}Q?)KpRG8j~~BPq*=Y*?&TLf>8=qJXy&qRSdf1L~tz7o4*0Q9?1?%T3p@ zbL&PMkqNtbmH)Rw=4AN+&?4AL<<=-9AnIFnf`nZt0p}h-(wX~>jQ?QVn9qbb-Pl(f zi@|(tL;gb*wI|L4^Wds!17PnajFYl`u(j4=mJefnrp%VMdWvF5wGH>v4kC-W=EZ^7 z*|McNpreAEDyueaN(c^gGWo#np3aa@sfM8tC`Tb=wtgYnM55NEbqr_BCD`7a~CB zrRoSC*24HZ`>Ej20e`!d;y5Ym_rY>bS9TMs4sZRS-fec4roIPH@-iz19Le0{#Dj^d zK_6b}J8X4grmyYImzgQ)FU9|b-G7xhZC%82>jJLjxK16>x>5wIrJ}L-(WnISsKm;E z(R?h@Ul6XnjMfSQcQ72@nj*5*1hOkCsJVPxG6k;|-{Fz}lvIJ$n^uv>aks=+=Emt+ zJ_Sb<&Oux>ppQQj$Pc_9+dyY#VU0 zW?~)+K1g_nsdpI(_9faHPCv100hmV2Xgh?G$!#A2ljw`9X*W!0+INo(O8>XYJKlV*g9smr8nM z7CN!OM$cPytwj(@T26O$IlVD=)F{$&N_qnY!vi+9dWl4LCpMF-#=euWj{6+-GJVnN z*v`-uo1_ok-Q8_+tojoD$BqUuFz&1NA+ZU;!HF`(OU2P(S5^+l{X-&h(_OZ!CPpWY-oX0MOoQRk?c)~m%$Zj5rmn6GL5$L+kL0|t(5Jq z+6^IVW6Vh0FEaz3yy}hG6(7@Q&5S0kZP0oSFP4KP3Y>Pusg=4A{7H6J#ic@#lkrMk z^j+)J+|GIsJ@`>e;w?c}(19|0caGT0{uzd0&H4Y7b#`tdFfu&=GuM_&7JSRCe+);z zv=%5L$XpSGCJYqS3Iw$>Suko@T5>^)Ri3%wT~fdpK*7D$IYDlWq-=ihwx>;81FL(a zQE^XbNN!WdkB=+HwVgfoy}4X)z`A%6`7dpPR!;a+R@BuNR(&F5 znRrYoW_3!F^EYyDVg#;bwzu52nrL5x$_JA1U2VCI#|D*=oL(>0YFo!330=#2J8vAj z=r;Npx2DNdKfCp2V2ZT)yJ2WW_{aypI7D@PDf=U4r?*nV?`;82#8m94 z2X~2>m`h5#gGWF^SBmg>8 zses#IO_X}~1g{x?Cd`UWDiMf-i+gGbhZ6;YE~rb@>v=UZhWdXbh7pJM(VfK#QNyh5 za~2@_K}(3bbnW=qd#Nfsg;(wW@k`^bd+Xzl?LD9kg@<&~3{*^yV6sCHMX*w(A*IPe zotZ8yE?2A=0Ryz#>)5r@1wINmjLruY-`D#Fo+1eo`VP&8UZ z`8h)qWw6X$1Qxl$ihCU0_hi9tH+@ID@3*@Kj*;@WX|WGFr7fyhx$$&5mznAPiDa26 zXz<+O3?v8BcfnENz>>!p3= zXNBS}1fqnl8TDFjSj|{?@=WMGgK4Z5)u2tJ*~6V#5UU8Bf@N=*^&sQW2t8dkdP<_I z)24=lXH$GXLoTW@Mx|gsHnKRWLZK|NkJuVz=?+YG&gOtNe$@t-ISS6+k+EyvK};@0 z+}D4X34!^TU>EtoNhi4W)xhKq4IZ0d8rU_B_o-s?IZC%$H%Bghr{#0qD~DBj-dtbZ z*JnGVkRheMLiWDn%RK4gq2^D-)Z8Pvaj2%EZ7ip$?X+E! zdE&mi@9e{vO-UCiZJ{x@id4Ig0fRB$!1>Y+E_h0zrYipmJddG=j*e%1ZO+(ah#3GA za(?u%Gv2Yl2McER&nU(*HHNO?)q>;2?_Cg07lWCav4i{MZidhM3+?MQz)+I2H3Jg8 z0lm3)DV6d&0PuQb0Q{xAOA!zP9cEbRN2-i{fQFMi)Q8yp_}d%8N}yZHh-BzG`Ns~k zQTL%PmM=xgda;0|6;E+nbm6iRJaGMfn){y_PRGO5yh_>s9($R&{6Qw%s0|7191bTw zxSUy3$9~NLHp6||(Qm^#ynMD^X!8TUE|9`#GS2s7{dYpCabG}*CsHa~uDb7yxl))k0rN(d}>vx@aNU?Ah6#QwcVM6v#D zXST#zDh5)^ig>?67T+)dj?e-TBEbl@h;W5B5Bx*i!Sz}USUkGKNI`>|hm#&$ge0uq zpUAr~U%APrQ@p%zSqpk)Ti;bc4Zt8mgS8@rIrDo%^6RMX#M$+R`4x^XWMTS^3jvg~ z@4<6xcbGC&V5coV>Z?b#Y0!4;A8}E`1?r3+ZsHTtNaY`98#bfl*-a8Qj7pXDb+B?( zQbpE2cY40B1CgCsgn!^w6|SowzPv8{4QYEzeCJYG4xz3EQ169{Z~_W=PqnyBfDZQC z+%V`0y)H9$qVxGQS};UsVTD4DILIy>GHeg(MjJ#gFoR=c!CWt!>|tVHicl!kR60${ z%M1FqBv5?L39?3DN9%p^MI85hj>4W)?GSHgNN-fqKuv39@0A?I$qub%S8qcOAGjgS zRo+}G?RnfT_h^eV;6}{lT1w-dMZBs}`cO`ee|Jo)ardjsRp+fZrt%SyesLAd68p#v z1rkjWwexC)gi6N5Y>iOS8!&RqL|@V!3NVNCsh$pG*Dig%gEQni?B{~Kl6(7=IVG$F zzhB9m%yJW2q(TWe>al!02dnRLIGysF5dT}+V5g^PX>-Y1biOHnIKBkJdtQmNUxJw& zrpTFHKU*UAs*~j6$y=Uj5VTCWLM9QzhLcnT2ppLm7Ae_~(g9zr9oD&9D#axlh7`Kh+5H zSDbzS^!e_Ccgq$nuigppAZ*&f(I%AgPreUUZgQb{btvNy;8s@!U5SFn_>dL=5VA~0 z|IyBz*}75ozfVXr45dovKks??r-BHq-4;@ebu|3`AY>)1MD6Yxd7e8XPvi$XZz+jV zf5#ndf|HOCx90f^gZo?IEC#ukuD13>y9vV5#A912%aPg6#M^eX93)(hG`l_!D>ySw z`wUHcIIG+g2ba(Ec9xk=|5uRF8F%%Z$X6?D+;TCJ--v=t!WDPLVgAuau95!Z2)K-K z_I$C%*ChEM*(VY9L^QX@wCL{POXua*9jJY(7bAf_w@relQYYObL!0o<;J%?OEhyrt z2qN@NqU`!(!i{l@7Wns^GFv=3_0Qx?h6pJR6ZRgL@LSKRshlphytjv9P;k z00&;B?EtOn{1VMT=b+FGZ!!973LQ!BIM1yK;QUHuytZ!&q%kyx`s+UIMWgE4=ozqW zdfrcx{# zIIa(`_|4B)1}j9c#+s*nyMN@t&+AR_E zu4C?_MWp_2JkM z#Hc8^@l7Ns1sidUHvo;$)AlTo#{S)@uEj;)Y)Xj8R6|WK5khsntsU0@ynreGttJYf z5`~B%P+bQpBZM}-7v+!FXhdIv1nZNfE+_m6x#E&&wGsJuZPKp3z&D(IO+RBUK`e46 zz`YdKY=_`N%;GHKOI~s?R@?2SkHgZq4f=!x22l`W3fsQv@E^m@*K_jHr*N?7Zq0nv?C8T-k1zyd2A8Jd9 z?9a{mFkd841a}i(mD)nrKH$;AS)K&ez4NEeAGFCPT>F;R(^F*rWgQ6Wkk%uOATR}K zffonh=o+eGsEPiUK52edxQPF#%=vqZf?D|{OK`{#rV_YQX?Tt+f+4B##?e>@{$(!N zwdl2gcpeG9M7g?@S&)P}qf2)YNisE%b1?-b23euQO~-Jt_FU8rF(aML62*g*uG~8? z^ybl1`c`@3FE(WYC~cxloc^(ec?Vp1~LgnlDcBQ}|u zil6)eo{rOIFD>#ymVs>X;uk0!2;67A5W398O`w2Wh5GCP)CNzf1jGm}Y+HWMLUXb% zCk~%{;C5V;{1ae#YW3)S*wUP>*9hlg!GyOxI}g7xqxKNHi~{%o3;sf1~e#S~eJ5wxgpAv(=*yJ^8GQ3Gb z1}UbT_b-BtJ4$&GZ`&sjtkR0xfQk}X zqK;4(5?q!yc_Ioobw>O)&S23635TK71`syTzC44scrl|O4Ny#R;@`^?w#x*Ypeo$nbL)SF0oFv>La;Rh!Hj@pb>N0%T zLO2tUP;Q9PqgUS%(JR044KU!PZn$7Msk*N_z@RFSp_geD(EGEB)rdB}j%X~plS%^= zxEHnH^CYk&45k=hZ(eNoZgR>g#3=XovDCi)G6&8}4nGAh<$qycldfmaGEr61Ucz*M z)+1St>F)i*je3VGP}&kI_YO4a)I5A9cLB2szG#mjpY9XPr=b>xJl!T3C~dVkXLnnB z8U#}j4QVZW$XVzB!8GkT&&4bp0hF?=zq5O@Ke3l(VcCH)3$<-LzCsdXqiZ|)WxeDZ zuCd>}I~Pw{8tsDBCyLp34$GYr;>D7fdecSITXVa_^o@KE8CD>Ve@zv8b zHpeTDH+(+G6VL^yTpa1@8LBs>c(&KBrZEJihjtE@lrEP`qrnv78vsd$nnb}Vfa?kU z6dr*)WbzwOQuw@tz44t6%eGUdi>o9h<<6kjmJXKKF zW12^kbOuL#mcnH+_s2GKbO$6JC-WP30bjzC+v|7xaI|5UVanvs)(n@SC{Y{S`bMM5 zNYPz>mqedto5c@uG!&HrUGuLpfc{igDj3ga;NEwBBHj0oQec704i&_KQny$aLFQ&+!>Vd_9@-;|mZ0SRA`@C9Sn-CR)I za68n{PYJnt!=MLia5l87bz+LuYXQE^KuhD^Cw+xCA6X^bzlEIuk{V} zKYppUT}&NKBItF1Q}bKtsF$()w38q+xYAY~)fkMDjiS%sJNsLLL64${Jc0D+KG@i+ zn>Ewuj#7+$>3PH(wMokx8t=g_U29DjSu9u3l;Itf!1pPRz| zc-C$msB2`=&{*@DTa!y| z2?W~pBM#QhTC}Xu$^fnQ5aQgx3GLWlV19iP{ zd!M0$Qr$jd7QlBmDRtE!CQ+z6J;YeS8RzyH3!PifdR(dtf0Pu=AWV7k;iss{n#^DK z*yZaB)168{n+6MmRc7GyK0ak*N~zb>9|mF>ff_eY@Q~b}JQvnz)g@Fj03*=-cO;)N z%=gH|n;aZvv#f3sRej`j0495b;0qaJt% zPXa|LSZaA?bPk*lNoBP2pM_3kZLfWpF`;)pc#TOL`(9KH9XWW)_X*O+a)HmV%5^q1 zH3ypwsB}5Q|*y_4hlx*K@eG~rnLq=1g+S-{V+*+>UnW6X-}6YMC)AhQv(2K*)YW-i(7CSq(d>!9Vd?KomU=%JId6xS zyq(JVMvH|N*Yrh4_z#}p3aI50Fo%@}pEV#{A60#3Bsu8=$TaBEMD9z@7-oD#Pk%%m z;Di@K^4^F{B%2@kFR5$f1ME~_LuvQvUL|fb|)@#oXn$?FprS)nknLF3j0N4)X z$$?OTr+LQ#PXc>wD$IopC<<}Ii8`76;9LVLCRCC%G3m;>*pLxvrYegYpDf?R!y+p* zkdzWiDnV@9G*%x#ft4HHH~98>Or~1{VFxwl(=-k=8xeoP*=ZyHb|5(7$gvJLsTCSi zR%=r6dF$S`$-^uXtIZ@6#NXoDQJs3mOCW!)PxYhRdP-yh!ixh`ho9X#gS^xe>k(kt zhv3e`o6Yx4x0!%GZI?i3&^2XH}b?3>ze-#;GREP9!X^E8_7?!Q-<+b zu{S&pCNxLLt}*kds}~tDHmJB{ssKcjhl7+sMck7o`%#U^}kt+${9L~9F?lmdZCyJ#>-&hP`f zP?BJ5+l#Hoh_!Io!k;V}EY65uFyE8fgycJkm6&Uix#S5Gl}{vtG&6YnJ`a~pI+vz9 z7_#>QU6xY6!YQ#JsT>rCE#FVXo~pBNcW2UinZJ6?A8Uu;OBTd4hmWnYJA@gGdFhv} zWdVluF`_AU?h7_?2|x3PVgc3ysUE11|cmNRVR&}HG4Z1lXe25hz5l2ZJ4`=-m*xq2+Pqq$5 zJ6SL+htZ{rfvw@2HlaeIIZI2)`pu*?l-f*&EcQ;^<7uKHLAiFnsmC)QDDXmHaxdtfL~658k$F!B@><&9~dN>E-d+p8tv1$lXW zsHM1j=#Zb8U&SaARPnw{72p9UZ(QV#+7(~t6*)cDuDW9gNyf&bTJJo-gGdYzqo}9} z0yz?y9Blo2*d3Xjg{xYOIYwE3mv3Sp?)DG0F5Z ztt#Ro1F#EYVY|F%RWj%|c6Z_RkIuS(k~q~;qGglkG^1e9U~<;ZC~4U zoD}Y20LOlN?z&8`Ud+fE*O>zuO`FYZfM3^N4IvZb(rx*j5%VF#I_Q!vFGwM6SFd@` z3>3N&2Bib2Xw0Y6mnZjca9XhH7FMYlYhRrr@SJSTR2`1a-<|OIIgK;mjyQdwN`p5H z5+1OH{-1i1&~qFTB|^tUNkqyz{X|(7N7Jz)OZhElxjiy2&`L^iu#L$UHmcJiFe zVFZVQkhqWpC_xA*{HytSRwvB|F#wdkq3jrjXzV(0^;!tP*}SC<0MH^j|Hyfd=1bkzZ9Az>W?=@+!wWB5~)S_N;*z_=-NOd6o>$+9gr@a9qm><2wJ(eF87n zGfD*GZLPhT_cZgOeQQ(AJit1V&`V;-mSW}w2a-al1tq?!A!m{J_HuEpKBI+ng?`(i zLhQcGNw7%uhuy=NB1;N^)w9nVrv)t=qnb?=oq9Ns0-BNS5mwWyfebb<`c|J z$>e|+%!H@QErJFoYTJ_%C@}B$RWcbFY-j$!ad@irpbyDirbq0;ppL4Dco71TrnNL0 zAGA@$KOt>sSF4QIC2&>kZB@bJNsPXD-jGnOewNlHVYXEPi*t?P)zRO;YC2TMbI)x- z3cv{14r@N)Yvlc=K;J0h`)Yh7E;| z&L7t`Z!aah;Da>#t`Q!GgnWs!V}S*B?4lh-P`1?vx?Ee_F*qJZZi_%gZ zW$UHPAzhr?{jb}WKnqZSAh27SUX1Obs6p`bZ2kPZ^&xK8hhA4w)Etwx4(c1H`Gm5! zl+`xz189(5lBNHaB(@UjMEFQp(jPg^uX@j*zkYh|@OaT`!xyx}i;B!bCFGJb?8BsF zBy?O^ehY5$;XktL%kN` zZaO()(8aR*`2M$N3vKYGh{(i>+f`GrPH@KM1`q1=b;R8(zs70wm%n>wS z9N!A^3W~9>2LOp_l>#A@t^*AMA5bxo0~dV-AiFVQ9Xv&|`Ooq!omQ@Kf;9(N@bOf1 z7X0}hTmutM&c!d>cS=eX9N|0??#RtPKkX$8(1T>ZGO`a2Z+M&`4t48yEq& zcn(amrWNTiQed<1%d6s3oKDKDVh~~)^n;jGaA3-dYGb7VEC#L)a0v-Jd{i)X)v4{u zj}iIxyRD%BH*ry9sgi7H!VUZ6;2;K-eB1x$siq>+=S59Fr8Ps7w8NbBX1=GS`a_)? zy|Nkw0Js7FfSQ0i0)aRUx=ueHhOyZw=cJS*l@az<^@S_coG$W9MUkkW+|fwNV!h&yDHuC~Vw9PP2q|Qss9;fI)lZ zHRZ?P11owM%=>hzU!LQp26p~0V%F@T$H9VO zi>@TIgK@TlSM@!+;!+HL6Zhc)mpW1YlgB3iqSGhCB|exyoF#A|Bu`!}r!a4X#sXWF zp#N&DZIbP+5WfFHJ8J6dgPM$YkMm4F*5+ul^NQJ%hE67l{ZEazpf-#U(_hnl#)_L1 zHDyrtOkkQJ`V48FUKILoWt*ifvFJcf^x;c+d$r?BctytUP?mivXy8Y9854b^h8+S+ zM#|f>nu>01fwM+QNRUNJ2X903quYsF#Y z-9Y?@<_jX7%{R$rK7C*~^&|K^3J2h8JaZ6}IX)L)UbbvB*)ThA2*kxu(>M*))({1% zdRuMkGE1o-mhD{=Aiyry!`ZVYDUvepV-;DU?GM?E_6pJ34r+(<=G6o2!*cX!Dpab_ zV@r6uUi#DwqBw*At1$roKLEg33ks&54^{8ygh(@lSJiTG-lt|5+dW?)w)_12$SA^E zHu=rc2*JYq0Y;@TV*q8B6-OkA0*?Lunw0_DMg413V5Ftf)Ryy+^o?SnkClvrH6N6w z*ty{I27H{)rhTY+?e&DQw8sGT^wJw*_5&N40dYtCbsn|lv-rNt3nt> ziF?{aslhV|j=1)-Qn*1@7hLHJFN~4I#!yMJMt=5x4Oozh{)Un%f?v%#Dct8D@Diss zO6QShB(ndn)_)H#aW3pcLBy=}#zY|j$gsSl+dH8XP1lIX<%P{vh0(ho;8gky9vjE$ zmP$;Lhv>^Ejo*SS*QEJzo0>#lKI2o+CcBv^ZPwvBOTz2C(aUb%yJVzC(c=lzW1vj%c}W_7L6c>OwmJ@j|+bf`Y+y`~_L_9T6Y zbKR}DhyKupUZY2CN5Yy~x(c-C4%i{(Vj>ubKt1F;@FJKSz#>D8^nWJU&(GGfMPC@0 zc%WoHb(a`39LOg4X{3e=y&k7O_w$>vbVd`7$ph=_WKb<`108jsc!6?M@ zZBF;CQk^yhn~Vsl*;X~>Fqh<zDN#>8)yc7hXMm;{ zr}D5lvqr=0TjF^wOkG8`1Azqpf6<J!tTC>1Z z55%81^77zxg=FdCu-0WMtGm;aA8cU}jQ2k9T{FS`w=ALLMV@{^Y=Wcs!E$;0Vfdf*>BEuul$fVYFuj?Mrro!e$A%| z{3Jo8-3v+>Xfiw#m=hJ7kyfVSWdL_iu^VtbmQ?*-_aG3cqC@i=l8*peNt0# zsy=;uWpvs_fGAgkMXWR6;7Fb;fAp!%7}Q>bV)_n98U|7_ATfOdwYp!=-*&aQi0`@R z%PS9&?M85W`~^rcSeYEkAukCRoM<@YJf1jOQh-i8mhRuFK zPCGUH-x;bgdKUwY7HPKpx3(@sh4<@rANi}*rdIez%~!U|L`cUY5AZR%<(AW60T!kN zr>N6q8@Onnw!byABE>A*+P%iBpmBs}%?#gAGP(EU-6k{NA)1EVvO8*ja@BzR)zSUVdz!XHC2ydiimWv98skGARO4_c4??N7urivv6-* z)@PF>7h9!2O5E96=|FuD2}-|?-ZM7|yK5t6DWCW!G~vGS`635=lDV2993@|xZsIKJ z6qj@vTPLX-^6#7(hjTsQ7uv3hNL?1qA_TAo7sk7vSCb@e?`S|&4r#{FEJ%U_vjs~| zcpBMM=}+H^ED_(_Ms0!67PrB*JV?!52(>S3icb8&BW|@6*BeIIO8ya=*6;=%PlRQM zZ3ug*Jbh&XFT>?;t9{QNC`|t^7p+D`69dU1Q}Y;IJpTL$?|{7&jtop}BZ?9SAOX6@ z>lokK$A*mmk&M+9v<6%&xdUd;Gb~N{*^C$*J7$%xmEEeYtLef>C$0FdC79r7v~GgJ z3?1SV^)AwJzA0U$E21h9yw}Hnzk@PcLecK^CYZEL?X-f<`H>8Jg3(|uY7iJ7bC!pE zc3Dg@m4ce{V`;WsGJAj zz~Pi}k|)`QU>&$98uChiK^V0sEf;ET!e5YaT7qOlk*YQgU0(IHnQ`MS7> zObW{f(AccyV{WiCy7tgCM&yuaThKpt%)v@yz@J2AVjg`>hVi!4Hvw3SgDC=4=o&XI6|DovX$RS{}3#~u`D$Ml|uEE*gU!t+vhDzMNEBI zZe0TrE8>l!laDKB8j?y=(%Un+s561Ljb7<#1Olrz;q9GK+|u0hH8Csv<_M=7_GIrV zb*Wv=J17-5?FhfA?NtWiZt1=pNHb7m)NdMKd`c{?^_F6Ac z43gwV?d{7tZcrN3P~P8G6bVizweZOy1vT}e<^VQk&dF!D26&GmHY)@C!xHHV_v&ns z+yn(i;_kyM#aoal^F(l7puk3LxjP%CI*v*D)v9a;DD@3Q0EW3W0r-V^S6Ti|f3N@6CSSuTz*r5{)Vma^BHKd<=I?un(ahd5nF&{1> zHnLx&R3c0Rx=EWT!uPT{k}h{$Ze)_zcLb8#y>+@?nqXzDqV?3G3m+us?!5c$3eCR8 z7UXH#D|!&O3_G^^yy0jB`tI6ve4=4E2;`XDq?#-%3%Ss<;UL4-_|t7ciHdfRD9E^F z?D)PENvHA=9($vXON$tJ$)eb6EdQ3&$rn#0l6qeq_fL^b1JS8nPK8{E?LtVT>tSXO z>!F@du!9%fCH{8AzUL#u`15hoG{vVaCytRY#pv6L1D!&qcWx;J3>~7V1W|uuTsx}X z&9>gM2>h<2mG*Gr;0wscjBTr<=QDm|yp6SK- z#Qs`xL@5pf^K%i?vs9&0VR|*4{=6bELk>0PdB>-*bqi+iXEO~%AYUle^<_gxxL2#u z3M>^K_dGXx_z7zS`0Ep~=I(x_LQFwy6(lCBuWJMgSqD!NlJGGHCM2zujPeK$)qJEc zZclo7pBx2y*+Y7D7#CQ)sSt}bMl^`cqrvq)JanIgxQV`8>z!owQy~itRr&q4J|h*h z*;vvjq|5*cXzpgdBG2aFs&SA!7^^hXCJ`dy4L8u-{??{nqeIzPTs4&7O z-Om^qK;~DH{JmTB@Z)@IWev^x7Omt3VKUWoakJoF3gA>%tE8mjVsj-oiqgwI(E~Hs zJm8(#O752YMe*%M^a$QIM}r}R4$P5Vt}1Fy$UCA*4L#jOgZs$dJb&~VP+D=A_q~|A zMW9PGLZ-;1V!V~^CpV&x?G`$C8RWevQb3anm8#BWZb2*o=;*OeQ_AphU|pl)op3R% zF?q&;HmlTuKXLq*o`i8qln&n6WiMdGh{Z?F?vgWDUQUEcWf2p&cSP!`Z1TiZ$j=AR zg&ki!vnaKy7#c!TADNvWPX=w@!|ay5YmY<%;6iv&iJEu?dSwQa*ov>(NO!pb2Z1{@>0AhwKAQ|~Plm6&(heCy3 zTuoV|El1xkAWUJ*yeXkuZ33!%#1|0ZpIJ{IGgu{(Ey)~S-PErpR25sS#Bu~)Xq~@{ z`C>bBBf(Q_`c0jrS)@3-w#W~Ua-$>nyJy{^MVjnJ@K~a^2MQ}Da?oXj>~M@cc%ChU zWu7c=3kI{7w%VvY>SuNZpMjQGQQh;>V(*SojV6^p-uW)q;{r+x0ogws12CPya5*%* zW1wW#b8*!@&%Eu}n?VDkG9X?G6W*tfFd;Z^P*%1_s`9DB$A0$%w8JZrL)_IH@1r!> zAW((f$|)t&C|oKNd_w;Q4Q60YEXp_tQ)3z>NrUd^^TaXTL~O@7#Ry3ZhZf(;?-sgY45z%Usr-Bj`PhU9p~%f{I-kn6%jPJh zz>I53QE}!~Wd{q(Ul<>TQ?RCpqjEjT5R6LHK@f$|bDA<5fbY{W9^`5a<29nWm-n~j zNB}=YydB+``s+1K558<<#3A%6!aNT~u}yU3|mIL-jk5wEQoWI(NGxIOTWeLZl;`PAExssA2%5m;(=E@ z;pU`+aI9y6$K*}6a##wQ)y068J-kDl=qwV9<{RrJeS2^3BwF~1sbbb1k9GA~Z&p*d zM`Lr>Wv}BAhn2*rv1W?u#=bD0Kbtg)7VT0RYLP5ys04I$P5%R5XMi$Y|G=nL@yaZtzi<5Lw-%sH6pE$qnqg#hrowX@vfubZCg`djt)HVPpY?>_ri zS()d#0a4Rq6>`;!#BNc&B)9J2YOv&>0)!8o=%_oIY^o-=DsWD4 z$OOqAITZ9P7bSP$G!1bb9t|sswnS21U!&sczk4wzy|eCW+cq|!Q}^^;>RvpoJUp77$;4!K=^^48x3OPhW{u-jP_mj1fJTlR>n!Aen4(0HsU?jv%95#eGYqFb0 zM4dG{p2-GKczDtOQ#XlNP5ao(r2_ zIIWkw2(n#EsMRl4G5U+^a^ftls)B&Bi9!zw5-wrX43?1}Tz$Tr2vI0*NHkE5~B{1ceAiWOJ1OQpXdOm zrn}c>M6~Y+qVSs}s6o|DCg+~%K~-F}n-c!(8!$Y!c1-VGp@w%?Mb#_oeN}GukCQiZ z5<)>E`&G|7!C`EDQzVK_j;vzoH$8*5z36Ephd-vfdJtr*q^($E@OZ-(Ck;#Q{3!>unzWucURTxM&89g0ZU6r zrD7?35UPT?Ys(`W@wbJmyc|mXX@c3n@4+P#*{(-RvK?qB#}2a{kTlamg~N) z)46!jP`WVSrqQaw9_uM5+dtHI$UX>@zUt

|+uI-aCN*)X0-b_Q6)SYifh%0%41v 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

  • )4#3 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

    Q@VX9_% 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

    _avu~#V`ZAg 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

    n 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 T=bkL$(UVc1rGc@cMbk|^M{DD` literal 0 HcmV?d00001 diff --git a/MikroMaster/20260501/20260501054003-Config.rsc b/MikroMaster/20260501/20260501054003-Config.rsc new file mode 100644 index 0000000..aed8488 --- /dev/null +++ b/MikroMaster/20260501/20260501054003-Config.rsc @@ -0,0 +1,5865 @@ +# 2026-05-01 05:40:04 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/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 wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), 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 \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), 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 station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/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 security=security 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 security=security 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 security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf 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 datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/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=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-AX disabled=no mode=ap name=5G-AX security=sec5G 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 +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys 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 +add name=mVados options=HostName +add name=hostname-search-set options=HostName +/ip dns forwarders +add comment=BS 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 +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +add comment=telegram dns-servers=10.30.30.81 name=api.telegram.org \ + verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/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 +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +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=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\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 AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.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-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#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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 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 dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \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\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \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\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\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/349/7cf2b376\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 05:30: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:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\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 \$LogPrint 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 \$LogPrint 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 \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint 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 \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \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 (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :global LogPrint;\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 \$LogPrint 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="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\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 ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$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:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ + \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ + \n\r\ + \n :local FwAddrLists {\r\ + \n \"allow\"={\r\ + \n { url=(\$FwAddrListsUrl . \"allow\");\r\ + \n cert=\"Root YE\"; timeout=1w };\r\ + \n };\r\ + \n \"block\"={\r\ + \n { url=(\$FwAddrListsUrl . \"block\");\r\ + \n cert=\"Root YE\" };\r\ + \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ + ds/master/levels/4.txt\";\r\ + \n# # higher level (decrease the numerical value) for more addresses, \ + and vice versa\r\ + \n# cert=\"ISRG Root X1\" };\r\ + \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ + \n# cert=\"GTS Root R4\" };\r\ + \n };\r\ + \n \"mikrotik\"={\r\ + \n { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ + \n cert=\"Root YE\"; timeout=1w };\r\ + \n };\r\ + \n \"FuckRKN\"={\r\ + \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ + \n cert=\"Root YE\"; timeout=1w };\r\ + \n };\r\ + \n };\r\ + \n :local FwAddrListTimeOut 1d;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHuge;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ + \n message=(\"\\\$LogPrint: The message is already in log, scripting \ + subsystem may have crashed before!\") ] ] > 0) do={\r\ + \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ + , possibly caused by us. Delaying!\");\r\ + \n :delay 5m;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n\r\ + \n :foreach FwListName,FwList in=\$FwAddrLists do={\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n\r\ + \n :foreach List in=\$FwList do={\r\ + \n :local CheckCertificate false;\r\ + \n :local Data false;\r\ + \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ + AddrListTimeOut ];\r\ + \n\r\ + \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ + \n :set CheckCertificate true;\r\ + \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ + alse) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Downloading required certif\ + icate (\" . \$FwListName . \\\r\ + \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ + \r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ + \_\$CheckCertificate ] ];\r\ + \n :if (\$Data = false) do={\r\ + \n :if (\$I < 5) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Failed downloading for li\ + st '\" . \$FwListName . \\\r\ + \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n \$LogPrint warning \$ScriptName (\"Failed downloading for list '\ + \" . \$FwListName . \\\r\ + \n \"' from: \" . \$List->\"url\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Downloaded \" . [ \$HumanReadab\ + leNum [ :len \$Data ] 1024 ] . \\\r\ + \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ + rl\");\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ + ne ] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ + cidr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ + \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ + IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ + })\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ + \_] ];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ + \"/\" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ + \_do={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :error true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$FwListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ + .\");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" from list '\" . \$FwListName .\".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed to add IPv4 address \ + \" . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ + \r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ + \_. \\\r\ + \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ + .\");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ + stComment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed to add IPv6 address \ + \" . \$Address . \\\r\ + \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n \$LogPrint info \$ScriptName (\"list: \" . \$FwListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/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=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/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 disable-ipv6=yes 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 comment=WAN 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 cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/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-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/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="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.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.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.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=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +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 +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=HostName \ + 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=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=git.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=ros.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.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" 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" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/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=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 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=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=api.telegram.org list=Telegram +/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 disabled=yes +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 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/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="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +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=dst-nat chain=dstnat comment=npm disabled=yes 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" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes 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 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/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 walled-garden +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 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 +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 +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/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="Windows Update script" 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" 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" 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" 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="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="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 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/20260501/20260501054003-Diff-Config.rsc b/MikroMaster/history/20260501/20260501054003-Diff-Config.rsc new file mode 100644 index 0000000..31f9e48 --- /dev/null +++ b/MikroMaster/history/20260501/20260501054003-Diff-Config.rsc @@ -0,0 +1,328 @@ +769c769 +< \n:global CommitId \"main/349/7cf2b376\";\r\ +--- +> \n:global CommitId \"main/308/f5b1bfb4\";\r\ +772c772 +< r: root, in 05:30:02 01.05.2026.\";\r\ +--- +> r: root, in 21:50:02 30.04.2026.\";\r\ +3465d3464 +< \n#\r\ +4154,4155d4152 +< \n :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ +< \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\r\ +4322,4635d4318 +< \n" +< add comment="download, import and update firewall address-lists" \ +< dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ +< policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ +< source="#!rsc by Vados\r\ +< \n# RouterOS script: AM-FwAddrLists\r\ +< \n# Script comment: download, import and update firewall address-lists\r\ +< \n# Copyright (c) 2007-2026 Vados \r\ +< \n#\r\ +< \n#\r\ +< \n# requires RouterOS, version=7.19\r\ +< \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ +< \n:local ExitOK false;\r\ +< \n:onerror Err {\r\ +< \n :global GlobalConfReady; :global GlobalFuncReady;\r\ +< \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ +< \\\r\ +< \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ +< delay=500ms max=50;\r\ +< \n :local ScriptName [ :jobname ];\r\ +< \n\r\ +< \n :global GlobalScriptsUrl;\r\ +< \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ +< \n\r\ +< \n :local FwAddrLists {\r\ +< \n \"allow\"={\r\ +< \n { url=(\$FwAddrListsUrl . \"allow\");\r\ +< \n cert=\"Root YE\"; timeout=1w };\r\ +< \n };\r\ +< \n \"block\"={\r\ +< \n { url=(\$FwAddrListsUrl . \"block\");\r\ +< \n cert=\"Root YE\" };\r\ +< \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ +< ds/master/levels/4.txt\";\r\ +< \n# # higher level (decrease the numerical value) for more addresses, \ +< and vice versa\r\ +< \n# cert=\"ISRG Root X1\" };\r\ +< \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ +< \n# cert=\"GTS Root R4\" };\r\ +< \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ +< \n# cert=\"GTS Root R4\" };\r\ +< \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ +< \n# cert=\"GTS Root R4\" };\r\ +< \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ +< \n# cert=\"GTS Root R4\" };\r\ +< \n };\r\ +< \n \"mikrotik\"={\r\ +< \n { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ +< \n cert=\"Root YE\"; timeout=1w };\r\ +< \n };\r\ +< \n \"FuckRKN\"={\r\ +< \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ +< \n cert=\"Root YE\"; timeout=1w };\r\ +< \n };\r\ +< \n };\r\ +< \n :local FwAddrListTimeOut 1d;\r\ +< \n\r\ +< \n :global CertificateAvailable;\r\ +< \n :global EitherOr;\r\ +< \n :global FetchHuge;\r\ +< \n :global HumanReadableNum;\r\ +< \n :global IfThenElse;\r\ +< \n :global LogPrint;\r\ +< \n\r\ +< \n :global NetMask4;\r\ +< \n :global NetMask6;\r\ +< \n :global ScriptLock;\r\ +< \n \r\ +< \n :local FindDelim do={\r\ +< \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ +< jklmnopqrstuvwxyz-\";\r\ +< \n :for I from=0 to=[ :len \$1 ] do={\r\ +< \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ +< ] != \"num\") do={\r\ +< \n :return \$I;\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :local GetBranch do={\r\ +< \n :global EitherOr;\r\ +< \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ +< therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ +< \n }\r\ +< \n\r\ +< \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ +< \n :set ExitOK true;\r\ +< \n :error false;\r\ +< \n }\r\ +< \n\r\ +< \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ +< \n message=(\"\\\$LogPrint: The message is already in log, scripting \ +< subsystem may have crashed before!\") ] ] > 0) do={\r\ +< \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ +< , possibly caused by us. Delaying!\");\r\ +< \n :delay 5m;\r\ +< \n }\r\ +< \n\r\ +< \n :local ListComment (\"managed by \" . \$ScriptName);\r\ +< \n\r\ +< \n :foreach FwListName,FwList in=\$FwAddrLists do={\r\ +< \n :local CntAdd 0;\r\ +< \n :local CntRenew 0;\r\ +< \n :local CntRemove 0;\r\ +< \n :local IPv4Addresses ({});\r\ +< \n :local IPv6Addresses ({});\r\ +< \n :local Failure false;\r\ +< \n\r\ +< \n :foreach List in=\$FwList do={\r\ +< \n :local CheckCertificate false;\r\ +< \n :local Data false;\r\ +< \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ +< AddrListTimeOut ];\r\ +< \n\r\ +< \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ +< \n :set CheckCertificate true;\r\ +< \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ +< alse) do={\r\ +< \n \$LogPrint warning \$ScriptName (\"Downloading required certif\ +< icate (\" . \$FwListName . \\\r\ +< \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ +< \r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :for I from=1 to=5 do={\r\ +< \n :if (\$Data = false) do={\r\ +< \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ +< \_\$CheckCertificate ] ];\r\ +< \n :if (\$Data = false) do={\r\ +< \n :if (\$I < 5) do={\r\ +< \n \$LogPrint debug \$ScriptName (\"Failed downloading for li\ +< st '\" . \$FwListName . \\\r\ +< \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ +< \n :delay ((\$I * \$I) . \"s\");\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :if (\$Data = false) do={\r\ +< \n :set Data \"\";\r\ +< \n :set Failure true;\r\ +< \n \$LogPrint warning \$ScriptName (\"Failed downloading for list '\ +< \" . \$FwListName . \\\r\ +< \n \"' from: \" . \$List->\"url\");\r\ +< \n } else={\r\ +< \n \$LogPrint debug \$ScriptName (\"Downloaded \" . [ \$HumanReadab\ +< leNum [ :len \$Data ] 1024 ] . \\\r\ +< \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ +< rl\");\r\ +< \n }\r\ +< \n\r\ +< \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ +< options=dsv.plain ] do={\r\ +< \n :set Line (\$Line->0);\r\ +< \n :local Address;\r\ +< \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ +< ne ] - 1) ] = \"}\") do={\r\ +< \n :do {\r\ +< \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ +< cidr\") ];\r\ +< \n } on-error={ }\r\ +< \n } else={\r\ +< \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ +< ist->\"cidr\"));\r\ +< \n }\r\ +< \n :do {\r\ +< \n :local Branch;\r\ +< \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ +< \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ +< \n :local Net \$Address;\r\ +< \n :local CIDR 32;\r\ +< \n :local Slash [ :find \$Address \"/\" ];\r\ +< \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +< \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ +< \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ +< \_] ];\r\ +< \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ +< IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ +< \n }\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n :error true;\r\ +< \n }\r\ +< \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ +< })\?\\\$\") do={\r\ +< \n :local Net \$Address;\r\ +< \n :local CIDR 128;\r\ +< \n :local Slash [ :find \$Address \"/\" ];\r\ +< \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +< \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ +< \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ +< \_] ];\r\ +< \n }\r\ +< \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ +< \"/\" . \$CIDR);\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n :error true;\r\ +< \n }\r\ +< \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ +< \_do={\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n :error true;\r\ +< \n }\r\ +< \n } on-error={ }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ +< \n list=\$FwListName comment=\$ListComment ] do={\r\ +< \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ +< \r\ +< \n :local Branch [ \$GetBranch \$Address ];\r\ +< \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ +< \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ +< \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ +< ss . \\\r\ +< \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +< .\");\r\ +< \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ +< \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ +< \n :set CntRenew (\$CntRenew + 1);\r\ +< \n } else={\r\ +< \n :if (\$Failure = false) do={\r\ +< \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ +< ress . \\\r\ +< \n \" from list '\" . \$FwListName . \".\");\r\ +< \n /ip/firewall/address-list/remove \$Entry;\r\ +< \n :set CntRemove (\$CntRemove + 1);\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ +< \n list=\$FwListName comment=\$ListComment ] do={\r\ +< \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ +< ;\r\ +< \n :local Branch [ \$GetBranch \$Address ];\r\ +< \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ +< \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ +< \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ +< ss . \\\r\ +< \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +< .\");\r\ +< \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ +< \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ +< \n :set CntRenew (\$CntRenew + 1);\r\ +< \n } else={\r\ +< \n :if (\$Failure = false) do={\r\ +< \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ +< ress . \\\r\ +< \n \" from list '\" . \$FwListName .\".\");\r\ +< \n /ipv6/firewall/address-list/remove \$Entry;\r\ +< \n :set CntRemove (\$CntRemove + 1);\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ +< \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +< \r\ +< \n :foreach Address,Timeout in=\$Branch do={\r\ +< \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ +< \_. \\\r\ +< \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +< .\");\r\ +< \n :onerror Err {\r\ +< \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ +< Comment \\\r\ +< \n address=\$Address timeout=\$Timeout;\r\ +< \n :set CntAdd (\$CntAdd + 1);\r\ +< \n } do={\r\ +< \n \$LogPrint warning \$ScriptName (\"Failed to add IPv4 address \ +< \" . \$Address . \\\r\ +< \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ +< \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +< \r\ +< \n :foreach Address,Timeout in=\$Branch do={\r\ +< \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ +< \_. \\\r\ +< \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +< .\");\r\ +< \n :onerror Err {\r\ +< \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ +< stComment \\\r\ +< \n address=\$Address timeout=\$Timeout;\r\ +< \n :set CntAdd (\$CntAdd + 1);\r\ +< \n } do={\r\ +< \n \$LogPrint warning \$ScriptName (\"Failed to add IPv6 address \ +< \" . \$Address . \\\r\ +< \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +< \n }\r\ +< \n }\r\ +< \n }\r\ +< \n\r\ +< \n \$LogPrint info \$ScriptName (\"list: \" . \$FwListName . \\\r\ +< \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ +< \")\" . \\\r\ +< \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ +< \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ +< \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ +< \n }\r\ +< \n} do={\r\ +< \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ +< \n}\r\ -- 2.52.0