From 6d575d424f5748b693169f302f696d3d9b30bc5a Mon Sep 17 00:00:00 2001 From: Dan Skaggs Date: Wed, 17 Jun 2020 21:47:03 -0400 Subject: [PATCH] Add Duplicati, baby! (#113) --- manuscript/images/duplicati.jpg | Bin 0 -> 57675 bytes manuscript/recipes/duplicati.md | 120 +++++++++++++++++++++++++++++++ manuscript/reference/networks.md | 3 +- mkdocs.yml | 1 + 4 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 manuscript/images/duplicati.jpg create mode 100644 manuscript/recipes/duplicati.md diff --git a/manuscript/images/duplicati.jpg b/manuscript/images/duplicati.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c091a44d7cbbf218d8072255e6a6fab02f21c33 GIT binary patch literal 57675 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 z
c!@JHz#8^jR@u`?k>h0Za<6A#2;$z$Rrl#`RpsG&H<>6__k>wu@%6K7;#q6%u zhN8C%7BRl9WehmE62i=lFk!n zn|iS*`ewuZdKNBrbu+3y-F7!i&D7p$XknIL3V*lgH!H#+L@D^gN8nRltRsU}nPo!>8wso-K!sTW^)*h*mseX$JusznMbv+2w|g~yF~h!TCCLek-28fl z6H+Qw$-nJFoW@0dr%NngNm_oeqPie#DrUwdbh3lMjY~L!fVUUPm5$-nbq9 z!9bRUwVB`RgZX?k%8JAI6-I3>iBiVX5hEhIBZ6)t>Z1oKc{hrcm1Fw?VqTxLl^lBp zV&_QMz8l8hymO|EgY@^@_iO(9?@>VaBY(|Jq_!Fo)*ITlsTVv_(CD*!AYb)v-dK6WDAG8^^ilId zyLRgpb6t7i`i2J=1!-2rqm7#VV*M+DpGQ%s-b6o|c?vp;7YrqH-E7_D8ju{=T_K-L zU$`=U5nUCgmtE26AiZ&g*m0HxrtKHS4{)tHGYbpT`ae*VTr;ab^JG^@TS;^I;B=96 zR@?2+`^ceV0F&H0=Ah>0;zl(&>D-fVCb4xYbs^C>Rkj5IkTxK}Qhi1lZbm907Zon5 zdXCejWJuC6Va;~>L8b?cnpyGIC{pD8z) zn#3?MmAU${Mcbv=7N(IL^1w4ik5E)pH??;udp__82M@4%70z3>>In72tTBV0st31O z3%TAx-j=VM4Ty6?$L{djFy7pe+>Kl-oEJoUw5kkqe~%itZkiR|9oHI0@)oOuMh5zR zHk`*+!IqxR;PH^Prj@Cmn}58UeCo*_Squ4)oE+cElrmyldlxe+%h>VU-ahzivR(_p zVp$vChS%Xcp=cv8b8tM7*@6BNcL(jB**uYN{~H!P0bunBpKD2M44tVAQZ+lJ&qrKCA!G1e@1&d!ZXWc_hr zNFtU0 zr7al>J!$a@Yz%!~@KLcklu3i(_Rt%FS9r}V&d=yN|AoGlEAfnZtW8~Y1YN{iJV1*k zx;S1#j~#Jh?!RL!e?JQMk&UV_g?nJT?M?(fH)Y@9-2+#4_dulY*%o5TKOg>c5&r23 z{|twJe8NAD@qdfi;ePD)=J#^quO-F*?-#`T@&BLMJMq83-UhKY@-1z*3q5Pjy_0Ft z9--;e>!x^xSGovEK_t)iT!e?o$O?Ry#YUtyXEpDEZ}OSbAMVQK|>gD-_6jZ&y_gI1knzog3vR~x8l&y9Tta%#G{-l8~`QhB4 z`+oGYbW<>wb7=cF5vhMW*Qu}FOW(~KDJbKe$$sWMRRU4>J<#r!%pd_!{+rEq?Zdgt454blujf=on(Mb-0Tzml|_b1WtEW}3Al{3(N`&=pJ;Ba3^$ zRe-~nAoM8Xy%EQeQD%XWWx7DBvWtf`N~y)MUzl|ynK0r3Rd&PLlsP5gjz*eRwJ(jT zNKdXF) zzCGmW&^yct?dd#k3^(FALhkB}`6*YZ#APeQ8YB>iiK4yky0oUHz*V#@TB_^g=E~#| z!KkIKa%{VhEOh0=Ts>mUMT_qKq}2??ERi@N3) z&RfMP6OC&pwwk<`v43Uyf<;F9+mQPj#tyd+EzEJCJu&@}2SZ~2jXdWlKR5rV(uLU* zDudK;i;9i-%AKQ{rL)=1y2T#_uU~iw#!n{Mt+&ljRm`dzxn$N7t| zmCRf@%U|Lt@v~24bv&}6=81MX6@Gizxrk|XM>g85@4^vgQUWGaOUt&ma=PetM-OO1 zTBX_+Z>>z?W^c`i?9h#PVC3Th@x?SgXuKZT;@3uWk5V-z$bbLNwbe_$WeGbBzdkB1 zb**B_wB9#@ zro}#^p5hTBiyUu_ks9UKV{(mSHB?N>Pk5>muV(u~*UE(>>Ih;*K=1bF-YJ`{1f}Kf zBqeL*MHKBE=D#%PGqc`MAi$-tdTrh}BfToFbq`qRY^<$MPF+GSw|6s>zi$bj6mENY zU)(b7zuiUmg z8HtwD(T@^>gM28eolFD`Yo!+j5Y$uYjNt19cSU&Mrm{B~XUz&T;qJ)nHJ3%nj^1GA@~0;oAqk z7$)6)c)C~I-|IVP>FX~Q%a;vR_;Ek=+btsGWqLhGF>xxGL*dcuJg%4H=u%grDiUEv zd?z~f-nRn`L%nx5vt31_nqa3-B=~w1Dd1Giy+G`pT!mH7?L4HEq|JY{=rE5 zM|_dfWm26Eu#@%$2Iyv#xVCdm#n^^EdRx_`^DM;WIF2?tT7%D@XYurk*HBC~`It)H z`bADtEmp;|-aN$)=(iW)@4S{ylzj7lzDX=MDV&vagK!CT@p63lDMF@=M2VMt{-_}< zm-P91Zk)|9cAu@be!a*L|!$Q_&e2GyG#c3s=a zcFSkqD-QjIpH^t}MCS(>FeLHp-XXzq-9GnoWhGzfC`4`GkSpLhO3454INdgu-IXMO z_IxlR6PRb4x!s3F{5Po5h2TnG&)Fdx_U_*zI;weD#-VpCi^}XWE zR4`m)sHjj2breJvL9&;}5!V@U>6M0Ff2}>_kA``E)AMb+iy#|96aHp|@>rOv+q%5W zz=$sObEdMy+Sy6nCB>3`f{BI}TTO`>l~mJU`4BvC=(!`JqmUv+_Nq5)W+ITPD=F3PZj+&8`!{oa3d_>2&Ik^FeoY+u z+f5r#qV3x8o5CN?s(aa)z83I}GOwd`_7*hI>{a$W+-IlK(>%(GM2f=a8r&Rw9bk2{y!8v-&|q_A(G9nw7cr>J6(*nc)|wp@=?0IsW{rrmE|+6_Wc(yIZ}Cf^m?51Y zd$)xNibXZiOT2Q;uy%6rvbH7^A_;tUOvl!oi$d50O8mNHAxxw`cq!7rU6a^9Y-m$G zqjA|3=^-V>Ez!!}qTg6KdT6*xJ;VM2n&Cfn(aJXNVn_1E;Y&KE7bgqf?IG`s#1zfN zcsRE6B1LZG;@2qg!Ajvnj!z#?0hRa3XPBH~s$<%kW2L4wx;a*_@aR5!&>V_E5IMZ! z`m*i;m9aB@CyTDG zr0Nu?u^_~EUVdGiivc(6zQs&UUO9Th1rIft-PLpY-;TwKmZ9LN&(!2cWfFeQ+KZc* zZmLZm+BLU6oa!AaLuj5&iB+!2g0M48?i$YDX`e`1eQ{rcaW1uJzveVCDN}H8+-s^p zSa^n6SF1QobXp0k>%f0gt0yiRPhf1E-Hg}WF0&QZ5UE3p<;W}V(Cwh7Zbkk~)XVD8 zv@}&%5X!unI^F~DOEv6zQ?R&Gy0wrT)HkqMgg;62K^(+{|8uc84;zn$Q=L6o_v6)E zd2Xtwb$qc_3(Ao5rYj#w{iJ}eTABTy$1Y6M;XU=*b8)@3iG~#>!F9v)HqRaI^M1BL z*W8jOW1y<%uVUvYRdg~JE|D8(@rGPWy^Jyot!CW1z1Rn?3rhD7oY6H{8SD%8xQKeO zR3x{CM_Uvv8%4K|t=P?giX>MUlG3{1Nn*d5)f||aK5nw=j2jK6|DvX*VuC+KKgA1| z7;S-w9seE5IB9!0@JM(``|QM0D}#S!GQw(lKi{jx>uLv@9j_8kX~J+YUUQJ#+LEm2 zdOG5v8gSOa-bpP03oEpoVt0G*cqIz3lgEBGSEFRv z6V*XoiVD0!3C^@!)gR@sn6#l+yTHV6SjdU~7V59KiWD9>J}HF5($~MujLFG;&{e)$ z)5Sr|#2d_+Qlr#j(~wKtR#xjp6DVPbKn)v>Lo0XnWYGy)4z}Z`^3KL4UZ2Vw!!DopBmh^Leo?5nH9bxZB1z99=OJk zy9e^FMd5R6Ut0k8(fBV2~=J)Vco6!Tn4RJ^AB&%k1e8%%0$D@-w86xSVw zJiX5!u5PWQ78E|^jh|6DSJp_2n^NpMp0zAwzj@x!qoq32SDF&FPW4tu^^S7q^d9(d z)mgbsqBk5&qcSQmtwEumQJqtX^6@o|D3N;Acd8CS98{ud_m0jlFoli_^1UAd!?9*h zLSC?XFu6paY%I%fkTHMWOi$QgwO%#GeF1Z7PmX+dZpt;#V0h*Gy6{np6#qs#T| zG~4V1!PqA@2vn=2Y?@Ay_Hq`w?p0l$2~BzB%b%Q!tp`N%f|j|o-=^q1e63bsX8J%L z)2Z8Cc=@y(X}2!fEtEfkt9$eDhzllB=+MyJl4|XqE#o-*zSwBjv{Lse z-9YE2djP91uY8(8|5JYb`|`9Zj4vF|t~;o6Yu~X)2C=m~Nl*|tXyP)Q-^k!w(;kuQ zQM8=guTCe=xy&4znW{@Z*7Hs>>LFM%{vf)aA9TY?oxOY=IC>~o^Pw$yS$r~CZic4! z@?-Z4`z}8T*D2i+Z}|yM=1HcJQ3m>s z)^Z#~7`MVT_tondmwd2u%GiY!>QzVTa_v1(sp9pz!BF)Z!mz^`y%{7+obeDKIbn`3X&m>tOv?;ZxyKt5R=;WhtV8qHS`5H=eH9 zCJ@Nl41BYv$G#Hs^G#l#tzt9#?MR(Gj}JGTE4#+XmX!m!B;(aBE;V4A>|{aLklcjO z>_jw0d<3{V|9NES!Xq3QcAkD+$7`J=M`NwJ{6_M`dCXHpVjq&A;^MNfEt%{snRew} z;3&U#;4Vi6m>%uf`y{+7h?LN?jKWQFlOj{*51IR^Wyx)gA|Y%*3Fen&*~pa4%~4ibmScH0LTKd0^gXpQ zQI%a}H)wueZ-MzJDwLnqF0TUG*D_YU)fsC5_Mk+0OyY(1+&XDSs#%BOrRTU2PxU0k zTX*@8Xgm4UOtq-D&KG5(Ci%*!Y7Q?_bX^eHGipb^RGoD9>~_7$!czCpm6LYk*$dD3 zH;s_N?>}zShv?C?WlGkv89v#?s2n@hyOcefB?-^Qxa&w8NKtj&=2FUOb7LbzF9m`?7?Mt{??Z!MFRgGSV3N^)6>paR;It!-qozU8^IK4pJCHa1)UIiH!xE? z{<@>Wj-!9X5ChBpCffZacI%5kZK1$8K|KOD7a{ZanWt&Z(Qk3gx-=%mh1g-f9m(2F zOP2zfCMNh~`&?#`2b1e~nptT_Y5A0uiqiB6-F#sl@Z};&&aoS^JlGGVM_+=~NUAUc ztxP;*QfykKW8(c{5fOCKMHkFNdW5w3>DC!mRtSU$FU7@W8Y^ZO?D7rwzQ!hUkt5>62SFf@~uCbfT zru&vF2O~NHsv_B|$U-|6NHF-%G;~hYeJ;ucR;g1PTZWRyV&gSEx3BJWE`Lskt(2Zj ze_OHgmOO&#t+<4654L}j5xWHQ>F@W3H_&wJql#HKjy0GWbLb7V(G)_#eA6AE|EtnSAJ!+y`ef?EhWYF17@b1wM zag!DOQW6=_EO$Q$c5}D;ia%2jH*4o?BouYwQgh8-WP5GdN&J}!nQA(C<|05@h)l2~ zD=kiaa#(wcZ+lR_R6k#AR%yHTLaDX(aOc32=DoK}ItO$zV?}sLaKINgUS8k9AeJW; z>rSgj?g-Vet*Jgk7W%z0D9qXwLcPs}_u5tAc+LGY`w5*8*#e)x!?)7mpc%>RWq3Z) zvQe;{B*w$a7GHC&w8l@|9E=JT=(BW$ZMNIb!Az$*N(=nn@+a1rx@Xr4j`f=}X}st! z^ZP*iu#eJV&{Kvme#ntiJlmN*o@<3%bWm{v1p*reZfN#4qQ zG!^14>;hl!fyt9YXr688CpAa1QW2uKg;JH)vz(bTBZ1OcXWBZ&X5aeEcKA^JSf8{l z=fJ;X!Y{#N6HB<=6&6E5aq=oGRGzp_=5lv9m6o)8DI(dhFkq;Yn%0(Dmuj19!?z(u;Ct#L%9p zvh6ySuKJzTA{7CBy>@m5Qts-wq|SqKfX9bP?w zh)zCbh&a}YDw`!`c7Z)$5;LxYSLUrYQGKgq{AE;JfGe9MsJ+k4-WH$qy*wTdd&7$) zAR~^_FReqkENS^XtZ>WIrx2wOC-y=#_w2iwW9?Sn$4a4o72XH-9#maURWM^i7g!|m ztkmqte&yxZMgE=)_n~*2aL-_rQR0dnXG0< z_?zLvxn2LT(LA1=EG){m*jmppZ83Obta{&t(Tn2KYgvYL4UY_Q;Ps<{{+rJ9rPo>G ztq)-Va%o&=3#URd*VIk-Eg*TBqas+9{2{^rroM&VHvoXu#KikTjs!IO{M7NCB}gh(r+5L zZ2ltR+PdlNR5C_GDe)!qY1LLNVq!A-wWC#$A=gtnBIeqaISb8`t@DtYk}LQw)AW`? zZ<)!dPQA7uZ?WY<7wZU0nd7In_zT#T-3;C5sGFM@pDB;QfOcfk5yr4~Tzj$gn`?1( zq?2sop15;oZF71WK_xSB=Rq;qA7@HZB(M(6hG6ruBAdJK*YTI>TCF`xl;J`&kI44B zJQh-x%Zc4Bz)+OT+Ze{Pp5V`o{s)s}CMTM6pS8?6mPrwsmz!>_jZ4j}ghU#^f~V`# zY$5CnWrwJ4UJFy&Is);#tW4z)PiGAyL-@L~>}X228}HzXn1m2G@oM*RBAPbKnwl-S z`^Y!sFSuOyz{gZ5I@z}7sVdn{V^EFTvM=s7BDgJbY~SHhhuwvur^(Fwn_4lunSbl$ z*~vf@7VI8S9~C!q^T>M}yQ|k+nFirJh_0Tj;IQVPd#Phhs8OQwL*?Y$(uJ`_oxTceVNQ z$K^99l6r^tw5_DUomODByYrm4@r0Sbd6N97!5ev86#DUUdb}@o&ujFgBLjEcCp$+I zgr&V93XqoGI!;fPZtK$Z{-%#3E+$VU=93nQ%KPqGqI8e!LO5^emuH7@=bwz_78uCC zM>wQMl8*a|{PEQ}n-e^?IooQE)tT&$rMUxwDM{>l)v?uMDl_~C zu9NYXE7^5tWrIHKn-$Yr3#>=s>6n!huc0RkZ=RPn_K+KNg(N;f8m3=Dn-b~8==3zp zalHrd4zenaD6EqeewN>eK+fy@#S+p*vRJ<7GGf#-WFiqEc}+1FZr`y^d1Gf=PDxTX zM@leR^S4#&Qd>~RKK0sbHxU8AHo={FwtT`7~SEX&Mt?k%y&_Eo%nyXQyIoZTM z@41+-sx{^$+m(SQZnJ>gctjoZSt+M;*z#q4y1VxnWhKk&M+r6-fxt=7d^eBLM7H4@ zw?xe zNO&4!oCD{*+~EhNR$g$4ssm^dt^Pp-$bu`UTX3%(+2AB2{#L4FS}-@q*s6C{ZwK8J z>6|Oq>1ry(ztfC;c{l%iN>r1}>l9TvcUi4`1&fKjnsyb(Vn)vDo5k2|+q;sJHXK-0 zcNL6jK)W8gyRbu$TiIFYgi8>jMj#&Xj?QQe*_3arj0SSVy1#ex_>N&TGQ(|oi+DpZ zGtE}xMJkU*ERY(TgZtHN+ra!FWo6#%t0$MA$MS6bn0(@pgv{`8pwGM=p-n8uv)JYM zN7^%8Zq6HJFyr>C))cQ5$kW+x=Z!82xA8oB+k+ernOQebbZb$xEU<)L5v?Kg#L|_S zgeANxIB~2#i#I+N%(Z)+(PeJIUgw-yp zAMZ(XGNj44^n6!gkNx4zTJp`UD94McT(RXNcpmis?v7c+2$<77z;MwHPm^L+-UB1(h6xUB4}90s;rY~W zuEtjn*(=N0AKn8FnRjS+ibGM~Xk_7!;r;3=h<%c@MlgRnVt3W{My_I}7~+ca^W+yX zRB$a>I**0?fj*ITolKQ18W=2c+^5-#1?r6AkhQD5>tyBFWJqyJdj`({QwH>wJFE~1tA`ow>TQ)D zfo;dOqS9YjX%&8m*Wb_p8}@PgbHAEQvKWxUC?9(<+7q;QW5^XzH1|emOabd5v(@TM zFhg(YJHZOdh((^wQctEfi&btEBX>_2ta4W)^jfE?GLbCvJ-wV5?p#qo>I3#{m>V># z!}mc>LsNxCOG`ZiX2`pR7+1L-#M>;<3>zSWsBOYs^{$(f4<3*SZ0Yoj6^E~9m(Vyj z-;~4BU(;|FD`$9Mp9 zoQ6GDZjBnMZJgT6N)T2FiV^s(-u2NgdO-L7Yh7V@JR*P*A2?0qZ-i@oyb#wE+L&F8p7LD5ZGsA_D zw8{L{TgcgvAP?(A!89oS<`z{PsHS*7ZBKKnXy$J#yL{|PDU z`Vt>2vZ_xEFI3aRuW@|&RaD>N}oTSq4qOhIV3UE-H9=R z$$KfQbm6VMH<15fz@F-JuokF1&}U8`DPbKClZAIkJVO{0{DzW9w?C1%c5KK6T&7_r zltgcfED{Yd2+ugU4vku_ZSZhfd8^;iXw)JU>Wr!XB!-)rA}471V-&-8;DonL(8~;w zRAlo8wZLj->f3Hq@TAaF@5i;G@0Bgms@N|hA4zY=_Dj)}F_jVX1S&dmE*&0P!UK=8 zorSko+vW-+tP{CXmgmXWqSdSBSyipIwT;ehqH#xd2Ej^EU2f@k^#L9DL?#~RA7>m8 zQ#rbSaxLZ4-X5eLKeEm_vg>>W9V*SWJonVR>b&~S+h@zE$oNTcAAVyO)aSkYcnI6W z5T2xx!dkp}sERTDY;mj6gZ9Zon$X z@X3DadbVPG>O~)s)+7FGDW9~`;oOBH9*BgoPq93kN1*QW3$_!%%+jRBb^hcLS33pQ z(uSr&ctT8XjN{Y`+$_4kqHL9mw;kq0hV~^^cVP*^&vohaFtWQwoOxBO#Z6;eT&m1U zIcw+2K2qV`_p0m;F4sQFP!f82B(ng&DdCgyFydsFwg_>aGWg2g#(>=M0mQtqE>W@h z(<`8-Vf8XziXOgnMbrS@paIRf2WyRsGrGJjRJ9{?Juw{Sull;vj)P@2brQs*|E89=UcI3<=aVqi5Gq0g{D&>7q+uZ|s%Vz2 zI1S`+GjH&A-0a{LLLq#}-MEkSqksM*vSo6F8FoQ=6#FPM2cMcoru zHAdG1v-4XHm6WyacBz6&S5?Ws`T9NxSZX-KR6=2~NZjUpmMaeq64d6Z7snevnhH(a zT=9t_@!RvZhCl>*$NS~1-(zc2-Ol6MlA|$sL{W!O^uD}8wa!^9-)VVIh{Gxxw-rizDF}02ffXX ztD|d_s@!&zO%`+u-L-ID*x#+3=DbRc9W1(jni|`H4+P^t7PPQPW=b{@wGdJ!hB z`nJT^%sr+3#Bz{<$ubW-d4O04idmCWix>tr#jh;}n^9NA>@d9fesJuU8b6 z#af_Jn+K5VO-&~~j#mP-V7VQu3Q}dzKo~zHG)aB*1#y z)K#!sT)kJ*q;qy!Gm^(n!Xn(Cpz@Z{!}3z6!7U3sJ2rVPnGxJ2cJtbsg0rkINk#uW zUUGfInB_Am($Yz~WP&yhxtwI-O2i{QB1tku!xZ<<1sf&X`r5ZByyEHP~Eyuo0U5y=-Hmx{aGY_QvMGnz z_xb@2$?($dhi36ziUCJkGu|vgMA2_`PPEKHy}kc~z4r`itJ~H!g~5OW8B7M-fJp`n zCL_SuCYzkIF<>l&5E+q^0h2SBY;r~>h@5lAWRr7F5>Z6AzSC!)U8iez-QL}OZ`G~( zek|3hS<+fsVa_?`7~^@z<U&*8$9=kj_WDe0H3=?@=!iRtUyjc%{j$YAge$=r7 z78#nVkw~w1bmpYJ90C?@gcnEXq_sxiFFSO3GOaX8K$tKCWxTCaLjM##T|_|kn|#J^ z*+T6y$=(g?RmldsiADz3QxWUtwL6oDU57>XrYdM&u;+*oK@nS4Bh$9ue;AN|8Ik|o z2$hf8^eHxOr*ekeaW2X#l+Hch9?sBDK6%ykEQw5vM8<9y*NPD>#jkRCiD5gS7`8(i z15_lwjJ*G1ef#af!gaCs85A=2`ux>?gwP$a64{-XlgbV4F5^wK?9J0;)|;E%473mi zp?KcF!S4NW*?X%~5=n6y&r)+6r_>|^MOv)FN$_1`fe8S!d{`kNyi9d4PdNhA~NN z{+^ij7`DG8YW{*o(lF2n?iB_aVb-ybX8bM8c!?sqx$hn2PUS3%K}PUjV2}|>(fm7t zGom}W?EijoM)Bl-U(Mgo=I=M{?|$?5nD+Mw{l9*`A+K7H7?B@8a4eOOCwhtHv_nG@~Mlbl|-vP2BS?x&m; zX~604eZ{Rs`BZoorcPuR9SLPZNq%ejGJ^l*c&~nAs7gDkqL?qYGPQ127+YM)Gt{sq z#Dii5P9t@{CKy6{st0B`MZKO6_8hj4DSwmkGogxQi=4>!g-dLI>O1+Y9^~nndgjVYhmk( zDPhG#*C0Qlw}eu3Bq67}2R&P-B1d1d$xEj=b}spcAJ+ty(`ac~C ze>s}o2_Txfm#W@Z?28!n6A~2+$!*85%c}Nw;E+T~o#m@Zw??p;`tg$Em;cx<0$?M_ zL!tK+#+j`uBo{vd%+ADj_1Wj~rJHKM&wq)KXgiTfYA^xZvM;O-Wy&Q}OFhuz2*M@gAnNb@dK0=Hd5qY^;KF?phwV=cm;Pb7L zz+D!9Jx#$yu8Q+&uFWQwYfU#UHR=Z&^TldjRtPtaddK6H_oF2#a;CM|exfAlX9gOT zqJb$cA4`AEcQ8wpr$W{1daA9?$j84BLfaP^B0K5{6LWe8>?G14^eq{cppT&uqEX_N zMl9r7T7~R={RWkyn%T+^NoGJ7_sP{%zx*pF+}o2ZUUf#MQL4zn#~NOfl-Yj(OErH0 z56h(iI@g-Uk$(VQOE+x)wa3v#j%9M7<|cW2?TyU-$4)W1>V0p7G-h>iae%SYBLBHt zqV|U3?w?1M_~-85C-~31_4h6M&)4bix9GojG=NVaR*<(^h(6m7qJL^b9A{A6XjUNM z5soT2L#8Ypdkor^Isn-%xlbyIj6#F?E=<^YZaOlwkJPK`K*bFvha%;$e#hteS~EsG zDZkIGIQu;`Q0fEiccP;}BCfBAq~N~}@Q~?botL#=cIbpCCE9mfoO80EG@wwKH*PX6 ze)@-Mw?;90JK-VsNM8U(EOtwte45yRHOcOIXU^Kow_&$R%tFM5W!J7xwCF74Of%XW zp=(-cW!c~ru}9mTQx~GQaq3Kt=AOH)*Ti;)=kS#!LKy3+&R3l_Uao-6?3bfPb8q&w z4OEj}qSnLMar}FjfNPNk1c`5R$TmGjl4n7O#k)sW3=*ub(=bA_?A^c`m+3|4QG+ub ziO{S@?@s-TE>3C$?SL@9k)$%h^2v@jf1rDuRN6{(JefB#aGjyi-a5Y%96H3)mRuU2 zl?6-Rcoxsh5+)U$R2>}_HQ*z+?tI#1fuPgOw)7f-@WA_CyCjXPV|00EcWdNx4o<*F z`)*AXUAx9F8Y)oT;VZCJnVN~x!#o#}#ZugbOxJEgWqSf!K`#Mx{Hh4TNVZ*@#_-B3 z(Uk>0^CCgYohRnEStAL#MSa;ykH^_-S)M}v+$`;;xf<;jel6?nROYo}&}^ScR^s~T zp{CAvSaH|gvzlrCqX#hK#Yrc{2It0f#ZBn*MVx1@BvHd%5x7L#_FOR9F1O)I&l0qI z=TC#4qAzg5ORh(>u35F}qxDc0-`1yoN~}JG`?qBYOP&ySlcT#5$%BVp(=%XCID`j0 zH#K`lyY0q>d784e|C`7j{*UAtvHl?_0*`9OMEv?-NRzRSKLCYwI2_z@V~4EKL8)|R z5W$AWj`1P<8I_l#%}1{;$@p7dVBtCM+slZa7;h1+g2u`=)Mo7ayzoX)+@!hIKvM-F zk5O;t5k55H4}j&O&D%&4bI`@+CO8qQrhUPr^Dm#8_?m%O@AIm$=8-Mg7ymq}T_4rn zkb3}i*^4vnU};c>Z6nmy`=cyzufp)P)K4BeVQI`#e z99-S1d@ATd(7PRZZQ-3e@!0J3v2uxWam{3~vV^DVCkAVDE)q4NC_}j6Huo$0uo7^q zZJu&+-t7ucxOB^^n8I%}O14`Fn;CZgxs-hC(r8>oCQXMK&~`~ z3-8TNsN0VK4ay9$4n_XC#1ryni1i9C_B^ngDA&?3yeeGKL{n#L5N zmvwA>ph;FM<7J`68isU8ufv}BQd0ccK8@$|^y)#=`P{&G?wLS#ybOhBmKUbx!tC79 z*51@C#-=jX+r^jb&f-% zf58W=hN}bfKYFBwMU4MW<)gM4s2Xw~rg>k=}yu`Um_1HV@@C2`PYs;`L7qhqF`Qhic z;Y{=8HdR4hR?u-geL3g}pi91GFns2F?vVYVZ!M4~z#njVJcZynKc25GtHl|JwD(7i&Ew5=>Uj#Axs08(_m{ zC^<-naV9~5&sc7YS@!wk^?m9&UmsxkBI1q#ra**qV^og3`AD6Kyt@vfJ4)NQKkOcc z6!(GaQ*(*hmhA3jub))32+dC~t-~f?&mt^j_#G!5E{%?luNLo|jV&kRbOO;!?L38O zKZr`VgkY@9FNNo`vu(E3-olI`&h}b$Tf(fV9zPzRND>IhjNP#;px?=$_|sW_ef}xL z%U}5@Fz~%?gHVJhshr_G{I%ze{jU0Htm^uu8t57t%mcgZ24{(K(tS8pC9gI>uFC-x}}vo zOt5LaCR)XDr-#Y5_tI*hMk0Y)&e$sFn2Zl}-*q2-4Gz&KK`+gU-_j0K$t@i9MspyZ zgqlkt{zBG18Ny+k>D?Hm2G<#b{tHo_Z;T{79uJ(dK-&86lg}2*%-?Ipz2C@s^qc9P zfy+lgnX*cRXhbN7WOyTO!IuQ(HiF*UV|H;q=chMVtiNbdR)cQhT7nqQ&g?L;+r1gY z5cjyjDBLmhl+<9M9aYN&eAO*myDLuMRA^eLn#)lIA97xpb(1d@s2(WqvQ{#b{-Rzy zFwh@U0oKhgOI#Yv^uczVx+2E&ReZDjzBGrjwmT> z|Jl6BMw3+~&U3GEr#ZzL$toLlwwwn0F@<8LsFB+B!yej5CZL1AzE)qUh-x@|I4h;a z;HE_bDB(JUuah=*Zl9vCz~wD*exs6C+~52Z)}f1B3ie>k-Dx(7E?vA$UvoPY6MA~7 zEJHNttSOJ%Bb%xW-0d;q&o$A@v8vylRQuoI{{cjueiEEO2YFpBbzV#2 zfQ^|_I_jy)DX9ZhDiNK78_v`!^tdwi!mYFsV0`oAEzJ#1F$~!O^3F(9&N~@i+uzXU zZM2DTV|lSq)$;!8Y{#obewsZOUEiaHlBrygGmYkU)bh=Bo-4mOn-^S;ZQYCFj6u5i z0;N`zj8UIZEZw;)d&RcT19t{1yLcsCnV0Wlv--SF*YN@OcnBd^k55)5Lme$p#^pBW z4?Zgm>abX53`Ppa{{e(TrB5kf*3Dnj3?@cpc4jUVwKm)h21h8ruRblbAFGTjnVkN7 z>gBvNFnF~aa{LFt0JGGeEa9J1^d^_j1PNxK{s3Mt;vG`Dr#z`r%_TARKP-=$OcJwqnCdGloc(5 zt2@lvw_^IZ#^~mLlFkdb|co4OB7(C zbOz+@W~FIx@UPZ}bj3?8QT_q_8{u+1av5tN`-7rLk{Kpoz7Hh>4 zG^O&_6<^5ZoeJ%4GZXrO%PJzNRDjoN_qe@VkhJSX`>xJ?Ok%Yeb(bm3du2MT5xN2v zckgQEZVJ&WS#@WFFtdGY*5&Qv-D9e`UoYq#`s=QDJuKJQ3Rtn>-sDljI0rm@M5Hv3 z4jiz^Ps4Q1904lsvJ!5teVg$3!EXa}yG5HqOo6kl#UIbb!Gq0Iuo0c96b)p4Xf^y> z6}3lQzfUnx>4HTSKqZdky--1YWNjlN-c4slds@1b3{DFRuR|H`xW|EA6R&wptIg88x% z?I|?PV_N~L*ac-S9T*nnD6}-M0l9H(A`N{O+;0vs9gzVnp9{C`gR_bYl~rTICX>=Q z%2PF$4>L3|rd=2;fZQR&GvZk7}JjSD|iuG@7 zxXy4W$R%fScB%g(BKZNS9`>aLlf|>|lE`I;^ab$7f>2wt1ah+G9Nu>HM0%B;U0%{G zLE7$ayN^9X{qg7K;)bf~7DRIQu|V?T3XKR!pw?(NwcP2`<>?X8npXU(>*^^9TCflU zV-wxCfy%euGxLN{(UyhH27#wGS76;ne5;enkJs*Vcd$liS9sx;&}F{ z<%1&hNNe-c22qo4=mYsotDw?(xqfBIP|hHx@!OAuRZx16AYXGNlCv$`)gHIIIqAWT zUhsnd-CV(WDS=A2Br%W|a+`?qZjXkADroq-kXxWG=n(fYhvRv z(CLf8_hCYjlIs;7l2^um0NeE!$=MQ#c}B(tyF!9dLoT3(zN9tn7_K#f@^Ag?PHmfw zH-s!|g~OAlG1ucJg}a}rbo68M(h#B7Ik{JK%Gt<)j^vDpl16V^#)GLZcnN}+%G>zz zR3vEw>4fe)xps}1SJ&M}$?9o(73pGR_e9Px zrCL&yKJHf7wb_gBay9HBNody}mzS_$-2!_@A1{Fz*!GX$D3??R(u0>^&qjNFH6CVW!4M4? zWN^s=zK)2=GEDBMh~(|ej77-@*kJu;6?uFFDuXkr-B|jX z>->nsH@~_jEZ@U2;gzQil)VP7iLBNjmL8#9I#J9LPse|>=vGz^z3F;A4R)gL5#~Q2 z>X2YW4iZ6DZY3V!ueW)#+)HEk9G>m0@IYTA=RGu5pYTxPIKO>b|qRQuH^xhni4R)3u9?0(pjFrzmWuf?D@F{FXJ$^G6RH*QFnMW1lv&x*!)KTgFyoPKhCVJi=IAsu?$uQoctSMjs$ zF%b^Q1Wf^dIE&-bzD0!(=o;8k`E9yy=5~pP*6tuAcrzql2w_4#kydq-b={vETd&N} zZSt5->uhpP=fcXvAB8QCHd}%40!@$|Mg{~B=Ez>Z{-fa&m!I=Az)H4mdqT?a9EXqt z385YEs*=jed2~_WS1X~auFFezGgZLwPsCNQP*S`h>JheJT4eYG#sq zYQDYfsRvBuRAtFW3S(yv4$7eWD|N|3HLb_pWuuaed{1x+m+g6tmgb_v6&wu5>^3K7 zuZmf=Yo?LHl9QJT6dx}?<;7HKR7V_KHC5fHqyq&!9gvn?Ypu!igLjlu^cjkEQR`An z44<6$9|((Ay!(i2?VK($;YALXcpBN}1&m;6kn=!q)D7ZiMhND1Yx>!xV*7_VQNdLw z`5}ykz7VHkDgk`8nj*vZ6$KyhdkOJ}A8Zza(w;;3$kt|C{|AzLXQ_f%a+-YGKQW)4%3K~jmQ!{kX&KqFRh zbMeY`C_8K2HwD(fMO7Hbz;SF^wz!uysgk3p&^P`JA`b{EPV``2)WfBE%3kJz^rgb0 zrWL;SC#>t9ur2>>@T?;brhj&j03{g5fBe+5Yw3Seg5IgCujaFh?b4cVq*#$88=@a> z$u(F~!k>jdzqjJH=A!=kH_Bjg2&7z+Iu7cIZ{j{vKFU{ga}p^up9GC55WL7AOlT}t z)N`sXy*dT*tWI|Om%{ei1ie@q8Ii$@vM={nm8y?L3^V!Iy9rfoMjp=e;v{c+xEFfx zD1kd@@O&XJhvr2Qsj-GL(hOZ;g7^4$`MQFKvBX8zbtXiEzBaxt+ELwh3rvKH2mHLp zrY|tVFzWl$n-GuAEF@x}t(kPZWNm!E3M^N;5^wqbSk;%$w!&Tly}uw^3JMqoX@m=a z+-pX~Se+M^(pv&IVe=6PJxy@pQgx|OF>^^{RZIM0P~44mL*$2v8-n76X!_i|axx`O z+k!fr7%!iU_8PAjd&w_qFf2Jd+v>^19ziqRTz^aevme%PWj;=f+yx%TBQAk$VLK~} zK2D$9NsjC$!g{x&=kX3wJlFr>{#p$w&+Ox`9_8PC=V^g-VT3tr$)~*#2;@M$dyzb3 zk)I?-AyZBD@%@Lw07Ae{$XYhq0(s84bbx;&ZvJ9e>R9KCL?&+)V|x{Bm%^;in7d!8 z*uWB;e_`X$!_%o2lg^-U$iaQFC{$_UKK=`N%PCujNi+W(de#`$C9u(0!=hqT(fg3j zJ#QR6U5^n>liv#R-lqg%xEbyGh5=6Tw^NE-Z}ATyo3zFvnxd~xEj~&y>U%aJnsOVR z6Uv!iz0D-$S1l;W#?q1nV71=+*|TZ9NT#IMuWaJ>dwbxxrMN#WZNh9|uWT#uZrJ-+ znewiMTk?B8tlD|vP6#a|Uvn9e1a)x{6q&8al*;%JkBy?(lOcHBJ}cg_Bl;y|alu#( zVuAnoAS^2S2leMWr%lO+Hv**+nZ+J5C`a5m-Dv}B=R8@Wm?T-pApUAB9an>CTKIHow=dtP)rLJhkx8FR8*!A#lq zYx z|L^$AU-%66KU78G-yB_=S-=jkvJM?oAj6cf6igfio^m|z^ADNj`7FS7EPK({PmgV!vz_T&yEI zRfQ4vdvGPcF8Sn?z)U;n-Nb2=fKx#gc+|n};~?e8n;cu(jZaO!cp}@bc$`Wo$qsJ{ zSn&rX9mU#Tjf&=7rDjb5r7z5?{4%2soKCfY=XB9V7h&rtj68{ckl$+HS!wQqg9SSY zV(`70mBKs|`?}>>_tZ&~G7&8X^KO)+KMM5zS>ou9hHli=rL&vAVDKoIB=jJ)9z}o7!_M%ju zcRip>tqMa_&{M7~eLFLPtW7w16PXO-BHHIR|vrv|x-B4x4BMZh9GJGYXcR+%>!1~ z%@Y|Mb_VB&2VxO+J=W6>Yo^6UyBfc(7V$$nuM}lk%oBt{hve}uCvV0cnxC3)i>qK~ zN^|R|^EPbG#VmbZT7Y^o%Fb`L2=RjyoDCaJmJUp=`yfRJzfYk=W%bDdMX&@pmWfHZ zq=Op#?|!yAws`SvKr@jZs?y|TFRE?*n!p>1{2iL#$A_6GMDd%h%?iMz*$jDvkQbfM%dA!&kRg|B-ni_rH0p9_v3PS^@ARvU4XI z^ZJOI9CXZ?QvwfHPT{wZy1vem2RyY%InL7qOdUg`-!J>C8SeVEo3FuU!#x|Cyuh+5 z=zu#kcO(kPgk0+JCM|)stblgi(o&xcGFAKbDjk2^l#!vbFn(n>B5ZZ>2N1Y;FLY%( zC`BsdO7ZrjaZ}dFhY|qM>T7L}*h)=D!{21p+g(mt?Q}@v!8!DqV!3+ROp^;s^5W}K zAPtyXZY*{9-=e!}6Q^_ZW-7H~XTtB#Yvjyg1c#|r)Vc|bvyvfVnF5~FTW&h-EjZg( z;njs;OXk?$sdJYXWXe$)n)38J4$&xF+WO*d{c6?;yIDQehQH(2RW23jY~jKq!f z%PL`B;wBWkoFAcy3db(8Oh?BD!$-BHVK(%3Q>j`DA&N31c{`Xo=nQ_%c#*2(HWFN* z`mzj)vc!Ux;P9&Gm(wx3Dpa54Xs(^ z0K+qWP@Q~no#XXY&EyHFnLDyGIkx~Qy`Jb6k+SUmO)9{UZ;>r5z|gm@t>?pu?{rAN z4B7>PtkK9=X&P!n@y{w1@3vUFC&c!jWM3QfHSh+Dc>Dnn8!khJNW)W1rVdQT6>CQC z-8FBZ_skAMI9H)m@QxIdpy{b4{4&W^-K&VS+sdE@cg1GjVwgUfjkcZ7>$0>Z@)kCeo{$7L^mirD^YDiK{YN zL)3Xv7A!*<=~K}(A;2Yt(*SvP@&unoiZbo>6QlA&VP;FJb;psOtNmt%$(#Etw0#m? zd9!-qa%q{MLfk-m2^<{8Tqp2=R4+c zMLt7r$eLKF#Yp0DSlFw!ZqOwrtctmxDrnO#6O}#378A6?f#=(E0>1Vw^}3N*5Ly4V zjPmb^^47D~A~#%w<*GPohsk(HC`5*8D@;zXR-XLTJeII9@Wg}x#K1KQlobkm>FD0! z#GSZ&z0LiTibLuAOWRvrfG))rbq~cZC3EDA53#NH3Oyz-^?gWkWCC9z^aMk05gQJ3 zwp>cz<&SFW^j^$b21q;sdlTG9y^PWOt#ZDDc+|I^V8+rpC08`YyD&h~3Lvb-PF_D% zHw>Ao1yRm!l<)s~T zhP|4}OW3`hHX6gIFZE5GQ$x9ExJJ$BGrboa)PQ?@I!s^i(7k=Eu?cv)ZZw#pxKn+1 z*=}Nzd)h7Uf+UF@aZpIK15XM=(Rm9v{5xBSbYDNG&AcJNfY#2(wTOWhUA%lmW&joq zK>VsI|8=NTGOeRTr~2BFFv8F;{CD;19gMI(rqsKBWVi=-6&u1o`+f(M+Z2&g@LS#t z93QXdYcvzy|C6A5S;cBYz?;y@>q#}nn9AH9x=j@@dd`*~)4D|Ku4}y(ewY~${}oQl z{Q&EyBEyd<$Azhu=_csFO}m@Iz|{rx*0X2q7doRuhsHy{iUyHW{hC*9OK*)=jE%Xd z7LwzW6GimKlOv*GO&nVaS#tL}dD&>kw!7kGLXOgA(8mHM4(IaEPYLZ}`>>NQ^WPu? z4vQ`6BZ{*Z7k0+c?P4_sdsx;MHPr?1*@{D`c!1#V6G37)U%xMLJbY_N`BuD(`z_KBS1 z>8`zd6kt6HOW?%PkNGFsp$Hb+DGJFecUb{L_-5q~c@CH<12>p?-K0tbxhre8uGK{vptrXj@O7YmEpRWi!BLwHlOTHs2p@Sgr19opBlY*)vP z{WS($iclb9FHZ+oq((22GU%cKmy< zIhcKTb=y}Wcx#u<9h78^yi0|yPalg!8#J7=eCrYikS6mO^WzXN&Bny1RqKc|N8eS(X z(sM17y(7V>4ri?9esw;6Kl@9!ltG#;CSiQ+W$~*vEHtw%A=npfls#m&3VobG1WK+> zcsiaN*?I5!;5l9r)B6CO5f*BHKb`*NXZw6uI4PGrebt=J2A3@(?-o4N)?|?j6V6dz zMALsBJen8Nds|9p*KO+}&(s|-Vy>=xW&gVP2O2JgVhIm8Pjn8y&Bgr7;O{TH$$WHs z(thI{u>JskZtPiI3I@uOS1%Hd@*l`^ISGfFSS4uNFMNM0qCx(g1-c}`TlbTgxPv*& z@s3=AI&e+4d<-b=@)-$AH)@(3ihciUPWq`zW#3C5(FT$h(_IOhn?Z`{vn@;p3yQ>emp!Qp) zsP0%i{7%#AbxV4_*XpysO?bKv6g9xE_fwNuauj*rZ6rNe{cKJY_5|Q3V~<5HyQ(;S zY*w0kuz~(PJ>>y{=I0iUR_(Qr2+YTHN>*x%s0#)iT~<`)*e&1Ge(tjYEU%@hgt`e# zWn|6oBwO4b95!(c3Z8S)+0Ap##IT+K`$+joqWw=Us78c`CJ`9~T`T2zJV9rroF67^ zxYcFHOE&!E%!4ne=?pRiv_D^$kO$HUzBYc!I6k5sdaJ>en|U`@ z6UHm}+4LUuC%${#GSYp*3xOiJjC)si@O2_gwwcCmmbZt~0NqwQ0HmXgTfe zz+nW zRlgw}KO^95Q_5SI9RP!&?vB-xps!L6EE!4P*VA6*$jykbNC8Pj`c}MXJYG-39n)w| zx{`ATwQ0079Xug9;zd#$%86vIHpe8JwPK+@wi2du6cBxRM~pps*TT!=+l)ahB++=D z`Iw?3pR-rQq22i7UEm)I$oa14KQac@?**u?Gro!D}g#PX)( ztBQ5{4jW;(GujN~Vv0QK&=x{AAqHtYE9A*T)JCUXJ*-G2mf9tFPe0z0xOb<+QB<{G zJ$)*c%$Ak(?B58%{;O~;-hV0T)GblKvgMJ^L3XPIR&NugmTj}S_j?|Oh{bpluKUIs zo0*{!VDSBCC}UnC7^b>&XPiSG+uAfs{o?sf(DAU{L_RNJX#1bs{13I zn{jMI8ikya8OFDigBK4uM{ev;_XgSm`@6+3sn`Y@pQ@|1*ZAaXj(C9wYJ2{tt<0a% zva6r=uIAGzrcW_y)}=XK_6Ec6O3E*IYai0mqtCi+ZDqMjcHAu(T{bWo8&GjSy*zrY zb3)_u1(yR%jc@n#+`oeU+jK|4H#(VU$q#o^(}%!skG}o7&wVVnKtdtKoa(L7@|QqEe|C(93*JuZ6(NB(I(7x(ZbTzkzLMaJpvT=iQ0s8W z;IMh68T|{B?w(!xaSnaR8SX7VCc%VOJB3JZJu}~8{cL@}7a2e21Hh}6gIf~# z=ZgaS925;^a;70dUd}f}l$7Dc$~BxGecgyYr}oUF(c zTkOr=5_F^9DwOC(6h)C`#b>muZ-aOd4RW#f=)2d@O|kIpGD)kikKXS0ry^JNl#pB& z=ghno5O*{D@P$Za(CcE#{?xPa{e^?==Cc!tgsf)o>8do7m88)|S;(r9qI&QVxJMvPwe$Y~p3b#gZLr??fm3LG z9gR{jS7YSK_^z0zN0xXp*1-6dwrRSkI?ply_zo}RM$BxL^Gh=RQT7Q1o!>wo6|>!J z{lm-150eP6cR)He@-P@S>pAl6Ma1Nxs@E}_{lPO8nN|S9%#Ez(RDDKA3k}S9iVLGb zr#W_ZkuU{AP=^mN7o=pv=6!Tn1L-9{xUBN!6e;t@BjOY43zpymD!)!%C3U88*vCN+ zyZUyr6BAc&s_QT)f$w&`4IIU)j>1JatcuGj`m0R5_*voC4t>FIVC{7*<-hram6>6N zo;RXph2p%h0LDR$2<_uJjM+RCOjc=Z7g>-U_if!5F4MpCuJlh7ESlEeaq>nx)DV5Y zmMNt3Rp=e! zJA=F1FFYBNcTWJgHu-g3Sj4=xKVCZtua6h}z%6=Cs`WNOM3`Qs@W*rZmql1MIfO0x zPUL_|Ehz**ZCf}~jksL;q3-&!8SBJfKX|E@dzfc3f~+ zc3=%zZ)i&5TK@LLmHA`A4;N%u2KSAHFq8iT=__#jlovai z_RYj0f0~Z!m%Pd^F)Im+uFq;fsEy#y?|Jj~!)#2CLPUQPz0uO7dP8mxTPqc9yf#GV zFGC4;V?i{SY8)!y4bLAXWbza(8F%pEc;X(0zkbxi8Ue1DK!{7qj&DsO6u(wiR=;D8 zscSEaSpNe^{k52ggD7{3H#GJ6h!4Dqh}&IuR0(c=j3OA<16{4)qoxwg`jpe}Vgs^sCUF=0hNuQuSEd zu&faFe^41%`iH~gs?{;WcQ|!5ai(kW@3M*BmPT0({d-9~|7r&LAGP8ALx^iof(vb+ zjVbq{E{^{)IWWbE;FLsiJ}Gmg*P-WG1lDpYcEn#ATckjvH6pq%PZsGg5)!o9Rodz7 zJj~Z(y_z!i?{T;vh<{&;;2oBoI@Kxn8EOg%i6gHwn%bQ{1p<3m&JS$_=v-seN5$r* zA^RSQrRavvX-VQLC>_WPf9kvLTpt+tdR8=+Hs+m-rXZD#$cQ1mk+=CQ+l+VY66 zj_1OrT}mr0!3;c;r!FX0j3zCQY(vQPKqZJJ8I-w!YX~Teaah`GW0;h7QSIqZg^-t3 zJ5QQi?YYwlhcyc@&!7&dB>31x@DBhH zcdU5Oy^zQKI(4hY?d(yn{^}Tv*k_E1ZRA6ANV&9wPUmnwj~H4jF-sKr`-_^rtqEDf z8Bnd6c5f7h*O4q8ztE_E5oi&y`hf7f+LgFkEdtxx!kVl`z-y$VSqMcGa+*Pm?z7&9 z@bhv?K|oCXV#BnHiuc;9r5VnO*sdM&b+YCcR5v%9B4n&f!SQ@g^pGbFi15vh3C` zL9eICnbf#*xK2tjw~3pEymq(Q3po&w#6gScHC%g@X6Y>&rhbB0Bj$?Hm9MC8TGGokkx^U#i+o^jRX{v`)$CcbDnsiBM`r& z<5_JI8K3YK6WMab`-#au{Fj=4|99;asK`zOaiMo8*)R{q++9)J+L)J0MIg}%U)yv; za6omepI*>H8Dk{xSQ(AVs4sq2ATP} zk%>-Aq=x92te?p-o9^CX7s0-p0iNX$Y`O!g7jU6YBW-cX zZk_tg3Ty67WOs@Km{w_hzaf2cfQmReh>zsLby&Q3C)}*ff38Nf@BbTvxBBT&94sT-Aw%+YU+&;@t>>^)zFn335`h&6N z$=j44y85Bpv+SMDqXh{<*S%hI@&``{Llj(p(wj^qy@I96^O z)zzw}r)&E`CBk*HIc)MYP10yQZ_G)z@mkRbC;HIhF%}+9As$YIjIAu*(`cPAyF^lo z`-z!7OcH@H1}3>J_r@!sm@)tLW@LyrF;J|;YRrS9Wg>HwOR(cbrIYQP?tAB6uF@Wq z{L}8O>w@MITXF0)g1QMWD&yu9>uF^7l* zh)~Am^Hh@fmXmfXiTejI+{TG$@$Oz)$Mk#be<_msuY^i}HwJBzcCr1q zZj6L&nfjoyde3O?=5ellFS~_J;{Fiad3L;Jt4k+mj3000CM>S%(geeKyk3GFy*ym} za$p(pxyGAYHH@lz85`lVZ7bEbm0W4Uh&JicAM~aWXaVfFDCUH}Gp=h$N39WUG4sl% z=wcW1d`GhcUl;fGEuTS9WL^I6)Att(k~}PLBT6@9F%*dx%mkA9?dWr^H$>9je5mr*LBY>&?01r7zpansCY}pBh}YKY{(P}= z;j{LI4i%#!aGD-qxyq?`CNqt|KgvqqS+CSxC86T#rTz4YXi!#?cm2+{%NV$XaiM=u z+Jo-FFX;)iLaw@3cUSu#eOs?Z%xt|cd(^Y}xaDNFPd$)Ei08!@2AG5VFH=Fw?=n2K=+8mwRXjp7HwY{ta>2D-c`ClK;gN@6-y z^%IZ_*Mw0O+QAe;TKjvt5FmrFxK(%MD#4?UgaP+e0+}Tx-?>kH4ji2&ot9s?Wt6dm zDUKJv@e`rnOAuuceZwts!sj!c+p;F^JHJ`m?Dn2=UlT8`L1#E{BUVT5dAC!$f^SPK zo87^M3+9z1ogs<%{aD;vPubp5%h|{>8)id*2bUyIG8Vi?R9ep;MN-3L#^wEu>!5EMMiQCr7zok?1QuI9$;>nCaRCc2(EY595n?Fnmt)$|l& zrjudnS9VRcnBo?$8bB;nt82nN@~>sGj;^N=pNf9Awk0~4zU47YwK;DI(8oe<`F|`= zSY2G*)U&Lsy=KQ<6e*+Y9qsaaqq$J!`Fb(1=F%%;dSRZY=4|Qe`kJ1+nIHL;rWJWJ zyAbD=WFciWO%hyFvtSfZV#*U9v z(OJQ+IR^U07>3j%slhYBPH@ik5k&jrs}?5ug;!S2H{L2IoCgM1dv~(4j@q(8N7Gur z92eA{e|d5|Oa0ZxzL)vUocvmJD$R6Job{}^jE+1e%B!yWzbLMb^-m#(|2g9loEJse z))IKfImJ4CBbDP>bhT%hj46Rs`{qtRz%Wa$uod74SI+XCKM@BnUv!junF?m-ggt^C ze6amL+I!Earn-0CJA#Tz69nl+ib(Guy-5=x0@6!BKtKef*AM}v7XbmK_YM&V3B4CV ziquG`3B89NswdAG?|<+8?lI1neV%83IAecEMv}3z=FG}kbIp0*zw5e(#3;ms_9glllsKYpgs|mXl#^_AdrCo{?60%W>H~eOu}EK9mH@8cA%9h>JLn>u z^J3}Pvm_mSnj@(38!unkPu~wb12I)}cK{^Zgs2)joH!Qa?ANR%kkoip^=bDHK>mH+ z+ItVy7>)as?GJj%q%bY=Q4h0`$G>IcNwFgxy?q1vOou-p$m@nlm1{fYw@l$G@ zUspWb!Y^1qy$T0@hd0)@BH&TH=|f?Dy402+K4r$F<%GE ze4zG=UpwxTwQI52LxI=u$VbY30QdyJcG1JsQ@@_EawNE!CZHVRGVdTEx+xRN5Dt$m zI0cK!#e zNP_={*W~|lV)*CozW>bC^Iz;Q;lIna{`-I`$qrM$iEKv{~WIWIlH3%E7u7t#|Mqx0Okppt|H67$m;*%`0@{}VE(qT z>Oc37@L!bQ-}!s12zww8E*~tmZ&be3Jo$pR8}V%mkdjZQ*}XC&oNv4`MKKHs91O2| z!=rp{V^`D<=Edz;8{4qSjG;4?fub0e=|eLiICRnZIXUI;1`eu(XRXDVJ+xP}4>l}M z)IW4iC7loH7@S?6s1Li5*~N5qfb~*kF57nIrt!0Ol!ti>zbl%UWBm1w*rJy3x!^3Q z&&vU)ev;kvkrNs#wl9q(9jcSUG=w^#?Gfz!6UUCTroFc7r!O zE9Lszxf>e7j8pFw4#%DpQV)LZkCu51s&Edwbc^@j=EW-sf<{i$@V+pJc<~>B@=eH} zaZ+D&K|be3H1sW>`|5Z4#51c^Y!hgDWC(u+|Ho*X`bNOiv`qfMN7Kg~g!9}}=P zpn&E=*NhQq3fz?TVk$E;#vWaxjO6_5zu$`sT#vePz15v+m=DY|uYtscNuT zLo4A{6#_$<>#l5jw6t`5>fl)% zk+R=e#E>8Cz)PB}!W?FV125<}?H$NHpPng>cx9Vkj_BEQs$GFE$oxKU^jn0-40*8i z&>!Q=?p8r{*iILT)&CzMFUfqGF@n0%9?z>{bBmMx;JbnUVt|TI+Gt=R=D(qn- zL$K1#f()yy+Zwd;sf&A`P>|q26>ure|J=c|>32w`RHX0JOZ7d%YCd0Dz+wMcL_4if z`&cotPH~&QWfPNOTCKj9AmENIn!k?9NS)F4Gh1%jcoOvndsD;=-5 zy{GTpI2U61P?&<^DfF(wz>b|cPc5%Y{L0-=JlS@Jx34IjuTBty$bIU)UM)FGC(vC- zf9K((`${CKdKzzBKfBBab|f{)wMidd5n@<+@#&qpw<-RX@daXOa$RQTE{;@psXi-S zowDOoxjVjG9r0(h@~n{GZ$MXfw`y-ihUV(&6+XnIz`VL zzAppfhPR!>FaUE=xGSeTY_anh!c6n#?Wb zX}-^0;-~BdEZ^)joj(94 zTH1EPD(LnV*a{UM?Fk{b)bh$P8FA%|_wsW)2dEUD_xkq0T)hWdizdzGW)NCi59kQ>JCfWi^M8Z zk{f|*lc_2YWR?+cO4MLAdkIXf`&Ghdvv>avYfPdODo_Di+ZDOE)kX{~8LD)U9KXt& zBWdH)4WZMMR7n&O(ZIVY5$L%0tiaYg1w4GbA!M-%D?U^6-fbS{%uagE%cUJAQi9R1 zCdXC{M`8-xw{*V;=IqEmK-II5Zh`Iv znn22N*_h!R`w5pS3;vyj9R^l7sGg>ua3bbGuPFW(P4_KQ`%gY1KG5Hw<=rYw&MMcM zYfHdbiPBlGcY0B-mCV}iri)K#fuy$1BK!HyRm*g7z<^L_T#B@ zudrS&;oS6lrs{H<9RQmw>7}ScuEbu-(w(;^>d8Cht45|E_2uisiQ=q*0>=xUz_Fx6 z985=GXdVR>YgLB_nleBBwZk6>MhEmG96pLqrhZ+puZMH3@w3d$=3H&tl4Pu?`Ugc; znD~Zj)J`3(E;xfJpMN~Q(fi)*SKLQ$u^(b`@-s^DU2c8pw3VN7)TFL{0r?05F6)*T zYL8A?u)*@*q()8*j)%&!PgIDmU7Ws^OmxB#p{A$!XhsrV^Y5qM(+3-GTrXsB-b`=H zlWUl>(c4un3(>?oG|!HO(B9Vn?03_^X^YqS`M?se1t>DVDT$|g84`M@=xEtlPoSg< z#FsXUy`qXSWWY(m1Bd_!9Rb8KqDe+?i9cwW(uMiYJ2gF@aMn-%9}yiXRq)Bpmu(o9VUjp|zjSyWpo|2wV8sx?gMcQuc%OYErHxpU|brcQ@Kw zLd30)iFR!-L|ERYzra@*f>5JkMbUy`kFZm*qb{qeO7VLnu?@$lD)8nRFrI}hwci#< zzd?Mk7;?CC)OS9J_gL;wKVj(;jAXy&@`*$sGl$)5Gd-78%fFR|CX9s-l^zViD6 z@Nu~u>RSN@oV^Pi*_&;6P&zb|%pJJt{Bx~g*c>N_9tjuM*lQKU)zuAIWVj&6c1twZ z(LS26fNk0(>JxrH@{d7xaO9ouQbD%TnFow#r@o)Vwvu)3d;D5rpK9@Mb(QW@hUMi- z^7_<(INJgV+V@&#>amGo z2^cmqnDWzhg(l(6qu~IfF-ZvtqfexB%^qKejr?z;z-mf8rch@WYfw z!z+{3ij=&pWEw#Qxdt!irs<|D6j${jKQ!Xq^@G5d`)s&M%NdP*8P3VNMK#~<$iyGs zVRGi78z0^izG-3agiwo(FyPX*)Ub13PEDN)9xdp0Xf${F#yfrRV*szNm-8 zn<6^AD7EP}t8%|w6GgEiLZ&!FP~u_Y>m>vw=QnyhjQVs-8HUNT`Yq2LDl#hrrhO1* zOs_=FCsrq=BbE9GW*awmC-zxJrf@HCo)5KD((lLt1zPnOf>o|e5jWAT>ff?VvYt!hZnx3V0Dj*ZKI1V;yL@&mh`cwQlnU zko=TWbNju<((m!DtT?X3%;(;?M34vYNLrW{=%|-$Hj|9l@l1Pi#ir8r~X)G76EOx&~>-t)a7HF3GXyOx`T?&wlx) z$!tWs1Q*sP>qwNz-=TYVY(?ggLBAJ7`ZhIfA@vHHm0J4n*vl&O_x7jqz`KRZXEln)LCKGI8xgZH~Ek?C^MR1?~R! z%Zj#ibPA=jfQ7|GO4UV`^O&WRg)GaW)gxK!>~pd?$n)^7MLZL);+ydYFd@Klm2Y{a z>Y*jt@;q58=*htz9Cc0fLZn>37?_Sum6+L_LmbNcAzRrlc_-`mfp}9|%A;IskK*T} zswY3alMA9@3C(W@zikTn(XwV_sACDJbTQGf)LijhqL$p_&!(42JC&Q_+)i%;Wvwzo z@yExj_&3N|5Y&zam z9@vz9;WUvLSXt+QGA*i@JAQsuSF`O4*}j(az5UXkVGDY7$0#dMZeRW5HCR?>`p{?Ax$7lU1EP7lB#e{; zor`lTvucTj{orI(m7q`nk#p$bbi#4@9{`oC0;Y`~9NKYi4tg^xuxujEupq2*=hxc6 zvtf*mXok(x5jv<|bxqy)yUL?2+HS*>>I&VQ^^y-f!AAt;Sz_3@yYu>v=bYfn8HoEK zXQ!8Nlp)M2duU+Bj{~v0^UEdQLp&?n!_S$}LhGi^#=Q)&m@*ATzm<4`=BJJdbj^N; zTSlWeQ7y=s4@}-}Nl>>@F-T9Hjzn&(cJ+vxvGxcfh&dH+K3{&Pg=|JC<||1@V%WuvuknOW|eWQJ{lxmV7I z@W*VUpE;it2&CV6tpiwN^%xf)M-H=hOJ3i_L6@{H+DM&DlZ&bv9YUPtdv@96pWOlp zetyayC;DrRYN;hGB{mDq64fj$Q8mvJZCnf1)x16G!Y&CY>Ax*BQ_q;iBe4(pIJLXm zzGVn{`&~T|!vgDBRZfU$lHMKo#H86PgZ$C<` zz_#p}pg~|iNwe@-louDR=?peL{7p43tkELnlYDN0#ZW16Xt~2rswpje!8E~!2Nm5r zfTS-^d(@gEPk{%9cnt@6y|?xmq~i}juy60&s3S`p`v(y3sZqB;uEQDjA}luQtXhb} zIpGz2yjPK{h}0~+XP&A)?O=Yvv?j$u%49deSQR z9=!U5h*OG1XenXH-q^Rc6IG0As})b@9r+%DWY+F>_u~;wdORhg*s&FLW)BSQZslu= zBNbGdI9h{Y?Rvk|TAIn#h@)TKpqPnkCeRordrDVQ1uJKALVGQQH}fw#?Z{Zd$95=p zjlN%Se^nCGmTMe%f6%mJ-%jM?(G=*NqsNuUWKh3-5c3_QfEb7HH7|h->WIpBH=*BXw6rg0;KD5@+e~HCY?+L&3Or z_>9v7oQOA;Jai9cTq({Z9e}<{`P?$utkgj<1D79NP85l0@|cZDTWdp;z*D=7Oyj)T z54MD6Rk==XDnD6?yR9!Zjtu`4j54#5X|AYpx@joQyAz&6e!F*=VIS8EQUscfAH~yc%#)5=Bid3{sT&(I_j2KQ_m{7M zOF@CXcfU!HP-YALSoVEfp10}KN`W0N1m~JN(pP?-Fr=;Y1=mJwhBu8Q^PLpd1k;@`ex~HVY2k|imvS3U)zfGqEvrsd4 zvFW_2y7#r`2finpw7VX`!C64+gX<`-A#Yc5Ggb7Q;ixB&*wXP(%fp^ScaI&^5H#Ik}g}r{V7P~AE-SXwhYxgpD^_Nl`nu1ZXqBoWOjsu=z z>{En>+-UW%1a{^ry)Oytz04Ugt&pieJQTpBg6?g~^L1JL?WpB*@*B3L!guX8l-FCy zCO9}aC}a}nyL?n-)OAfZA^rz|Q_0__2^R?JMx9jqc)0q!yLcVSF5xJun~&^{RrDbGxgmH2$jBo`;43Mj5T` z?yq)|967AQSOct_EXnraN%*sv-d6_|U`9Nr^#TPKRi*y90Y9nk;+d)aPSKbQaN*G) zVp6r&ZVFgHwp@e4auuSr+b%$dm!5Jm*AI(7-2N!5DNyx!W5Ll$l%tfxPJlw|>l~9x zzO&x@cKaAFy3}qf-gz-*vmb>uOFSn%UWfP<+L`>hveQTGIlDW79S-aGYOiZ8M} zRI|d5UPZw~QLiUXEauhyL{Np_Vl+7lXFMW>d$kD1S#Lu@xa@*0)LyWc1y`4e(j}gYnwy-P6qTu1B^hZ#0Di9}l1d7bYPkUJ`eM7rx=IJK3 zD{~ub>q4+vHu&1b-f`~A9%b9t ziXDl-WW{04wcvIxd@NnLdP1JIAEQ9)kVT!Xirr~VzbkEvbfc+nj>V1@O+O}%z$r+W zFWoanHsRnG-BXsd&CS@bjK;Vcil7l!zG(W?*EjeE2ZTPPu)iM`x-&%0myA4y9-pm0 zu{_7qD9reRyAPqB>8_N07%=(vd1|=fud{~;f)xSM{b_>oFUl35Fp_36HGd;j^aA5s zL=ameHaiODR%;>N%aii4^-L#=W>t zx(r9fAP}b#V@%4s^R}r!uexJbSnuM8@t5~SC$bf>lc|x%3laLhOJ-vnzbg4*)x}CT z4^%nE`Z@9(ZRPca?iDKIt;EgAK4{@Jw_=wNbaLm#AAkkqC+M)c6g?8@O@D-UUaSA! zFt#HrflH`L$osZ*Kk^&u;maSwzZesRe2013f&;;oxZzbPkOmw!ZXddHZ=;0cRG9a^ zwaL!p4YdR^beL6rhg4a9M`OzozNqt#%Y8Eyj8!%2x$*t>-vzfK^o(!4SG#j_DUSCe z4zg(RrmuURrWMb|>j{!Ttc-!qC9`T+o0rL>?B;ijYh$3_8eiPkk&a0vmW0}!PA}|J zF9;4@`!hrL+550~8&Zy`!f_X`$ADxFb`RPPLXko06wb3ogk^hL!_o*{*CL2?78hb6 zzosjcU(@6KppB=nmc8tIO6*FXf zVkBFwll3cHaI(CGJaU#0ls-5GHiS^k(s(958_4HVq~j`OH8fz*^`4#P%yqz(YlO&A zy%i-kiw$@?^UO!sk0i+YrD7jpL;Ix$^}xcV&UocDyJI$4MP=GR1gIc6oV;XY7S{a%KyeV< zV=?HD^!WwkrQ{`H>prNPg~3-(HF2#oW!%)KzsdFZ>|meP$>ZYMX_HDbHS+1q>v8p3t2mbXcOilP~B-lpBIh6ZYk)e)~t zILNag5`AeKvlU)u3oqwzV4fU?D4wOqU@Ep6vm-gj>zq8XsV5n1UWfzwO=`&$_a~GC zxvekNG!AB~7Nz5o(`GMfD_jB~fj3?z$hRB-B)Jsb7OVFl+Z#u@SIIP(% z4=15Tlj$WF5|D#4)0YwRMyEQ?t^OzsI#`0raff5FvWdEXLc>jC5!25k@-Q;JNvG}- zBf|N-uv?D^C43k^$?*wkIuv^GgQ+8|UdMIy|2Fk#lLhiA68(4?L~g^nwPHX$uJ$Y9|p z0K71@nqq{%h>M`7nfTBGFrqq8fx9B4u`c&7@8>-KL7d2b1B`i5hakLTKh6&gwzMEOn`};RvI?^^ev@o{D8Ki0KcB~*y_Cr>htJ=D zno(56?Vh<=<4>wGIwlP}JL}I%jQ7=5^j`k@H_IOCVc*nlZS;)s<7lmx$)biY%Acp7 zaRh$WS$kvmOexOf>%Ap*TvM)geo-!2cHrqqiToF_QA#j$Cqh!pmgb<{;Oyrfil)^! zmr%|$>hMYwV-yAz<5#zwKxsdeWA=u(M&a%(Bfi+&fT!p&xPRf%co*Z*{BZcSI-habt7HtqWO=t1gXoTa*-pPhu4L zSuwq`&t}Y_N~u|wrFhE6Om5{4Ss2Lyi1N|h6cI-rvmarnMqp(GGn#vhxK z=h*=578bAYAy8r&G}LF+8wAM6#EDwAsKV;yw(*2N>wg#FukcUvh0vHF&Mi}xkC!Hx zSYVg@lWY|vr*YbrR&&jTYEjWME7k~+jN5d2vxgbhe$d*|LW-}VPdNQ4rC6RDPOUp` z*q}!k=hxG!D)FLQOrBQpX4`LXNqQ2JvAz}a{u_?Z9+44O4*&A;=okTDdMh!7*jag@ zy8XIAc;j#b+CrR7lVUK*9GvnjbvHDGgUjtHVWL0%g=4-t&v0&3Moi4&g(V1<+Xt|KEzDq`(_!Ij$aNnUqsg6Bics(Iet$hfAc!r}hsuKQ;@9 zc#Kv^6MotLrg&GV^%r2W@s+UC!5ceTeYc={9A$me1JO_Bi77`q;Di}s!1 z!C=KVn{NGmEe7gCLu(LxzG)2_@JL-Nu%C^*_%rW1&{-rst&-HL#$b|ObBBt=w6oGAM_ zG|Jd#l~7G;ROFRLI7k^jG17t)EwIF;4Q$S$>^MIv&%65}UzC|jbO2m#t|6e*yW*Cc zV^b%BYzI{JF(UHQRMNY#q4`$JcE$wcuWv9;WuVN)v7Ef1HC#52?@|W~byzhR!+{tV zcNFw8W2x1kU)kl~UTiQ5;g4pXh}2k+((_2f+eB&Y^IA+Dw^+;GEp<3Auw;&VS};-d zj?YCPXttXdoJJI@VcfQspH#o(K$sX5mscC}uJQ_E@!SP}13(^+|2P0fOQiZQbT<7K zGvi)KSu~L~+#vSrQ0)eW-e(9lAYx~$q~iZcBKUWI{vT>B z{4*e2mCeh2M5tKw$=I<41X$Ce-ISBH`DBIR1MinNq(4~Wq^h!7DR8AuoNKYy9G!?X z&b+IXcEm{z2-Z6D4l|T4W4=TL$Vl!b7fY{piydhS9$|~Z>G#SDHaCs#RLS!Dm2E(# zrEkUd19yBYDl0F4oIcA_5CqS_B|f`lh0+nUkXfiL^<;@oRyG5dc-x3)92$eZ$w8;9 z68kwNh0l_-S>51@EX1J)F_3v1B zbxLL`w-G2Z#eWOg!<8=h_uFfY@G(tm8>7cXiR{zKA zSH`wv$H=$mnJLkQmQM6ZXWl77{jx(LzvIOD`UsQS*Lhc&h`O1naFr0~*7;QRt^9=z z8pDU)6hes@B+$y#adqbNo50(@8}8%?7_Z%*nVM@GIluU+>9}}WyZiGq50EtQIo2oIH7q^PQf9VU!7-K-k+v`t`t*=p zl#R&z)EqgI^$_VIPEL;t(9gE4MvBD~InpGVTNs=Er0;Us=i$oIlDB)`6!ZLsMe)kf zMl;dU0txQ0cW6ml#QPaRFH)pv2)p3qsH*AM^cfBfhqLBlY+4F7lys)J?L2c27;d!$6 zTB=gQv$>4Q8hnS&1)E)Qu-stkt> z;|nTAmX;71q>nYkzRY-L)70~)o0Av)PpSy_syLB?fcs8MU@g7xan({ugA_wwsnfkvl!L7)Vs`j5?yv-M>iUd zEA5Cq{A7aogTmgYdtWyS9?G#rJ*gNX_;1jQ{M82eKg~#2fpoFzA;$r$lj6>Vz?Nok zQ*qW5H>ZpuajG5PdjMe;Z%N(_Z1wpR3 zjBHbF{f?mfQ!9vUlTkis0qo^x*wp?H8`bsldd4T)(ni{<0P7)iJgK>=*n*WlB!Rqm+NzFt=gsQajPAs49YZ>9w-Bx*rr_Y*L4Ed)%O+t0%iB^j1{)IJwHvQM z*9G*GjKg%x=1 + +![duplicati Screenshot](../images/duplicati.jpg) + + +[Duplicati](https://www.duplicati.com/) is a free and open-source backup software to store encrypted backups online For Windows, macOS and Linux (our favorite, yay!). + +Similar to the other backup options in the Cookbook, we can use Duplicati to backup all our data-at-rest to a wide variety of locations, including, but not limited to: + +- Generic endpoints (FTP, SSH, or WebDAV servers) +- Cloud storage providers (Amazon S3, BackBlaze B2, etc) +- Cloud services (OneDrive, Google Drive, etc) + +!!! note + Since Duplicati itself offers no user authentication, this design secures Duplicati behind [Traefik Forward Auth](/ha-docker-swarm/traefik-forward-auth), so that in order to gain access to the Duplicati UI at all, authentication through the mechanism configured in traefik-forward-auth (_to GitHub, GitLab, Google, etc_) must have already occurred. + +## Ingredients + +!!! summary "Ingredients" + * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) + * [X] [Traefik](/ha-docker-swarm/traefik_public) and [Traefik-Forward-Auth](/ha-docker-swarm/traefik-forward-auth) configured per design + * [X] Credentials for one of the Duplicati's supported upload destinations + +## Preparation + +### Setup data locations + +We'll need a folder to store a docker-compose configuration file and an associated environment file. If you're following my filesystem layout, create `/var/data/config/duplicati` (*for the config*), and `/var/data/duplicati` (*for the metadata*) as follows: + +``` +mkdir /var/data/config/duplicati +mkdir /var/data/duplicati +cd /var/data/config/duplicati +``` + +### Prepare environment + +1. Generate a random passphrase to use to encrypt your data. **Save this somewhere safe**, without it you won't be able to restore! +2. Seriously, **save**. **it**. **somewhere**. **safe**. +3. Create `duplicati.env`, and populate with the following variables (_replace "Europe/London" with your appropriate time zone from [this list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)_) +``` +PUID=0 +PGID=0 +TZ=Europe/London +CLI_ARGS= #optional +``` + +!!! question "Excuse me! Why are we running Duplicati as root?" + That's a great question! We're running Duplicati as the `root` user of the host system because we need Duplicati to be able to read files of all the other services no matter which user that service is running as. After all, Duplicati can't backup your exciting stuff if it can't read the files. + + +### Setup Docker Swarm + +Create a docker swarm config file in docker-compose syntax (v3), something like this: + +!!! tip + I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 + +``` +version: "3" +services: + duplicati: + image: linuxserver/duplicati + env_file: /var/data/config/duplicati/duplicati.env + deploy: + replicas: 1 + labels: + - traefik.enable=true + - traefik.frontend.rule=Host:duplicati.example.com + - traefik.port=8200 + - traefik.frontend.auth.forward.address=http://traefik-forward-auth:4181 + - traefik.frontend.auth.forward.authResponseHeaders=X-Forwarded-User + - traefik.frontend.auth.forward.trustForwardHeader=true + - traefik.docker.network=traefik_public + volumes: + - /var/data/config/duplicati:/config + - /var/data:/source + ports: + - 8200:8200 + networks: + - traefik_public + - internal + +networks: + traefik_public: + external: true + internal: + driver: overlay + ipam: + config: + - subnet: 172.16.55.0/24 +``` + +!!! note + Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. + +## Serving + +### Launch Duplicati stack + +Launch the Duplicati stack by running ```docker stack deploy duplicati -c ``` + +### Create (and verify!) Your First Backup +Once we authenticate through the traefik-forward-auth provider, we can start configuring your backup jobs via the Duplicati UI. All backup and restore job configuration is done through the UI. Be sure to read through the documentation on [Creating a new backup job](https://duplicati.readthedocs.io/en/latest/03-using-the-graphical-user-interface/#creating-a-new-backup-job) and [Restoring files from a backup](https://duplicati.readthedocs.io/en/latest/03-using-the-graphical-user-interface/#restoring-files-from-a-backup) for information on how to configure those jobs. + +!!! warning + An untested backup is not really a backup at all. Being ***sure*** you can succesfully restore files from your backup now could save you lots of heartache later after "something bad" happens. + +!!! tip + Backing up files on a regular basis is going to use a continually-increasing amount of disk space. To help with this, Duplicati offers a "Smart Backup Retention" scheme that will intelligently remove certain backups as they age while still maintaining a comprehensive backup history. You can set that configuration on the "Options" tab of the backup configuration. + + +## Chef's Notes 📓 + +1. Quote attributed to Mila Kunis +2. The [Duplicati 2 User's Manual](https://duplicati.readthedocs.io/en/latest/) contains all the information you'll need to configure backup endpoints, restore jobs, scheduling and advanced properties for your backup jobs. diff --git a/manuscript/reference/networks.md b/manuscript/reference/networks.md index 878a7d2..7dea08e 100644 --- a/manuscript/reference/networks.md +++ b/manuscript/reference/networks.md @@ -51,4 +51,5 @@ In order to avoid IP addressing conflicts as we bring swarm networks up/down, we | [Magento](https://geek-cookbook.funkypenguin.co.nz/recipes/magento/) | 172.16.51.0/24 | | [Graylog](https://geek-cookbook.funkypenguin.co.nz/recipes/graylog/) | 172.16.52.0/24 | | [Harbor](https://geek-cookbook.funkypenguin.co.nz/recipes/graylog/) | 172.16.53.0/24 | -| [Harbor-Clair](https://geek-cookbook.funkypenguin.co.nz/recipes/graylog/) | 172.16.54.0/24 | \ No newline at end of file +| [Harbor-Clair](https://geek-cookbook.funkypenguin.co.nz/recipes/graylog/) | 172.16.54.0/24 | +| [Duplicati](https://geek-cookbook.funkypenguin.co.nz/recipes/duplicati/) | 172.16.55.0/24 | \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index f32982c..8715a50 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -101,6 +101,7 @@ nav: - Bookstack: recipes/bookstack.md - Calibre-Web: recipes/calibre-web.md - Collabora Online: recipes/collabora-online.md + - Duplicati: recipes/duplicati.md - Ghost: recipes/ghost.md - GitLab: recipes/gitlab.md - GitLab Runner: recipes/gitlab-runner.md