From 4f3e3c937a010cbcf9981f175c88ee7ee7387593 Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Sun, 11 May 2025 17:29:07 +0100 Subject: [PATCH 1/3] chore: add architecture diagram --- README.md | 2 ++ diagrams/directory-structure.png | Bin 0 -> 95658 bytes test.txt | 0 3 files changed, 2 insertions(+) create mode 100644 diagrams/directory-structure.png delete mode 100644 test.txt diff --git a/README.md b/README.md index 71527bf..b526df7 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Configuration of self-hosted third-party software on my Hetzner Cloud VPS. +![](./diagrams/directory-structure.png) + ## Services I am currently self-hosting - Grafana diff --git a/diagrams/directory-structure.png b/diagrams/directory-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..4481dfaf1b069e1f1c0d5bdc7e3add4e3b554f22 GIT binary patch literal 95658 zcmeEP2RxPQA4d`uDU~F%kP62plWhFTs5|V{dBqXHU zC@H`b&B~NJBqXDXPV&2*PzNlKwg?gqL0Q}<4gr`I+R=$aP>w@D0BYmS6lI>1qm zymkmD@Cf`4w?x?C3#g+pNLyPthk$}GFAV&&aW_9dhoB7jq=vL}J^=oIKup9$LDuB0`~+|2laIy+QA&*fO`ZwD8L~o&jH&3et`Z8%HjtHzSzN0 z_&2pcwLJLOk>*9cfZJQCqs11}n58q)oG@T~K_@iY)(L5kp9TCw zGqjx@!VJGc_-Akj2ej+g#VpXa_|f6ZK=X<3E3Tu^1KlZ83O(J0G)x1i?&7M$WPEh82SS}2bB^%hhhH%&mEl{&^Cza ze!&4sHN5_!@=qi;O2u5yE%ZNvQLS;mcSN z!<_ICjwdh6iK-z6G!qDdGI#|4xcd-~{s!pNq6@SOHBE%BAHxc)KeTda2P6gp6SRKN z;uAv+``s0ZvW43rln`);aS%U}L1UR37BWPuZilvmF#9zmp+e>kXnQ@lgC!6txQgu2 zNINI&1PaS=2+M$JlZEjLa|i<|Bn!TSwIzH9j|64x(GCDYb^tK|`cNGRfIwFSghCl7 zv^~C3TZ9Fneg`~Xf*Rk4c5*_aKp6<6GlJH%vpie8;Qu*k%Wh45^;g`Y`l zlWk5;z5whmHVU@|eBKW3gpffy+nM9V)6aPtp=~T@o8YxS?zN!oKg|b)@M}6LWu1^t z0D|9>vA+hZ1R09sPBM-Fkw`mBH5{)J0iYxXGbAtn2r%QNC;_xYFyj}VMrsnu{cGT! zQLBG6y79&X5gYz4u(3Md|ErXTWX0^6``?uEB7dxu7n#C5zYDKl!#5G;NW2k*Ros3l zSH#lVkHr^3*#b(ZX=S4ft*YRWD(7$28i~q5r9q*PUVw%61PySBPj-|C96ZoW< zofqx6xtRLzKhFgD@$^LmQ^?o+o1r?lMEY#OJ1^3IO!5B$nz4rDyi;E0XHNOwYOeD` zj17vN5c{tP0iKyUXQ4WN9(Vkwot^xDA?owrH`qZM0$9f%6FE+ZK|!^7u|8Fx6K3Zh z$LZAY(LN}8ILDpxztmEnHG1de`j1KepO@=mQ$0}Mh4Q?u{=01TiD=NDC)dUPf-~s9 zFV}J8_G2O^NUnLgPDpf|D&7ADMmXoZN^{Iq#|nyBAa`D-|9H~=c_{NwlQ;smoX^di zE4i6s1dIG<(tJYfPnTu_F~#3trq8Es;4(gc<_G$l$(dLZ{xRd2R!{ijvorapCT{$H zr)TodCvN~wH{D;n0wbK7#_`>__y40zpEYvlW%`fF{a=9c)Ns#tp*(M=|28}Q56;aL_zOXwU&Aba zt5Bbeo^O8mXf!q!Pcl@Qf9W!b4k7k5~RD7aS zIyeMGY@vgA_kjt%Q3X&)bedDK{~w)Dv!;c4 zE#b%Z!apBb5}VH!`4hB+KQ~)MY(86rNK3$x+mDHST0aqy!88+r{f{5hIg>{JY%O6v zTZC|B&a{^QtdTn}(|=6v|AI`P8d&;njP(E7=l}OIK>x1g{|9G_i2a4A(yuXqerL9b z*lc6&^FsY!&K41y8l3trC;T-yom<%=vqtW`Q2*6JU3{v3`d^B(etol=Il=<&jP=mr z$o1d8SMBS34>7`Su;0y}2|oWH`Gfyxql<9g=y&*7hZ8;=+YwW138FuL3$tV8A_lAKk;CnS)sOZOR z3+H;6bUA| zo2FIV0?eXSy!G|l4ww+fYbZpK0|;=08!Z7!kxp(p*wsbb$xr?QuE8WmKDcbq3T=tD zgWIa1v6l-%=}guLCnq=jMVxSFCp36OL^@akfQV%R|2SfS?(_N)sbKG1Bv7Qh4hn8( zu8F-v5&MGzxLa|e&I!Vm*TEnh(0XWfxE)wTP`x=(IUI|h37O%rg~Rx?WQO-O{+t}K zpq&XVd~^2hjOlD9xc}!Ze{p)wxB!_* z&hCSo+1MiOZ0665`;BMDeJxIf3DTTM=<^dIKg2rV9LzK37nn~s!imy<`P4WZDbGT5 z;k74%P4P2~5y}ztI^u}Z?-6eN0#g%?{!1n>PU8K<)SXuC!4uysKtY580`nneG(Q5t zOj^Tf_CGjSW+sjP(H8DRo+**&#i_9-SS5Qt=NR~1!A$%>sh>T%@n$OlWJF-+7s89) zUyAk_wfcv{eLkOPW@^BsgK2ggf3|0JE@hHp6^=^6XEu`@5lnX%mzQ;(n%P;qP)1{DpAT zugU!U``&@S5g-tpt-FXwtDA|GofqxEuZ;Z*i5Xc0NQM!BA))*yYO@b~&GmdFA-oHJ9wtAK3^Pq; zb^7X}mkNzyAeR{t;NhyQE77lP6@V80?koN&SmA+|{f?h|sC=1_Jx)|_@gqd~%hJO}LS+pqDawxR>v z-bx*9jsS_&L}jqQnj_(s4sg^rKM=0)7%n*D*IJ6Vw>tYsYTfBaaFJlkJ^;PZA z16?z??bN5ckmgQSxUyn|99gKe5&~&yMQE8{1h1i^;Do~XkpL%!Id)?T7#;S})QKca z=XaJI_cNi;6pI1h&d;|{Ok-_K%*JGT&EKg`UCY8!Tp7coY$n66r!FV#q$RtX2kfi) z=~Xb6V5fpTzSz`QHhz)e`v|Lp?;~+64?B|YP3^ZcNaU8rL-rf)Kwu6;mM!4E_-4QI zYVeEl;)#a9NQli_sNsM0a^~r0d}{IoZf=QGsjs(&xLP5d5W4noGYI~!fVX_T4dm;M zcX$!{-Q^-)mg)P4MZ_!?>(5*ce2kK4@`=rz$z3`B?9QD7NT=OkF<}6nU^5N)W&plH zJARIRSPpAS?((m@uFN=pU$nBd;YIZE1^u+an!$&Cn?94`zcLyM z280D94bp-!x?&u=?cwK}D3-i)%Zc9JB?emRl>=7XTJbmI1|2OUde%Op9GC@ku z9f>^E9pi|wwcxQrJAzX@Acca6@y)Ak#Ne3tJUvPXZgjlX#xF7*NTy4TnR^%^^oR%w zzd~!9a*EHl{s$aD|4qw(rl$X_FT0=PqJ(fR&@W#3S$V6#bv#5aF6ee1g9%R-_%i9_ zf`0l7UamQWGHg^~7MA23M;T5L6MzwEEYMja&XBusUIfizz44v{!EX-VnqCG??2y65_NCf_dHj9r#3c&D+ih$5`iV8vHo#Pmpni%N{w*i5L zd5HWSh)l#f{{s*q96B_w(fo^gGbFVk!TnRGA?^6&fcrigJH)ZBVJb3flT-&K>zQ5jo zG*dB%m6!iPF^CUE{9-W(!RF6&1>y9e87NNwfdu|(lO+ffKqS&oZjSrGp165O&@A`^ z-Vr1$jL%9X2()Q~5u($ikPsx{-0=euPLH4GDR`RrS^A;?KE(G^V{Fz3BFu4Pj4%O2 zJOywRkm5YgRQ`^ZEK10L{~=TPGaQFFaXRl@o_@E+-w`}`nerd-98Pn(*t~O@u%T!6 z5c!sk{K@eL!Kv9aQ)G;z4Z_I`+Cc{Gu|PXJfg2UTbpnKaYtTa|;aL`Ki*^8oI0OX2 z9|bVIf-+zmpE(lP#Dw4QyD}`m{V9Y;gyM3b__W(}%;An!6PF)B+000=%S{cw4`Hi? zc0@WM(RQHGeP|~qun$8}hEQOKEz%PD!3nx3Muu?MgBj=xbn_AM6*1TyA4m+eaR}u4 z;&*^JxnZ|zL1TkE+T%9pSs)KU{gAPT?h8UV$h&~bpj~>LuC%uoD^F%>IsyY=TleA@~FcyS|7svc-7?@aFGVL9;oxKkO$5F#KCP zlKxyH9e29O42*P~f;0=(IL8%g!UPa0)WGkIg6{pAx6)^^+;}UUA4Uip5g5y#?025g zAw^COXdA>X{FZ8n^%LDT_N^4KutmF?S-~Bgc%cZ#KDZ+gGBVR`RsDT}K~&@$Kg+ZW zNLb~s#KN50sw4D!;s$@NSRk0gKlQWVjW<6w4UgL;_BWBDQy?xYfS(zM+uj=8z+8TBGOdy?Jxv%ml16kjVM> zjbjs>p{Jk#&O`c*o;-foH@-Xpf$6f}CqPVWvJuRd-icg2aX{9hBVQ}t9;c1Q_)&>2`HC4y2$B%KY;pb@- zZaN<7csi6$;qgiFMaCT5tRsES?(YPOF5Vk(>GW)KJ3tZIc|*4=?!{Pp(d*&M` zrAf$Wy-CPfNl3r>D9#3BjIz{_R2H848~%*|k|-`}((k-a`*anlT#50$vjyL6;&^1r zx2;a}g>@G>t(0Sf#-;_|E5eE?qxfFee2kY%_ZFR(h+8_%$gpjAH!CxKGj7<$T%m#V z>bIo$7Nzs3STPo_eL|N_-vu8rDmCY$ss72iTMJ}*Z!TDy{@szbaCkR|?X5Ru_+EFk z7JKE%a zuT(oUrP3oxpp;yw`NHp2vq2LSaAPqg{a%l0*})Ri!q2RlQh+s{JZ9@7BgD%C?Z-gF zFOCDcQYZU6bhXfK!3EPjrcJue-%vFc`+;U)?!;Yq^$&kNOf6wj5vQALSJBHr7?U0X z@QC4F z?gQp^NA;!$xG4pMhXqq64_`X)hj@U7O)G_5Fv(uH$SJ7To;w?^bxMW&6F+Lf#BA#+ zf_@t%cA<=i|Fd2m1KkpG$>gyjgN!$CWiqk%%FZ-e{eXYhQKjs zc>w_J-Oeyh%%RdrlBnJLn$5V^jOQH+lOZ(olnNBQAa=%jlAp=lIham55`iAqksu)I zA>e5YyqXS^Ao5!-y;60l$Cia3>UYC*DGAMpvjOHur>H|sc$3w8V{n&vIXVeqxxos}oO%pRz*5t{jU1QgU*MOXcnatyiomRb)ZA z)_b_JT`&2w1zcmFS8P19vA^2#QuT9*E?Z5>&vKc8bXyXX#?)yAQQW~i(_UB0 zaQR3CSyAZ3!u}@+YXzND?0rni;&k4R6xcO@)0y6;iP$)}gH;F6SkQZQNym|hyGvkL zwqFb;Tf!oKkk<|X^&x9uXfwmH&mSkLjTLqnaE)xE1!KkOUU5u>Wq7wjx_4;^*F6Ha zA@O-kskD+&%-(cggRXrF`P#K>ZEJ*{EDa)%D5%|#-MhJZ1)Jxjf+Zkh`r`5qhC4#* z1Ubl7tAFGP4|s&+{y4$tmIIEsy0oo=VS=vBFL<*v8>L#ye>BS*Jw7-AL)J}z+_Zx@ zOb8HQCGnX`xV#YKe0WN4QrfOO0T{xa5p@*6-2tHBJxTRXS5kqP9PL)X7GDINVIvF~ zNVN(;HCH*+#wMGs1y7PYw%?o-1V=Z(oLlv5-rN^<$E+?J)>}K#_Y|O;BqJ1zi6%Et z0Cbz%k+N}u_xhXzqD3uC7Pe^OJ?YB`P>M(J{o;wiX_Ca61?~B&IYcDngSKUlRF2TZ)}d%-@>6i!NzGflKIqo4i{To@^GOM z*mNj4Zv8~X*8wCfnO@voNK~-_sODLBtkY!0F5n4rfVO`EBBYc>fPI`*AR7ORbwJG5 zESjjuE&rDYElnt!f zx~=CoO|2T02f=cy>pV!(kgj_A(1qfzs^ctc=wXgB(JA{`je|1 zN~9LS1R>poe4;vUX-9wpB+CRU0NYv*bL%#@DUYFc2cvN$8qIsa&={6ks`yB6fOL|T z%Gu_4rmQ646Q>(n^Y+1E)Z1Jir0A+)EbXu!B|i|Nazz(LMaBk3vXo(C^$u1IvgBeB zMn3obWU*VYGpKDlsc_50(Yvgm>9V%JeyNnPa?&c1p-Ua6%Cj-b@dL$r%EpQ7c zTprURM79Dqh|9alQ!=wqwP_;AvTOVFFVx^vLQ}F##f1t=6tqvt!K|v?rCQJSLWq>p z#*hO0+RF3ZkDt3WU99pP?W>Anzg&l%04*-kx~r|^`6$|_YrtD4#g{s=X=!*r3-8CV zS$VLW26`pBXsF*0s6H{Ty1*tb&AJ34q_-TlN2C{$sZ|Q$w1EAWfeb)+j-OdvK%~`$*!m1=ycOheB>ICtF1cGbk6ry>uO{$ca|BR%$@K ztYV;nLxLL?QJO<4|LV*mr@%YcsPU}M0!Rbp!&vRe2Lr}lsd{>tHIN6iTHQ@wDPzhB z!GIFmR{(>KhI?-hEvY#|Md$DDjfI1^^hNRm0XOK@rSD)h1I-FH!itW9L2=sD;LL`V z=RvF5Qkq%NjFNNZ{*{h*Nwtc)j_Aa{bqfNOOeOn!BwcPM7zfGzTk?2+9FF_9r(a>rz2f26INi` zXD@&XH##N*8N6CBvLf`L%YoNDwNHcAcihQmPF}uVA#`l4zZPxeOT#2dn(Q&$FGv-! zVr!owyOkMRZ|o({?jvRVW_i0qc=z12sY*=CTWj-*g356gjrOs*gWPus-xSbH9XiRWA4S60JL67U9uf z-En;V>DzT#?us@*L~1}Ex9K_Njk!Kgn7Us z3=Atc%eNz$))ZFadNns^u%9m#h$n#k8jAO!^?G@q-aSGArWiooL#HVT&%*TWvk8B7 zT$h%-m5VlCOfSdzHN!cQF=~~-;bhQN!T88Wot#v#(54Ldgb@eiJ8HrHBJ`%Kz*g9M z&ayt+BdejKr&!da`Ki~~pe5RE_%{5JT4`jx#{g55W%Idbv}Et-j+?DpTyO1gGniy7 zA$Vm~!zs|!I!VJ%Lr~?UQ!AHsM_X%_NOWbE({b)H-Y<{V)MS#mCVMj2*g@II)Muf^ z)@YCC;!PJigH60fons!I^c?xDINV#Vnf2(T)0#8=z3YUn&v9M1%j&DFyk)W-eM^gm zZHskbOq~Hc80a|;X1C;3$Fl%l=EJiYpBsjt?L@>teSHXIMwHQg`k@TJ7dhbf2eeM5@3&KhdJ6 zsC2}cagUkE^$>#qj`(!8gk2UMBbzTNG75H%v1(!aLW~{!I&#Lx zkj~ny8Sg)#vk=F#$Tg`hVLGo1zcjK-Xt0;U;+A>H`oq9AQ#ntsNN)G4#p`pfbw54q zb#|ZPy=qP%LQ&&zkM(5Q)QyK1Elbn5xV1Xcy)*1?^I(OprW>DU)n4}mSN0owSEO22 z$}HhI(ySZ+xV6msPo)7GxtXuqQ@z4QA5ewYpLS(&zwp$p;F!gd=VobDdn_F9nP=wYVtdlv$T~q>e~&FWq^nKK0>K!8pn8 zxAoUvY1^d%@nKQxwVUN^Ghi7uHCY37ZA>JWl}c`94;9pAv_4w4J%uOj)x#57+GX9h zJqF%X<(*_OL)E0*Ijgy?TBO>XuFJKiT!qiWKd&NY%ztH8OH70spF@ISYElF`yZS`s zItiDXO!m2?d&kalX{Ir`ym|ms&(IcOsrK8CY~MInrRI!wpn=yY!tGFO|NE@~CMZ9S z;M*TgOFTES?jPwXaUb8AU2{pb<=R<|q_$f*bwVu(sg;HzXcA znf8VB#-=^bCD7MV=bmlVyI@Y?V?mYq`BZh~qoO+T7k&|^4rO?Tnx;J*w7A4#Es}py z|E5cgpoPgvVF~x-R=JX0IRdriezA01!^@-49+oceR(oD+TF5u39kXKRDtSzCn#GbL zR9dyO#;1{|H&qpr*H;PG!sU|}bP2lm3no_^h4ppXy4+`Ud2`!*g;dqv*X=>einE!Qy`+9e5bs>T_0ES9p0Kgl3mYhpDT=x(`*i9DlZ>> zBcIvnk&e#j)F!_%w!Qsa-{)HgnLYYm?#c={PRFH@;#_HvUx#Vq$@uheNo)xd{T`{oD!|MrhL}+lyK!I zcD}y%m8mwnGQPY&k(J{Ggh3kUd$nMRq}dX_%-hBM`RgK;HnDa4Z%(|et0De`PK1NG zGr4424E@8b{+dD{gtxcVWo2~SZ%d4Px)I*<_VBW_gtVH1%_az?7q+!&2?JfvFG|!N zU%oy@5!0De$Q$XgHAsJuC%H(VuIym-X6PnMXdUF{NEV zl>?92IKmj?@o}L~=5nz{?PQ}j-5@?8()O~NethN2!N>U)P~ee6&2q}jQpD!bQZ3Ap4j@+NpWOb$9cKCc7&CLy=kdCyz=PQ z*LSo%9%>jckFPDcI;0gFaMb^Gh3|HcjTrzrvA2w0T!@ll^IgjDzF3#*g8d;;#g_GE z+-16a(L=c#mpeT?LRFU;ExwawO>!t;yz3A`PqxK5B)_7$%|NES;;F0&kC*0+{!xXZ z!uoO`zqUyXwVCal!1m4>REzHxVolj6*c$g{kh(x z%;|aVm`d4CV=nZn$9hYjcx%^mVwBkglhPplmu#NWdv958+{aVV} zXSR~+^SSt!RTLU2!zxrS_P0xZ43t%KkK&fmi%ksHF)K|zsHrLcbYqfU)J-|PYA!Zi zW$m~m_3eyR$Z~bjzV^14@gc4WG@AmMRQy+abfi{gZoEKma!g*~=+o~XGe z`}sb8b6a=i7u;$un4IFfvl~ zwf*7r#WIeUHOND*$1QU>C0_zGzRJ_v#|{hw;7j`G#q;;FX|uddnr?|PCa94}y^i5i zje*?*LLS%4CC=`A;8wEkc%-t3YQZsSQ=sSgEI+d&oKlY8Ks6WdP2KY%ZTe-v=pR;9P1%g&>a>3Z)nFXfE>wfcJ2j#05uViASoHuTOn zWJ5bWs{&}V2D`GGx%tz3Mv^fGg*DDua_?*|O06FdjL0}D8*Gi*45+Q3NgH(~>g57; zzeuL7PM^}yz=Uzle7Us2akp8iZcmBI=7f(Pw0dRvGR3aPBhMS{)In{GbFk?!Grq)6 z)_FMO-g%O1pD4|J(ANHoF1YXQ|uRMSeKYpkkW3vJjO85voXxFCh7!l zYu3h1;qtz#&+C8{3Qo6SNr6Plvxbg>TTbjA(Y}Y`Z)MleiKHGeVUN`as$z};>cPGA zu9_W-m_BwS#54>UMy}}}vxX0gCLL4CqkT$BDz6qf5S24x9CTs@8HbMb;NW7r?ZwoI zBDJsNcZ}6zJQ1tz-K#rqAv@m4w*al&JD%`_laLEgAqBc9CCQ=V*+iq#in&s~fOp*O z;tOt{zBh+QG6!5_Vk9K9l}mNGiV7=Fr1yq|*xV}pP=M}@c>_U{CL59TR7Dmf~MZC10?&mbiP`Rn{Cww-q2uQ1VT{pJC^!oOAz)=Q--zufic&$HdYoM2EOPqhOt?*8tL3~$!g`cgAie%zrjFjGM(70Jas>F8}@ul`|`A28zGTEyhq{+98k`mp|ZECo+ zQI|<=L&UkJ&xsm_Nr{+F*IQvUCS~u`4QqHw`xMiQ_EfcbuV+e0Y3SzdVt$u??B;1N z_2R3B%P-3wPvJ{rmry*lwt;Ewl`JXejhFg6DqOfRJ}(P=07I!aQom9UjO*9^fRr%9 z7Hy_k(ZPlV5;rvq>4Y^~7nrQpT{m{>>dBZ_T>5saYe_|9S(V8QI^)%|xQ=pQf^%%n z(_B|C)9eerh#0Rlvg|zU4Y}iJ9OS{O9?a-S>tSc;i#qRA7HQ?5xP_-dwI*^y!Lr&M zU6J(~EHue{bhs=qg)6+j(boD_iO?&0 zUuyV}D2+S!0y25l%g2?N)?B+Z&|w~58-+>D`2w6H?>c%$Uzr6M)TW^lOmaLcbG*he$qn0pCr*KE|0!AioqkaTly6PK zWwohpXJ%pDBf_D})``JlQ?D9QQ&VU5mM;Zi6PXpJo`vbPA0q2hoCA(L15Tj>wO=wv z`)ez&$S&$Kz24tZYn0*AAz7N#tLp{aQkesahmb8zn%hUsfdunA#UPk>->GHao(z{% z;mX~Q==AzrftxvyiL6Ml`m?@NaGq32h1vQ6Y1YMH-L$nhN*+_5yOb0ex}1OY&1dme z?C8>i>&zUZHiCXXA@>*Q=g)akzb0p-TU9d`*kSEz4=t46+HN`0S`TcVTU_T{S}V9c z4|6XE4&w8`0d-wWH_V{)-~|;fQ@wT|2+R~Ud}t{HND5azG*i~VdQStHf#<8`^TJ@r z6Zv#KX=9iq=KR(jraK`VEv7UN1%A+D7kyi>g|&i6dKgdPBJEKdawX|F_H-YU#sDD1 z4!u~Za`5n)_q`-mM`FRr@RIQs#VtcFwkE21>KRVxQmMim1%en z@^mmi1glCyR?V3!c@`M)Qsg%vr#cUJ;$i8iCV#ZuBn zhVVt?{yTu~xyCalSezr*{Gx8Y4i8jxAy@9m&QBE5eUQ6UPR-kmb6>9cGM{t6XRGG7 z9=3q2kJdCP(Rb|tG;7|{HK69`H?pswh(2pAd8lO)6a|w`1ydf+@x+-{i46>L<<^B~ zaT5arqs*mz2E9r`9?q64Dcj>M%@1aA^`nvsfmrg;n~tr!Z$McXm*0XpTwF(TeH-vz z`y2;zC$}`Toh@($m_6?OrSuG{O#QlYe} zqpPcASP`I4x{b6&*h~Z;ElOC<(L+IMI5#&LG?5f@av~Rt8aNKwXc!5+gq*xEL7#`k zXdx2pR2_%tL^u7jiydI)e3}|1oI_N|=H< z2nX&KBkL`Ec<;hu39=OTa1e(9LhPiCThGQmAL(+?RXSUSr72VoW34F7y-CdEC@viF zJGx#vXUm1cI9L=H3Sv9}qCMD15RMd0*VllM=V@`I`oNqEg1uA?wTM{F8IE8lrQ*}G&yWKiA%tA zQ1Tv>^wo$~fw;;pM$n^>?YAk&kn2HlkpRp0HeTH~bkR_jwS;_4Rd@TI zRtg^m^5eZ~w}oLZI4Lhhu?3QX)nl+X?=2bzut9&l@czkVe~Zv+eb{LstgMIThh-u8(){zr&!g(PEo_|7I9zZvI`hz zs^AA2N;!3JPX=Llx8{1%8jrPEhtvTNrUfQIy;ANAT?cY)3 zDq&AUv6O92=h8$0eO}l1Y4Fj5kTgwuKtGwVGtj0k5lovG6K15U4qw4J$W>T+{TtIF$kU|4$M?;8d)NWni6GL@`7X#dK8){u* zJ#3$gpp2a?cV#p^P()=Uj9L4#WOg|%vCC@n%;-p5WZR5rI?@=j<1oe1;9bTH!Z-%^ zVH0nPL(qsaX$`;)dRkRvz9_w1+LDSuy7y@MS!DxhxbU%~k((WYiJG|i=c z<#>wV(v0Fj7V?LjS}EJk9okzOW+&$`yeJ^8ZmUfVg;Z5o zcFLZd0GZy3knk;wj~m!Hg|CZIj|dh{z9Y&--rOX<-~6aGEc;_^&JJtEdUQCm2d7fJ zN>x_MXVbCEeB>YU-_X*M=3P0Mz98=zl>evCN$UsFY(8!Ft+VAjeSoLp(J4wzv>!$+ z$JbG8-LvRzWGOjAcM%P|BN3}KpP;!=SCNhOemOh}`s~?D6;^vb__AM=TqTO@0nZ?6 z$;q>WeLTW8ksw8t=Nc#3(qQ3t@81Vfy%>|B2v2JNgf3WjhTYMM5lCk1(?Ov!jLVL# z!c{;k)l*NghO4K`%zF1bw`z}KKaT`~pvY>}>7~KdeS4U<#Ev#RIB~uWN(-!KO}&a@ z#ZVx(8{7>MVJ=erv?MPe14{fF7s(Y1^J39`w9+rKxT9t8nWf1q5CXngcqusknWfYF zaQl}Y{1@63@=vkRULHM4!vDnJZT(6KE_gZACo0hgPfx_2S|qzP$8_W_BiS?mNdE`n z)LcNh*)IT;n@fgdep}FJmEH?5cvMHqE-%K>&s@Oqn&TGLw5sWnMNe^U;-&*m?{B~s zW>Y?gd^#jx?npif*l!*y_CC8pASlhJIZUhkM8fWx1F#BQuLEy3Q;myJ!Zh-Bgb9=> zvGSKXzT$DMu8yU-@cg5->)q1kfbFS08WImYFA6>DXS6@*Y~;33!a8?MfB#jwT}Qb; z$=lNa*+mA%v(P)l$LKSf;=;K=zZ7b@k|W`JZJ(6o9lmnR1m^jg8gRFfbke+MBg3I< zcOKZQu@89pFwAZv+{wE)EO$ClEYdq>GVHmn`%AeK)0}-D4^Cr>{AfhhxZ)C@*;b z2M`6W0f{T-0g~NHt)t7+e2{(USA83DYN$S5K@|yC8ADli6?+FQI-f2G(eg1DOBNbV z%IvU9dd3L_xQ%Y@&1yfqY};*+1z9rG+j3THP^d?B9Sy~`L%E1sp?x{^?dtR;$-QLR z%9qA%D?cnw4p8>4ndmG|D`{`#EzZ=+$hx6Uc9bVT#?S9Tk-q$a=z(}RZ`dC1G8S??&7 z)OKP_Id}9_B=g=L*!E>(Pf+BkCjlJ6yC2d?HC^%=;~Zs**&T%*mtY++Cdw#0qI(eIbo!sX0kmmM4}FaJzEg6PP8`sMzDoR zaQd6BobkHVyG=sn^8X~f9?@Cf_Q2x|j7JY)r?PE}7I=cQv?V7`gW~FD4Mu75a9boYq zxiipoHDFs(;+~8e5RgH2)TXB|;k}#7d%u}I0^|*#g5+1hbaAF^e|!4T5M~ z;pXv-uI!!yV`TLCcHk08-{bn`CF3I@m+M6!@N$Eq_4A(ao#T0m-e)!~r%Xnj8!9Z= ze9IOxc|`*@uWdNSX!mKzz9dqroh!1wm_w(B&YT%K!(Ou&;wgn#h5GZ2cUNTl_GWPzI_*(bgZ3+ABe3@KA$DSwN+vRwt(TOQ|i^Lchvio3* z$KDTN?7H-O55W1hIzQtGNde8)(`+BHuXU+Kb(|8dyS>My`iXmGrG!_sUW;4Kon~%# z4XHjocMu`Xa`if|o1~ai-jly-m+?EPh~_=}K!`9Ma(%O(HLTf@FqXi9PCP0dPIXP8 zcgqfy@|F&eH+|$H2;{o}k2A)1Gd0V$*TdEvZ2N{g(g!FEvtBii3$x~coC86>$Q$MF zPw;hmG+6VN^?+UtWCv?HxQ8X)$y;0Jo$-8Y+kuDAp3s}LkB)*UZdzZZQAwm*BLi9* zUBG*uOIwbeGAI(+>GEnPpHGTLCC0S;@GC%$wjivRF~EM^DUZSO0N}u9AAyOse+&I{9k(7ro7;k1}qFmnNs2KlWH(in0?BRirxb z(umX_?5Xx9UC{2!;`vFANlH4JAMhQdxxP@uLt91+Y3Y*l+pKPMDPO24*?cRr%sr@V z(J_#to*$7jKGL+^-LdnvV@XGG7iNdDi!DpyZ??NI2((%g$KmR&&?rLq6hiTgAk zFQLgeN_7u4a#n?B_46fvw&QjO4q0?wSc1zPI)z1{Qr%ao-*Od4);((KK0Vwx8W2&u zRs2oDF3V(|aq~2peEYDMH36HX%vud}StM10A~B8Un-8=lq}Qx-ECMUtdapmFT%)IP zr^lzNS6A-s+!sscxgk{Lnz2hYLTbO(q04zI7m`^qX9HJNmL+1eLJ&RB`6g@7m@J0O zhi2OsQ#8#^H~+;iCDPgr0Z#*guD!{AbX?(if>}nc?XODRFYWr+tjd@5F{`cZ;y7Sh z$zCHLSn7Iw9=~qXiEbLri;8V8T@-}~Hpp||rgiQ{D<5O8#Hp~Mjq%I0Z`8{!ld9Nq z*3eLT5`P=mG1fWH=@m0A=p&tVtZbv2ANvQFMar**3E$ncLiN2*cDB;F7bmp2Pcci? zoX9MzVu&t_jBEhm6?q!*$Mq@l`|?ofZ$wTgZF(oO;1d)Mq)zj%*~B4lSFn0Cn>)h^ zr2SZ_`=8WNV)gfARuE?7LwiBd^3j8Rx({QRKdwwj;H$(B_mfwxyYeK34slL`=RdEcgR^bCZ zZEVif6N z5)-03c7hO}O0)c)eOBBaAgo;Hd(dyWcC6SJ`8|ueOGJInG`j^Y@w8jhspw`Mhq>46 zR_Qnvd9mpp${|+GnJl)pw&$Ky@z^UkMTBUMu=^_>kDM=v0(&WT zZQ!#ai$_I-g-F&C_ zq~}metovp@BbD=!0}=kcTk7lGBT#8~JV%GzN|+ncR1WA%rJ@}i)eMv3M+Q=d(t|Va zttLYP2TJuJ*A!dD!{^yWp^Xn{ujlYb$K3d~4Ly7#Cd_;{-mh1WnIp*QR#t!a-k6nd z43vA%eW^aTXK3rO=CH=jW2hZe*PN3QH()lY7%#ILVl7KU8Fj@cWN%RItyr+Dt1c^I zrBvVBt9(@$N}b1HX*ablRWU!n1nOF6W@g=Kj$0;l$)i6k{qf$Q_iOVzvxn`v;_pSN zmWP(L)(a(V3Rj1xoyy~5HMEGK4?NQxM<2LgndA%i>KBCp?CGg$10a9pQk`pf_~BI# z96+dYJ!W;n{$qOeu-XHToC{GIAeJ_y#d>GG-%9$N4Xp}cgREM-7>%J~Tm5v$f@hs0 zbz{ql#GWdRi&l1&S3j@nY!^&lId(bqwTn`g1>)0t`mqN}B^|4nFJXotfwV(TGi!;B zdyLNIz{hG*5^Wa^+2hE_db5Y~w~v+5ZRiU!iHfZ&?i)X)n*}}$q@K|&X)`?a()f&Y zb#KpDbm!o3SQyPllx@IclZ7%utEEz%rCW0EHilNbAH|Fqsg4;h@ks%D7i{wc7kgAa zJ7-vs_>_if*|O~;w+CE3Qg>d@q%iP6l$~MYF`!oM)zedsZs;%^t2wu4g&eI^dCkk) zo0pOyFWyuwtVQ2zSlt!h3k9Qi&c1YDly`1pQ&)B;w;2g+j^lf1*r{u{;+B=*o_G&G z6|xvPmC-#cds05itCIKW?^$j+l;lxqV5weTuFE1TWWjUy?V-Bhbs!C^-!oQV<@vjNU9u_DQ>q-9~z; zzAmoq`+aHOphWij^I=XqEWZ%3r)fN^uWN}z1}P` zPL~_ANoFk6IIyhXex;{g3qx{TLq|=CZpkxs9(2f?XcAWWU9E1rOHyk%Wec`7{L@H@MBOPR_|5SiV4TYA{Gm1+Ez z*JwOfqKfy;b1CnW%X&O@3v2rhUe@36euI0;%ZsfByvKu2L>BYMJ!zUGvB2ZaZf$!8 zj6RgtE^O&=txsRX?DkNeT|I>3lhsB=wRiW(M6>5@*tQ9yW_Bz% zadWHg_^qrX1y@BOPP zZPt}LxOFIA-@n=a4%^9{Av?#9X^VDKDzFx%X~#FmjV|tEj~+`%U<;2p{IW~M{Q{EV z(vX94uim99HcG=A^g9=yRoyKTr0D^vmTOSy#=R9M?#og7QLPZ{eSIG!Fuejnn~yw# z`X+&E0W8|AM7UoP?K7>|K`r z%hkSigTs2RnBf91Sh>#N_LL<71_`6r%LHR+=vpfiBGMI`fRWei5m=R+6vd^l@Zs=D zy~BXFEI5@?vo9_>xVtW=FOdgiG{i?b_dQQYFcZpC8j)Aq||-7L7hVxX$N(zK^&NA>kZUaz0)+xXQVK(RoM|Y6d@ha3v5{Hud8>ydxq?q zc>o!mN`Lccwz(!pX|gzH>Vce{)O(~{q;Y8YlaI`-@0?0j%0sS`ulph&$0JEZKyrA_xgs_=Yw;0ExGYIGV*2J zu0m&JhqxyiiKsB?@PiDBwWu&9)UIoOCa7RXVe&Fr*5Xkm?I1(z#KRs=R@d{mdA9F* z5foLBd}b{lI-tB$XjoK(=A6DHncwk94xi+D4GFdFS|9ifT3!)y0fOF@yrPiGsP$ej za!PrvhE#3#IQ-;A_ZljFx1$=yt73BLABe+b1SqAw`+b`kE)Uw<9HZLsasZ^5Z0uU7 zx@aZ$(AD6TzV_!y;p%p3%dn1qktT2X=9A&{q#Z8t@NUQZ$)I} zcviEDMC*%D;L5vEyX3gWI!!@eN68D^N9jk{(@66|*fCl6x0Z{np^LZSuFmoYP9@i= zPNl^qg`FGV>8l*JmZgfmwgBdT=qcAI%leM=aOOUPQ_iiAx2`<0l7|$faw&?F4uyCo zt^C8Jv-1clC}_dW`=^pg*91) zgCch@>9>(C*ipE-d-OJM(!kjS_tKh3W)1)TPXfDIw?ZL$Vysvg>11^&lZBTxAv$Q{;WEagNlkL?JOw4l9gQnuD#$=k(5?v}14<;Mu%Ovi4t)q-|w7(r3QKpis4lhGCY zq54+9dn}WYbNhVk8~VyVy>(>wIDq%qs7i;QvIs=o&Qd@dy;!5k53Es*GlRvyfZXUV zUhvJD8GJX};>5@uRK54}q$fu2o7fiel#G-)FA3}d+OigeCQ2nWJmkGyG$lZ@-3p*A znmKwKtyMTlP-MzdC`850k^5-33e#bOqnseLk}|x+$gRc$zDM&3Tc8neGT(FNS#>y9 z4Mby*v`~0UN9A&*@10%Q0=1ua<_OfE6tpR?vGut(>a{(~w_2uWgHh?SywI$H!v>cc z&ZJ(gDKiD3=QDp7r0}LTK`$W2pl9NSkw%xLp zFX`eETaMvPu1uhnI_%DMZ{4BZ!jCs&%qhv&gU}b`JSF*Gd*2<^hypg6ii#8| z(gaixq<0YzkS-kyp*JZJ0--7b0wNux1u%4wP^5z((t9yLKZlgu~eotd{h&lCSGQt2yAvxJgN3(W7^0A5cLsf*HI_FeF&kBYtYX~H!` zhpCc_3?elat|$)&@8gc!O5LQ4+SgtPtk@CXvjf3Z%S=Ux*1TXu$q3FOlu|4_XPY5* z{Eqmj8oUJ8v}xHZw5mYy#@1pm_*m)1d>NgzpS=u)jQ|I&coX5mxWPcrsOMC8uv`Q(FJbh^kT(6 z&2v)itAlADFcf>+?}-%m)(z$s>;3DxDjvfj#(Ze!@?0ZTz%9w- zm|L%grG}PzTbH3NjrYhtkk_Q8Tz)zKvHo&p4gEE!8G2QL3nD-;-$6APF6?y|vDkP_ z5g?<)ZU(8H&x1-b*oB~P=x(!vFZK(=k|GboVom@(Y^LviYS2v zu}`jkPC7?~?l{9nqMQ5@i1RUJf#?@!l6X3_kKzi?RHi&}auqR|XOo(;XB*J@VjIcV zl?v_8N-?QRJ!q*kMJyESbeTEhw@o?(GkYId<vr<0; zs7q5PQCKt8yRfp&Zhi7h@|q{(z12frJxv<55WyJ6Z9lBjBwB;c|+&2Lq{WXTnm zieEiDu3XjDPkkPrc`sgKR7n+!!iRxkuDYCNUVCTCNx) zZ%C?wX$&&xN5=SGRg9q1QMZy;>g;kcQTAdKFL1gm1-avKGlqvd$)>_9Cs-0p>&pds zoi?qw5aJ$LZgi9bf`f+a1p%_1;28LWxyxz{tf+KOu;7(!9XOI!IKTM-BXXp?m(nqz zIy;mNrUXDELq&8It!9RHAEi`j2ovTWAMu7jJJcwy-{th`frg^31UgEA7w2Qd43aql zr9(<;c++-%At>z!5H~5MO>RI@j$sKt*p^N+gFOUt;1)x;*H-2s^T!n^K2rezq{E78 z$B1qL_O7|i{W@ynxMEhXWoTu+rN_9;0p)NVc7s~LR%1&yW+m-|bH2|5nAuVVnX?+E zTsSpGgG_GUQrs>`kH$Lj*joJ`L}oy+oH6=Mu*@N8Fx1U{rY7x;7V-eew|C2Hi3jmr z%oAvPtXNlB0}{V}kT0Q9cc~wRE}Kr)PvSbqEqiqwJqd9Qf=;79l|!+*WqAl`180$ImGDiF&$;pg zVdGv(1Wv4kW#${kOK1uo6>}pJF(f5a)4_L;&R%+AgNqF2%{zi2b z=r6GnNHe1+-u6HZweSLF&ii!38~QG)HOxq{_nC>}+v*F6nkRk7M64N*XCFCeaex@^E%70e5cM@>^t_51coY0g5bR-eRn~ss-vAZXbi5( za!n)1%v;(Q_lW0{$jp zshpL|$IkGF51p~$xm*4awN>MS&DJ}v;D9+}mlWMH!Q#74P1QeDQ>7s8##VZ$4o;0y zO;!i$XWik+D*bVdd2OmG?}~(**7U0DjoFHbw>j@YI8|t*Ta;k7XSuSIWq~JEZS%y` z44mPc(<;lr5s3kij{Zv|5Z0?pQjxH($j1Zqu4UPK8a_yFZG=`)q7j8BiQ|PVMaO@m`2Kw}uhQQdyu}X@`acp{cyT;pzCnw{BJJnQ1 zi|Rf%aHZgDS1_Kf+O1GbL-}(ZBrPBB((Jizk-bdc!t>X)$fGuNvfiDq;$~oV+sDl~ zQrW~uU^!;pO|zmGQ*F5G=`bG0v@{^|<4e1#s5rQMg%q zT0c9E*hC*rdX=sZrX7@~x&%kMxdkBOz8n#*qv9uUdJPO8`e4!Yp5>Kkisn>})JJeO z6qa!s-(WJ^CcSIuzDeu_~)l^{Z7|iI==#--{3~j0mI`f|7$(A1Q zFp;T)ZVw3jcP{uI%x%UU>rAbrupIRBMZZpZ*;&*6cj7~cVtQuk$FB3IhGG`?p39(m zHhahVuA1lTM98>mC6dtYc|~oSAs?VMoGW7}4KA8s9PLt!DH@rbr_Rnnlyb4KPb@#m}RzKVk>v=Szy3A^yaP z_S&%(9hfQavd$N4PurW%Z9QQUP|5)tti?Hgr_noJ{86K&FHLJcg$+rT1`C=wz9>X% zVR7QGJ`ZeotPNKMjOXicarlaj6d)zCWPK^}=X7nM2{zT*&GXQVB2WOBEHg9Pi7 z=K`|?>Vq@@*Vrd`f}JDqEL}Rrs?R0?s6_~aXd?U+8L(xL-ILoII!|mmsjr(i|aO7C$>zq_!W2nt0>aO}1{mG%%h>_zmI=Sm|_qiM_ zDwawQ%@D9D2a$HBkHV4Tft$PA#Abo3fNtfMk2c0Sv&|u=M8V@aCYyEp=j19~n^!}Zfaguk_W%r|vL6GYFGV>J)|}3p zr2_6cchF+ujn(i>`N8Mo6`~2-P(lQL`NNI;l9Oa#IYDc;6?>;EFp{H^E5tj!^%;); zEnY1l1gW<*F~pBD(9Jt9G(fdQx_3Ou41F(0FYbMk$Wix|-tV76%m6fk5vf3Nrhd-b|tNrwi}TNmq1)a%wH^rW6itGcE21QDVw+*A{|*~`HOZculA3y zr1Xjq4k?e!)|zTj z=(R`jEsC{|&c9%%Gj91C?t0$^fIeFT!VLe0KKnDoBaJ*HRnT{drB(#ShiYctl1uxE zzc*s`^*4j;(6>zpGV@{grMwdggike1#D1wl3`Ih8>P97HKfD#x9U|~oY(30aP|Rxk zJ9oLfurA1Pw&yZjMb(88W^P|{@g{IjbJVH$_==lX`Y@{$T(4CVOzU)18Ob2op|T?c z%RGyx4c@@&_sfXtIq^vWD5@aG??1zIVzjqTbdOcI1S9L7h#WjK--_WLs|i@F+P;Mv zKe8FYokzhugjc5HD(pP>>8ujN#Rhhs&djX=4}DMLHo@Mnq2|KF*;p@Jx-eoYX{vip0 zR{O|P)Nt;M;dCsmWge{w1^*vtLE`S<3Z`fl%N{7YC`x2mr$oOTRJ6?c0OOd0OstMA4(c#yRV6xYru?mxsI zEwe$3I*(<|TB}aL?Bmb&Zzd>r$Jyf!*RW}wYb&`@a-41;1`H{L5<2G=5}Q}S*`pBs zfW|sR_B*jOdt+A$;8(!Kc1q9!2vpGA026-8<~;-X0EweoSKoApvPFZWt@J70(7^vB zm5P(KbqSEP8+ny8pq{wyLRmgCu-)1@uFw{D^R$Lvd{%&{Ux0p^hxwy#I%|)pE-YQS zsq0K@dFiXGhvLWg4(w!GoJorOAZ)SA_*zcWCU(4TD2TsQDX`#j-U84%C^RTG%eX$& zj431I*Hi?g?xlBHSB|%^Bq`8>G*sB4`|>pr|5Zt=VAD;vc?P_zhqzs$OnxX{I$DOh z)tp_icQ;Xoja*yJFFt9g`o@LkUryYY+p~Uc9@6DG~jMr)CkKc$&kmb@n3&h(bzs`pqBXS#Hv+n58al6$Bwnm8S zRgepukx%aY2N5YNd9Q!#OE6F$-`4_JNKR7_ z^(}2sj69D9?Ipwcf`$jT5bwg11|my;B83e@z(Mb1afY1kMkB}jk`rtK%t!YD#{G;O z7#F3ePWyfEbzv%?St2WQy64?BR#_RuxgnCI1qr?Ge~liD_LJ-OacBklw7VCqzD{NB zJ)5kIYN+Jg4HaM$96lXIv9d;iBa6!AUhh|~-{J$kE=2r$ufrA-offofzLT(Ouag3_ z!I6^2W@VuYq3Vmgvm$<0lNO97^g|S_4iHzF=I#oTy+)p(IGz5%!;wuW07UP%ku&t2Vx{2$c;N@@^LJc<0&R7ys$9A>*+aH%m(C8;T~WT&FFnGb zKiO!B@0Tuu@992ouY3R=q_iR89!^?s-qO8phJK-j`fLbIP9j*)?zTJbK<+H2=9Wk{ z_#lt_S%{LVp9c$%*&RVjFejwbmYq{pCiH@nfROT5SGIBP1(4uq5S%pK_J+Yr@U#UHdl;oPmvfTAwzF(>WKcBdRTSl znGUe-80~Ks`dPpVqNX`F18CA&F1GaR3TcD+{(l_iz)++B>}$ah5#oe(ssNxm2I(Vo z!MBSL78be)gH&SI>Y{Qt5C_1|2tvjW(DrSuK#1b!g74RSh?SHTzViaA3L?tbhp~^; zBTo6;YPHX_vqjATf`1RJe>K8a#HpcZMYtG!nkl&fyQJBD>YOO-`Ka?tj+8KO7`SmA z!#EsNN;U?EA_InlYGyzV`3i$ghd&8L9|BPH#~-#d9RK0MM-B&;j^Mcv1=0#{%#b}# z=pX3FfZJn`Ko2!L8$?b$$JVf zNC_BVnys_HNB5=xu6PYfSV=D)Sm1z-Bbf?C+Q0|YP(iNkAb z3`s5+boY|VU_q{fvV3Ecu{~(g(msTwG8Q_ z5}B3}51<~~lC4UqW(TE)1hMXlwWl8YHy{l6*0&L~5Z4M3;})utQTvrqrR||@wTd0X za)+6)&wTv$_#rNkjeRaMj7}%?xYNeubw209=A8#x4R|H7A0v zdH!F&BsH?SZSWcMCN8BH?f&x;#MjIk0*STPP0dW9e*P_3CaG{5aqnVx?$)wF zM3X6mo-4T!7337X;dpHcZ8F(0_!HG@a>3b{AtQgkGOe>%Eqh7{BLOS{QN*_wtN^C} zS_B~Unb3g4>=h%QKH2{;{h99<#Vj09>P6eHTGutM@qqy0a^Bor@9LA0eyY@F84t2d z`aQF;Zwx0mxg*3I?eY2$<$FI};9NmWb(3B2s7C1L8Y_MVG}@I1)gTt7HJwXdEfUxb zKWw<7hH+mYH#qc0e$MHe@s=wD<^JaTNv3;AXj32J+&Y)!6MQKBK8F{4POpwo+2BRBL)hIbwKDLpF}G7HBiAVp zVxXXx#=TaC>uM^rAr6{&rQXP+(bC1L%CM&q!|6po!oj3vo~y`&Dw~cgd2A3>M{g;^^g|huiZ3uPT4kO?aLe5L zzA9nhSe)Ng@uG9r05?lMC$rz5Tr=s2e@!oZQN^fQxj(nrBxto=Gf`?jXtWR`B^9^z zwYN3*eK;LUYy?p%N%v`)V$XKUo0|D-i1{@UcBCrIOFwzX&OCYBHDEnogVo8zaSw;U zrr0biYmLSpG+(EQTnzEJ98uYJl8hEy(;=6gzo2KPf|z92tH3SZ@rp55F&rH0cgbd6 zPzuYjsuOcSHW!|pU(MYZE$SA`DD{JdSvL$+_Qfvtb7z!PWj$zOG2NQuVXUfC#K6<2 z*Pd3Gpa*uK4N%&I(Hcs5E@pk#cl~A>TPFDdi@8%aSN5+9yw_8SN^ORw>22vMu2jb- z*UgY?@tX@4tGOZ;mg5sJ8&DZr?SM}~8X>8wMk7VAw4;etqi>K|ID}B`qbT}#jH(Ee zbYm+bzosbOe7|TGFJkK2>fVk1{@7c$t~@yJut4wCqM_PksAFu-Sj?i~VNH&NZ_>Wj zkUQs*Gi3|A*Xw6|RiME2e?0*)xti5EJw6z-7`aBT$c>raXU)x< z_K3p1ht!06NKLIV?WY@?Nmq_D>O9THD-!cjTAe=$Vz+fIO>oOuIlV8ASBWtK0f(`M zKe+VdkCf6q>iT5L^1MA^YMu>0g1(P4nL9jlUJN`u%o(H5o73Mn9ZHc=CoaV0>Kr@9 zuuuAp0Pf}L_rCXlFW&s~fdEb0N#MbneE#&5^AAbnzu&f?J`$RPATL)mK_InVDXx@r zcr71Fe7MYgT^shwHnAqoJFVhV!-NUjg4_-vcz3Zc6^faRqEjrd%!Uj8e1yQTq*xfK zjtRLLKucjfD!MT=(ByFmx7(HWJ_-yfVjDYwZ|_&7QA}D@#Ee5-k5^9RY#ekcxleu$ zlxS;XGIDFh$@2dfuVHe1B+4(C2Vb-CtUs?g za9p<3>EaG<+|;yOGp9w3>G@WLF;;-qRc*&tS)A5DMgHd_hP_;G4#`v;;M;$rN;fhR zOcgiDb$b_e{w=R&to=|0nJPHRvma=J%t1|aJa~i6bJQK?ZA%5(x2;85xq7M{#NFDD ziX%eZqDp*|UEXQ^|6WkX_xlUrj4N#NptQuF=mC2rB3;XsY}OMw9G>~0({5w}hqwWb z(j@1@4d5)MY39$N zm79&_s*+L?eG&ZY-2kBN3NgVOLw|s^4@Vl8+?D_K?6VH*odoM05~C6cSa#g*0!``fs9J7!_D9Nl7#%NF*t+Q#oy!Ke z$6zr0x%OtkzNjV90u2T*nApQNGu=p4ozFM#0hgO37zsiUz!96O=qzjbb6d30K77{J@zvrKCcjCqQ1?RCL?t-4#CD+K}srxy(hjgjJs3r=8*8zv~Sq<;TOpo?9=^wP$dW**Kl( zV&V6^l{ls80+?XuZWE@oy5o+~Zt3Jf|;#Es8rv%rVkdH&>Q9-71({W3$uLHi!*e z@9e~EWm=@(w3W%z->O|#Mal4^hF|DXP+C)N%29%eBCN{1+nLCOXj!kx zJPv#y(NH$d@D{!WZ5H%uHRSg9p!rRX0u8Sl-`W6(7C}Mi;Q0X0(gz2?4=%iU#c`x4 z99@*3kn$^tWr^qb7U0MLC*R%!8t@d?13@}H^&m+6qcV>UW$I?0!ce8BeLjM<6=uI! zzYKgxiP4aZeEzFl6gHo09;~sRp8ORSU|S+dD;2mt<48HA=qFcl!vtmW!2@nnDR`N< zi0hG*Iqyi79re7PDM&u!@Zk>wnHmmUi&N8Lv*6{1+6i?D%K3K0FA^_-*&soxA>I(_ z*`4Y(J*VI7-M=}?0}=FoGUCdUW|@`&2`+wC(KG-tsDp@1cLL9<*xPc%6OKCXnq0St z6`P<+*TkQh4-}p-jq#wlXt%4RRB;HRs1>VkDWt$H(4xByQhj~xV8GG*7D#ZOYgoKu zl|eoxcT2DdbR`Sh>eSTsFP&msMo8jdQ}&A<(#0EdYYkNodZSbCz}DWlm6|NOkC}XbJyN?FN2iqHstdE86 zDE3-_2vU^Du7eHjdJLXlMp~)=vS!=|Wo5*}(+DISx?&8eBsO<3eYJpLEJyNP2N4UU zM|W%Ha1hL;+k^uvC`J!(o{cP|u>z_x9q%gv6?&H6zFYG6sU{17hySz^D}NTg?=}?u z^pyJYm-e+vuFh{d9$e}w{)?f2ht~SkO~qFVE(4VqryhP^bD)CD2X|ZeYMjKg?D}f6 zJHoiZrr$M02vZJA=82TRq^1!jpW(NEHhI5$T@yBN9`W>CLr&XBnjpf8xcV8TPnL5M z8}`#aSK6mmKfcw+XKXJUQ~#N$XXp7VKlZV7F_MXVlkXs4U2Pe3=B*@n1$IMOAlMCb z4R&VG&XM5cZc!xK5p$prUWQx%iDDn8yUAAPQJ$FV%6!0kMbJ8?X>vJ6Fh8s4J_pH% zZm>%_F&Lb?&HE`#g>ZJce6Va+t~;II0hz)Y@FG005x14T3KsBY_16RC&i?#K zpvJ}cIZ2Bk9ezNjz#f=Hr8s>4GMAmlNzs-Eta%L0M5sWjvTS9+{L2uGWt$5 z8;zcfZISeLmna~~y>VY2YS(}KMRNP3-G@IZKev&aDyzHZ=Thp$;%s?9jJ4CCCtn3?eZ4fexjPqc zUfVF`K59BSD&#|J44SAbei}+1&Zg8P_)sFV#Oc?MCK4mY@aT}}Kw_}<$)7>bM9Mgl zL_zBSr^n-9{o6Pbbm9q6EJ~LGYHT9lpD{qpuK^L$oeCXpUmKsrjNsM9%*YCosL>7e zB+^ehAW6D|BYAp!#pl*)H+u$&u;pCj7+{6rl(v}RyFc+e4K?nP4V7u{am~+>wTK@K z72&fCQvTdy$7h~z!83y_$Pv~%T`W!BUodEP8YP*hhizsOjnfw7wrk3vStcX`3ecr0 zQvghl!|h^UvW|vST&{Z{_l<3@<^2J^81oWqIua!cB zbstNh$+|VE3@Bm_I4NtuvnqKOA=XOBv`7K!EaMg9jw^LLx*f*&?N#(3P>W+G09tF^ z&JT>ocsC5{uuN3JHUBA=STP;S=e7M9?pf(17n`dO*MoFg9tYI+Q-0qHX>wv^bpwBZ zT{G_!!mH%vu{JiGObLMNOoaWF;=1s6X7_0S3J~cm1dCmw4=;BBB=PxmY&`Q&;*P5vK41YL0=) zl-jxnU+&yJO#sHOq*)eMl52U5g2lT;^rzjI5pqE-W3nBfpZH@>H&-)FI`vUi(<#P> zzHj>8M;t$K>SX{D;l}CFag@}>^)SJrQ=q1R%ekY{mYuF{_|k8-9a;WHe56`Eb(o>2 zwAQb%FB%(f<9=_EJ4Ovruv=tWWw7~33+bQORoXWQmJqT{W&9Y~rBTiF5qK6FFDOUC{(w#E;=u?{<*1|8SU37qa?yeU$n? z04bo~bV7O_(Q$hroT)W1&r%F@3Uj7SD{G<5W{`KDpWs%99ju9%wA*qd01~pEx9|S$ zOk`bc$W}oEQ}$9%Ojzm%@92-M0sKu=L*gO2#!vT}6Hd9ln(+m++CeAWcxAEZ_Z6!u z>uhd~kfbCx65CX8LsLE%YYqgJt;PtmVS@F)5clq`$83BCi@utROf3Zzu@_#3VFJ}T z4E{N3PmnpguPm)D;CVXq%^9X(I4QxaI`oyy%p5nJ0KwFQL|~I1V$f4sQ>`5dD=N~O z{m9HVOHGB@*Up8-Y-Q_cA!H7I1(rKv#=>Yu42A$z&im36*MBf%&_IzgeDR9@v+HT0 z(ST2%$ask1SpXNXA?!`2@sPy=b%N5DVa})W3~u#q;FMEFshI z0kXVxGS|I67V4csam^vDN;&|)ec*ojh)R|bVdbJ!>=BSrt`&4mdNgA0>x08xUA)Md zlcvt8*!xk6KGyeWJ<|8PmNJv&{#dSxk?}=qoE}xeSm!p-<=m|QXiF7m|J|+_EK&o9 zmn~x;pmjd+x=?gJec&!%VcGkgzI2WwKJ7{#Koa1kYoV3OUyCwf2$Iz$zHzzp#^AFk z7;ibSxEv|vLmSeq@$~RPbo?hyTe5O|CV+W@Tj_fkWg&-`$aXzj|7JT^S{Wd)_G+(z z(tkcR-yG(9{eVQ|B<%MH?_)ZqyIJ~$%qC;-M{Ahdj`V8RD1Q7hiU~c@r~PsE6t`%4 z#vEA`TlO3IV79Ej7Zjh5A!V0z=E^sW4OOt~Qyykh|k(*b!$q>Y)y`Q5u=jP_zY<%P7tyCIEi_MY9$CLH;i-~-; zuI2L>45sX8d7(EA=>sVhw6aY*hj(?ist|6|4xjk?>)_y^p--q-1nMLsCYBh{UN27K zFvT@3EKl8BZyVS?P)+I+Qqy{I61Os1jQk;CaAam~Zai7PM789pL^jD4w!0c`+&a1n z^nUAlBO#o_E+_n}df0ufM7ci-BvaYLm8zU5UDx1f%o>Us;*AbzfdILWIl?o?%O2n;OrV?sHBqB8w|xS zdG&nB(<1A9{WRbAZQ*1acRaSib8|kvapUkJWM(PI6m7DVZJ;uz14BX~l%kRAshJBhmk`T>MeVKTbnVDI` znBIGD!*UEc4^JBnO07cc;Xkz>aZYs2V+76XKU9dc(d~2v9%Q_KBq7@PxuHpKzIVLR z$ydTxgsJ&PZ*r$obiEXk#lLFaf2SR8yBaHbDZy@%aByoJuVPWO*|zXax|{781}|xJ z?jn1_+_Is1LIpDz4#U_iK{+nhilxV!t6h6HSk%mC*N2nAjAQp;edgPRbchXMX=zC} z%Vagmp}zFwC>o7+qwU3wnK5|H6MCz0nrMO5#l=M++(s8s|8o85OvtCgsn&C_=^irq z-jti6 z7B!2XTxd{Fk;3he)pei1MMIY9zzc%ux7E#O24dfaX%^QcH}ES2LRCQf>&9b|yIwmh#O>InUSHvcz3?=7 z>UlZC*xlH@a&aR}$LwD0UigbL&qw+ya7%dRH3#Mxz4zvcQ`eNwNG&`XzTqzul*+)s z;O%jttvjZaykS&XdUgo9v%F!oFWSr@^=aNGvDVXkUbLgXC$m&l zJhJ29zSx+juD;5G)?b>uOU5GYZK1>6hkDXmT=>rCQ}Y#p`xpo1d09`J%W;eXn1H0% zFrk~G-pl+6C+03bf9$wBWPFRFgRiY*q6BhAzBegpj7`?>*l{v)N*dPxe34$|*N5_? zsy+5^|Nr}wwx=nj>}+kr{>!)gfRq}rrg_d^WdG8dUt=oeY<*TQ{&~S`6+c;>;~7>u z@D%#LJnzpQJTjJDG&I(Q{cCUjcvtu$jhD#WsMx>vmGo};$)MD7rE=vz+xgFt{O{xb zcQXIQD*g|qvOsp=d$c-Jd~(14R%fChpqZ&kO!qI#12~gtLgu-NiOqk z9V}SMrSb6oU7LiPxAYgQdSit>{%*V7IG%wF`HMmSbK5mO0-G(P!{*lC?G{R@?!S8! z`D;2Fuk(5uf!F`0McGB0^M5@B{v7757{5N(oEKNm{#}dmny!C-?ypV$kJCZpm2~3o zI(?Rtb?aK*hf@lF)1qJBAOKqY*EcM%TVi=i>VwhXD;Otu}1 Date: Sun, 11 May 2025 16:30:07 +0000 Subject: [PATCH 2/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b526df7..c2f9574 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Self-host +# self-host Configuration of self-hosted third-party software on my Hetzner Cloud VPS. From 8ad6337e89ed68b456ae6acae161268f3e25c7b7 Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Sun, 11 May 2025 17:40:22 +0100 Subject: [PATCH 3/3] chore: update readme --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b526df7..1052c50 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,10 @@ at `/mnt/storagebox_alpha`, as specified in `/etc/fstab`. For certain services, data is stored on the small harddrive of the VPS: -| Service | Data | Location | Description | -| ------- | -------------- | --------------------- | ----------------------------------------------- | -| Forgejo | MySQL database | `/data/mysql/forgejo` | Database data only. Repositories stored in NAS. | +| Service | Data | Location | Description | +| ------- | --------------- | --------------------- | ----------------------------------------------- | +| Forgejo | MySQL database | `/data/mysql/forgejo` | Database data only. Repositories stored in NAS. | +| Wakapi | SQLite database | `/data/sqlite/wakapi` | | ## Port mappings @@ -40,3 +41,4 @@ For certain services, data is stored on the small harddrive of the VPS: | 8001 | 9090 | bookmarks.systemsobscure.net | Linkding | Article bookmarking tool | | 8002 | 3000 | forgejo.systemsobscure.net | Forgejo | Git forge | | 8003 | 3000 | rocketchat.systemsobscure.net | RocketChat | Messaging app, alerts | +| 8004 | 3000 | wakapi.systemsobscure.net | Wakapi | Coding statistics tracker |