From ddd20df86619f380263ddf3d7f18ce686f8af335 Mon Sep 17 00:00:00 2001 From: Pierre Jaury Date: Sun, 19 Jun 2016 21:57:02 +0200 Subject: [PATCH] Learn from spam automatically, fixes #8 --- dovecot/Dockerfile | 9 +++++---- dovecot/conf/dovecot.conf | 12 ++++++++++-- dovecot/dovecot-antispam-plugin-51-r0.apk | Bin 0 -> 23192 bytes 3 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 dovecot/dovecot-antispam-plugin-51-r0.apk diff --git a/dovecot/Dockerfile b/dovecot/Dockerfile index c3b7c94f..04be8152 100644 --- a/dovecot/Dockerfile +++ b/dovecot/Dockerfile @@ -5,15 +5,16 @@ RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/re dovecot \ dovecot-sqlite \ dovecot-pigeonhole-plugin \ - dovecot-antispam-plugin@testing \ - spamassassin \ + rspamd-client@testing \ bash \ - && rm -rf /var/cache/apk/* \ - && sed -i 's,90:65533,90:12,' /etc/passwd + && rm -rf /var/cache/apk/* COPY dovecot-pigeonhole-plugin-extdata-39-r0.apk / RUN apk add --allow-untrusted --force dovecot-pigeonhole-plugin-extdata-39-r0.apk +COPY dovecot-antispam-plugin-51-r0.apk / +RUN apk add --allow-untrusted --force dovecot-antispam-plugin-51-r0.apk + COPY conf /etc/dovecot COPY sieve /var/lib/dovecot diff --git a/dovecot/conf/dovecot.conf b/dovecot/conf/dovecot.conf index 4c55c3b3..a08e04d8 100644 --- a/dovecot/conf/dovecot.conf +++ b/dovecot/conf/dovecot.conf @@ -85,7 +85,7 @@ service auth { service auth-worker { unix_listener auth-worker { - user = mail + user = dovecot group = mail mode = 0660 } @@ -97,7 +97,7 @@ service auth-worker { ############### protocol imap { - mail_plugins = $mail_plugins imap_quota + mail_plugins = $mail_plugins imap_quota antispam } service imap-login { @@ -147,4 +147,12 @@ plugin { sieve_default = /var/lib/dovecot/default.sieve sieve_after = /var/lib/dovecot/after.sieve sieve_extdata_dict_uri = proxy::sieve + + antispam_backend = mailtrain + antispam_spam = Junk + antispam_trash = Trash + antispam_mail_sendmail = /usr/bin/rspamc + antispam_mail_spam = learn_spam + antispam_mail_notspam = learn_ham + antispam_mail_sendmail_args = -h;antispam:11334;-P;q1 } diff --git a/dovecot/dovecot-antispam-plugin-51-r0.apk b/dovecot/dovecot-antispam-plugin-51-r0.apk new file mode 100644 index 0000000000000000000000000000000000000000..55036c6decd977882f434ea9e0d321315ce9fbd8 GIT binary patch literal 23192 zcmdSBcUV(d_b?hnMMcF5QA%ViI72go6s1IAMpO_K6p$7Kl%Yn71R*3iii}c~L6j<^ zz#vUZh_nPn0!UMOXrXrqErdYI-3M&%JM-P&^WFR1Kdui?&e?74wbx#KpDiMI6Ab#d zPH@9pi{I+pVX$5ijMI+<7V@B!Z>H6U}TjNit%hm`RR~?SF zeEd%PkldwvLUX+_f9#n5K}E#c@`v;D{y9bCuaa|yZVB7TPc+h8igHi1JaG+A?!0m2 z!(V^@xHI$NbqnL1Ck1C#=Y_$vH%ULN4BVl;>GUS)dpqud7wPvp7mdtSiVy8nln>U` zKDWp4mxt><_g;PE6NimxfBityKOzLmpC8|M`1T%fK^>haNylGbdfPgJ5F$*+cjiq` z1z9i(qOvJmb+*>NiL9sUeTGa*%B%aa)xWidIc^w1YjWlot^xKQwv>6chB%}h$0 zRlC<@St^2SsG;7aI&SD&^*%XO=oi2Jb3fHfbSvBUempH%d;~R`$g-bf3I`%g+7^iB zv$-iwE=MOP@yACl@`xR^+4k&ydp{;gS)OEA=kqLtDS4vjQKvg^eChq-vrd)Nlc@^( z3zK+Gyg#EPn@D&<$=DSu<9rme<#o8K6t8>6rTKTys0PNKY|U;QtD2iszU6~qn1Xfg ztSvXRM?U)JmHrmYmJ#&yE5_z{MZAJRxOF>HLDdoCipR9&-j4O7ek07kzj1`lJ`IwF zt%t!7-!X<&c<1|du#fYTXrxhMWY~QC-mFsxUac#|9-bcBdts86L3_WOX3#v9JrXxG z&q$|W6mGpT98Uo}O%^B)iL^f`yQEq8r; zxQ2oMKJ8M=ilJA_J9s4`eWaBg<92^z4Vit8dE5AWdc(E76IQqU)J4W(baofbRk=PB zb9}lo_9QE~a|k~jG`{GKA4DF%W}!$m>+Y$yO6d4_Pq93%!7gTg51u{GPR&k24DVVU zS00^>(hT}BJX}MeyiKEkm17t^V=9$O-rAQOk|Z16_2dN3>7CP6Q`YRRn3~0D+NYUji=j4m*y2K@=%iSg{L2yl2OE(3I8HFvZObGp;D73H}R^5 zq~Vpc+4y$RLh34cDvn1ZwZwh+*~BWQ$vMVaXZQ9A ztCQ3^J%6=KgU%v6EzWx-pPo^`Tz-mPyd6)v<)wnE$ z-rkBiqw!Zv;{7VG=A1$5oIc7Q`zR2F<+{pN9zNd{^v!-{UBQhk3z$j>z!DSD$TD$Hw zOui!U;|Cj`oZkh0UE-kH5=meZRdd{b74X9=>|vziD6W z;B9z;(P2UJ{C~7H2{cXRQfJKdhQfc&_dnN^`I0<8ou5w${;n%TONE34lhyrL+n3Mu z0Q*zXoE3}(_|k68COAf=S@|vM|DW0&up0{hkRB&`hnY+27wjO^7N==1zTfRtrb)Y; z;?4N^KRJixHDp_j{4x}JnlVzCVdpn|U-i%T*Ts)BQtDc$xeA{}gitD?r&WSb+JK52j6H5KChKz&`W&gg~+QUl5 z(UUQSgO>lC@PDqcDeWx$E%|oSuX~} z^wTF_P4+0up8$&d+rKr0zm@;>&D->GOMYQTyDHIv(bL^joa%i6t)}F;ssV2(oWNoa zr=|Yq1~USIYJ}v7F&*6SKkQ&vsnR*-I2yn5mN1VI-ER5DCqKu>6YI}>Czy1S$mmb| z&^Whnf%&1<_PVe8c>lACXKBIMy5mox70C9C>E*_rw6USI57X5DEqTqrs*7bF#}xgR z=I?Bm6K|d0STgqbd}h!2*lyyoldJ1>?%BLs*GOMB7f{t>b|HUF9ezjap?=L`?<@LK zMLw+Ng#@6_pPA5zq}&PHa~oRH3AfvZ>ajJlcuwHE)@|A3iGg@SvR7w6qQyBG`$c_! zwn3kHCEi;dNK?S~^Ze_M;9U6cqV5U`!tR$e!L;V}%7y~6y+WJY%LQCGpRy|7)!{DjXb#2zdmVWXxT`=%>Y^x8Q)tG!~6_Gz-Z8)fpFl8MC&8N?F*G0I%mV;$5n{{nA z@C{q7kDo9dE3J%`#i&#Gsp5%COAb_&^~Gu_+HPLw-VqV<_ugC zt1Z$<h?vRNeS<4!n7^^=uNV zXbepldgABJ^=0!5ZTW49B}-yjvt@~XgDB1!PE%W!C6*H#N`E>|Cg$ZXjZoN)ClVQ4 zXK3Hsb@g-DHUjp%9(wj$BBa>0wB!Qh2Dc!f1^oAFh&jPA|-WW zD-1>;Let^kn_)1X?>%Vd8-Ie|I0>kcRuOLql$UTAcv}tw*Q;`ppiRIS*QWoQSq}Xe!p5VFCP~p#chTXpMX~2u_zORO2QA zVU1c{J7Yftf^ZV5pN2#AFJ3^)Zi0Sou0exJZbO8OQ-A;TcX9f*%P@i_cq17Is&0oR zU!(4sEZOuF#^LR-+j1uL&gN6M?jbi|maZRwg@qhTIZ(P~>0nu;V91Z~5{V_{G8i>( zpq?cl7=YSuqyJVCvk|{9LIj!8`@%245Jo;;_4IeNHOx(Neb{zn%5#eF(kN^uUI0vi z6Pwxd`~+z3+wgqrQazX}!C&^+_VyEHPk-kxVFDCIU?{k~{#&}$W{yyqMG)NhW`B2? zg#bkvbPy@s=d+=gbu7hZQNC;iMwb8`3uNy^222AuPgt;lfasa?*+yo1rvzpy%S#&5 zIWtezhX`g#*y!I;6-2D_3fgBp({a1kx@`D>-IgO_0rLVuXW+&&Ga54t0kov8{@Zel zKs^E`C4NKyZO4_eW4)M-pgA0~u_%DO?(m4L*Dlyi?>~?mMoPD-VK=E=em;nE?p_b$ zXj1oRsBU%$dUW*@71>N`)TWlP6__Q6f+k&5$FN+Fb0qXSzGdA|9!b)79A~!@^ujg!? zX$6EVVM>-U@0O_s!Ik=huG_$#7j(HOw+xGrQwy3$kB1#Ec6{MEqiLFvZxMQz8EdlN zXb{IFDg0zUZl0-X>eQXzorZ91 z4lC$X#X2*S5C7+|4x<+|rxcTkx+rs1SM0d%e&UO%#ky|u)SM17G3h_-;+10Jr!kdI z`7Zz_y3eE*v^zF8Q6Kxtx_Y;brxROzJ%>^jbIkp(CzqNTitCAXW)2PSbaZts^}B37 zkrH3w?VOXaiq-1if?WJd+AB%Nm!YkhjUDEGnFWv!kY}D5+bV|1l9wtiEU?66nPsL1 z>pF+pF)J=R1Hi2p)PvKVO(w?rKXsUEUJ#Fe(n1~YACGDAE%M24wMzLZ((h`$-!-?2qc}|^qBmIf@c&3{_(zU>X7z+q3pUxaU-;t(jLCiPC z+?oh>%vr@6J9oQjHy9S>Hu0JLp1CZ{L0x(u!}`?2Qz(( zdK{ZgI&}XrtE-e_OB2)JMM0yMk)Ar!ghYO-(wW&|>vxOzY+NNge|*e0^^%1n;@>8B zn?IYLkcHh(j9Pru@yXZOG5Hd-e7RfDp5I7+WKi=G&@ZA_UCke*_Id7BH zl*Q)%hA*m~4kG^VRzHz%YU1`vvBxDR@1!y@)jPk(+#FD7qHb?ZU8~Vl%5r~QXzOFQ zj;k41allutKwg@xEF4n+1DP1iKFyvon7A(V5K7v(BLgsoj?_$#v7_{=|YFS1+gZsbprtz{Uy1x8blK>IoqKY(>(a&4XDYbAd-U64^kRrD%OB4B zUGmHPl$%d3&>Jwbn>EqhKlW(&@xf59(!!S}&R!=oyK#ykG9GWhEim^SGlSN80Z7k>3sZK)gQ5AYud-Jqj_B4g-5h>=ZP{lso75U7Q$oYs zI?^(4#bkOFX2p6t1-Dwr*0t6FGC%QdwFqYBC*>72PmZR6q*ms z-AElbcg<`vbCYVipiW%wFn>XO31G;EKKU2I13lW2PCS#^<(98x27Q5}!YK)UISe~WGEB|{=ueAD0At)l9oz8!zdD>_1|K%UbChCKZOg_b)RucD}35I z?&wD>G;=Nxl~)#P`c6zlJJZwanw?4ujno^@I_ruvlh34DSQth-9ADetl&co$q?q8w zVJDqDpj7oHoQXt(yeI|d*8TAY#dbgl(=xH*@f}Wnj{eD)K3g(75I%p7S6_FMU)z2y z`unZf4>9jfF_Vnr81s^ww@QoW7VVV$oc&mq?XGCGn8#0 zdf%@E3_xYxsDD|jIT%U7A$p&HNzlHCn{0W|Qm`FXi8%*Ag);A}?8J=bk~ zy*}V3c-)kPY5A=^vs`6t_OuD~Qe$@?3s8o+bjJkaz@<3B0K<$UHhV?@u1@RD zxJ$wCeqc=d_J9VcIvZBzV7mL*!yjN;B+z>jR@Mz*{JI%t0fCYgxXA~DkQ)QCS39pO zy9-sbVLtW{jLiW&&^qf0Tk3=WpFX=9l=0Q3}AmIIAE0+YaiSt#oR4D&&!bFjGIKoPUC3_}9NSb>>U z_@Xe}DyY4%L}#d3u&f)J!5ij61ieUty*vQRT^dG)kWv7P1+9Or3(z$OsP2I+gOaTn z4BrkKy#;#%LElds1H9Lr$q|ADf(LS2fRQ?&ig3UzD7hnHkHKSB0H$96=(`VgxdT8s z414MbHaQyXD%7|gb`LyqL|~>Q&<8D07CHs+iHE6m7?d6D*$_a40G)t^5kc!!utYF4 z9k%ofnB~nnm<$9^0){V+2m2;e<^UC=U`sBb)khVk)doPUgH5}EG4rr?C-5*8=;cAP z*1(p|gHC3!vb)f9nlPW207Quxj0?45U^C^=w8}8+-@qV-;Hlgv0RqheH<{+^HqIbn zI9quE!KDK*gN(yAu(ox*q_$nh0z?FQm7F)j%Yp=EXvFnfdrbl3fbKWNVdT}(u$f*^ zd<|&X3VK@zd_?P&!Q5b{`kt)cYO@cPYyoOxVaM=#V9YkyW2pEmOuy%GfBSi zSe|@XKu~R6fHUS?87xbvER=M}1{MUnxd1hTfXp2X{cX z$UyVVB^YiRDjUIYLu*ec$k_UPOF;SxMd=p`TO~{Lfg1No#2>pc!Ve^~DVA|QdS~Sl zL2>hgq22EN^3plD9}Fh9Km}XV)s|vyTlOz;?R$6C$n?L@iZIjKDdQdZe(r%-62)%VUl!j`JFVR{?d z*Zt^wzU17a>;{>4hef>gq}>8t2Agqz?Qfv4YVEk)NGgDrxw5-)Dv5+~5#usAa@2`* zRS7NSIq~@icOtLZ(GQy*k=R0GHJS$YED)X<-s>SVE_~vD&_mwuAuqf9;8LPzzLi~- zz6%3u4F!-5yO2t%*;FL~TG76FQ zQ?pN9PKK7;Su+ykl4Utc;8nnN$QPy1TZ&1B`acYM4r!lkq%V4eTpQ>aT#htlQ5J1O zVlC9QN^f;nzn;aqJ2`8uoU0-)zd&uL&G)gh6&CKJ_vL2uM#IbJ(c4Npt+xvjR0-9> z@#sylBA2rb8cyK-W`{`kBt7YtRlFPmGZ<-2DkKgxS;&Y;t}ekIwO!oMKp_z4W4lW_ zRyN$wl}TT*g^-PvO{7y69FX@XpGCw^q8IYuI*T`}448?Wt075PKQ_m(HVV6t$a4&l zMwvlNXh?keKD!|b`|=>yU$FwNG96#So2mXNUZ{3R8&l+Qy??%QXKqsi@AT+}wk&-d zUOj<(_hT%NWqL%5BDq?fSn~5Md&*}~L>seQ`MLUS^?1_wTlQqKj!;U1FZvCee15ca zTAX1ZXKxt9k<{T5cvk_9COXUe{riS9&%=FYYHv&Th^bibzsmp6+x)ModFOaq908m|)ZJpt?*+tj2wSN~P+~TnBCMTs~LKZfmTCwD@`5 zum&@f>cScF(h+TyJ-$sMB@ZGro9MoP1q-8ijkEj4#C3Q(lSuOkV5l)SG?5C=mE9t( z-c8`8B5#=f2^NB-|5BAOh9Sf4+Pk*U_703y&F-5R3GAto0S#Gjky4Nw-7W2xLRhMR zmk*m%Wu0w&G@#VlAYA&Wvj_AztDUXBFV|r?amg_R>ypXGjZQh2JmBR36xq7>CX;x2 zij_V$ytIm+NvGuD+ftJM8Z|4!woq-2a;4xv*ZTF?oU<% zE{WF0WN`{0hNtJTo5R%I_SPN)+`8dNxWV^HjK zAq33;UIX_Kl_K>EVa0G2)iDuJh88#O!k-(l>*_k+z?~4#m<_7JD4H(Q{iUgX8;?b6 z_E37+@B!`wo$Ro~lQzJePY8D(2z<+=#MVeL_!Yv)`jHncoK~Z%#n_JVz&m;dffd;) zcJpjqVQGYxWNu-$a4`Dhe7ht)rXgE@7&}Sv&;X+3GCeUok6q+X2Li;k#O+i}6&4!! z=R#=JJVeQk0ZT1Yg+ag>*kQ3}4XhjdSpi8OJyxYD+ z&q2-OLLBP-49Vuc{Uqy$?&B7K#rdyB0Mk|_Qj~V)rs`-l@!tj`Z;0II+@Gs8YWIKp z{!rs1{74|YoLbtqT;3x7DkvS1(Q0tNE^ll?luo?e zucS!z$@Tr)_omj$a+095pQDza!V3M`Ky`I;ga}Zo_MSttX_*n>oZrx2*>NPH2)A-d zbc_2jwCp_`B?4`|h24!kh~q3A95t<{!aW!?oLpRjZ1jP_XoM9%FoGfGt4?5rb}9W4 zfskb?YKjj~xwEy3L7aB`QAxRI(cIJ(;fBgLv)Y#YiU@>9!-3qwxy1;=n?1hjl;tza zcOC3%M?Q2mgam5HM|*QB+C+0JR|vOMr~ongs`^)a`t+BRjf94Iz|np(*(l4>B;O_b zDpG}b;ML{hDZQ9v5KP z)%C%k$0TOigyOG44Sm)pNx9`QP}@69dZo^r@E2F4dfD?O4U?;fNecW#L4^MWGmU+| zD-SXD(&~OrZcEYnz;gJ3kz!~A0s-{Q+^T1Ao4?%Nwm4$J+ zJUT~>TEp-epB9*G=P(843g?!>C~sH~!ng03dt^#J=+0^Po~Ve3p7S(>w1;q@8hlQ% zClr^tLkqvWa{)DD86qt<=Nvw4`lm1B4MyS`aO_H}+n4LhmT9v@ykJ2Fhz8nK-9zQ=4#a`ME@08Auaj=VPD2U&88}o#0 zkDu*P;(G$>1#%u9nrtUj_*5m3e~R@xSEV>XpSKL*DsqofA=g0+FJb46=3^6r-4zmL z#paB_vX_|maM;E7%_e-5me>HAu$9ZufH)O7h>em7y1M3MNRIKRJ(2gr>FP?g%%F7D z%Oa*Iv&{GmDUCh3(cABFtmbK+to8SB7A3wKE^bqA21*6NGJLeF5;g->fK3QRx&U|V zsN@MPJ8suU@qHII(Jqc&NQ~YAOca6b5^~K`R$el3Ct&;;-*;h!loNUK3ukzv%zK=J z+L#drcb&9)3u^fVT*v#Qz3HB1I`2|Qk}8*#EmQp09sq(ew+h1EG$i$4r9(!dnD0RX z+gIDW!e{gXfycZz`HVLSR6t#3gw>;$UwZJlpyA=6g%lLaS9?*PKa#kL<>bTag}DKx z#u{LS`Tm-a0%{Dm1%`c0Q8Mun899gmXrghF03-Tx8^Gw-!}h5we)v6h-WB?zw-iNa zO5AwV!`ZM*W}--`Kgw5<`^e#o)g1tO=ijaF?TN$xX?5E*EHu>;xsxC7066T*^FU9M z+uR!tEHeqA?gKoZ;hR+iY2b*(($BM|mx2WY*}w?=I9R+wqQD0L$8@Zg7rgN-u{RDo z#QExrgjuwmhSL7I2|b5tVSr^4Arv`ykb;WbL~D{x97A(#Luhv)$LHqHE(sUVgah^s zL6bBdihGP25svdYvNJa*ON3p!yAvHUYyZtDSW_@{4h?~!G7eu|1DVtUZLM932KK^3 zQYia`~_{zokZpVRHh=%QTvojdUy7 z(H5y+_M%ivz4c4l{|w7)^eF zKS722qDu%7lb89LhL!L+fBI7cxj`kaD?kZx^m?i`FR*y$s+yHa2tzI`hFZs%RmpOL z&|&Ummg&#{hyzHPl6F-xV!5eexs~a&DEx+4i+T16#XmQZa-!wBQ3gN)9i7r!9du2!mK`a7F%LPu*}*7P}QuPC{R zJ)wi46Uc`?@ylwE_c@Y3K{3=u4MFr0J~p3GcP7 z$M_s*%oSQ%1lo8DTWtEw($bjj$3*;3)CkSI2t$*B)S5`axNd@r5BFhRCKG#QUj2jW z_SduTPWjeTg>}YG7+W~>;8?H}o=OjDmH0th=GmEn5t=w|-}ttc@)nWlrG;p1Jlh^O z_+sI24GADjuvfg2y?u2P%Ee@s`D_ppe%l1}$=w4qZsmQkxoW1k zHaWXU{S%shHAI?l#rvnhwm-k|kzw3}oEUywy0V)i9`)fE?5Tx)5uvQxzUH zz3&%3CE>wrQRvFRnq30P0M$w%vnnzo*MT>+R#&O3J-w9kn8~=0JG$U)P+XFChl;qjq_zzS=p(ai6eqPwY+m$!99NQr0#<3sOp#ax#WuSIyDR{1Mh2bN| zEgYXs+?GihskKnW|NMF&3|&bzyx-VXH-fF-x&ve&L}*QIiuSW#wb0Vpsvuxc4-b5H zO6knI@P-n~vgzGTw|}%ZRJ2Fh3)KWVaYU2^UEDI!5_5Nl-Zj%r2IvhV6M>S6JfkY9 z?d-`=>6Oz}iiumrSz&0x8($sfP3GMebKJ{iQ$e-)!q@JMC7__cur=_-O;8sh*8a@b zE*d9x&yg5$=jFcS4-5@lA#L0P;@~;K4AQz+pNqPzoXJa8Za(8FqzsSvm97ntZ{A>NtC&iO(6kHlBQz1YcZak~QoJf#moG@8k4B3Ech;v$ z(T{Kt1g^>FHjz{fRKZtHtNF zWs#jTciS2&lppWmOxrbzc^{wg{aLVj7mD8whcnYs+RB|J?g1ag*$h-L&@Y;A)N>*- z|BQ@qwNyVf8p4n&eH z-}6)gq?6cp8ixhPjH(oa31YrYgg23sryPNYn@SG{Hj7Chfz2{t@!2cL`z02e*w?wJ z>B^^wqk)`Ukb4<5NGVw6PlGm2Euu7Gxte9fRHe@_NgIEaZ-b&v=y)$b z5JQCL_|AO9Eq2|BD22~qyOkdBZXu~3V-tGL0oJDZa}_nDK+0t;g(I`DSn4F>khP_B zY|cQt0GOp|!tyNSkDv6wQI}7EM52w1!-phQtFCiZi{U|&efWuQ&A*IJse5VxmCYZS z1uO`8C#YqQkonZ0nq$OUHxw39_+vQj0@P+&IhUllIxF1^cV_v11X|QroqqBRFqed- zQm_vo#oEM8W>h|%Qmk{p$P(OoA>lGG5s`{%z>Ch29599wZyY3~`G4>}flMJ=S3h3U z|Mq5(lcKL!L%y}W&O~wq;g>3@@t|nntDN+##^GOEZlR4u@TuLK*ok;iZX#Zh3QgR^ zP)p?Ht_p?cvC8HinXh3_8xKa`^p$6;(v1 zd*z0^_f~h5l>OI!K3>5O9P=-W333T5W+Bp)3>2RWPp!W{xd6hHv`X79AL$#cOvLAH zHuXoXp`Pux*OT@FP#o<8(y8cHMLdcMvMB1BAnnlfWfb2Mh-{$K;$>hymMJTx@Wdq% z!O6sv;&X1&fZrM*Iy6KH3$s5NRq0OOcK+A+zjh=RdvIYIzn2#G6wNEO;kK3?vB1**7c%NrC8VrEhlw*qG9zgO0ax z<98;#_;f8%(A&LIl7Ek5Q&{3o(0~Y&!zQ)Qilrtj?E<#>`r+w)Wq<-?!UJTitcdA6 zHrm&3T3okER{`(*gIvNkw*FEhD`*+T%7c&O8PBr|oOnr%&GdQ)K$K|CYb^VeFAvAd zd8e&aa!_4Tg?!n^P=z!1j1dSlSgp^N}aQ*;0=@|>TgYuANhHV>OD>ffrw zbesC~)VUbGUWlQ_49ICSM1f2aW^s020*OzNdH`uq{^%z-MHuF`(->XGyHW8TEFIIp8wkQu@CH5gw?;30I!8vf!piUOI zYkx!X_+pk4wz3O+?2NvI4#mTHBh%-0%(>2v&%TDTwDey_FJw=Hc=+C=JzoqA9=*W- zupQ*~q4dSlSxCjMrZ(a}c8Yo5Op)+yYGWK&)tvhLdawwPJoucyCqI+aca6X8I(n-T zWDb4=BE%o;gEQLA`D_rCRL_s{Nud8)ir&vI#No_Hp6~~U`goM4<^8lwC{9z`H}?qb zXZ#m1V|NBB3oI1xm;9ONH$FEdc=hP}w;<0ohy9K}S(DX>?7?Jzgwn+PpovKRMCT@7-tAQB+24*0>6}@-P z6?p!B*$04t8ES+@_#a#V?oZ2P4Odl50^~e=@vFIlaPsfK!PlH^+aykk7H%b7aMhfp z9NW9nN!bk&@*dK_@!@Srkph;h9M}p$kqUS&}T}LmV7q@_nSJnMxtUuJQoY)-;bTM7>PccVm-um@gZ|z}_a4VgXvkzw_E*XF$m$6u2k?wXr>li1Ds{{Y*AlP^QIDCLJ z#(8<~=$AR9?w=~;Q%+iM}1p^=n4n$`sL=u5;M_yB!elx(@q0#^zs3hMR5ND%+ z7gKx>98LMTb6cblxBEgL_)&MxJ;P6dq=3qvxwiY9henVqsO>#h8~%=Zy|E1(A~1TM zLatWgm|>}eT~*f6z)5>>P?xwovU&`6e^@KW%#6^ajTtnoKe%8$n>W9ybPRi@dI~XPzU5VAp_bLp~^3aqu9vRNCE8Kss?VP@+s9KrvEaQ*TkEX%KF3RD2gi zstR~&L6$mDTsoMu_i)1x(0?GIn2?Y2E&x3II)=*y8IKj;Dr<0CcS+tI|XUCjfGS3hZvTBD@H;z)KL64`mhn81#v^*>xuO&+< z6GQNk`A=zZUtOW$JmHlfLwiUZqOvzk9-eQAy6Q13B1AX zSRQY<)m2?b>vH#!$5zPxqCjuMkgdmTQ*2G;%1af=Q1X6#IeIilXS|Dv8-uWNq z_lYa++Ip@hW#7PX>+)g*-CALR!MzdUK-C6^oeP0G!8tigPXxr{`IgWDP$Mrbb=g!4 zI*l%x`aMDf=&$}0_c&%_38ycsk|kF7ZK|tZC?o?jQ3oFZ2UXodb{TFZd)gYdflPCo zzYj2VI+z7=#Wuo6rPwkF8tGk>k74qNlVrs#=8~OxC zC)vRfjBu>T%j`{Tvv%A8$rJcArs=)VOzn1`YdG$sw9LpvakZ-;|EHGd&;1C(yW@LD z@_Ng z?jTjhTItkiCSn_{e0Kbuq=ou)yUHoxvCvdN?w2pTIxJaC0vu+X1Tko(inezVp;{G4 zfjL5pNI4GNNd9$kX}>r8iT~`1DhQ2;pH7^w11h>T$Z(1{hME&#H!HUk*m9c_1B~- zb*={6+krN^wQH`>D4VHe~KJYOOYB3a^ty!HVjI}b0kEh&fOQ^OIn=ZQ9mY|wWYP^BX zB%9}%W3pbx`{pHoxuxJ0t832mDsB2ZGe6vHGQ;4)6!-!^v%A@)MV(am8@M<7w_kpb zqhv;S@tLUrX1$^Is1w-%ylQ`w%nL87kz&G$M zopk)mZtGldndA7A$NBNcE$Z^GLbqQYz0?&y_vISH%TFg8U6gBEntYAWR~;2w!HtP1 zxwcr@&}3n&7@vy5Y_+yu^+GKaoiejCev@#P%Sx?lePsVv>{=ha$Op;x9;Jo(7~3(| z>PN$klO8a*zEq~_!sqxB;f zemgk!`5MF{Iq(7bIp6$8(B%=a)yoZ$;B)e6%NTvH2Ie9O+c^$5UcP50}a>o5?Vkd>{5=6vPLY+0eJx4B53YxHgew=s^?OhqN1k#Y2n9P%DX8E!Os zG1U9%hUz(th4UeBVxCj#ZP7RhI@MpOOHMumt{C_uFF+S+}zh97jR{>`BXk26%l$Z3TSmp>RyL^s+Ob{EocvaVj{%&3>2#`4vx8+}u0Cm#c@{(N@^FjLbF z|73QbZ-)!X^6Ec%58&jT+EXZh)yey7vxMWzYB1$vxdIEv7g63;$8*$jrayoy5IKLo zoC0?a_A^@!xn^V$)tU9K)gGS7eP7#}{#HB;-COW59ypuV;#3g!Cb!A@!dJj@1#ND6 zjoyz{Oxil)eMbuH3kw@>8kctd4Q>MMPj?=31#)1Y?EkU=`r3aYK4q04jjmEx!Id27 z!~PCm(kJ)pK>8Zf8?>n zgzUt&)$M%QsnPf=*r6{mu_>kqrzcQt7)rvwMTK}H?5*l+4`TlO zBGx-r_p$1vUXR~z*G_+tePJs1f_!m5it!gM2jItT7St*H)$ z3rA#%FdIj|U03>gcg4&~52IHEuHt;iO1_cW3Ygs~BP*G7xSQzhcfHLh&-k+@iUK=i z_v5+FbE_9N&OtY}&OM2h-DV0zJv8}{t4#0|u@k5$ueOe@lPKedz=7MfU0=bJjq)|u#Z zq+!F&F}K>(w|%~T7fFm_9;`FT?Xte=$a>W3Ya#Zw{I{@`T|w@Ag(gPjT> z7;OldAqUx(_}xRG_6&&VzTx-59nP>D!rw1FxTMAFhBFXD4|VM%=+rjeVJf|c8b}Y% zp@arg5HHrPkP!nuclb;$++hocRcWVTZu1H;fDwbM@3y0q@syCF^?iKSfh z-FECl|I!up`jv})Z?Ig>bqvi4e=simgyozFlJ`UH-pGlE8%72;)^c@1It6YD7}aug zLJ+?@<>VvP&>35MEak2Q2hPtr;>HoSxDA(slhF#Iap9=2V z@};Q?pjBNcy<#>rDX@R&uIk>(^a>-QnHs{-b_QXGL%z_rNgaZv_;1mGA~cnM;mW zn+;J7Kl0HMNrOwBba<|2E&t?3@P?aO)9_v*`hmLyOn6CAuw+pdnV^1;W;^d!Hm&!gi-K}`$lw%}sP%j!u>tAxoIc^~b6YH%O zAoEUz?7n#&5MqfJS+VZ5P^S=kM97x2uU1sA^eyOWrQ=yKSl{R5?qO%26YJdFS<8!3~A$lM0|60vh-sDw9HO=;C z3yH+l)%ChAm7iV)&fg2cr}9sx_h$gwNdVf3m+N%j>GvU;#mI}6v6mJP_<<-!4c2pi zWFrkY%qW4C;N;?sBM%3#+ph#yQ)haEf(Ke`9Sh803a4)W0lDUz-{hKgz;XO)TLH7O zt{oJ19ULP8$h?pSEm0=uM({a|Pl4L)wkpdUkCESqYI!+RulhSastY|-YOzf=kBgH( z0tif71sWG_C^G9OLRACTsAhw7I4eSS5<+ECUFz>Cgkw~C5Y0ACRn0{j>QX#X>$1LRhoo*JW@v4((wvFNm@&-N1KbvNB zoiLZLcX5f8wbojS{^#Dw*|8?}9ev@~mP^CbpYfKitRdtKa1RP!lMyOb>f3MY)@O;pa% zElO}RdKDim-E+BBwnZNB3c`o86P71hOOUR8XEf6>xkOD({PwcYPgHj7IW z{Vxc;I1SZz>WGK460o@NsTY7^ldVb?PEdnBqaB@5WTxV zy0lIJ7G-RkQapm)1~d~k43JFxh3Q_5M3L=lh@{_fPQbi-xk?Yq3@q43ywSB}A_s2x z?!Q)7Qv7vwOI%lt8M6?+!0^}Qy{fRc^Ox3*(hZ=KvZ z^#E`#Qp2a;-o3>4m01jT#Z~}Qp5VC@Uum~>X8LO{C!pMUEs+(o<7u{zi;Un6Y6!iN z8JX}(pjk+Li=Io_;gw4kKtXgXo5_dKPaHSZSGg}lDE&fd9H;NZR+gO{gkqW*unn3) zMkwk$;6*EAIW+_@)l*zJ7G@*R5MO=~MYRw@e$zGFikGSy7I7ucKv@)e=9|aS+P$y1 zyN>$*o1v($>?$l_3n8u72WY8gAIxZX#b6e&D0B6XoN{uJ%hUZsI*H;(A#33DO=MU9=bZm}`FjzjyupV(@n2w8g2hSDyyIy!mFbiPm)G%nh@2!-GNOYp+#p;;B+= z(k@k)ty_B3RaaN<)t8(&@2?*=M_EaqKNe&vKc!TY*Ihk5)KYd{58G4|nYnX9pO$FM zz4kdvllN8S)+y)wwKD^*r2@@aIm^5G>Y6!y{!1Mrr(e4KG{|bM|MJ6;u+y;`eE-}v z`OLF{?|>CUJc|Oe3&VleH(b~cLoIphO&)~ zJOx{MV{(}n>jHH+uouWP>K-`DSFo8mhmnDaApyv3h&`ZpfsJ7cW9|WEmMsi#V;Ah@ zUSrIlz{J2OaDmBYKQ|ElDdcD1U}*R*c!4SATf=EN0Y(PkIX;X`MhAAWuc z_&O#t9pMDp4)n}(juVV?JsGWpfl^8g54>5PG$aKzBr(;nGiWd{#4l`>DX`T%@Rj9< z1%ssm)2)VbfeFmJE;E%ZKaelUAiya2!IY_}!Ie>`VFn`uE5ie6mnRL2v>etn9A*HX uxz&&_xPhIaL-Ye1Fj$xr6xbOKM2mi~1%=Tl7)c@Uk3IEu?g@qk3=9CB?vfe+ literal 0 HcmV?d00001