From 99920aa8e9334ec61e62a986cadcd697763c1b0b Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 12 Sep 2026 12:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 12 12:40:07. --- .../20260912/20260912124001-Binary.backup | Bin 0 -> 243089 bytes .../20260912/20260912124001-Config.rsc | 4327 +++++++++++++++++ .../20260912/20260912124001-Diff-Config.rsc | 2 + 3 files changed, 4329 insertions(+) create mode 100644 MikroMaster/20260912/20260912124001-Binary.backup create mode 100644 MikroMaster/20260912/20260912124001-Config.rsc create mode 100644 MikroMaster/history/20260912/20260912124001-Diff-Config.rsc diff --git a/MikroMaster/20260912/20260912124001-Binary.backup b/MikroMaster/20260912/20260912124001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..d19f1aae03212550a77e95dec310e2e97fd6af4b GIT binary patch literal 243089 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�Mdhb(70F)h(HibEF!SOT$;vvet@K-09 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 LIE+|h2>02C%@5|4ChfmN=QF)C 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
p58kZ?fpC;^(7PyhvJC_PB{5-pfwFJ{P26WQ z7I^w?zpB8-zos4?a4~}BytG+~b&KW)kJO#(Q}*4M1FCjF zi_;@U3_#AxWxdSNPkwp~+WR-|?)}OsoH#}Vf}L#@z9@PQx++Og@$nK{2sfHY+tl*8d z`Pl?`Ng0OWt%LnPJW24?Soyt9w0xI2HrpmtHlQuCZ*2WO*A+;?j7)e9iv+k>v#k98 z$x&vh*7%Z8W>5&fwpPVzP}N9Y3M231%?$mAH+sCJ*my3Du6XIGbiAG#Li0%++RDK> z6$Gf)V9%+Q)oc^}{Js8}`t>&XyjxIqpJz3F+{#uw+e7qSy}0*!<)!iA_4S4!LECLP zYnU!qMvWoLlKE6Jqdfhy$IFe#4_MajP91`o> zg(I(*a2a6YQC>$U9lR~T0ned>JiPdnt&gi*@emwi=Hp?Dc=PLVav(LLD}RXx$;go@ zIZDawCzP^@9%Kir2s5mWJL!^$Uvw;hh@>p3HNJ60N z?!X;7UQ}ka*Hxlx_Si8y1Us)GC(PX)LYdQ-Fkco)X4lwRPK%WNIc4Yk6e>Y;MH<8= z0QCxoiRO)|BbB#*u?xf(fpCX~G8viMe)MkwR(&*;!xQEew}9^S+Ed@)yP|lL4%!;7 znAHVfqTZ+`KhLA#zeSFhF0(O?S3eCuzHb()iu==w1cwa;f6DkA2p@0;2j*ur~R*nsS+McRNz=nYIa{&SD zYYT&#VSj+wpzwv4LN?A(TX9|MF!h=3=JWa_U08P@r3n@OQEG~dm!f6k!a{UE=$oI# zNb2|{J^%q+#=y!;CCWG&cl1~>+|qyr6;;*OVdxTE zE+j3<5ZK7JgXwtZVm;nO_Zzk=094(@p0K~b}D|M}CKG55-1uknyT z6@jw3&dVH6W-8|tzjdt6b9{Nm2H+eb4XPM*cyXL+Rwa@Wvnc`cviB{Y==FQFviUP) z1I^k|y~dSY@!Rek4!`t!tkhhahqg63G@NNZCvkaG#Z}7WdZEW}pN{s*+Na_B!(g~P zdg!QM$zl#0k~429O2CZoo_$c#-|&N~EI-5?<@^tZqWv0oxp5xtZvw!8f{K!_tx#gn&N@{7>}-Yu5Pv!ft&ljF#uXvL?V5>qNgl= zUaypO=tl0c06khEfjfh>Ob(f<9ZY0h%5aIOYo`1JKN$6h>!3r!D!FCGc_swh0OqH{ zj#9(VBhE^Ba$wGw)C1df`g*x_W1RnYdLvN{{LvWXgMHkEVyt9aLTDCyyavN-s?3No zvfx^RbZDe(^p9kz91C;Yz1k-t2N4Qbxi2|&uSjiq;$==bi+itZw%~Ge`XesQQIBB~ zX(js8V`ZWr)_YckTHz@2C zr;v(#IJ$DOdq2(gOba((%~%wE8vicazIobDEzJdANT>m9?~<+}LeIuFnB}~Yj?HA{ z3trvm6ysFlr9dtRuZOcNodff1FfiF?wk8^=bhjLV650j->%7|XK>!?Gc86a@-qsI` z+x5Q){0(D8+GQ4v{__SF97QA|R{pBBtVhrmjvGMMcJwR#nVgxniQz@9GR(Tq#g8L* z#gc}Zr-xMV-W*&p1G@5`_l4A&hDBy6l=|F*ao=fOvkQ9h~5=#vS2hlUZoc zt)#RdOKFt)Y{B%_Src1A?680|%CBSnY@;&9o3p4rse@5o^b(u?>5F=f!@8H;Ytj=R zfOR8pBCg2^Rj)I}v4?ZUebxDNMmQV!ru-{BTyj^%KA8-_QpzyQB>Y~mVjaSnNe;!dP4d_UfVbwRsl z7Lk1S9&0y4ENJ?A2jE{>vxa4R`D~F>hdi1&orbPF7(@nA{@MC(q z7P%mHuWZmZD1J1q^KFBugRk0vIU~_U`TebT+|uSgBcK7Z&5{V|Hx`|Nsb)GZ-IN}| zc64|052LgxevbAMSa*a1l#cnZxPhX;_rA#_#CTnb&)4!l(Ec#h`}=kGJ=SU)7*{W zUNAX!Yb%;girVGeYdj~Zb}r^`2mh_v(P@ti$+<1J{EIkpn(a$U5BIC&ieUgr=@Pj2 zObv1pOHdaU0G5IcrridP{34DH+2~619(WmtReIYXjZC^ADfb%%?Gg+hE%;-I3I}6& z6j=I;UMl3N0hoQYQ$od#i`NY@mlq7zW2qqw8u;Z;!RQDuA?Er1KjBn+)Y{&Qd(99r zXv{3eOE{4k==(4$^6X;LHi@vg-no{cgzsMAfZ~%u5@h&BhdC_HdPMw zzj%j&!AyY%{^Sr+CG5s+0cEK`MzjYze6e6E*Xq`@Ye@!0c*pTWm^Sm^VO(W1-$}fK zy?N-pe!s~0gxr3E1u61p0u^$jU>#Xd&!~vhHbi#f!@xY&OOt}${;o<-yn~*+@Nb@J zjGWsRzeDRj3M)w(9GW8e^-p^k#Of*D*Fb*a1}4AC{BD4)=yq=Z45f1gxwe;7zs^Cb4tQLzCsT(Wvg+3;nNXtKDX)hYaY8|FLpG5rgXW;d>&1lvTl?! z#1~=ySg0S!1}5%98kiHVOm2v^K_eaDv7supr`${L&!KbJj(}l(15Lv+45A|!vokdX zYe$L^^#9v~zFSuU=A;2AFT)QBt#N1@6iNunm=j@*kx_z=fv`;-SX{zEe9UCKyql?) zknKX%*rMYLj$$G2X zObWotGt`>p6EI>VWf&;3fq3ABXE7uKze({dSTGEDVolP?*gpyk-^y5h8v>mwJ0-a}4xb_5rz9pDPum66j*1 zkAi@{-Sdet*|(^WIZfOYu$z>kOQucPwE8rh$E*3A(wiH&Y`6eXPT3MpSh_N1kNK&+ z*KztA-cypqmvtB(PZ5SykF_GZN5+9#w$H8J>)yZkL~K^|B-bB+%A!Vi)5(3umVT+M z%ZC!XQAxXJ4k)mKA}12^Xz=f(&^5J?oohap6w``SsB1lfnA=K;$8?RW(>!a#p&lj? zOh|W~AO6ZxOcNH*@iYkXEUGm!OB#yw_7H2|M>QhJhmo931>xjkK}&bvco`(Dm~?+? zI6Wd~G5>870~r3UxrkGWOPJr7n zV~zv6lBB7T(;a0S#jIhZeS_-q3;$~fbpL`{K}RB6FU#y&fUz63pC{xNyA<)9p!q(x zBwM#OB!_bVeIZEsBDjOsoN(NHhG^oI#0Yqye!YGyd1fTI6wxnojBaf8I8Z+XoQZy2 z6}(V#i;|_`NeTPCLxmZP6ie3m^z!{Y5Xffl3R#%%R>@p+>p~o4d0k9kCW#{y@meZO|qR#&%!vy^Z;0#=dBI|*QF$(~?6o?0_rzkq7{bhf^U}2~YBVdhh_9@)YbWOFCV;TLJce-sVI`R)to^%FDlck-iFp0#5&M@C|uFG4vhJ}CmCtoXpKn$Ed)G3BR% zFRN6csH+(=Jw z;dSkUH^$`wtMGhoBfdxFcbYW{!}!T%bF(StqxO22Bbgf6}LePwXAtsV6$opTTrs1hzT1L1hYP z^qOUvSN^I#`8hbdj64I8f<;{lO2ogqF+MbB^=2g!&SYNqY5MuOFX>h*IPhK`-Ajr6 zW4$sQ(cvGKAq?39Kh`x@Gphs)TWgrlQg(Vkv9+kJdTzHxHh>f;v9aiEpTx{)tLMLi zv+z;=HnAP^@zX@*%5Hg7W*$860##wUP^8}e*Jfd0y{DS>+&H67MOyI7_r$y@d_i1h z?;kzbtn?Ys!bnC4#bx*q?swd)=s&9|N*$a^%eEN_gH=?HzzH&qBTbMU)Eb`rh1qVL zGxo=lZk{N)=~=qrvLvI&fO+IJP2C|Q&VeXrz{=$$eSJuGZ&Svs=ELU`A0KZ8V`ew% zjm^I7FeFF!4YsB3(3LCXB`rTaJa)ih>j(ZBeDCsIJ84zF9HE29v}FQAgFjD(?Kx_Y z39c>^ALlAgE0W0f<93$$d2EJdauHcAN|dU~H_8y2)i0SE6%y-EzcQF16OL&t@qsN% z#%ByGwyP2mf<{8oL%!KgL}ZioSWY%-hscpR4)O0mHJ)Q94n67D$RVs%nmZf88M{U zfM6wJIKkIaobtMekfk6j5z>{b(IP2F6| z3UpSEsPkEjDiE$uSXKwM`zdGNj|u_fP=ZNXhKW^`@>(6&s}lOuehgK1ca9L?jJLV% zI&bpHSC0s(=RG?_3gJK}WRMWmm%-f(5UI1Ra1Grgap{qRFW0)?hTWP@sh#k#a4{GZ z)FP_R%WzJzL|LuYtIBL=P~)lC?Gt5s1FzZo*Za^w{wsoy_doywK>fc`CMg9MgImb= zv~qq+jcHY^I8ieYdvAbSuD#B5at(g3@)T<;HiysRkg&PR6}G2-lZ|sLizFPjq8IS& z1ej-1nW5zzYZM%a?oCkXD)xop%HQ43K_8*avy&ZsF%8CBPt(5Uo~o7!iX1%Su9rbN z6QE?>n{OeMgc*OqFgNidGlu|R|H`x2eqgTH=qz4x_>=~47cvUc;1t zCcMw9=btH#Q0-RcW}fv8Y{(US-%tu?LTsSHQIKLND2YROt3>WEUL(8) zBveiYc#W0#MiVJJAc7JU)4zCLZW(WaXk50rs2mw(FHMXe?tvva@kxMH?j|+PyP`7N zZQ(na7djm_gg^*q*^q_DIH^u#6hHH(mJ1Sd5DAH;Lz#)wVq;E0>#qYFa)B-9J`J_(vCK;tH#Y^SB(Z;$Z!Hj5=_#6aV;b!0=e&9=xJhN`EmU;|EP*$o zuhX@Q{{aF9>HFGxu|fgp6LsxPN!V;~i(1B3;SQFBeE+6lCEOITLr*=0hEaB}>FY8> zn|)^TWkNfwY|+6}FM{~u;O$t)VY!kmYLgP8^)oGwFRgvw>|W{LbW{fLjy{JhW>FVt z@|HkoMT{KLkBR_qkqacoGstAeJ0lG~5Hfn&4vAx;_-g{dBQ25 zZNx&W@`+t3asxr$O@UVoY13Z(1^af%Jw3{>dSwPlhiUzD!uq9%a@6C;_dYC$@W)(m zxt^cbf9LPccKnJ9^!j&nk^XW_l5!7e#E%SP`}P5Sl3TSU4UrwtPnvPzIQlfTm>Ksn zTK47Lagi19t6nAv6py=!ANF`Xr$S1!%PZ!y^>1^@3XqVFQNt!oai+Go_qk5XpiuQm zm3hbJt#k0=l-W4ZiUs7@clUKh*K!Gsv<%xbcakR<8flbcC3(G=vemwxjQt#h4m(KU zVk>#Bj>$dE8vwnD9gMZc<#unEn)aU5d|vHA z;TwAE4@UX9p{~aDFp_S8k(kAU6}yg(HN=r!k<4EFRE&BH=>jLNX*S`|7~~vnp5+|h z6wD=>O}#N_`dXy#jx>pT%jnrL9&kqAVDXzW8D9o{@H=UoBZ7}!c#vqLo}54|B0z-9 zr_6<0EZEJ;{m_^9h>g(tI(r$`d3g}As<@oava=@C<-g7)52K9vE-v#+z9j3EEAXzV zF4|96!(7fhG`i0*o`7Ec9@S10m|2e-q|~zi*lm=@KSf#oAki?@Y}uoD2l{4DXm$Od z$L4W(6K^>q6F9qum>?>!lCsjE{#f#B>_hB1nLj2MsW8uX%*btO)V@|NC83KoOXsLD zgps~1n}G{O%^t8{jqXn8AL~GWAFkmo4dw91o{pwrUDiFD*H-swpE?4>YjsQI@xO1f z>;5P&sb$&gUNvq|EIexM;<2oKFagk+eZpR*G+PejBDTM}iljW|;(a+Xa2;{u{j-Yz zw!FJ_0_@u;X~{aG6a0AjDlvn0li?v(+77!r-+Q)ABPLXjUpB(b{-C*q`8G;d{OiQ)iOdS)s>}{diZJOG<;C~ zHtf*XP?(N7V*N;vkV?p#2&HrtjALx}CKofQql>2H^}>3u2t2!rh=}nDtc&-=*uxVp z;}+yN&1fj%MPTG-n}-GrxB!X`=8eIA0#w5Mt(P#BON{2TUDmiPWL}cC?#W|yC~_gg zw4$O_1MV;3i**y zJ!F#Mok}7CL$80~1v5AO& zkB}6Rf*x;^?f4*j+J=-4B^fB#mWp~VFjR10I8iM|MW>3W8Z0Xmh=8}~&@QOGlJ@Kh zT1Y5oSktes@YqyH{p-OOzmtU_f14d?F;>V3M)Uu-Ha9Eh<(n_(2slzsjMA@@$@BU4 z1L4VR(%S*672KR(e4g+IuLBz02iXGMhfL+pV^VKM>PzlevzWj!dANE$#J^nS(b}zt zG|?uX9hu0>pD^GD#$S-N1*97obhY#nwtOKl!pWTtqF$+yr&!11RGYJddj3Zo%c4B;qF^yK}WtIJXFQ_HWm?^k!~ z20KS3hAkWsX`5s0cnKbdAd!GzCc^IY;ojwqUpojKc!FlH-M#KObqmUko}a!!=PYWZO3!BBf{ z|FzMH1bNo8H+)v>$4@zNlNJ5l@i=7+OH3X;YoVwfm1+J5TGIr~y{}P$+i#knUU*t` zv~h)^)DE5sP~9gvcm+$=POBrRx%TQrVDDnuyh=9mE>qSKUh+^4og$-I+v?B$?i)(^ zciawXu|^q5;eO#>dUQ;JP5lhf(T>D`;@52rH7AX_t?xRuhymV;37{tF1BrMR(AC#* zGnL$PwNuvtc+~Zt3OD$eC(Z?B`&(LrO0Fd?KHjSHf`3Wnd6JVIs;lmf1S+W<0^1Mpwfm<0L3qELS*U336c&|Yj1$5|E!|s z4|S!DP&&X3>-$#~-MC7~z=a3z-W$Vf#*mov2fn?@9{DP3sDuQBB+*vB<2|6qvmSP+ zX8yY;aYw}Ad@>V7=qR9-H)a(f`v*4e*kBZsbDi%=sTR>Nf$-=8=X{cb3dKa2LjjOw z_B@E>uNZY4Fa-2>KyJIK@?&{E3d49oc_ANAz&c_i1{ zdoGw8Uyw!C7JsAEe=d^BaE&WLCa-CR zbB~{T?a`9Kxz`|m?(M>$vG>m%VtGvIUhmbsTcMc>0}UhE^VFp=-O4(pn3v`9hJT-D z?*Fqz=AZu|yTvj)Zl#12ZBQebg)iobnW_LeD}9ufFkT}vKPOjAuxURh%Gg>HOi@mE zQBP2YTX*D@UuT!Mz@NXLC%uUC+dQx1nw5%v-C`cCY?&@8dnU%CQs0 zx$a;7vW%}pb+RmMmjBl44}zK8%zmSxRQ1Q%S1N54EBtL0{Y-(ynQ~}>TzVJM8h4`| z{(MOA9eGag26wBG7?E7C+(ZA^rn*L|wP`hhLftgQv@?CW>ZZDA&bWMcgT5JDSYNd4 z)PK#{C_-jmLt1T2N2|WCapK`OsPInX31?FDZ&yl@|s%R5VK>n%cG<^@0&S07QfGIlk1pL9$)rW;=2zIhE_o>{`1y2Uu3yo8c zK#W!Elb^{|^F&Hh>S&=4NP+|mYc9bi+i|QlzVo&M7goo1l5>^~>s-TYlDFxLzdnF< z_xk`HDmevt#`ZN3_Ak}d1n$S3yZ5-ofWTpkxOqq0S=ww-OM&b-On&CnzAEtoeznTU zRrUCy0>c`Js}Z>7s$l%J?^*{`1POn7$?sv>Bfl@&ywrLX@+=swb=sZ%2#NIX*6_U7 zJ9f+H<3(Q%ms&tKCsl=<*6f6CXdW^gZ>y_yFWd%tF-I$tBSxzFnLh780&%L7SrV8-I0GpZQs6qfEgHF80 zq- zfQ`S7i&RcP@Dz&eOR*htG7IMZ+bf&P&?UOpS;yqB8e#m(CY#K3Ixi#ceSi=B<=pqr zXHo{4^AQNhcn7K2zzOiZv=McTH4X>rqymYzaE2`l)ld3*u!c4ns4@u?vf9)YV$O-q zGT01I*|YRxjfuYjy$IT*RI2c?utISZQ;B0}GqhMNy3+oZ=>9PP8&QAx ze-SKG7J;XWO%VSggwx0_WzJZ3r<%Ble%!m?c~+`Eh%S##;U#8fXABxaVwsFO76(lv zrGqqAE0=h;TVGx8IXVppkwZa8G;l^pfCsCK1oh2 z>fo!o=|C3FwkRiz@^5dyR^i67vOa445#+)WxodQH_GIQTDhN|A!Q*oCkg=cXb713v zPNo8BQW00H@%|&yeFRtQ^Zi?OBqo1QiO8QqQ0v3X#JJ8~!e$@C`+*mjgT7*cc?46E zgtCm4M3P>o5kn4_+)IR2aI)6%RB`S#*wymxS`p#rvuQIoPxO1JAi$?0a^LDS6*|N_ zXAgNX+>rUVoT2Q@83pd%I`_MKO!;DPUKHWeSlLZx;h+W}0zDtl{u7cU^O&#tZ-kN( z7W>U=2a(#t*l|5B9v{q4c=(=~?-QpaH-NLWE6h_#(46MU`s>;EITh2q940l;=$$>e z;A2ZhJ{{*B-Gm;4dD)Y1~Ol zISqh&^DB?2u4Cej4?>6M^mvrBQ3{#D3W(Syr9qq^*{1lL2vtt`KE%aHuFd?3CZMrH zQ`h~O-C*F);l}IR%bB6yY)bK$@>kXfw#2=76Dm`_A|2kAZ5_a5@#6k1V0eDVW@Jbb zWgM)I#G0f!3mLG0(H$YmDWwT0cMZiaQk#XYWb4aJGU?u(N7G!3n33~2-{X=!kfKIt z|H-q^+6F<}p7tMkGNwO)br?hrdP==}nyU1XN3e*oJcm0*rk%DNVf zjq?2_?Jg<3bM>u%AAo*JcP2J6wWe$iZJ;DN4n z-A=2A#(s+5EJ31H)`RAT_Bwnl-(2aU^4^3MKS@lS|r3|jc zcV(T7MmE1HWfuJ|mMvUtkB5~aSeL%g1%97MbR+?R+C_vS9#(K)tep;qFp+)XWCq_UAX$pA((7qv)RfW4)8HNCY|ui zbd$dy3cU3?s5x2(JWSTkTh5 zW4HFejz#VlI$Bf6#$*|3K_gsx8udn%Ey4ZlcI?HMpb2G-uBPf~U#}et6E&l%F(RQX ztbDK<@VwMrr3-d6;jyi>yY5SRml_~xE0`fkdekF()30=qjiZ|m1~6d4zAsihMfJf? zeOYP7F#DMs7`%V}GU1e>shm5I?1^(BY?Wvl>m00diW7WLt_VkrEGyXF0?=TMZwnFE zp(l`%O7>Ycq|lbp(+l%r+fEk9)&>^h2^}{tCv=ZHc5YkKQpC@MoPVAmj>QmEA}#_7 zwgP=&zAet8eY@-8w&5igh5{48z49`Au=`R1<6(o5)6%hcX`Mq+6rX+aMhS24U%1a$ zQUn4d|0)|_q=X_bGtown06w-m>c->&LB-}J*Tb(NL;!bbdIaz6PQA*ZGPX?umDfbo zcn4Je!p=;h!_Pfo#x;C1?!Y3p`CdWYMirq?0LvANo{EN$7eDKiEagyn5iO=i3Cw9q zqysR!V0d1s_&+8>B)YwY;zAO5@HTAC=aGUaE67j1Gte27Mt1eoH1M#avGur$-{^%O zJ)S1zH&q|q$w94%zDMEK<1q^4wTZKS)157KUcea`~ADGAuS?lj~ov=C`*tJ8G zxXLPmD^V}l^yNUVmzZAd-UWXM1xY^feH%So9WM~r|A=HmvSM!$&EU6TSyS2c3i66mZlpw~;Q zYi7_s|BuAJDh*W{%1Fz?5rR*|k$?bkY0{*Qi|8>@l$&0u!~7fXS?VMc=aS!rKsv!x$WsDsD{@1(TZLT>*kS*vXRx&az6$j3n2P+KQ95V&gXg9U$NcJ z-k@$#rVC~W>1I%ERBWD5>Jl`ZAvo$=muwgXZcwD|MAb2~R)iC0 z{D0~8Se}y9IJ>4}81)b9^VSEOA5Q87;;3Of-rLrA4VBu*43eI6cwo4_9|1i`IZ2#BnhUh6NUL+Kts$ z6<}o&BSQ=gcJJs|zH?H5+wFDSxE7~YEjJK{FYv{^#|b*iTXciHvt5&?7?0mxG3EoaI!>~SLOdqNKVsxU}OAYc$zlCrK zm&9nTA(c-Gw%~|^^EX+o@QG2BbKH^o0_4gdDm{Ry62g7PezR>*l{VJEU*ZvPKePli z0oto7`#^(vBZcuw`#4YtZlj#hgiuh85)O1AT)}Jje-}n!8$L-%UKowo0xM9DrkuiN zO0T}N)}*G6XlT|EAnYJxc7HO@^vQO4BPEmi#7F$3Kd26`k5YblVn#Yw^^ z2H6o)Ly06Y-%?tjxSslifGF9R=>b+$K}Y+e&t)no>vb|VM9wWY8P$b#G;ZxIL~1c>_+^5j7grY#yh`?9wMg@ z?i5f1KS01ef%F%bA;Ze$(AwF<9(NVF40-XVGhTMl4I-UHuL8$+U;a?MHeMtdsf9=* zuUnoGxvg-|sul)KI`Zz@*L#IMp|HX{AxxqoF_BTnZ5tWqK$gGzKLDIOj>Pt}l7_#a z(?+S2{Em|srFfb>OXaW7s0qR`NuWx)mX_G@-)X3JEuTV{kM zV-v!fiZ)XCm$fOxyK0`~Uiq&uW97e_0bgF+t2D<{W5)m!O;;7AjIY)L9sk<=%8Lxw zsRkppar%ylO3eeq6t6s;thBkYI{P*l2uT!(!6@HN2R9@z@t3QWP0FuUK zE$cJ;KveNhq+DcD3UvLDdT48AOYdQwT?8EA^XsoAy>~qPh4#_dfCf>AEGr2wxOn1B z{I7Y3v&jnZ71)=HNT$-Uv?)A}aJR6X7FT*;V!{j>(r!~fgQ}@)imI)}2!y;YVr*wR z9OCV%fwlK4r}*2Atb;0ni+Efp%7&LtgPPk~nPt^-Lkd(9>&-VzQ)Ur6YN=m{5I<)a zkW9-n!QfOWGXZi&2pC8_}(|5H?ZbRQ3E2hAPon zw%S^&ImZ5Ga`&f6%wRHO@(RHnC@`9UIBiaBs82nbMWr-x6DmIjv*1`2$BTR%f2U)h_GxGmXF9kBw_ zyFT>%OFl?#vkB4$X0>NQfd`Y0*u_6?d>T?rDSRe~u^~eTcdcj%F0BB>dwan5B`P+9 zb_woDgzDVlpkq68&k6VPa=%5E$!GtTqq7QO)u^no>d%<(!%*f0C-I_^jJclacnX8Du|;q8ONIWB39@ zH7eKo>yu7|1*VVKBwsybEq`?KeKm=_##rImyVd<=A3%iXaW5cRlKlaG&Ye;9>~Qgl zVG5gV_rZx6>Kso(wRtx*(yk}N*4gam)7glMCAK?!5VjfYo)V!tHO1G^V_sV+0RvM7 zsdhk-eAm{p#Vc{S5&P+cW{(CbrZg zh6F#d+ZQQgYj?gO;^2psI7V&j_Wo?%epR%#tVD1iL+fPO_=;@*0nF@vyB!_0NVL!R z&a1GpB2}=B(Lurk`fI;LOCeRL^rx)xSuTcdR)(D=9XpmW)-^2*Oiy93f8u;~F{`5I zeBsjL+nQ~?A3Zh^PlZR39u(b_Q|o=_|BD$^gqmI&sn`VFL+iEf31 z6X+ur3gTeI%o;JiFzz=xhD#*V3I?l_BEF3+&-SmDF!*Nt?z4CZB!4;ru+-5fYoj2e z_{c#)?Bv_5HWOk~|FSqi%Iod=p+MtzPj6`>5ORnH;}dwjbLj}~`~^JQEj?`$AmTo$ zVIG2t83jM|XGS)^@|K1J5w7mE~1q z==e4oEo=U6{?hXBqaR0PM%06qlgC#*lP(FHXq#S$)f~hya_<2Ow5b`lJq@Ly6YPB^ z4{U*F5?4wz3l5-s*0iDFkk|evzK1)BLJYpw5baFtU`}Tgz+5ezJc%>YA6Av;EcDU2UL8{@cg-G1)r|!p;fg@9Q?*6C9QFneBJ>$N+J^{T zH*0gm+to>34U|whOvsGx8{nuZ_uq6^!4D5`4awt%n{@RIhsF8((D+XQOg7#6Mk!-? zmo{6Rl%9UA)_DW%u>{d5XmaPR1aS@u`+gTo(ESFG%#+A5p>a&)pWfdk3tEkhol;h- zR)RTzy9EVP_UgmWxmwQEQpZb4lj&*Lsjs$cNo56mzSlqbrTGyCC8s6AN(<#^)0{d? zgDCa2Q6I_R3Y8S#f4h9Zr%u8m6h`R$MBD+Y>gWq}=uk%q0aJJv$Q6A>FYzk4ZU~O> z461-07F$OcD59uF)fGEz3eh>N%URQuaGgE*f_9?|3FG3I<1SE~F`|cGaFPUbtXtXw zeM_h2!eXjgM^;MqdpLpoHCtwFe$NQrZ?i>Mq(p6QD6f|Pop>}oUD?(pb~KW)QXvw|i6XX|%rBoV!)h`wnf17#^&COEe0n_tp&}=V&4XPa- zPVXYc_Y+Uw5fyhiklXV5FGPiq3CSi5I7@`|UdVS01a2qX-nXLd2Fz|ewKk^kAYHC| zt<|!a(`MwVN&WoI5PfS^y;#f9HoAizKn$XESp0uRgA7sn(k8qj)W zM2tdHP%hwLN~msOGI(S4*NbV{m<)bf0|V`<^z>Q>S*25(GC=woG%F-aV+A0cMnJZxm$E7#yZ{YBrF3v z(qT#-*w>z4G+TGvJcr(o_9LIO?)T9AJh_Dk<=j?q*4L^NX)t8k-Dqx-Wyv^=u>1>& z<{B(uOpujl&D1LlRv6t>gIaU7=_7r0E2#_jq&f~K48g%-9X+s*vHGDBxYg=DtjfTI z8fEWX`O=cV$2Ta1nNLlJ=D2|NAv}p}wf^sK!IzoF=|?adW>WI#x%dAd>*s|QQi7|g z!e7h(!+MRUOwZXLZeKn}J1R2s8&-NUylS;msEOzEpk5;f5iQUBo`K;uJCf~FqiWm8 zH~yZpouDqWI_(U1)|_uqFcT8lJ%&{X*k?-i_l0sXx7{X;5gd#nDYe${SR)*bv{U z$UvB+o~KYB6gcBpN+2W%V|trU3t;_1%g}cG80GH4>($bi!FcT)BqTE2HkMBG;*vx2 zLYB;Z6;8eZH6+?jX^4$?ufH0?H72^j03P9?XMlU+gz}MyhnDQ#LfK-M?09|4R~lNo z%SrqMyJn9J-^%-D{Ff+Lpr6dH9+9uSv@|?H0DH%6?XU|C<5PrGiaf%2&p}8M>Ht;K zNI`e7!_X+Iu{yM&?DHU-s`55J*tp4>BTOQuswPITTdLpTikFqYM4TxPh3qs*VkF2I z>&nzE^Zm7k9C>iY3-ZPH{UsbKx|I3b`@&IERY+$FW&XCi>{P=!7^e8tZA}3^F?#kN zr@sW}A2x!90^_N-3)%9TrF;@}Vn#bDSredeTU;RKHqPJ0|Cw@%gn|c(F7B0L<9i3W%Q8^+8d;4{b~CcuXvh;t~b57?;FH zHnlWr*eR#pA@w;Ky713X=yR7MDlrkUl|GeCI*4@|AU<>trBAg>SZ789D$Mm&jCxQS z4;nA(#h3Th7z&Z6TS-{Fc1mS0&-8>hOt3|d9ah1x`!Ta| zoNaJt(1=L$0wznQp~BO#KCYJsXo!%kIjqsS zShCcGV*~SYEWR67E-!8kBK%|SV%@r#`l2Qj5e);4x(~_0MT}2ti%I2zdTQMUMu*Cc zy8C_51&hf#M%W`suY0cWd^R>MgY99;GG?NM??t#iV|5nfLvmiVB(TE89B75^80`s; zJ96=-TO)u>Vnq|HMzCEW+wf`<*ix^Tyt7=EoN*6=&ceSN$~B3WLd5trZ<#)FAc)!G zT9rz@a=jbtwxOHd)G|j>$BIv$L&RSRQYf<0!#mf1j6&Bq=o_*J*GQ zfjmJRF>yK&yYqP<^sNZ)4t%f3UPVkB-IEO6ah&Pb@EIms&1Q`J_Ql%|pPho(<$BeS zJ|m3+h#AOfJPFZnEUhoA)JxNM%UR^E?guN38gdoj7@v6@;MD5=S3;@cVE?jJ|gD1(Vb8k`IdRjxooe? z37@Boo;wcdX)C4C*mbjIHnp|veKRXLeiJ(pU7%u}GvU|jfXrKOQ0QY|IJ3!fIOjjM z@t)=yMCz%!P?!jzy#!!pAIFYYI`=YcR%yb(gK5(Ci2CM92nFflBE0=0WT;>s zF_lWGGfFw4_>+ZY^q_ukv+xee5wHe$okH9#Tew9B+ zc!*Bf9No7T`*aKpCJ&i++FxB30<_zRD=nwk?}On+qUAD2Xh-;6mu)Njjz)OP}W*rYjn z{a-{9Zagoi{WBM)RwgALq@&GKfEgf<$}=ww< zr&#)}=NV_TZDZA0?a;V>a)z&=ff#f>*1%e4U7j|0tubuAt=s7je{$Z3j|KBipZy-R zEn!>S_1JHEeGlqe0y?ci6i~mB;i+jvXTxP_bYa$^&pC?{LOjqR&87@jaG{*Si$pO( zH&}_KyR3N8W&PBs2%ONj0NNp8ly*{R*Dl-`s13Gh$GT;DJzrcFe1!Ei#2wIDXpg6V z+!_f-JN*n7DY45gNZWWmb6IXp=0pg1+hT&*pn&wzOfLO<<|b=k;SQp<)YM{i$^l}A7qnu}TMRlPk8-JaT&T}4 zF&TB6V}Z2r|B73F(Vk-swib}JVv3#?g}Y$jSIjC|9j*m-CsRT>9}NL{RH_`O^0UzX z7;VDtL0-Zsa4ytS$ydD0iOn@*>nN?5o!~-)@peP+bYm@9t!p3vzVhLJjZ=L;YGw_Q zul8<&Xo9boJ9O*+Z;^gx`g-&8qNx)KPn(4$dYKTg>r%AqHjR^86hJ`(9_|GZMuesO z=VxrFuzTGhby5{`qh~*lHPYO*a@&%1gpI*$15XAd8#35%S-P)+OTSB_Ff@T;Oe}7 zL0%+IqmwQ9-*|m(sYBA$rNJlv7Ccx}^C5hQr=qvlJ<~Kgr8#e3Ne&#<(V6+BG)J*l zA~az#3M-h4#^L&Js7LVj1##J(pJEapMxdMpyc6B2@ox}K< zITmrj+uwTP%p-X7Thgh(9V=7e1za}Ff+H^m<(B&O-2_sc|q1kEbN^%V0~k{N|nBBUV^Oe0Va3R9|x`A@fj~`9xCd;^rW!&Qk#3Z@w7Ir|L8n!UvYIDKc2U2*I zju)*jGFlBW%-1JcfE~3UR)GSz99m_rb!7tAi4QNmi_g;2?CrB0)ghJM|K!Mdj7s8# zIU8~rDaj4j(Hanng{>DL>L6n)7N$f-@NWtnzG><9f(TJO(Y0h}b{{ z?UwP^4im8IzY3QTjSRBg0*vkqZ6;Dl9#`QwR+WQKv0ujEpl7lSSiiMwW<;vL9I#R& zDd+qo<|FxH!|p0wb>jtvCb~shTXlY@bbp7 zy47Y9ndw+BMGr9h_eMVZxE#aXryx76H3NHrfNKssm+m`Vz5||Eoh$M^edFE=tDXQS z<;64^4oWVB@B4jdqYWI~qZqZylB?W@GFYr+oWdoNWi->)zvkt0iSt)<|*zNJz(g!Vh|VVm2f7A=a0db6cF+jE$})6 z3Eq~@B9{QjgPm>Lp0Kh;spFLu2VU)972R3|DT$rISuT!;)rLQ=E0zRV%?52N|2;~( zz^_Re1a^FMr8M3PR8Bw zXY*PaLxYZnBz*~Q*{y*D;p4f_BMwHAr(~V{!c9Y^MaZi=0Z<%QDrFu8Qu1IJ|X&l%?=k!2oaVaxWR<%~9< z=$8@zJQoQR`m~avkPMonY~nny)p%;2pIpOGX6+m?nBkU8nxxf(ax3P7oo=QyI4)Q} zw!A3M^MlbYdoWw~jk|{Io4PX06uv@OoZ!epSBf~nP*|B$X)pxSNPw1ki}9pCodYfI zKGpM=SSZ>B3ipswP1H7~EVv6`tK*GClhch*CVb&T*jhFbS%=R0&ky)ZfM|8z3*{^n z6TFpu5wQH2y9Gt@g|kK^t5i=KR>>o%*ouwq7r^0!-bH!+_Zi!k;3f4m*_NhR{5-S* zddqK*{|B32YV;EEZlP`P&tR53@`DgF#u?Z=BsE4&^-GMGdmE;JC8%CX)?gdq-$yRs zp|~sVtb$KYJ5cs&XdW+Zqa^kLxWF&p_h#;|RS+%M3Xtr2wfb7m#>`5+K-O?tb`IL# z2`1h0M0`%R?jVe{ZQ9BVTN!4e)6-oi^83tpvXrqVraOOPr(xGwe873T7h#zXo#v@U zX{h&6P!`wW{V?ErpBSY;i4OLK5+FXGoq7lB{)H$P5DB+%l+pspa(YK%91CjYKcQg~ z*B&E{7dDR{Cc1SpyBtR;+9yY`xp9TJGZCf3e2at1;Efw&n7nO$di@a`q?MW~A}s0{ z^MeT(?`hYY4PSCTbw$cEp%gLxE;71Yj*oD2Z_-NGRy|jWJjz_5!b4t(=kLL^Dc%5@ z#5E#yo(;1b5`rCjqcN@72`H;f@b|0NNi`$SJ@^_C z2{0CQSy+y7;g@!8SB-DA;?1kfLK&&FP?}!MdBZGh1E^mJPov@oTm(|zMlKhr$ZG|2 z5B^`XeS3bBt!UWiaJA==KKLE^wmpDq?S=S0B`d1)ZK!2=Tw`bAIbsU+S_uRq+NFRO zn50b_Gz=FMbm`vE6oU|RrhcFN`>hmn)jf~2hkMi}SCFVxHDDvt&+U}*`Ees}4LCug zT+>Lb)bSnKR@t-AAExF5phYeH$TkTb2C5wnns$}FQ0wJ!z;$ij*MntwZ=PV#YTJ6PN ziM^uo0|DkCZUcsn9#nmZ8?oITC&CpLIakk5?x|6P@IQp(0(hVEN^PzCx!-)9iA_JC zyr&(I!QDqYyE+7YG8LZ}R|Gj}(bOgcM{AWGedYkU9RPeIyaOLB!zWZT130|=l`2e3@ z6gY(yJo9(($R(kdp&~IF0}zV9ND&?{7uAy)w&P+EvOn=-z2yeL; zIZl$Bck%2TB-K&>8qqpP2b(KgVp?_bTr4y=p=n`v$UM(L zBAv9(6r63=evT5{6KXzvNA+c2My*;cn`&i&bCAi{|- z5KJ9O7T^!9S@$Uim!MS&$TS4pKd{eE1&%gDwyzG&!Q};h90TZtA3Sv+uP4yw?5v7x ztya?N&*%r7r3Z1CUHTxO`?~2>ZSBif{|iqezqTtW))@k8!5Nu#jeZ6@a&(+x5euTV zAT)FUMgFmk6ww=&vK#3CK?Wh+bMJBeg;-p95Zs|U(BjO%(gRjaglfDtOwVE`!B~^)R>n!~u-<>g`OKR=uo=aH1kGEo z*1d)6oB_joG{a0{u~dObq;=8~D{1%IfO=R3+er<~_YU@)=kWFNeRYmm4$C8pt8_41 z0(+J!T7n1(QkGS1Qh-csEDMt;G_ zs1@Knd+!C3;$}^=$cE81vUV&CPN4t*AgG%#?3~z4!2CiKsi!h_z$5B8JOP62mf8Ad zgla;+-sae#eE5;Cn)>*?l4H;To2C0+U*8%`ylhe1zP3}vibFDUxpC?uD}A4xqcS+Y zZDx-7pS(-~c(%sJvX<86u2Jc5=yK{)dVOnz20wA_N>C>*zG9ma;@C$sp-n?|Nd(!# zMGMW=o=!}-kd(^UdHR&#%28Xad`*PJfB;%so$ znB7H1lV!1zcIUVrY0n&S^&BW=v_7z=UUR~}#AMw6BH&-oMu?8Y$KvWQprciEBW+%r z!{`X5e5aRTP^P}l+Bm%Q_gefLSKSTV!mg9MDUL<1Mxv`XyQ)C?PtH0QmCwfG)k>Uy zE!tjnw(aun)Qs5yELc+VHf9FPs6J!0`an21Vq+Zn50e=K!#Nz}ZzeA5@wR&Wt`1Y# zx(W4U`m&jy?(3m5L%w7%&00@^7}<8)K#`85`3MO}M<9d|=1C%okAyRbYb18agPSVJ zf?TTufT1dn78%)CWwt8>hz!$=Y|_D)>|VAbTk{*vJzm8CTl)h)6E z_{t_XjDL*#THAe)Yys>+pG>NaYMSJ$6b@dZW%}(ujI^C6JULcE`p>4Gmj?9h1Qo1Z z3@9q<^>9l%pAjZrsZUn;^k~G#XH8w3z!v&23|kU%wn0WtPFjETtta5SB;5K&j_3@f z<%bx-`w3Y%9}TDV{0O;R;xug-=U*jJS8)3yuq*3U;YZIFEjLA59J|IXJDfFP7B`j( zjiZef;;T+R%h^X$RKGSTc@?kg!bPdA+RIR`ZX(2bipU=qMcQk>;;_^My=!*N!X|jvLgXxA2XzyEQU-fLNisN)Txsb z{y+xcWTtcVCrnx{++ihqFK1nmNBAgjwN=%I;DNVhUO!P2~DLs|hO9i5> z3BUhOl$7ntYh%jUI2%M$H}dRg>D)uv1&pp<1<>>bNW(a$mmIS>mupyRFTl|b7Yh-S zJ_8lM1~f6n%$O-t|Iq?TWqrxo*KF9*z!qghw*S>#4&kPW{I!XkG-GiXJS{B)5O;h(lh^C^n2Fxe$ zc(yxzKL;InZe`_aU{%xZz%ks4OBX%%?Md>XSRG>shJ~Rmo-DPDgK;(XWe04|)_k9ILPHH;zw z{DL=OW5GnJ&dMcABbDL`S7VvIUJLmUzpRhmp9d(cEz*<`$fR=2`WDo^X&FLrl+H+) zM*H1@?HIc!2C;K`!t|q|Nh5PAo;#=p0KUNBJ^t^QGkTfXC6R1ap>JQseuk&bTLcf; zWdv}f`AJ&b>-yhcefq^SXFLzQLPkg16@n=?AaSK<%OY|T$>Y*8agAWP*zM*LDFFXJ z0KgIWrleNM`cj5EHeR~s^ww?PxIwIFg2w<>lo>)wlGbtvIT{YvC<-zuO) zl!ikyJy8vGf&4B|XpMszX?U}MW#EZM5-}C6D7wGEJ`17QzP(Csk&EX3IY89r)AZO7 z1)ms;+)hSvlDT(5+5ImCv-|%L%B`uH9@Q6*lYCqkE-7;YA=&@YJwc%Y40UXPTny9OWL)$Rps#n*C{Bo8lu0I-TH^v{Gl#)NUaR~V|&=ih6^>9;H}f^ zW*2bJl0gf4*=yfWA;AiCocQE}RErGj21Uc5RGnR{g~ptSAicz}Sg$t`XP96o&W?yn zDy9+RO*OdxL|B-ClL;iR{VMqtpFKqrN}TxqX3xfUm7?XWLLd2!X~^ET=it{!?P-GS ztv~godA^3`-8=OIX+#s&ost4VPPH$VX##T6EsZnl;= zAR1FWTov;c%HewC83!qB+rch2#j4dbLylARlX^ydQZxHv(sET+GmSYboP7~5!Ci0wR49A zfiovj?|YRvcL)lY6SvkxqgKwetmBolomjY`)OgOspmnl;FJ&~uKuE@0K~G|1Qw2Ca z?w7&(TMn57PxM?SER8nhXgax%uGi4)Pk!*SZOs9#i%#s$^9ZmF13)$W59WvKdQ0)< zw-Oh4u#6_*g#4$9BLdP(U=8YrS$>mUwVPv~V+ID9Fh?2P{dh5A){nJekuvy_lLT6J zk=JzCH`jPtR&)q(xVtTKG1eJlegzO1jfkqOJc%7&h}B*w1^)Il)x6-CceTPfsH~Gn z3VPN6qlBcRm5j`T72iSk9#=XDX6uFSB9c_#}YiuPjaE^ePC3`aLriumKjVh zz2Zg=?)vhks0ksY*d>Zs06*}|vWiMxFyHG2^z);RK*Y}N%FWS}O$*7*Nv%Z^hWHpp z+4D81I)bu78PZLgC$Wkw5!cBp>WP)oB>|OF1zth!dx{J|G3~3W^NPkicnpLP0d|f$ z{{|t=w1A{#W#rT{@eSkczU<@#chzm}^=k50be~%pjT_T+Zk>4%nga{CJHnC`ipG9; z%p*(@S2`1WK?-;E=k+!8T{4D1zid`!M33#@!{SH+!*`#YkWedFVHCqXgi%BEH12`K zq$w!h&=7Mcy1LK41(S_G(9;1h;Ui2m(GVIu1nf^|G@bugc0RgGamu-DF zK}R|Kla81&1jillL5}HK`P~!*6*7JjZ`hunn!40c#Pb z$rsa5A~xqi3gmX{*Rd{Cs(!9TetgSEa4uXXsem8U!Nf^!qJ z!6te{hMh?6v__|oMr=KHz6D`;;w_Ubukg*Kz0?D0oliWG&x+`&V38fKvxAXO_IZ&-*h7`cYtX@9SZ zg1p)9m&}57pEh?~k3sW2HwD#UhDQb8ey;7C{HnrJ6#(F!Y7*$w$1x&bg!$IxMX8W6j*&LO)?&WK zZDu6ADBnUks!_Fxs*uyx%7bZmG2u`{MRa|S5fc)n-vY(9|C^li#_0DhFwL5;yf3Kr zo}ds=0+a5ijvceEm*h+S*q~VLyj?$GV`;ju#qsHlja)!i&(0mLv%4gVfFUeliAgJz zG^JahF|R}6-SvfXSUdeY{%SnXVQ;Rl7X`!j;6H~q9M)CDGFZ|jmdxLZs$(YP(Jyy> z0Oa{vse#7I=u{{PRK$OHWk;|JQ;S^vPJ?(Qh0kW-dnw3IT5FrsjGu zMm`jeS#D3(hz!lk8%-V|^h+uZO&4FZ+<%CJR>Vk8GLt8QtHTDL;S#{S?*3nQ?K9WSVguB?8P!13|nO!t^YFU8(33XX+iwBz<2}`dOBU#oZ15rE$qOmYqGNa?;f6&9VkXJD+Wu z2gjIcUc-;Lk)%IGuxhE&I5t;jq;^Q8cuiEQ#EG-4J|MI$?G5~H2Ll`)9}sPln2V24 zS`QAg#x}elvf5xlpb028n(_WsgtwmRBwjXul!^h+q8T5RTGql*sxT90b|O9qu5J2~ zd2zL6(}q?VHxQ#>%c0zSv)iCAh&zLu{_3y{0af4)#K?KM|I2nbOD#^|a*^lK*CfeP zo=Va88+|(V@S8U{4-$7L5HCae3WfO^0z81G<1L#kST7L=Z z^*{~6Twqf~muM3YT0wEdXr7vThn)DzIy3?FN316@*Td@BPHSst!4E=IG0atsFaMuP zW4?V0>nxrAjAv#b#6nd>5Ia&2l#T{vSc-HH`CzA;biVV+?0k-rMkS`5sIstWjMqXo z{JkX+8s<;z_puiel9)wj9n%Hp1YFSK3CrhmVwt4kz1 z>Fa25L%&0eAv0!m%P;MCfZI66`BE3;!ogvz2TQOoQ?BWJ`*RNaCGbd)+UkQj#J~HP zu>-M8)uCz${zW%oR#372{(gd>xq>=aO_yfx(&y%=#>DG{%V5x*E8DAwHYJd*4MwP^ zqLlTEhX}_%>ki?bPTUw8;#WpEI&r^_X+?BT$GI|OC36m0UeFt|IeNDInQ*j%-9CHi zbRWs`7akWQ0)QbL70R4%UbxF))4YVjgFY zG^m6zEyOu1M-el|nKM7`8eyTKIn~N*277l8!0R6vOxQCD&dAz| z_4y6Uk+LL*Y+0hl5Ig|FnVjEKek>C6?Ibumet_DoN8tV-qD_He9plwJF=}8q`0{|mM zb|6`*^(mgd?hv}uQ>??!;?P_Ytz_c5(@T#sOt5Gn(*=!7vU#(mp}%4 zE`k}yRk?Udaa~aUaNOeR9H}97oM-#P$P#H-G(KkOu3}wA21?Y zBj?Sk3Ci@-$po%YvQ`n@FmAw9K>)};vxx1=$duAd6$3(MoyR^X69$ZZusr6&PE+=$ z)7G?l9>N;Xs;*T`V{7h2cZ~<6e%#?J{b&}zH|{icUk8XRy^{+~fc1pPgP6$*C*E3P z-%rPl9WB5VGe9B$G)8->>JGj6Er;?y;;Lo$XS^(OZSBX`uYR4_?CY!A`S@8 z?2`ex!Y#A#y+6qF-Zy=N7~JcoXL;8HQWI8O9&YsGJRaSDDt|3y6$G_i>1eg>s*B(0 zK1LI-_)mkXp*hz9bby3*l^#mJyrwVqK|W}mnP}lY7YVM_Ax>jmm56VaF6-6$)AkXP zA*bHsWI3jPGoF4=?pK{G8Ol1=;ZP!4*k?+*nNis5vAi7~*g;0|0iB983bX`vd*bI% z)c4(-c;@g3{c^1T6(#7E2yTX9NReBl2to9pt}o4)hKNO`=~|Ada(nJn*Gi zShH9OewhoWj_!Z3G^kjOkP>8ylQQ9X=y0AEyv%+!Es7DCnN&1Y0M z6Nq~+!lq`vghxh#Dxw*o-stxT-{%&)t297bqMtNy5=WJ^(V4Q68Qko2$FPK}6gI)y zoYqtSsIK%UFK*x69WzA~s@qn)*nZwvGJB)*UJC9hCT_+{oXFQ961}79Cy1&dx}G{zY^@ zLiuv@L(3n=B5YKM)9U3+PC7l|4_9tYAJPYk#YH{lu2hKRtuXV<$?Q>FIpJ1LbkhR0 z^WnoYimm()DW+F$roR{k()1@Ecc0$}G42CA^k}votsum+#KE%od(Su)hkvCP=pF+1 zz^9UeV@z8L9k<%paiOWAH(m+VwY6CF+VI|@f1gZ|c~bNi(cA@uwQr_vrzNvVY9yu{ zl=<9}LrAZJ z1SqY)@?TRXDDgAAdLyM64j3J%q-=m^V=d?`m3VpxJH|dYg<^M zNn&y~!1yI0ho|Wutu!aDt)>`NpDY2fjNUAfCg2G1q<%c18$GHBl(I3}FslofhT-(L zlsq1JHOp#uFLt+rMlwaSV*)U);^CXvq|{93#kfCFOsTxNPG-8IX~~0TJ9Xz3J-ar& z68CLQ5~xiXH+?#;E6PN;t7Q(Ke~JEbZq4spOYce;Du29JQph+em&`D4EV%&9Dm_ zksqjFNXjC%f-Q=}aiUM)lez?my8)(GXe?n6nnyI>pfZ7+YvSG&vg-Yw#KL8g?jx5x zAcKb1ir@?@o7k4{w^vTE@KHfII-9|4oQx|?AyR`cux}Y8E@GL(Uh9op*jRro;XjdT zgvZ=#y92Qn-JVTS&RbtF+rI{rSwi_{*yuFD`P3)A)Pyr(S=md}XT1$*EkB<$0I61K zjg_=!0mAm7sN_4u4h)2sV0OnB;##6w;x!g(D%SiW`t&@Piel-e~e4>e}D!NKafQ%~7f8lpqeW zOfR14oc`Z=QergM<9J~frrCq-XQ$_&jg#!&c+Qfa)%sYbPiOM{>EfqzQPOfP9-+U}c%v4HR%N z%kU^Ew>sdZXQDKYeTS#>@KGoci@60tU=}b_%*#t} z9YD$Sr=d#9P3HL)%y;=Z7)^-VzSv^VvB9S=b{-#l6GR6!uyT!TW!Rc=0rJB|e5qC$ zDBCn%6x2mCxdzu8SldG!8)HPsQr2&tx-aLLg0RwZAIS>9$i_@AGM0T4WapCIPESph zB9ZCh&`35s(=O;>~346Q(1+~`wX?llJeStCW$hz&Fn-~)InL4Mtfo|ns7DZ{uOeLfAP zeHEazwj}&r!K=+ahg^J>(oa)^k{39zxqR%8uKz$g?ukK3QU_BWyrJS2Tc}WgWu>GR z)qt0W)J$DXB?L&GUs?2wnJxhEtlb&vQPELwUul%cc+HTICqZDr8+*wAcM*1mo{&4eF&NA9_X?g}A9suk)a49(md8*75k1>B>W^=9v(-NDv4P9N`0 zR$s8NLw4%a$y?j@y7^j_Lz@o&)OWp^vl=h8wcmI!YFFyGLg68Yd6))=uOK{eGP=+N6tYT84(Em0WZ$V97bs5_F@p3)qu@8gao4PN zYMLcXzN3-*UvBoGGy@kG6PPiS>nrex#sQiC5trrV^>)0LHI%s^Laz24F1V132y!bc zOrOcLZei>;0J-$Aj{*kHqc#HJgJW8L*!{iy@m!rcxpqUzKa$WaF|((7jYkkOjIKVL zrpvXj;WCsENmorK8oNjNF%a6izo6(ro?#N*b80eXVLQLU3tc!SJf-o2p4T-D%@C%J zCJQG6c#}`z%QzKM*nQ5=6CthI7d>r+;*Q)<3JV=gW=4SH{b0%iQWXJsLXH4Y)c|+92dd`Yv|rNT}WTrJcVtyI5oDc4wH-m{9XgJ zcFDgMBEY=QAz$|hoE{-RtgWt%uzAI+QE+157XScA!IEKcF_aVofkhEOp9!PyCB(Od zd($x%ks!2+B&sT`gQAR^uj=Q^IHJy_vnhYi+Iwox<|qI@i1_56O6N@x5$DBgwG0c& z-*n6OZRjq4xU!86q4}QUFz?h!1#K^f)daGIO#oW|XLFa|3~VddY>paLLHXs}P`Qp^ zHhi#VXh*u3?Lms@FDAN4fYqkg{VHkr?=WBWMr$Yen5OHLJV*xGb%-2HvYRT?^}xHL z5Iq0bUorjYTVtp=<@;Mcl*#L7QvczlV;$iN*9mQ;2%{397Q zhCn-Zau8rh*AP~%?a=j68gm&{M)(`TAp2%ywLvJ#P(PrdX&ytb6}{*xN$jJOmAqYAT}5> zrwN{+x-=n(tJnRt_Ct`(-Xml*U~InW_c>mWFUnFo3u1r6)$MMSnJizRc6RDSxs z(Lv})aEvYu{4RPkrxdf0RF#5XS$U{Q@t2yujwVjIGLqVE%o}Z;4_u^?|x0aG5F3)UkqinDk@Hm|^-9Wu83p4rW8!0E08(9n~Aqqux7?g@I z{#Nn>XB@p46I-Et|LaG*vpngA%kel5)7v_1D>e93skuZ|k<@T_Mhl3ZxU@1j8 zu%gZ`=R$J)(q=nHSc*w|mSJVPlB`V#_Hu~W4lycd7YD{`+X=X3fY&}BgO6pGS1OJ< zXqblFI%@Zk7;^yh0=+frOfQuYCJ6Bfk)Y`#Cf8a!bnyv{ZhcG(1T*FegF5yyP883v zR$3_|aTq0!@PD*YC^rzYc>TLcL$kKWxfV*>mxW>X4PWj1zXrv}b!<;Ci6kT%^7>P# zw=fBksH!aEH@lHrJ9n(4K7N*9M4wx8#h!a*8qBIDYzNPD2r?aAfS! z7Xq&P^xiB@JwM zK^$T8Tdh0kj9nOIWAarvR;O2n=L)A)n6-`_YsM@+1dcUT`R?QXl|`2(kBKnmtn(PdDQ$91o? z5ujz0%5Es@o96GV$fkD3`NdV$p1H}C+1GzR*w41hjT{!(B#othk}3b-UvI=F&l3td zd6W*1F-kP-gOw;7NUG{9`(vjM^VcJg|pM4ntNF=LphtX z-b$%gseXRJu_)&)MF1_=Z3(tiZMA_5h0Zn;EQn@g)N@PBRn9&fx0!=AT-t z^=B-x9Aot>&i{0C?4#Ngj1f*ZSXen3&T7*{Q@E2%V0A7L&NZF)dEL=&_x!PJxlcRL zu9HYqF#qtZd#V*PgTp}*gt1s4+hyLMRZ~wNju33Z*mhAL$myZJ#VEM6nqWEE22HU1(07b ziS%gMfks=bl}0^A9I~=;)*CN690RN;5R8QCgQVq7BC6?RqV#e-Q_%sYuE=H|DMOEY zf3jN}$nQ$%ZCt^3IcZqJ^D6>Q)rY;`(NC;T?-B;h)kRLS3{W1z^(FU_coSC#&@ZhZ)Z=hzZ7(sJi*84;kFicR?Dp_wAtC2nt&tVrU%$ z{&PfOkZHX#^^+Buwibo6>b=|-pOQ<{7W>a`mUg|%zv*#WKEb4^yf+Zw-WGXC=c|&< z;8X3Gb{IW=$@yItyQ4X;#ytK@!MM43bcpBf8?z zG=a|)A@MJd#pN%e<^x9{oJt<@&(Q{ep>UBDI=Ei_VtT8`5(pUGRHTOf2RDMutY1YC z{W&pS?dqM*M(Hp1l)x1LCqxbg?BCb_FUeumj(Sk59D*z|?ag%DPHb%Z=%=KedA)iy zJPk)$-Qp(cKNXk}^e7(`T;Ek+ok}#xmVb0Bql3`~^5$f6kk4~kyLLW<0I#jrhO!}O zN;sl5)~Tql3;tVwhDgm{U$m+>o(XOgPAC6k;-TK>qgBkN&9+4Z5Rj8G=w$^P`X5cKl z-WeRIJ6N6q1wQR#8%jxxxE^k9HqL!pL(7 zwGruuZnH(*OONJh0O`P`FLi-M+bv|6EQ31j(*)_d2VP%RDy`b8$FJ4kG(TA(gS?V^ z!PL;rdDtfsW<)j(qp!gLuZ$|n*bp*K|R6~dT;blpreL;c>DDBhyi=Vkn4 z_}8w5bAPIo(e+S-!iOP~;mGzx*_hM-CE>-uTIm zmcm>QwpHXmW!JcAM+LhgBjjlthTj1HP;sBSohyLA=VB4;ormub6p3~y_=y7e%d9F^ zED{=LsF9Tc@Uv2WdtS4~xcd^jI4bei?Z~NBQeI-eml~z)`DC{JHIz4097{U1SVDoN zO*EKXb!}&*`jV8v#tC~>JYT;Q3-E~6k^OcRjOzE&ZCGAksG?t_F4mJ@RSqrWO8t3S-DI2mTZnrb@4jy2P z>|0UVcK!Rtkz>cHg7v&56X+#EC&I+Lps~?I($(`K($ZV@BWe@po1Wyu+V%R=C-$$8 z)kxEJAB%SWNJUpCxIn4J{I@txUWfg)&#}|tcGb^I!rJchEnq~!J{p{BUn2mh)L7|Y zH=k4{pB_v0D`bO(P^*`nZkNAUi2VF)?+#d|CL%orZQ0@X_qj^~)N-0f-qHb%l>;G+ zs#db#!nz;~*8$ZrlM!q`U!_J)Q^yOOmv5>NWSxuSPE=DcRn| zd67ogmG=p{4gNNnB+WGf5{L%rKzj9-6DX(Rc79F^rSSVM*D+zl8iTUVvS9q%4%y_Yvu2?V+gX~dZw7RwbcVc3%8~r!_Zba@G!QfE!llq2s_L| zGE%2t9Lj1Z^8Eq!MOdGji~j&y2A&qYd~9O4Br$?v zu=g7(MBjb`^hxiwpw}CJ#x(SQsjAIUj>dTGa>>?M)>efN35-xf!XB)$(ZTf;(HX|qIN%+lIrMhZl;6JOap266L+4DD{T1u=7UozYF3 z>TWX&r*(Q_6&}sE%z;>J0~MC4%3d%+yNl%4&EBH=q8wVGa)jEk>5KH9Gy~MVnF?a4 zAJFn~ENFh-0R_&Lekl)~A=3loE~7@nJTuLKt2mnkZ7Ul&Ll1;-x47#mbj`KL>krgd ziM2mA7Zs~TkJY$~oT>we>19G`$h%>%kx6VEeDWiU$cL6^{F|H#(FYxGM$+bAJZ9)Z zeq7p{D>7ufkvqlT`4&}a(?Kkh24#1y)L* z5{^UM>>_RrT(SEqgm~Jy@X#(I5cBS&TV-@^YZ}?Gr7Nsr;>aU^4>Mpw+#A@Jp7Eio zUSZLZsTb*#2F!phX=>mu_EtsOnpq>QD7@Iymnm8>1s~DZa|``0J~bQq?4oG1e`$Rh zo9ncFn1YpBh^qTuNOZj~K}qLIqFm8m_>Z1$NV+Y$x23H&FoG(XLa7vUm0w(`pp+ z)QFfqQ-!CPq1V80R8Q~zmm=t<6(#vbJr#|CT0z^i#)iGON`DR%*Px~4URJYcljUJx zx~>zb2Tlz%-|*2!|9b_Q5zE&15s8odrP$YLm=K~QbeLqdj#vqjnUuFpevL30Z((K} zSR@gN_7iW05X(YHK#&zM9rU9iIG_P|Z@+lw#3w-PYv-thzp1>nVz+K5zY!mG$V7{7 zzNJu#SzA*!`0BTST(Fd!&sIWqfgNYvkpbQj81X>x~m4cwP;r|JLX%JLY1 zq1nlgWLPKT1v+)~Xz}r^Hg=ldE5}pp=9qUNA&kMA73OxT2Ww)7{JPVpIjhRms6MnB2xlr}dNllRO>e=Fmt^{S>(F z2s*sP(%NT6p&j7|Pk*JfQF7*Ek~XDAQdfCwPgXcl;Wg?KvN<3OzjazEO58^0TR$!Q z5gQwL`UubBgRTFG``AbeFUqseovnofP(m+>=AFp&9%{?N!9Sp9v zi>y~`hSN;S?93j*g6{wUpGJ-76@bdlY-#^Ph6S3h+cIpp(zsq}hYmCFm7!Gmrkt|u zkyEKRseQ|DC!;>G0vvC)a{iq+CqlOkYkUaeC`Qr7wbnF$TZRPAkr#m7_)b8TOJLvS zOYn42`u|}FEksuO@>hnFdV63c#45~$V|lTsBET=ZRU#dUs{txZ`fc5AH@?&^PQ67Z zkJ>ewr)i5YPuRrhwNtLgd)OR3gH_YqT|5Cvn@Jx8lu^SN9v|MC^er9ra+K^*XGx9G zj~sr9fgThp(4p#VXy$fj`5t?4A0SVu1&Te@?5%w@sfhaW6`xq(GDZSuWrW0p4GxZk z%QU@?Q2sR%m6ISOOV|=}K^gC^N`t{M;XQLz&~f0bah{SGln?2AcpcJb#7D#mXFR(p zakZCL0o1@C{i%NcVA>C$a?KEymt4Mmt4fj3AzUU-1y&u|`ws=>p(a-eObe<8b71>o zM~%ECg$XAe^Zj0!6gyql0Z=;C2k}0fY0IZrN%}Vf^IX9DX9;0K1MU zN)XE#@r)X(Cr_XOke0uf(em8t$m@S|#$LOmx{s%F-V>)=a5P%6lJCQ&-(+syG1X%k z_H@wdm&u${nWtyeLdc~zGPLY%$8dkcX?e;ETJj#UK>J-oP3$fJ5golx1Y*QQ^#Ur-yyach{ zFzzYaza+cHcL&MggI#IF=WqQQglKaR4lV@smmchZH5>Fzk^1 zcS{OBsLM&WSpih^y&iZ=Fpu=5U7@ohn4%=0(0yvIi$T+Edc~W+v*-fk8j$=J`hCx7 z)$5!q?8>T%r=n{_o$b1>v3TD~Ft;dYyhFgyVSSs!WJ=O0?^mE!A_CEQi>+d=1wXXJ z8Dif}h8b@vlrx5bnWc`7(udXb4QvwdDEui&^7X_KZpJ?)XBsJgpf1cRAH>~~k4o$I z%2|{5{a>!av*g-(i6jk{L^jmo=7zeKCmC}=Wm4n(%C+es;Ms1#PO-at&>xMmPUl>L6Kdtyx`3_)2L>biG{!yoOi zK(;=ZkTs@7tpT%AF-|oU2NvU#%rE^%)&TGq{Xk!8%O`DYu0|^ql<#3 zZklROtG<^*bV`lg)Z=v@OG_sBA_f<_xdUo~bP~+r?HN|&Da|#Ziq+tAxi*fQPuV@q z-)?aL*QLI8@cMFPhc4 zyF`{Pc>>ir=nW##LfeD&P<@|%YVbbN!GJJ)LHr2U535zhY+YZZWjCP>4FPxX0-A7I z{O;4#yCj*NdDhH~BUT9w0=4AYv4rGj;b*EaHJmP6<)1Kq?4MgkauIo{RDs|bN7fSsNos$ogUJ58RwUOjkjqzysMiHa zTB#(I(>wOqL(hWRah54kwO`bRETbJFh>I}xH2YCLxVSr&iv1_!F`CGsoxW9JB$+f# z!w?-(YYx(bW8TB8KsH1mZgys;*2KB?5uT*%|Ux!jbT>zO15lUh<=enoaw_T+vwE!uQ5@_mm6` zTLkW=+PG=4QG)zf zVOzt<@>_fdW_B%F%*EcLLAWxxcFPqi`D$Es$hXgep!3<^$CRt)ZfJe*7Z@A*taMAGPsQ*PKh_$<1YzE$;mibqyd-nG?{HLV9jI`mNBR&fte?U;WQ|a|at#cxYz9&ol{m8YNb-!Z8%JKS4kjE=Zfnx$-s1zOMmx4MpsO+TSL$!L@kN*fn z6eEIXE5>`+bj~gwqvW%W(BD7hUuQ6~hr&4Ar#Rza#f`}BoqyUl>Sl%KGllRr>JIVv zs-BCw?6BVQjOgk>ZdO`(CIljo_6MeK>D;sntg_HZWa&BIS4_upc{driQeLg13^uHl z!mdu{(1m18taa?$G&Jfr$%)B#4MF>cawDtdGy}wMR#mcCw@bWktA3yaXeG3yif}lh0B$QVv4J^S~4-||EIph4Um6BABz{i ziz&yVz?NYr$Qk~2C8R_B=iY4G9=fz{->doF9Z>I zv`j7OUjKUo-)qMUkZ5)wKcqvTfS6TwBr9CqDkd_;Y!gDT*Z43s<*T&MjIu}&Tr)vD zna1fE%qanxp+-xI%V2(xtmlUhMB)s^*qK2Po`cO)+OQl@1*K}V&Y>YPL4(obo!xtR zQ&=XDhExNco?TOMhCeB{{W*{}L0qpQ3KCM^AN&SZFHG5kyepYn+M?*a)qOkkzSW0t z*3mMtn?jhfxFyMS2*!P^f}d#zG@hw`QK}=fTH;^3?!fi|*$?q(koF}gyEf%@v#gbi zO|F7k2?4sftsi8a>Hc)8=Tb$Uo9ZF?t5&?7m!uMVWnPu@MFDNO^)sEu7LoVj(?8sc1?PXGVNnHOacRcOy>OHYTy{!ly35$boqeQE1hgbWV>B@svqgc^Bi zO=mE-#QF=9bL(4joI6?;l|bOcmHHThEV-HUc2fsYtNR$3<2E-AsHdLrO@>nuoaeWn z&+$^KzW{ntW#odLLBb~rT0-|5?I^KO0JC0uuMJ=+n;zq&d(j^6PFpd}g6tt_fr0m2 zRb%GWOr4UbLN;t9pxb^Gh2_7k(E`vQMjtbs{VS!tA@!yyVdW4xKbtb7gW%4I0Zz)J z@&N0+TQ&Sp*_gw+{#EQ<8_wlwaZnjQ8=J;=g@6GLp1wVtcn0CuLt?ta zPA+@1U6H5gQSaeS-jx(8(K`=nqIAOqZY$zfOj<>OJ*} z5NmY4{!Oy1Ww@x{Ho(UiE4aw$HMOR6O*q>sxvip*)9@7xt_q$b(|5kqT4P|^f7f(C zJ3E{iC)%wGh#r(#gjAzEK3H=Xb+OfM;|lZJC;MZk_xH49F=|Y$=aIdXw@R9;vVvtJ z5c(iJY1tWvBO07OH~tp}F@?>MMZYHq7N=)b(dThhqgFD!elcIzeT-bm+4hldRH6H5 zm~8LoPkhM=^;Dl)9%Bi|T6F!{xjBQ-9ItW{S9|GJkOh;#_Ado|jDsa9`5n;i;^|rE zgg1sR6Q0-}Smudl2iBkThhfrje^b;S#(!jwx;8DM(7pb_oB74 zTj=ulBdJf9afsHX2B0Yfh`pL!8>bHGpnXJMHa5ZmQ}UOh&K{;5o_rmXDAnjI1WOyxG${6RDAGQoWG)1oV+1Wn4`=>~)x>$V>2U z2vw}nFIKy2JNm1g3FA9M*O`aP- z#)gtkGJI!#VJwZn!p4(@Cf`e4n|jF@NfQWo&pa9Y`yVXJAd_qB#%g6|8z#_1Zv^E! zCCIk^uK_>QL_>gbDr!K&F#OrUdpsoufL&hErul5>k$McLNl28ASmj6uYTk?>&#J-sHd!eGztv z(QR+f8NWlLFnq|UfvW-S7Vs=ENvWV^E?(68#RN&6>H!G7&&T&XDl3QG>hob{$8edH z?-=z`#dkpCB!S(p;xDNHDJ|8GLe1pQCnc$)=`G#VRFQN|(7oEwPYNV{x7o!pYOz9& zy)Bw!)Nv8A6BOGA^Q^d)m?@=QV&;u33gMHmrQ`)KGZ12fY2SQ+1S{QpeW*FLG{Wl-X}DJ)gffB zxP})MvUCkF!WFtesA@^l09{fazBMWoZE3qdwGz}87zj$O+ zeXua1q-^9asvzXGuchg}=1j15oHkq+#YiDZzhSejoG7X0ca-L+O`LaB{@7focS-5H*O3>Yh zgu0ckZR{oK5BfsFxa*MNn-^FuS@(eXcAO3L=n1;N2lc(1;z(4YD}Y^Al+fPrx2wp7 z#lFDV=>L=Gy`IwJw|~f8z-&|X`+=#;OD^Z~)9P zEQjWZUwDf@i)2~|S*-#O%!&^4L;zOlyt&5FK)j*X0yx3WCUkkUC-9)?MA69>55TW) zp9<||puUj^2c(m}!091zvtluJhn*!&X;^*m%8t8@z%KH#bo zi~O3Qn*xjlb@1xX0Sc8%Xt3}+CqbAPeF$-yOtPRX3O3;q0cQN948BnChepJv8l2Kn zj#XV7?e`s;(9~(M#A4Mco(~9Gpme|SaNExX1-Q|w117)=E({L--VM7!;6NojC2)N2tKkZ&eM;bDE$YWThvxBGvzy+Yx#N|`3x?WtEyGi zj+$F_E)W)0Kp%ec>=S`r?iNOQ=l#>T&+F)*+QvRA*{_xBItT?_joeJCIQ4m1x{&crH1(aNp zF)}BaH;(8#?rFXn%KqKB5>3MaAra5Dx)SQ0`?^pQ{Gxetlug`y)A?nNgD*7qSAc2o zK2QMdF9gDR<(jno2lIuj)iTUC(gVf^<8Q=I`}RkTop#mIL^qsk7iGO(DlLpNk+|0S zP(FSLPCr9l!7b6Es*7dZ8h*=HC(-+06B!usRNusuH4N+h^B9BB^qSk${#W92r0(}o z64uLJzR%T7YgJ)KV{o?8O~WyGsXLb8}=tfI=4{FNbTUVUQ}tv1#_c43m|S}NY;sm8aI&vMrO-DG=?$2M674g zvRQ+B;x}$RZi;*xkTa+kMT)I2B>fIHYprtc>n>Awki(uHRgKx|XQ_d|yupqgizT_u8-qKO&-1P1{}5TNYfCI= znH|?Lh&#RZU;2i2INs72fI;jv^fc zcxKx$c6}p##xkcvD0Kl~KPmJfC7E4d0yjR3Q)FAab zCAgqNvlZcY1O^&6+7ijm8BGl1o03R%i3u*;4dE)1?Hg3UZ%Wa1c6G9>jO5A}408ap zZNqQufZd;~cF?IKwmxb-BpE$NIwxy3I`WhAN8ch>Togsw*v&htN5Ij-=<1TsYO#T8 z0m5aRk}WbTa_)yMh+%fH0Lx_#eUKx_A{E=5GpAdvd4dvHaAMy^J67JL&6=*6!Eh`t znQpZVp+So@yzpmPZb;2O$DXUS#LsVLaYWq{W;KvS#11^#v^gAqL>Qu())(C}eWQ`y znWOnyfJsuINQ7arof*sfEoW{IQF_UjKr*YCJe$!ghVmRvIx;)?WOhl+!HuO|v!h9f zkiz;uJjP9EM^EGg7y)U(!ufFiQk6I42d0ZZ!`9QNe2{^CQU_9&9C@6;S)N9FA2eCo zIJVo0TU5#5xMH&^)j!(DPiU;fth$BHCX08ork3)Miw|+!Fee^>i5b! zd9KAQ+=yQ;Lb+7*x(POIIb7GbBdGt7w!g@R9fojgvRQZcFrbT&`DvEv^l6B1bxoOo zygS|#UFy31af-AfJHC`LZ_exL1GxfOi0Ad_cA^0Cz5ntB)WxX`_(_g|a#l)4SCpI+uu$ojhXNaHe|;T`h0vLh7G}{wN%_X#)*EGe zBF96J$d7kHDQ{wNkHi3SOGM_a?=<|`EavQ)Pk;Hyb@3L2o}!tjjwzq8$uD5x$S2KF zmGAsx;*nN_3T$Um1x!L}KZPs6s-!;@R;fz0Ta0%q9ntGu@Vnb~A^4}0RleZ{85;T@ zPP@g!xcHw}X^+}V6O));8qx}mZmRm{;e|3SW$D4~`)xL;;P=!BvGLqe7FL(tR^|A# z@Vo*jMeeU_wrRB_ZIN{Jb1f%lnPDCBDa6!~#Ga7Lv_muVsKVp0mDUO6&%a=) zqaJkd0jtZnp!>yxQ)BJn9ULz$*9Q8R$iN&Z2BH?3)-?AjoBW&QG0G^8aG{iQ(heF_ zmYh>7--3t@fRxpsg}$J{I|Qs8M=4ot5(Vj^)QSaL9tTN4#B1HA7-enU()E&y+G;mw z)IO{3+0#NXZSizoJ*!R40{>(PN)a(jt^746yCA|C>f_ZCcWh+ysSz4#OP`iKj@$q2 zm8yB?#UH|p$NgdKaXNPj&3g#>;G$SOMsxAn(ie`FIS*(<*!*R$V;hg_0>K+%&&T^= zhBli&acPYmDTQg%a@qVh6AejXa!LFiG=uXl$TVUDjEbZRJa}G^fUEAxw2!Br{vK;m zhONDhd26cYFip*&Rd?CHAA~0RcZWXVKnuBCSRN%iZ$waQf%jA=q8+Y9w6>eaoq_cZ zr2qDdn-JtM!0FWb*xO#2tzd39`9i3)#3d)XD&}1rV9KCQJQrZCx*9ty1PQa8q9@|d3p}75B>Xfv$nd&5 z)w|?`7fEwVmM>8~vFvR^s zHDjU)RY)PC@6-07VEf+;>#J$$9+N@^h0hDcDLk)#ycmGTqmX}@;m_mrMKWyR`f!1P zewQKo=U|yK4%O6P_M2gzpkej^=x$1vhCP8b6y*HeW|gQPsLVBfhvz0) z8i67^EWoG*|C8r&;bQeqP<+;7o^z4v{ie=@eRw;PpC2Y^;DA>EvuhZSI9Z%pJ8gv6 zB;+O;Zh*u!$14aLglx8FVC8IBhgQc_v4E*K38w>W7Z_1}a?jU$1tni4Gm8a0oXKR? zo*@j!Zqr9>y6|f>S{QiL#JfA$GX5&4rWg9Yll8IO{o>d?aPfNgF;>&6s?#}C0FWIY znst=ZT$GgfFM)zsJMoB( z)%ExE*4n6x9}vI7`;w%RCV z`Xl&mNb+msn@=TnB~=#nIsY&;7g?Uz0eP8scd+qf9_x zA688B&w+Z2cOl-86erZsI5BApiln-Ci|fPmkv7TFbZKylF{aU5^5I0oK$|0;=NL5i zjG?vCSnot7R2meGlVXUyBQB)OD7<19mXY8l+!7U%q66w`D&FFXPGt-7(&nQ}Z@(a~ z1R%cI@{yy(NkuD}7Q*s^*z=)qbNF+Dn2M<90Zw3pOR~q{w)Oxl+z&G%G;U3yqlXEE z^ByHtaxXwJYlkfQjFv81-iYDI_FmSXmdgm)rc!T%)gRAftK>F7K}Vf6ap zx9BKDt^W|V3N?F@$&EfbN~WKj@YyQW_2T|+>o`sb2wBkhg1zAxvzPDQB$8hnqgr+ew`v5PYkdCA(lgze!@>edwnGgh8mHr zKpa)2uP1Gp_V!sB1Q{4_23ftHlsv1lO1s2=MFWBMSGBuqC8jO&$FtQ{)V&e3Fa+mMfjJ;-j^Be z!cftz?($iQ=>>&~f;))88Fd9@&f_V7TEOL?>o-)S-$EYmiiOaz>JXGZrl@Cx9e+8( z^-pHxR{CEvU5gvo<`7m%Hi$$n`09K90jjMhVu)8cSlRLJiD*Usl#_ry)(E7~@3SGl zVqvPHxM_zVlnQ8!gC&zQylF!O;EsPaV~JjoIO8{rh32aH*&}2l(LZjpxW3p>-!n8v z|J4Q@_*#1~T<|9nh~`(h1?2I%|7Bcq9*-3a6a4i94{L@b-L!}M%FXpQ51y?5MlY^# zAs{dx;Qb!hcMKua&6Tpj{+3Nylc&fpI)IPsJj#`K_;Fkj;1VJVbGA?!AO{QIJM%t> zdJG@!HDa5z-*4vxB+Yk|(g$s@hFaCh!9BR~>$0P1%l>pkD|}~pHC zaXeo{Hf7@?zX$GnA8-FqjkNvIRVIg&xv7(ol7YMA3@UML2hFGS%=7JK8sX%M={8v@ z=)bnDTba>)!AEd0%7!-Sq)2y)$=n;Nl>^S6^=&8B(yv!;U`}VX7+nAMZd7zY1kv-T7ZhM<5rsY(a^G>W%+QNN=2q}`5X#kI*pdkvn$chK8(S<^04Z`u z9iUgBmdw?WOzd)tUO4*Mv@GBry~9L@N&^^bGW**D1P4Y#R{zMwK-Q#=xY+4B*LUMk zUDRRo0*c5eEic0r3ZL$r5b5e(Mcp9Pss6-gIMr)VY#t|h?qt?gN9V|(*Gt0jRL4x= zp-=jJa+mJL{u8cb%a!Rt?YpW(l*CbGqlgMCH2H7-sTWCJEf&}^OSi1^ch||)*s*^s zT|>1Myu7RDET1FZ-Hez$s?E2wOUBmGj2cQ@B+N|8A0OX5Y>QCu1DECXJTijy|BKUl z=ycG2-KPEK{DXTn;EaU70v2&{RQ^gccJWG%r8#{(HjEAo+t3JNNn%fo9mvwfUsZ## zwpso=AnMFl$637vLnvK`=PYgtRcMN-?XCoM6XsM%&Rvd+92@yBeMI@`LSh%8)n>nx z&pMn{9B%BWIDf-HpfmOl3b0+pAfDHl8N@tCqGpEkYFH&=+oz8>D0wu<;nMB2=+Yt# zM{Wim0Jqrwt%d0&We6~K8X-2Fl_IN3-yOa?Su;ggeO=F)V$-$PrVgzj)} z$A_ctKwA*1!N$#<*3VdnBNuhc0B-Wt075SLiS-=twG&LrPGTks#?pSpXqzEioY|;R z1(hz*cB%^c*at;#u8M({mYnn6X_-p4FL%tQOd}%xR2Sg0gX0m{$={1XRj} z>wh+fdOyU91am5EY=C(MGYT5Jnj92&B^DsPs=C>yc(T6+(Ah*qtRNLBMJl|4C0N+wK!-Q4s@Fu9W%(x%fifqnvW3T@j8(frv%*iuu2w=V?i9#h% zM>=M%^9W>D=7+2}kE1$*SRQbq@{J>aaTKwm;)y-qQbw}ie0~S%E)0$vIHaxMqz*7H zf1l6z`9kG_kM<1aM%IGtXbCx(v7Pq~)T{7WL#7+vV|9`~63Bx@aD1;!n^#mKtLq<= zML*dN9i^WlP!kAEjPfwb&0EUU$fAl(JOI{=s2HL3QB9UdMNJb=-5CVYx>=@bVcmSA zvnj-O_>F2Kbs;dokXc}#H@;|76@jazq$g*|FOuMEey_K!O=JJZYXhDrR}i4Aq1jll zWb+&ElIbJoc2b>mYzmJXy^9+25JgIlASkPb{2jRoPdyTKE09EZXQWh3|F;A44rr1G z3?`S)(VPRq{pJbVt3-QMwInwVY1yJI*!a>qs|jz<(LqmE*>Y)8R&=tR8E~&+ZHh1! z@zRH}PbO{V_WJW1RQfqsP^p+k1juK1m#wx;+;Qsr>y=Syo5p=Qiyn*p=|6Lkx;J|jy# zBxDV4rW{5}B2f38?l?Oh7(;PXj%9oapIsAiOWLXox=Tk?(kn7glEr3Kf;X%E=_O6mLhz!pd{r9KR7^4X z??ag~FoiYRmE2lEmTi1Nq81YDm}OvEE{;Ayn;@2CXH%p0z*F!wPvC2=mtdCunvhbw)aJ*b$-fc`EXFsRV>9M#JQR!@govH`4T7cr>BF0^ulj$ zRxbIWqT+?#bP-h2Y^mqSHR-I!U`nN$KFT}64FhcMK@2rc*RrSIv90Rj0f8q{a&a;1 z3}Eu{8y+gHbr3s*aWh^pv-{Sbu9kpJro=74(?Uc(S13m?Ons9BGch#L&*z%TB3+i6 z01+F&bB}VOATtyNTO8@42#iCMr%2}|ToM>=T@zujfT;CFnaFU0((eV&!@J>?P2K7T z3+L7sSGi6txS49Q2NlIwt$_2VCDMHN>Vgi{cIUTLPbh{<^74y*IpPmJ3;HS|(OJgg zjl#Zut&8Q?{DM915l2KJy<3ZLk&`olnfl#42^ZFnYCQ>d-LzW=hBoJNW2r$dl(tPz zHXH+OT5|S8l{K_+t2V^#p8Vp6RRK=4&3j-|hYh*f9(djp_A<>$-WO6;CCYfU#x#mxTxBXOBp1rJr%ad! z3XH;4Roz{TNSuQy7?oi!zDhGD64voB!&WxDL3uA9I@wD!ihCio1up1IqU4ds8xjec z@08EJiHPToi|@HLs_$40kvI+_unaMW9gSvE$%$|@7C1ocC)L^lb=>BlzFiN>dZNk`p@v2Y(dHB-j z#7yY;A(}~)iE|~ z4;tH=brebBoP}!d&+-=ewPT{1=p^@z0mkdQW|s+6l3&sEt~TmAG%JgE!HIcdVtV*p z-z*ZnrGxV*ik1v5*-J}ClYXEvj$-yNtp_ggXIr_HVq*r}VGwp}JZ$HRG_t+dA3hCq zF9J5*7^m5>Um(fOFRJy_Wsxe=ZZj$B9+{Tz0#WbVVs>vbaBrz9NR!%?Oh_nq_zUCN zfz8f5y-G~#tU~o-ySO`Rez$2#SY7CdP|~v<1e?F+z$P3$i}9gkrd?wc`bFeJSqN#L zSBk;ZLO7D#nWvUM%Jjma@Zn>I+HS*1g%@*)>K z2Ko@l=ye}|4AVmQvf`F2=0VOPNdA+m2OOB5t|b;5BodNB9g4Ka%SU9ii3yL$Q$4Pt zJl@*V^+(lQcjM>1@Ov~RBx|F7T8nOPOhAv|VY_D?L@~Mz zCL1kJJX}`o{B-AK6iZEbL^-&SdCh?OuiQ(*W0Wi0+dTHH{#{|7>Aq&T5GK6-b)k8% zXOu9Qf1jPGd|FI>!el=7`Qh>y78{5d&&MYCZ09Gt8{JBgnGM|HEpo`u0a z2mnvs++MD`Pzklsh+AW=^J!&Ps2I~j!x}p92ohpG5Oywgl-kwSGJ@=-6pN}p%hkHQ z4o+eD&K3{VG$a-DaRhfSEOE4F`2-0s%oM-xE>25XThS@K@}U=wI^Ew-`VH@@L4(F2frV^Q7ZrK(49M9$V(b+Kc~KhYv$|&U|ug>MeI`U zFrKbH(6EJ`W7dU5%=mEKb!Kvp0mO^f(x7At>mjW>Y){ZRax`;tA(FQB(IJ7Jp% ziG{Wt+lES67d-O#Rg*=2!+AZ$pvZz#O`P<_U+OUC{MPH4{aUYbavNCtiMM>a!U?zF7^XR75@6-!C~5P< z=B6INM9)#kn6Q6~Ce0~zKd-M2^3tONohlRDn~ zNL0MZz+AE2^JIMqrx|~O=I;dcvsyd_I?ioO<32{i1H!hLXwEi$UnD)-L%Hgq|(gBg*3$Y#ms%*VH3|2*)vdb}L zquCi}vW^w@_2^u<+0B)DF!;f$z80GITPEg|au@1Up@rldZEO=KIzh^fJ6%WUy#{!^ z?}L|Y%PW}eb-pdn?|D<)xQ!W)?Z*ixY8jpJU=WzQ@f7X>R8DUoEA>pS`%QB503XLE zUH(b23IIOlBSCy%d=6#;c#i&S4{Ex4HB{RO2%spD^maDlw-8A}&dDC`Bf7 zq;ouFNYYJ+vlKjr`AjT-CLR*}41lPHOjZEEUFvP0tATwOtK~S;p+x z`s!!No?q@wHBtJ(QkojyaO^aFA9Ws&N)yy^Ir8nchGBQqKZ3F(*97!oSK%Z*U^C(h|!& z&jqUyZQ%wm?3>zr_`e?-yZ~z$^iJQXzFfcy!MEWRsguvi4RvxX4V6Kx6UBR#gA`o- z8Hp=|n2DP!2OLWl!(p-ot!rBuO-e@c9)7mbmg|35uMN^D5M+&T#`t-etEu3?jBRNp}$l(8cWx3N^AI$Y=YcnBaeJ`eC$lYZtcI zN}qJ$uKr@NbfUzS*zy8#q3)D~k-6xdGxDa2t@!o?W)l(Sa^8U^5q&K=#>`+99gEwi zbIzK7*R?Bzi|kkP*YYj?0{=lTwX()qrfeS(oxuK0irN(@*~22DGk4HBXKX`6YrwJs zRG+hYp#8D8w zGA@HE2+3QRK$#?#W7NQPri%xoV-o7;a`w%P5wYLr(NC(F6D2Z8ZyFrm{zNd^jh;m z$07Pv&6N+%atojn$U}LVCQM&2DL6gAK4WGu=D|(omS^w&kQboJ@xCwby1}qIRXb!H z9l!g-c7mHxGO47jKT~JeSKm6aDX)ClQ;4Iad)`DI9WV(F8yF zqF#u04>U+xQf-ikN(tDU6oxA6eHTHdSHh)5y$3*(xvhko)XuID6x}_=P3rHq%5>4L zO_b73pcipNme?2l=2!&h^_9&vN2I3MM!03Ty1u?X+@To83^pzySd@R+hWq{r5Q8Lv zWHW?q4vZoZ4bx4WAm1Tjz=}?3r_p8kd0~#)R>6pAqQErP%Jc3Rap=W2kk?%gM{!ZG zBZl&&K6a5YVF&^K>5rWP79H=8?sbkXST{Y-Gkj_+{kxNnzRRZx}MYsZRGr)~~8c91Bw1Z}uEpa-js#bD*<9mlbTS|1!9#=Z?{NR$$x z82Yd;``NA@9{)Sl2v$m;DtLC->5qG_vSGWmqe7aza0iJ^KpC-8w&#n2zSq%^iKu;Z%KC6tc@=Xb zu{~^n_sZYFD@&!^zOp}7x1baF+p(|8w2GSb#hNhP#Zn-Jq)CZIi%qcmO7y&XNC%fM zB8L5F0-xp}FxX-kC|~_so}YNCZjfDQa1AV7GmAx~&kmcB&|!qe^A_m+jO~AdVr>_1 z*cTaw%!m*IKkKbrk<$H~)@IB%+D8)&s)HH$&Sz^m49qz3lnW*P=nx){O8{zV;wRi+ zoSM^uKjdcipO*O6ZPWJaA!l)Bs{N&!4^BrjJ;;@uWKBW~$$U-x_wFi!pjkrB|2(px zbx~h|=<`JfV*L|RhBgkR2bbtzMQ>zMgY%N}i(+|;CK;Vf)GWf1&x@h2hRv6A-Wkb_ zB3%tkLOyb)O7z52e-DNsDq^E>hJw+MXkWy?62Gy=h6MkHz{MF;u~QU&5UKtBDdZHO zae0yFdB*Tvry>!oM*{nmaey*LFSs4{d8IfxF7XYkI4U~k@xV5rRLk8d0xP8GvAdM1L zRAMcpszgR4Ww4Ee8)~Dg^)MkRtfUiHk`RH--8OcDa>h?dsSh+rs9LXu)si-ZFjAzX zFrdQiiwXa{a1Ts`SuJVo!_$;k!xL(VSUh3~7TtH@e5+Xcy4mrAMxfOMJ#K zJOmZ|0AqkBAG&k1a%@GVaN5A4`#fo2dQvEkU&rW5e5wM}595ez%7^AY_MT9MfIJFx zvN(>yP{bN9(Bu`v2m@d_iOB4NlvqLSubJ0)vjS`E2-}|5!5Pz8Ffy-)Ctz~K>bgJy z7M-&`ONy$s5O)Kq^74W}4qrJ_!p}G<#mD5Pj*$&65r%Or9sU!~JZICH zo8AGzDZ^($>}2tQB>Bfh=!J$4N6jv1OD6Rq+a^s>c;es5HG5pziL-x0#U!kupNo_V z16i*$>xo@iTMH>MyEDEDOE_&&B|KQc!5|EbD8EIttncnm(w`H1zW`q=OXkN{O}QLP z{~B-PBPiy$$wUn0g41CfWw!JO8q}G|1Yy)tcZ-5#ioRNOD42zoL}V)h3Ha%Gg=PqP ziYhiZ@#C9CbN)t{lPs`@C!1yuk$B4kBT~mBPGqFMndb-pDk>!*4#gLs7C8lo?}xNF zBAB8hHKtFkpqmtMyege`Ym-mZs6k{9*zhSE@ZK};3@S;J?kIl(=x(IA)zPuXB&((? zvOJ`m1Hv4GLectB`b{=&17$?>VpGEhFhGADTqiB?3umK_TV>4c*mSZa3fY6GA}}=b z*CbGr?)g`&C$j5HVjAmf_&cbYKm>i~{M<;QYxPaI-r+68;gw+BujBP1tGyz7uTA1`_L5j<+_MC?8u-{Z+yht)T zecbE?O)<%!kDQ%7T-;%&HB<_aB0dvRF1t&4pIQtHy5=MXEX_B`!?SeT zaB)|Zi3a1HZU}~?S}kbZR^50F28b#)Pcto#P5}U%vIYV-2HG^B3*EvE$eD2o5>o0h z*)ZQ84TTyFXKJM)uX4O=XB$kU@jUXbgGVHU;o&Y>pDC%CYJkGW*UedYS;me=v4xzt@IyX#-lz7WR2?B=XXznI5 zS?d=)J#Nk!z1VIDWDLwW3SSyVWL0SWM~-&&`@!Ad!}nC`Xcz(lx0({Fh7v)6JB<6x zq3sL+HA7RA^j`RS5vBYemTd@olxUxeGP#dqB2&57M zwgo$bD!B~Yw@%6Z&T3-d%+p$1O5b)oq*shJh5eEjRTJ5PPI`cVJVUj%SvE(-wf9AY zWq^A96V4rzFlyEH~!<*Cmlu;0MMeoH)Fx!%{xf-o&^ywSF*`k#o=U>RN^d?98y=IKUB4^HDmyP zsI6qzJGk!JSsTp)uY(=MqP3-R5F~!QS*k@71Y$h*HFBcSy!>Ln(-U<{gLSLeZS zeVQi8XwJZ>a&A1%{4}h7fJV5Yf`8aJe17s;kDLdKWVygzgsGz7=^7Kmx_hLLPB{t@HPs-mG6>VU?2@sIrq9niYAw)I0j(1Iyu7(O#`|*XW+Z40upl!v zZAaJVh30*Z*~^w;62_;`vIbN$(D+J1YG4TVcd^K>_7I2&>Pd^h`z>ikrAT&}f~l(q zgVuQ|4<8)>ql{I+x>vYY`i~8&m_UqLu4j#9n2)j(ZBqv3KxmkQLVY4?*!cIeNoLOV zuPmbyk^te4&S$SVXXJ;jH z?~raOA7~I%ENapea>lTTmY8W+v&6pnn$@R&8v8aZ zknI4|@=J;E3qM3>Ru8RycOMm#pi)c?ns6>_y^X`Xta)_}r+a}avpy)S6oADHh9Q$a zJ2Q^eT+r?9&IVu}%CMHe_1?esIrg^sDP%V9)xE02NvaGi!3WWQ^FAN@Z&=;Mg3Uz0 zJ+|d4&S=ZP_5OM(vl!Z#oQ0|x&gLWKf)`oKpln#;J3utHP!P-(Vz5c(>D)w^SQHtYJ?yL5cYp$?Kop^^8^9<6+-CXmEe_WdV&3_rqrqoaVkkzss}lEy;0#vdLZ!9R z5&l$K4p;pZAz!R&Jyc@Czy7?Dq6fp8N_{j3iR9BbNB5zMjhIzUm!}169O@$Mmsm_8 zX1uw-lWI)5Fe?&hF`3S~8LL~KO_ptR8m*pu5IfwSu`W$$=Un}bPXgHMT@oK+eL^(c)(12z zb0gfu>|v?RF}fMXNMC*B#hwu!o3Y4y2VJvcJl@glDF_d`_4ZNH;=NhuZ&y}IY12Mx zc>=Ad+Ox(Fw5^a|O73QOTDfPR{jZi@#P43oE8(Og(Jy;X-fVzd6ckVa?5D>73;=aR z>2sN10kKX4MNc{O8V7jtc~v!{3856um*LQ;48@j-z`#ytY{C)%*P7^uk7e*;B{$>2 zUw74)WU;x$%m6vsNPA|(ufzk&D(XS}h{&s%eyuCAR>Z!V-}g^(LQsnI@xldOUcW`c zB%tD4h6_xD7h@vP90AmBHENVi7>)yJq7L&v!yD{%b|c8iSf@|5+Wwlrm{wTmX=d(I z3eS>no+YZeqlA9pTl<;pw?T?BH8bGnz1X zl?VV2+wPhSaZPt6Q#bGP(S2x-K1lj~hC;=E^SOddMe}5`HsPar)c*YF59PwV$#;?s zG;jxSDmO1G-uQs6jB2^ShsrlXy}AlIl_cBD)2#!;iIZxAr)ZC<_>O;0b$+p|D`VFp znDW%bror;^xG3B>>hz=?k_T7xjcC>*kCxhm5W?E? ztWLoZ(%$XB(uqGS+YKt9)*{KO-9NMIwq3@#&9(Rdq0Q6O!s3*97|#7ip4pbYa_4U# z`qJI3b54`ByxY0k2K&0Yzr9|{pEQSWv3>*l#F=3pF*WiFe6^MMr28~d@7g8UX3O@y za3WddyG>+cT1GJd5>Q3cY=fv%tcj?ca>2ggX)`;Gb7kF+^*Kii-M;Bs+JI&IU#E^- zB)GvspiNqlQ8>*GdgtQ0DiQs4wGfQRC9|Qe#L#X+bapCKZX%?&;L`CHmvka!B0cud zO`Lfn!61_|E5b~ZGzDqS#SJzDQlCXsAo0xQe_8*20zMb-2QPW|HHUYnP;?%Iq3n+- zm1aLu7nOPT=ZmU`);sf&! z+7aIuxOWAYUH4UUU_-Hz1X}|;5tQTyXPCKWDp78>z1W0Ji&bFxb_dCQC%z)0(`TKX-IlGJUNKXt!YvuA|@#gilO4F1=N+vZ^K zn(Lz?ESKzDZEH7*sS&TG+ugdfa>n;@58g9>F_6WC&f>V?UJ{+kRG>j{po8NXT=(ZZZamam z#WX>z`6KQ&RBb zD3rh5^{*yY^sXVN44+2 zmaZV5$we}wuYQ;8>dv4Y$XJMeY6CjVxFba?Kr+0db^+D=(rqEO&c`I4kL$XCaPDlc zfu_AYaE?%H>}E&=TL{8|AQdRd(#H?E%0_gS?yDS}Y$;>Kg)Ted0-9oj@;Q=2urHwO z`^-?lhd(z-wzQW(V~V}i-e8V&HvL7>Xalo8YMaZpHlOcC&C7($64RTzXKenhoLP$; zdCdaco=!_+)oqPB|BWd6TWFFB_k|*k$`n{?7zU_do%t%tn~W%*L+9l7TAt4*m(0NF zo70d9GX2G(%|Bi3JEL*akRX)#|2`4PSv*T!YRnW529L&U9NxKCu+Bz8vIuVV0iC?P z8w^OuKj)L{%hEz6aSDnq``N;u(QdIY?8wE6;pK$Dx*hO8X1VrylUJlM8LjR_&%2xC zkR{n*)$&?rv_D5v;523icp(g9&`)$f?fb+ReiydNnz^HARMaP=GiN;-q{Fb|a=X#P zlJ3v5De!m@a&BJD^K?Jz;3xN?5`jK{uu+=Cl_$QFX5e?QHF0xj?HPbAecg3(ilzqU z+^;F8`(4JA6f}3TctW$|Y6$=Uqz7WGaPP-77nM=M?`}N+o9RAL7ZfX{gO#xVSv=`i+Bp*dv3lz1j${ly;+bCQ0+q`Ml@w(SEwu3c3vW_ z1PB_2OR}Vigs=~&t4_wuq$>S}d@NB>`G3H`wU%V~qb;eGrib;OJa@=3j&08J2#C~w zJuFF62Ok0Tr>HRi=jfT57>m*4{^mwEsi%K8e)}0zrlz~$GRN1q11d=z@_(|Qh3(dN z%cg27Uht?eTnnGehik}Pbg zf@zKzXt!>KMa4&sG801CwH_#gC~h*0VBv>^QyMstVDYydmdIL7i~JFTec zspS$C|2->DZgxm@5U~p4?W~$F;#(5~-wppIogxpolAPc09uI+y39TSgiA{4P+4BuO zp*FUCMcfRZd{N-0J^`FHW6F=w%7ma=GpTjlZft>te|r<+ZNPN&x=+Z6qK~NBWaMTy zVE9?@Vc}H`Y)*C>A85H_^B{DaL5-p(Kq>>egS-yHU@Z3XuhnMD#8MeI*IkIDA$l2= z*A!7bC3Oi+G`Py8yf1qfaf?nNkYgTpm->IVPlqAU8j=+ibeMWa*yJ!po8Sy@SviL`ps>aq{5u0^0Om+{vwOvV&r< z^dH19{zX8NKN>}^jM!CVqQar6Wtx}{_{dVeI-;}cZ;&R{@IdWvE%L;fI=GyaCQhAD zVCN4M_)%Tah0T2{5wsX)5|W_quv%~jz{ECKT;Q0$mlFxmPEt?YL@MHd;Sh&TCueW} z_Zd}MFfn*%HC!wx%4SIi3+>~9X zU)%&K&JkAv8g^^@Y+Bu8V<4}f!fJm8TCiGOiv-s@gGIX2ld{N>k%DP5s=4j~B=;g( zXJbNR$uU6(1`MU8zNDn1UeLa>_y3C90K{&;ew-7K2U(py5~rD!%II*v*C_n{ke3oU z?q)~j8i6^mJrC7yIphL8@6lAWJX8UwVVgPx^(#`QS?~6n1DX4U<{vCpNV}?Db>E(RVSH^A9Fh}< z7Ri2^Uyk6Za>o-Kc%|aWL*lSnc9Py;8>rRy-hj*7)87V3xciEw`wYHoMKD}r$&dE7 zEjdtRwd@?tejcndke(hBhQ8#ok$I8NLH5%Iwgx|eD!I~FwDy}~N&srX(uIR;y!-oV zqsuGHEto5q2sjKRca;kWXdFC=o1mg$d3WCMmzSaL>&*QZy=Lq3i+Y-gcK;EYuz0?i zk0l*Ggt*Uj(S!H(CoA6mk~07;G>kp)gl4Z+U};>q0}~g;N^{*@U!V1Y#bq3q))f!B zsAx&oWu1yb3FnRb&Is=Fe%Xfv==mlPQJuU`kW>nx69y@2#|i%x(far#0GuTJ zvo z(L-!N)X^w+!q+yKGD}EyVTT>HO-scXSsV6qsX`CuQ{d$kckWi(9}-&^%2}2Z9x5Bx?tqH`|s`xGMmMuiq9+t)>`xM^1%HiE^3w%Z%DZY?xgM48Sx5VorF`?q3=PI zTOJcvr`Fw33ZqH)}GKbUR$3ol)wMgIx%Z=2@~KwX$nBG?{4JHaM$$q7;mr9Yr##Y@E0 zR$^%Wm;D5N^4Zlvtk{)gWgeN_y?<^+_cHa9*UNuwCm{~Y985IMq}>g{9Q2jd?(eFQ zyGbF*0C-;C`NWj$2v?gVQsKeciEjpsJ|>`}A_I4GF-jY;NGp#LlKUb7pW?sG{SK2Q z+3@}+>%2zfeg47?i*U@|H{z9%g_$03M(}nCE*$&I*_N-UnhrUVP`W>5VfQ}XAtasdhGH5m`*xxBRojqJ~TOH{o^bN2JEY$u9r!rM>9}w!jGo zuvty{xXPtgs4$yF^DH%)SUog{=Fr7b2rO`g4TyAdy{IH;o6nvoB|n zv>L{eO%zSld5=j3UNQjw@E7dk^u#lzcHlK~b6p*+AjRMG?}XV;J0%hbb6yW`u8NfxLV@ zh`AW#++a-O7OUzqDT4pL7{4o-sIx$Ux|*lTtD(Y$?Xn5?^i@_5G8zLs%c+-;-b19{ zS#D|`1qSNRL6^Q3TfbAv98|kxz%1wQEBS0(VULp_L3AV4fu62N_ zSm6=CClA|bve_xLV)|2Z*uAyhxD(a`rwxBEP0nM$i-5V7f8btQ-7JpUag@(=$pZ+`W zMKh0_n9D>y37&sjc4Kgt3De3yZ!XMWQlw>us>gte<+xQ|qnkV;ZjQpnOtrsUwOMfi zC^qej`YQje2pu)=K^}z!oW5+FmJ2m6M~rT`3QLS6pMEo+TO;TfxNql) zV!e+!;8>a5rLrWt5eIgnvpEnot5kI5$MxZXbZRQfq7RXY`cMpj7c}$Z_~?ZqcLuDX zLf>|YYctS)nr1-Z`nxtEou4wHTQND>T)ktaAWi}+M=0)SO5%5{^qiubPY2=qs1<+Wzv4Q*-^ ziOkI0DaaK_?-cb10-L!$YuZIH+~Sl55G7su321y7AFa>#faQ06G@^J}+Yjt*C6&Mk z!Xu%8lOP&7Qlvfz2LV2ZY!-(IbSBUJRtT!!5M}hCgl}%)DP}t3NG2sSh(|$0WeDgTo~ok5etvpdenz(p;w0m<#6jRBbwud^G--J61136dkhYui$72kKjNGIvYZWUpI%VuZ zW!gKw2?>{2{ux5n2u&Ff(mNFyyKnVCjP+B{Y_H@6{a)j`dIb>#0_Ry2_3j)W14p+> zhK)rS!$xLhbZwCAbcvUtPVg%E?wCCqG!Brw*3Vj1{%-GWsZGnQVX%675r8H9=;@Vv zBP_UL)W@Ruy~=pkggeVurdh^I3L_LE8T;xEomVRlwQFTYa)I{s!acv1xCh>k zIz@8B_^qbHku8lQ1LVLkL{x>#mK4*9S$9_W90rpNt8=C^e0A<+7e`hMDCI51njtf< z3|ByIa`qv(ia}L=CbR6gq|;iJDRc*PGP<#@ez%d~{3WuSc8m*VUOO}fnFx4`cr^Qk z&`|FyBpKtJ&$BV|g{2|}Fal=`*Nj-F{u+;bvHb=uBZWFmLAZgos48>0R2-ZPL)t(Ct+ zHHgrB-`JaNFXV3hOzjx&)s`^z+4?0*Ir(Zf7~NBqX&wwL_q3H$Yg;uIziH%D{cK~i zLK6idsSxAc;kn)EEjAJ?b)MwZ1UWg8za3T%wp($HXTmK)?g#_2KP{lTEp`U$0kEGZI$VLb8y~b=KfE zoKrA2G#c$VG{VMdNW)z43v6ERA@`(Y1A>$4`8~FJX@!bRkyK zPI1VME<3hdagrv^QMBa{t;K3AdzeMkY0TDso)q2YC7t+K2@yaB%FPn3!9_?(BQwDx znA}c%C~GyTW(dwVaX!uawko}tdbNT1sieNNGA4QW%<`I7NG9ryu8L0>b;YZB)wV)K zGUNno0<0d^c1kde`iB&W=Tz`69bV@y=bpyVtD(fwSN0?FouL`4TW)@=LzukVtt-LO zGkpl?Z&Elm8aE|Q*)D8s(O*ZX z>IlJ+o7ItzMV}^RdWjHIcMfy2P*c6dms~g4y?>V@{SQ6}b! zn@b4;e4mW8oH-6KFDK>jMv&eWMXSmcAQle2N3j7sfY(|lgqO!kfal;!o!Nqc!PBr$ zCL)zjHk|f|$#^?TSkM|yOq@u>fB7r^?o1KXkWb5E;=u;Vva-1PWjU4@- znk6blcV!4jK#mF4SJ+u81Xp{2Yg7r~YbL6cRru@Zr@1(~9O!n7qIu)}0t;rO=jlu$ zcM~6uaWZJMHOEvM2ltzxzY;R$vu+e#Zra>b`3F*k1y*?wUSKgCF%v~Nk&m9b zw#zsuEolq*y zh1;XdUYDB<`&P<*&D~B>SYRESYY4`s6ccY9{=v(nN>mz^4k-^y_#Z$+i@8Ta!$Wft zj!1O7adVj{H-oJ=N9Zh4p3X78z1CH@?&6?w0w_34K}jw1`M?6PViDzuc(KX=Zo}R! zeBx9%Q@Cge{|CkI)v5hHbAm`V<+lXR0A~YCF@nU=$_k`tiJp*f5fk2;|IdBVHuG*V zA-IL>Y&>XBJa;@NE@AqWHu6j}W1De6DX*0NP(fNkc zi$iZc3Q1Q6GyV^lJ-8E3B^6bzCiLP}+d(+!{E>4{ij^Hy_XA^RWR**6m#T0Qw7&(g za=$tPwM6Q&F@N<-6EK_}nCp7NT{&+50=B~B(3J}B3)fGTp_`=uv z1CpG4gep$_M%a_t&?w&+khM^S8IEUL90MM#ITDWv4yW7n`R`|aaR&I z7v4??>T}>}9q($S3t8O8@E@CR(7yxjvDRNh{xe>I)uJ}Ur$r2x5mDl^teMZa+{E9b zxN%meS2^@D^F3kp|JB?@^-=Cd_TdQPP+*gQm0RgSR%%Cf%8$WN$Q77iWRv03t9zj< z#;4yN6Wd~-ZFez}t;o8B4`{VgnOB5d0#;zVOfm)1e_b{lIcbd>N6ea55wH}XRNqNp z5WC2zJ?u6@kz2KW;xjETmij!Ysi=a4tH~{S<@YyIgylXHwC-Z{PW8`ZKcVka`RJa< zEZ!k4l7GH{k=v8Ehx0c@`|}OTt7mqW(0|7@qB++>8liM{2BGo~ITBLc#Zg1p~9Gmg*Vj5V)3iO#xrz$&J z4|`DtGLUM`Odn78Lo`5qq3Aohb$S0t^n;j#y@&y!y9x7bq68#;ie9*c2z~aOpv`!G zabVgMZN&mz%f3eV(X_vBaVTZSq&BXE&MYYWlR&tl!oBDNk5Fs<`eFn_jl>EnB1k@u zuVDK>g1+`K!u!)xD}u2hd4Clg!E)0}Xnfm5cSSZB*Hf$vpZt2#Z+~b{5&>0<(^L!7 z#|?qv634*lCpO18(=!J-C`|>Sy-5<~d%)m>g)}_}iREqzw)|I+58Vos$w_&PJBN=t z5UfTYGHj8vC41_+6gH^xM1Yhp^qg@pyr(5K%CEJmis96g#DkogA0U=28J+iXKBht7 zPu}CSxDX*+q$zIF=|7{|RMl#tw{XLU$luWMnYJn|y*D$(B581GRs|MYg}p#!jecPZ zUFlUS-ZlefA))j^2#!?Jf?x|9FawO@Eyr?dqrOW?opxbezw`Qt;Q}5ryMq~0%MtFV za?9@$^E`ZxG^;w_2L3yj63XO%AiURs8GBSe(NOQCz|^iyf=8BQge`St%UW*4cnZZS zS+BwZOap7v>DeB^y@|TRhy4Bg$=YD3?a_0hVwJM?o=;XbH2VnjGC-XVml`95*mC-O*m%~asrl<=_XEF(Q=oz}nE@=8aXx`O-kLWr-#=C=$MsAf z#^Wo#^3FewpE!6^E96liLRbIkw*DAIlrr;|J8q}IHQ>d?aQ~MG#8hmUXHhKmk>h*& zoO711?iH?65VbMz}nO$AeHZwHuQ=@PMX%q^^b-#IS!Q)Vn#DD5*S3Ov9=KNMax70 zz~?UwEb%W9+o@x!ffJHI+$t($91ic&NlZUq5c|)yPQAeJwz>c!evd78`a&KJ(gM0T zxVuTKl3?FL&Q-SQoR(Q>(R@lMT~f@ZP!Y92l5WdW6K zy-3WHNa3ZkS%pJ6OM@PZ4ji^96xit~r|vb6(^830J)SySl+2XJ2pL@YYDEH8yYaDl z7}XE)Uod;(*lCC3WKM%p#?m@N$M3hhesAW*zwV{k9TuQ@@sV~J{`LF7lwCOXNmZzHZT_8eQ`MiO9mVekebY;RUXIyMMPFBSJG;!8Tb^xARf>JXb%~`AElYqOZB_I-0DGT!+|1u`J&)isG7n;>TA!2T02^?pGnk$+Pv^~DPLmueh zwhwQ2|q=$pM(SfxL-RLjEm8mjiP z?j#VPF(ja`SX8bs>REkvorTxTlPX6O`fj_{@lpk zvx0Xy_zl`UmJ!tW@MgUo%2FnzGxUIBxkSkPYJ28peeg_fU&vTd`OhKdJU|-ZGWi8XeEw45IP|n-Ys@joYYUXLJ zP2~df@|S`a@$P~$+A)B%IHqQw2&FPky;UFUS;IWvUu(%$@Z;OKY;$HrYq=X~2|U(h zpc*6?92637gxG}+8C{=Jwdt=Nl-YL3iEPTMYty^5pOmRtU=s(-@v$ysv zytn5V9mKI3-Sm#xCM;9`rK(dOr;@c}^?dCE@I6H{TGu3-!s0Id6%}Z%FF}SRzz_=V zB&EALE?$b9xic11m-In^YX0H?SavpWXa%AVb5^VEe6NS^+b)x@iA^Vcv(`UmZI1? zftStj@!*)33j!?`3(;<5>kT_BXt|Y}pN$1!=|x^(%jCE+NDL^C}r*esqbmCF62}A$b6}40Q(!80%#1WvIp2*)H=+nP{?vi zyN`WJB3P83H;E? zwf5h-x9Uv5`@VN`qfN1TqSk-QMB}r~-L^`P=UYyI8Kv^X&BAqQM9Bj+q~$;0>GZxs za$8B69soQj-R+N~6pUBrG7t$|7UF>K}Cd{n$AN~?J zms`I&U7i7b_$2=*EXqMC7w!fWT9o7SsxKwPsot79&}id(e=OtFaW`?KH-v#IVjA*7 zHc39!{`3_Lz#<{<>BCP6E+?&5yCa+gBu)aQD{I@$8KmFoU2O$h(gx3G-3!DZ+QS~g zyc>aW$~}Sbj(l{cBpQ?*VUx7aYS%0i21DfP6%nk51q$R)hq-`@%9n>XK#WfiA4jUY z1w{lr#8Z;Mz7J;cIS9!hlhO{tFO5{OZ33S6*4F$z#FJGOg2{7`z~)^mnLfQySo1#j zL&hXoL-cF|7&v#poIr2;QyO>bQryfS_YnpUcJ-bYN9gZjYL>5GU` zR}hr8^q6YOd*nwh6rWda^}aUr&=jMjkUZg`D<;jJ%@)(LE?`S9Xyr2g-V#0&DTt6n|f7#Z}-d`LZd>CccvM%F#@ z4yJT12b6}}&_p@eP8zvh-0+31a@iqm0hKK{>JwIS-El^6M82y^)!kJ#rGWek{TdLQ z5^c(Xk_j9FaXynwVX8ryMPNJT5&EdUiUMBEq&;|3f29sga??Z; z(F=B|+?ZjsI`!jrk5LOf)I^SRF{EMc4r14UHq!Oc?2vCbuJA-EL)*F$%Gh_uk=(nef;; ztjsq#E4HlT_&FDl;`^O%>LMvH=AS~ZHY3|v1j^^)wXLi#eQX(n2zp*VaO8h$6l?-& zHOhcdMIGuuC57Vwj{#B20mBhF{5s?9cB!{(@7y=T5*^JDSLZiXW zAqZ5P9I;F)%^RB)q1VW2tp{zcG0{J>v9KitWQxY^S#CmG(gZK|ocWVQF; zj`7&2X8-x3{r7r{#`xTRG{P=o@jON&Hy<28{w|qQE^bST7>0)bvK%R&aC%$8DHF(N zYGKF740Td$jX&n?ScV(((m%KNmtznyck^Ef(`p}|%|4;@+_97*{&%!suBMr;V@C4d zLHDZXw&=d04DqAT`KBX~**-=&)7xlp-R#RQi40p9We02gu+xlRv)tWdcL^J&)X|z< zM~uoX|Mdq&$XFbFVcE}e61%ux@YN!!@A<~xvLbIE{_4!Ztw(|v&u@Ex|*qP|5JYs3Z8}a3+y?XJHqXl zb_CmXZ6HvOG2emDdRL-t{S3->K$4LwaW6YNABDT52;hZns|u90ff8{Y3pus`5RqhN1kmSEe>u_0Qgj{fu^I^pfisyk#|Pf`dJ_?NVp{NE5e7ve z*CmsMiqLa;360+ z9ARBY8geZu9K<_gc9(rzqu=hzhzhCuxxJpAh=HfDEzlrt@@|UwNu`GJAPV#)H)GtIc{+{Ub~@l_utHPHg1 zh4rl3=pspm4WdbH29nf61Oe%i~YdqB zv!E=TpsrPyVAk-p>Ko$RqP0opcfQ%mDCitjujEo>hR&q7^R4M9upI$2JMW&nPn4=7SMV>InbbfCekpcD=ulp}~mu1uDnv>L7ke$@9TP;ZlX0W>87y&EQk2{_EJ;6w_8uS2^cJNY$J6JA3DqS1aYQgUyZ*<#){vaWtLd>}k8%D8P{PQ($eG zg7u4YiIm-&FI;e=%Jj9tW$j4TR7ni?{%LzY^>}jjY&BpF)^*LajT%zu zlPl3(V>PvT>9{mkdwxHYflH$N+2bhW5=OO;ueE?Q?K04z-W5ker;k zV_*l@7ydrZKsuMDAJ$Q4tdibcHa)V9lKGpDko(AgL$bE#dF8s=&wZD+-)p`@&jbMr z=aRCQ{w;4_?E0iAr6qyy84Dv88I4pn&_9V)zSy)ZgxQYFlT0SOU+iL3ZjmSq(49t1*kXU<~8zO9CL*|~uP+hfTlUx`v zt}PUdt>I*wk_VC`4?hD^nU6RgyD^BYXu74dva)9BQv3S8QkBzB1Jl3iK)J8ltk9}# zy{Ji(ruvZ{;^of<7IeRd{1(^wWIq))5WGzmX%f6C%NAQmadf+*1VlT)MeFapwiZ!5 zv0bk_n8BV7Q;s!N|B5gD#InIwwxnn#v-m0_ST$@KUDlGDB!-#cPYsZ{$7JK4s;3{{ zgOavsJv~i6#*s)<-(zKj(KkM@VDyzyq4|~OJ41^+G0asEbqRq4?Cq081Nubw?Rr#* zQusX55GpPb6uiDT$BqC6#dN-OKzv@3{jIuyetwT)ExYaSg10!nRD~Fp@7#A#u5DS> z?0yw}jMwx%KtLf2DhtT3>{k8#fa!AGX$ z5md>fTlBz!@`aJ`4)2NJA|nQCc}MGD_-@h>wb&tkWE8R_u0X;`)GP;8f&mVS4lm|n z-OoiZzA;z4$a^7L1KrUx^V zj{~Wb9G;s{{986whDdoEE>4NeaP+2d2J?dAsD@&QctvxfbR|=v0#LbCJ9Jm_U$j~g2o*$;lxS{n?;R6hcl5FPRzI#wG_uG}yi0rt8}N}?s7jo{Xdu7YM&`*-(r)tO0x247XHjKx>( zhY`aG(mMRrt+~Q!nRpiSQMG2DHxK9vtxh)g#O8$?R<_X3p4~ zRJ~zD=a2@oN}b_&Umpn23^f(n4QXXsY@DzU*+TMCy561@rfrwlw!_s)^L>twM0sv6 z+ll$Gwoi)hmB<8Z^^C7(Tz&6^sT3(tr8BMc`gUy*^(>|&CL=^sbhRPU@(T%oz-UGU za<#DyQsq;NnCTG30f4|v{7b0y&?C!gSjg%hs3A9;DC0?g6eHxUob0PUa8UbDBUm4n z&7rugW6$1sy$3)OK7_JC8E{ssR4w1)8`$47(WL-4ZfhJw3NXWcSK}Ozr41?42&O?e z!hw2~*qg|IpOvMp*qv^cNTL7fmo{}Mf2v7KQ<08L2tokX5L9Z%!B}PiwoV1xh1#u9BeTPUh-j2ws~J=J8_q`*l0Yvcpa>Q3I?)q<4g?`a`*5eZ6+i%@j(ZjG%zaU zr5ZPKF(&{=@L&vj>Ydu-`Vf~;F$60)uNsUKP-F4UfVoO)#*tRt5QmLz-~D7u(%y3L zSA%s9hAztE#tPP)C{kkDd}wERRP>u%CM3BQ*V5_Y>Oam0hyeYYlliupIEMbbFL3bc zNzZmON3Xxt1=}m6uwA#Mp4mY9_Hr7r{__QBIo%Gr&>oOOD#0HC`dZon>;gpWx1I}e zR#yR$+@b8EB~ImhD;DQX9L5ju=|l_K1E}67roIcU9=NC12#gisUc?gjEBuFc|jbhXz5n|Y99?l1D@FS z9ZXv1#5buefkW5Xn>}ar=-Uyh;Hhv=Tz3OKx5U25=hDLBsJ(5m?;?9~xxWqgMX9t} zynA`eN?QfBZ8(%$x*yrdf9;xPGzn{M@(C1|Le{&o+7DJ8RZ?Bi~#@leJH&K zr!_4(dRtf$_MvYQrt0iMR{m+k1p8Kr6SOiyF~uk?g#WPAN4=XvrP7=>_&G>AT0)=B z=!g8<5OBV)5#M^O(F5DW&|1_F(x!1kM5dl&b7fcmC}A_d|EFEbDx?^{; z{Q3zW6j|P5`!gzn2So++(xO6MG{o{JLdSVghGEdOl^fDuksFa!OAfGoGWA!zA#G@h zdja9?WgGr1Z%b9_^T4>tpcS*|oLE`NnE!})I&1iQ(01x2{frr%R$CUJW;mIP!YeDefI2&yQ){|>rcE#TSkeZEdT3S30sXwbx=L@&QiJ-0txEfk^hkTpNf z=38V;X-<-sLndyX%t##jBI*i>>}nB^eOL9wV#Nz zyF`C91)0f)%@Mc(U?OwR`aCbXj-@r75!Oa z!Av6muvM>%Spsdc!>=HY`XN-%qpb_y* zfjmE_@NmFx+m<}*^_o#q)Q&X@xw2p3U>b+jTm}_;v!{w`w?#xrqui_U=p74jq7-v% zaAH7fHYC07V;9Bvp2)~tWS|->ij|;3;8Ht;7{*e!Q0KO+^pVkT z6=uQS{`ry1je0&Bk`34W6uTzi>3eP2tCa{~Z``uSk4;d;+*y0DMVwp?jQT1?grEpb za;Yz;c^Bp;#gP;g`0sA?X zJUWEsx&CbeRB4B0*=|}TF5fIrc8{&FyBdXv3G0o;&Sz3Fy_i(&d%P~>KfM16Q95U( z{n9UF>@XWVFF|lZnaI1=URKvwR1H_OFZkcg14v^?#=HaN76>Bwlg}L=H1HG%DaBM8 zgG!BOyO}W2Xj)TekLgo)cp^wgzH9C-j&H^@M_dxDIIF=DCIU(dQucX6nELEkEb=)9YLo|=k;@}<3cMdUsU=**nQiVSC`$=AgbS7As) z+iNa>B}~){C#67Rz_gUmpI4!or$_N&r(6VwrvDopuaXb`7Wdw^YGmsAA{3H1yAI|W RhDu4HMoWXE7J7Ja!d6Zq@TLF& literal 0 HcmV?d00001 diff --git a/MikroMaster/20260912/20260912124001-Config.rsc b/MikroMaster/20260912/20260912124001-Config.rsc new file mode 100644 index 0000000..70a4d24 --- /dev/null +++ b/MikroMaster/20260912/20260912124001-Config.rsc @@ -0,0 +1,4327 @@ +# 2026-09-12 12:40:02 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] mode=ap-bridge ssid=vados wireless-protocol=\ + 802.11 +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing table +add disabled=no fib name=To-VPN +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/16716/73429726\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 12:00:05 12.09.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=Internet +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 endpoint-address=172.19.14.102 \ + endpoint-port=51820 interface=wg-awg3vds name=peer1 persistent-keepalive=\ + 14s public-key="MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=89.110.101.17,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260912/20260912124001-Diff-Config.rsc b/MikroMaster/history/20260912/20260912124001-Diff-Config.rsc new file mode 100644 index 0000000..06c39c5 --- /dev/null +++ b/MikroMaster/history/20260912/20260912124001-Diff-Config.rsc @@ -0,0 +1,2 @@ +4103d4102 +< add address=cian.ru comment=cian.ru list=NoVdsina -- 2.52.0