From ccd998ab042fdf7c3f3c3ceac9ce9096776051ac Mon Sep 17 00:00:00 2001
From: syntaxbullet Open Mina Habits from your home screen or dock. iPhone or iPad: open the Share menu, then choose Add to Home Screen. Mac Safari: choose File → Add to Dock. Chrome or Edge: use the install icon in the address bar, or Install app in the browser menu. Installation options depend on your browser. Your habits still need a connection to load and save. This window will reload. Save any unfinished changes first.
Sign in with your Discord account to save your habits.
@@ -230,14 +234,16 @@ function Dashboard({ user, onExpired }: { user: PublicUser; onExpired: () => voi // Refresh after returning to the page and across the account's local midnight. useEffect(() => { const refresh = () => { - if (!saving.current && progressSaves.current.size === 0 && document.visibilityState === "visible") + if (navigator.onLine !== false && !saving.current && progressSaves.current.size === 0 && document.visibilityState === "visible") setAttempt((value) => value + 1); }; const timer = window.setInterval(refresh, 60_000); window.addEventListener("focus", refresh); + window.addEventListener("online", refresh); return () => { window.clearInterval(timer); window.removeEventListener("focus", refresh); + window.removeEventListener("online", refresh); }; }, []); diff --git a/src/pwa/assets.ts b/src/pwa/assets.ts new file mode 100644 index 0000000..bb215e7 --- /dev/null +++ b/src/pwa/assets.ts @@ -0,0 +1,26 @@ +import path from "node:path"; +import { manifest } from "./manifest"; + +/** Serve only public PWA files. Never expose the server bundle or source maps. */ +export function pwaAsset(request: Request): Response { + const pathname = new URL(request.url).pathname; + const headers = { "Cache-Control": "no-cache", "X-Content-Type-Options": "nosniff" }; + if (!["GET", "HEAD"].includes(request.method)) return new Response(null, { status: 405, headers: { ...headers, Allow: "GET, HEAD" } }); + if (pathname === "/manifest.webmanifest") { + return new Response(request.method === "HEAD" ? null : JSON.stringify(manifest), { headers: { ...headers, "Content-Type": "application/manifest+json" } }); + } + const production = process.env.NODE_ENV === "production"; + const filename = pathname.slice("/pwa/".length); + const icon = /^icon-(192|512|maskable-512)\.png$/.test(filename); + const shell = production && /^shell-[a-f0-9]{16}\.html$/.test(filename); + if (pathname !== "/sw.js" && !icon && !shell) return new Response(null, { status: 404, headers }); + if (pathname === "/sw.js" && !production) return new Response(null, { status: 404, headers }); + const file = Bun.file(path.resolve(production ? "pwa" : "src/pwa/public", pathname === "/sw.js" ? "sw.js" : filename)); + if (!file.size) return new Response(null, { status: 404, headers }); + return new Response(request.method === "HEAD" ? null : file, { headers: { + ...headers, + "Content-Type": icon ? "image/png" : shell ? "text/html; charset=utf-8" : "text/javascript; charset=utf-8", + ...(pathname === "/sw.js" ? { "Service-Worker-Allowed": "/" } : {}), + ...(shell ? { "Cache-Control": "public, max-age=31536000, immutable" } : {}), + } }); +} diff --git a/src/pwa/client.ts b/src/pwa/client.ts new file mode 100644 index 0000000..b1c39a7 --- /dev/null +++ b/src/pwa/client.ts @@ -0,0 +1,90 @@ +import { useSyncExternalStore } from "react"; + +type InstallPrompt = Event & { + prompt: () => PromiseB!yC56s%)zn%`L6IGAj2a;3 zNYN*6Fia~MK$7`jtQr{YLna;>xsnA*~v$klTkO@_jdcXIMUH 3^HGz09))EYsb$ zeKn?iL6 ^yP;VIM_x^C!-pBqga{ zCd6EH@pN{eod*}0e9H!IeNJDj2r0gMR#sF>{A$W&_vg%&3h-4--86SXt!_NXHuV)L zaUa$g&Azs=1-r=Gnp{J1zV}@=Ystjvdu-d-RF|6n2kbh#@s#!?e(w;2?M6mgl}-lf z(3)^m*Ty23DA1?V=PYODlVT>iq!Mf)F9(8FZtU85 zc2H4IRX1@ES?~z>_G!m=Y@kI^l=0_pbbl@o%~$vo0Y-A$Wl}YM4>|nbDM#Nz<2V-s zqxWi~ax*Qkfh?}?4W}>Dwd_%&L9n%>j*6)uj_+N5JGU3ow*^uWL{S$n?PksUM|Md6 zWw4i~ZMSnlH<-8a$;MGp#}jR;<||{>I8BOvWA}gia;e(w!TQl|>0!5|#%L$8n@7Y2 zK|$+dXlhgBWIcS|vXi*F 8PLXw%*@y>97(_`gm6C&@U|v z3*$+;Bw~PvYy?=(qA8D(|J9K&oI9qr&b;>Ncs+w;eSwd`@#7W zn?GH7cX5@l&By%rEtGs_TeFA{H&Iuugf6F6h|Uhp?99_7CXie}LBkzMR{m^6bpdKi z?(JM)?ew8A&UJ*2OQ5Yqy_17*h|lWK7=Ub32 x-j=dNz?r6iY*ruzv+MWo=M}g?L`nnU zy4Ki!R#|l$RNGdZRwg3kgoX>Mw}c1Y;}+u=zrQL;*#fGK^LW0kz_mLDb|0iQU@%=n zP3h=;WULkpm)j_6DEcD#a+K&T|6-58SQJ*}`nans%b0%*o;pSL=Q(mOP_%vXUIdNL zs! 7e zC%=A!2I+ZI-loS6R4lYEBc`TOfj;YOz0<#dDnlekc#O98ea`DT!k5bgcCLY7G7Sqt zdPmf7@;%r%)E}l(PC;$_$X2C1-rJp%AQ}$sD?|Td2r=Hv4S|Bap}S!721*$5>{dL> zQq^}vu_ {ypw-|vGOd#`eF_FeU9 z=W)AqQCsH%ECchKegYhgp@BQkN^gJxh)Hju<-NC0*cgqKplG^mL+5NrSnelAekf5w zXP?{T5GNI|#K-H; ~9B)tQJ?pV4B3Scm$V{eCEu1(gxGPt_8ZUe lIxj`V zzkm}$Ypnt|kfrcTA?*z^96Bf*VzRwZh5fneNnnWR{T-Mi>LXLxw;Ord2y^gm2sE*C z6-~v}^Hb-PaueB@&_BRXN@KEUW_0A@ -0{TMydEeF~k;Y=T`SH=zvgu#Z|$` zkLMf@G?COG4q9a~D(${R?i22#Zd!0A92Aa8eF9QTTVD|M4)5y>ovc9y%*9^_Ith$W z4&`N#b0bH)ohX=?*eG7e=a<`svBUU_pz~>mj?4*} O}l&3d> zN5pM_p$`UJRT4+mz>?6q2FU0GFtPmZ`)aluYxN^@ABX>ff$v3#z@=}m@X+zPNanRA zzdzTV?=)O%v!inGWcu0k?w?8oXb6|k(MrDmkb o#Dib?-8k+W1^ z)W-}}#wux8ECC+-9#yO+IfZZPRx<$lX)Q9}d+|wNz~OKupG>aYJ;BDC6*DF=1nqhd ztIJJmK5s+%?J18@dQZaHC#>)Ll|ogXGnEYViZ! V7Ck&!3v?PW_;D^20T~XGdC$sO@VaK8a;H%JqdgzOnwbX&VK~7yd)( z@2166xFHvx5Z)q&nJ9>*Mh0l-4O5y?nhal*I$xZQ;0A|45JuvkNY-MEoezvrNFi=| z#J{U|i5=Ba!$r64lGr{+A_N9&_LRw;x*h>-gD1V|bXLafxea1uo`R+@5T;G&HcN#Q zy7<@*0jDfFu4_||cPAbsh1Y}WP18SzVRVn3TMjZf0bI5NiXP--`2u zT1Je=AuRYANw^yJXH2nfS =r*fI*t&2A4CYuq|zZX9A(neuLybXx*D#lkeuRkpD8%U;#lWi93#y08Jy_to}B9+ zpBr_LTb0tZ`Ip5_9kOp&X~o-PVA-M#=cydy8h1OD1oy8>hur-z!qeKRr&4Kh@fWWJ z5E+U>MT=6kaeVyW5elVjt+h82`$7&KoJI1HhR05kd9-V!7|!8@QkZl4I&RmX^UXG~ zKy2O@uDMk~Rq=5tYBo~byWE#vgs2l`t4!Mcmb1pQ)?3E@*9W%1M;$ix(7-*VC2}@Y zp1w7Gq2*wFM=FVA^oJC-B$a3eD838_>mH$B-yI^f7q`aDnc}Q9JWvJyqB5${90K&C z|MXqO($*@jxwtRPeP#`R9@C$YORML-O+2s(iv7#JQ38lSkT3=z{)73sJ3|V09+)~J zcu6PS5An-|o(-&r2j_iu@MA#hX)v)`8Dj|NcrE^3+#x|tp_azI|5_VyvrH(alZl4M zlUcNL6!BP4t`qK$_EA01Sc@*g!|;b;We1~&y)et_lLLJ=4VxRHZ4w~<+5@i{-;|jw z`8i_vq^RO^oblk(hN+$FOp11@W2Hnb#C9YG0WwnFUahmj_5Q`_CF&xmpeNYO;ZE}@ z_5}ZY)B7ar>{V&5dUobzdwwWt=@u$jbhas}e0@p$n9t|s=8$9z&zHSy1hpOFryQzc z!-)Vso4psoz{{7S8alRn`Z9XTV~cMlSJ4~>{z**Te#(eMFh716zG`$3B_R3!Wca2Y z3VJqTW52;ADqcNSrX3^PVPbZ)g-qG1Ro#U%+&fC?d%9fT+8XNn;$Tp #um36vTu=v47 zb4BoppJTG#35X_-s j-e z h19?)qgF-EVg=4W9=$Hr)e-&;?#I$zvcCe@JNHU zzminE01G!kBc}3p1 >~0L%BK znlws?R)bzm8~FO>_hW~5)KOj8ZK`n>S#=X*0`FTR Lzm@+q8x z2t8<$-rEsj$!&Q&KB8-aHDx~Ec-XW3vd}K1jp6S?;$3C(a6#U8yhfSTdvdFxe8Y^? z89S05o -4CL^_hCgho-{(cC?oNqZ&{vp%hEX~Yahkdv?(rnBN2tq zd@oE)b;0Piqg O)+2BF({~}tr6x n{b8tqgQh hb-?ef=#AnelJW1dwXMHqj-(R!awqYb`^Zij zU3^+Tb6qE~_%fQUV44%^#LsP%ufSy|=!wCu<*`WuWNTaiZ3=2Wk#;x;o1?HYtzL>K zmJ|*eb^6{J?d038|4y7Fb1Ve}rgtJm=4Tf*WaxE&VJt}pan%)c%BdTy!TuoKy{1YX zRf}{oR-OBZ9fe!av rAg_Dluj+Pi4PVSKxOSWjnljHELuzM$mjg2qPc(nG7hY6QzG~$yTSSv!K{$DE} z3l2=}f|rng(?3+qCHTZ!sVhlEaT-gr; sN_CBx&1fEq3_d((MJxLA&{NZJq8$E|FYk5aXLY7X zeD+K#rU0VrX5}Lmnj~;y^e&TCUf%@iBWtp#;IqlHJwpb+dZD`Wd-3DCc*gW8pt-uE zI@lQMqTE=W3Gg4y*gNqOw; g^iSHDde&cm+0g~-KVz(5&Q@{Nbf$Y zb-n%e@ZT-?CDcqN>K;thLRV;^&ZMO!aztNg6+niKt|(@C`>|{3Yq{r_oRB@^gn87z zgOAwHs3YEd7GQFN$xihrDoU+PxPK!nf;a3m?T_Gzz{q+dz}g&0?kgkRwx3SzLala9 zGG=)#1m1A%L^E63u7$Q5tg`3Ue!HfVb<5QStsFeMiVdC^5es{$ik gjvsjkc8I3S2l}2pgP%>Q?B)guNN$N8NMs)`9?qxAdM0%pl z^uY7Rl0)x0GHnloExbC2s0u>T!l)D?( HT`% zT405PEo>9J^4+n`_;iGgSCE}VAX?ig`!b8%BTP~7zB2Nw@PM+%+K}Z3N4wxoa=e +-xLi{9amFeah$>a8!Wc z#oF21lrHKp>` ZKp_HPuSUuVNhy-D!=0J2lIa@WmA07{_{6$ z2io4oRF2IRT?xQi=lA2f6g}dB2*Gza`)wc#=@PB3uR6aQ_)I&2B`?W2)&|p+Yf#u8 zM*pvF#x+@m+fDw-6%@4t=vU5Fx2A+Y0?-TX{gp!38a8r}+K#_8BZ?Qwt7jcY)Y;n3 zy&m*rFsf-i(CM%~n#a_xygt(|f3^q{X;?~(g`w10NW7v)($S}yRMy`-ijf~0;(od^ z!~UtA_djO8R&@B%_R0cZ-l-L11cvcYs*3VM9J=OOBqKP^o OOtBxmna`AL=){rypDz+Xj6!fyP9YFny@v zDd0?Cy0|LaFXvyjqsv>V0Wj8S{~fYony{QR_(O$Q?60a+$AHQ<2<7h44xj%?_uov) z)>>>AR+WJ8mua}jq(fPL7?c`rTn6;y-g5$PWgRmHx1K)odrkq %wk}>mw^%XAr|W4mlDf!-0R a71(wnwa(XLSKt_(CiBUhot?InOnRChf@@2@tCz5{~Qi)`auuMi)b(?SNA@u*p zJwrSyb#}`!*v xQOl#9$Q88OzVlZrArkpUPIb|qW7B< ? z0O`mah~xNA=M@3zpK w~pDq&F?K zI=y6VmOUyPZCZTc;Qy=#4nOuKWB!+ur~TLeOTalEDfL6@!`dP)nOKpvnCyqVixdd# z` Ve3-#_Tnz J6d@j3{i~;QE$Ge}p1PA0S^R4ofdOTIR_6m52zB$=>zp%lE zJQSWEE3iSGW}daX_@CtO;?Hx}*gH_HD1K;Zrpl$aMrMXX?vKu3a^rxuXDTv18_m2M z-}j~82b(&020sFp5>SXPz%4E^LEvMK;f<_@?ogvpPbIUjx9zTL?zR+wQN~$l_)slN z`>V8DY=wkv^Id8}Q&GILnXd!|n}L%kSgQ6P@L9_!>XHP(4k&(;X@2o=5L8L1icS3l z9%x|{a0{)&rO$5lpi=Fd>@vw@DIpR#kExR3y!WC(%hP?0cdK} *mBbzPuo8rj`gXv4>na9N_40AmMP|6BMAyGQ9%9rh%P9d-1oKh zldz?uz??_5gu})CGT6gC{%@u3&4(6!YT1GKT{+-lbHoPDinvs<@Qx^xtHX(i^?j;5 z(O^8qm-tCdOsbhj4~b*_meliM%poNjms|L9ZmU(XNCc{XnJ?Nxd+u1{3D9T}T;2C1 z7=n>bi~B|Bq=mkBWA pKhXjzT@F+;c2x+i#!#E=xM) |)%cdqwIK_c E#)Ry`a-w}427z%$VDq{n)3=d1@ISm5&UXyYHb$~+jchaZdnM^ zo`cnlB7)*mAaVGCI5u)oisC9i9X(g&Kk_X>3Udg9rv+T WFDcyB54 zwDW&p*Xs6wUwaSHx6@nj30wNLy{S-HaJAvKkg9xOsmXXM#ykIt@ITzkB5JO }h%@_ton-Hg`=j_lG=L=5(Gv8_AZ82)-z#NIB He7 zQO9)|3|U7`)-X|p6yA5LZ9*nN@dXRM!d&0V#}ZsaY1kOVS)1#4=4=$1Q3P(7;^eiI z*ey{?$5BW&GaWe&5se9U9pwOAK+pw#QT&hUSu|0!VF9n7U-NFd; 3pD<59_rX98bKb8B8SXa!K#*B}*vxL%`lu_BQD8u2GTwLuC$y`j7)4=^ZsTuu;8 znxioyiZSVEHDqb=(-(U_gGckN7F$Fx`8larO%SzX^MpF~LoB7}<5CO@BOn5IDh%~b z9y4R) Z{vOD#4BCzCa+|Rg7T8xaTh4kOKj8VoTalTC z!}|*(Z1eD&wE~v$sT#`M23SWD0{2;L@Qh>_kN7<@sx*?-RA9eS;^@{uQhaw5J1z7f zg0?u?EI>9(M=pJDS3)fCIvGNr7+L;2E(t_vE?EwWAr>nm3O_+d@sJjlS8!&AH_jsI zt{ssve3`(F7E3EP_UtBj%!~9=X+m2#YBO#cKQ^Gx&_R@=Nssd^xBaJXu-V!dTGLHy z_&LCzn&)v;PWiik#wcAx$TZO#L%OAK67R8PXlIwJv$9{){L!VHIx2FKEekU+K&npy zWVAO)A>}5rk1mxZ5Wf2-)CvO!x7j*k%|C?UvtT0irf#Y;Yc;QvnO>T6kXGksvC1qI zBB)c8f4wZRU4%VhZzorPQ{=d7%wW^BS)}d!I@R~??mDVN^&h!Em%|e_^7e4<+18h) z7gTRxTV5)0aQ16)a!RmuNq*_S7l~NDcLHDCZ%-*ENqZVE+)$A!Hi##3&`AsNCWTk$ zs4L1S<@PzY?hjdwg00*X10KMCgE})}*YGw@xcwloSf=BmqwOVKMm}GBL6fcp{}Fxe zFFd=6vq~;l`W$!D)o%3Ihd@0qz3m_0mzks-Ha$o#ddS&d^k0gy=4eaiWDhuoBtVC_ zI=_D$$&A!a@}4D4+dn{rLBkHwJdV?-5E$dRHinZ5RmOYRL$z~=ZQ@tWhH%G@6J0wA zl;RMh-~H-Pz5#kBMD@&Z#pB8sgTsVG4sS1wfebLCIXCXVvbmbVHmpP6tW%SJ+trH-r$lxjLxj@Pp-NXfneqcJ> zY;(1>{I!oO`pqU{)J$)L<@6%Fgz7Jt6q29Q^4dV~M&!=}ip%^+HAnZmcA+b~68!2t zS$JFL(Nw4pcg}+@j6TDFXQAfS8|T#P!5He^wc!vsMY;hQ!ldF0%UcC2pDksspEm`A z*5_wG5Qk;tS^wK$t8^si)|+bgIaOd@D^bWt#(w&5Jk%^+mdRW#tUl=Sey;i+#?%S( ze=iStctORVqZAAqAbp~VW>SKhjFX?=b7t(*c=STudLGD|z}{SI-zz`%y>~ZyE=Sqh z@vEdy4l{FGjWQQ?cma^+*vcG5HrU;ladv|lJsmkLFSj;~_y7Qm@c;e=U?EG}Hw?S1 zQalGCT}?EDiu@ffqV)@Dd~)?c xrHj!)&xQ9_#|#|$IsLz!DBnU7hHEaZ;SV$7K dutV=3=Bi|z|LecS2YTg aQ70?N!7aMT|#o}}C@#iAiS=lwRSo7@_yfSN(KUkeR4#Ljc& zjlK~VIL+@HO20Johj)`KYgk1(*EoJex ^~%C9QJK9v zx GVVha&F2!sW5MyWS>ubm8CgF`A9j zL=H0+>-Dj9tyy_ks#R)(%!m-2ysmWFU8v-tyrLAKE=(H+<>RY}{9;b|yK$RyebQkn zg1OV^u$~J(GWhow8v^Pm_4%p6O*yAx4@O4$8zMJ5x!c?%RjwUd%{HFQyaXTIN4N2Y zF!!cI_ZmcRsZvH203@KSD!*a1VK3*^O3g50t% CPtg_` zE7RQNFZCK%u1!r>R$^rnM7Bo_L_s77>0e;0`Xk)lZ`tpg?aYb7gp%^*eI{sl>yG^x zyZQ>(7Q<9?G^i){Vm$45Ho$MV4*E`G^udv?UY&Z{6LaoZL5p|XguGpFhIvE@?7RKA zK(ZSZ#%gVfD{yn=4vdSu*_J$%bPij~lEHzRlHOemW$xpuf5(Td-M#g4*KzXF+knF5 z me|%}H!)|(w!^|7yuc~Xp tN0>^%@ z_2N0U(>c8!>a4efo qh2i}+%-f>S8)X(u4coZN|dlpdujT*wXFYyj=Rr_Qp(p;&pYth*;tJaU?t z9mS7pug;s(>iF<*9gC*~le#91Z A0nhk(81 z0&DMTC904V1-MK9 =QG)3j3v8=<95Fa&MPo_dR7|o>5p|J>(*P zlggSCW?rtq)254WVtzEz2$5+l&}!=ytysXvyf=K=#CtZs9$2Tvf4H1ctF+~6eJaf* z^Z{LV9`|hXT2FYN%+qp-&jbVZb3U|Mnf)!{z=PX>xwP%;yMQF ~sZb4->x7U2DSQaXi3CN7~EZUWu~(aA+;6wgokkb!0+qd5=au)p$D zFMF4}M>HT7X|Ipk&qLDeJ(a=>ahUp1(d}#J+wc~6fywOeV}@Oseu150cn#-J@9Qk` zv8m99I?SdsVQj0^_$oN0vwWqBPNkI#9XuPM?#00>4>5kj@{m^=7L^+}7p}QkSF5K{^4kxZSgR zR21FyqlWUgVwpS-?-;0y;Nf^O2aD*`qqx5U8LM-{Yg$7z`iYIGEVyFfv(I@zV7gX+ z!p|zjACsXXLXqy?b&ahx6||p~f4WuNy+S;LuWyGxg2RLSfh|hqeZFe!fPOYxj8Mfk z%8(;v$Z~cwLI2d_sa&7;E%(|x?Uedo&3Pcf^rxo~rE-%=41$@^oyKYfH(VgrKG;eP z_IpXmU6^T4f#=0aKpK|nQhois t-p#k0>t92e+OFafVD327_Qxkx+p&X=QCZ=p+A;SaQeR#1iXlAcNhGny)_?1vD zCPF)ilJy%g`3n5qn71Osj{Z@-L# ;*4CNjEf@FuR3XGaVvbOS|N zA%EUDzBnH|Ogz1=LVrEw4Q!T=_M2IDF!_)e}64@8Qd%6XuXJ42k}; zf5!f$k|;5^L1;;l@Z(c_aZA%PpxGg&$;YQOXJeu{c0S9MpGAiUA+RQesW=E3n`ac) z78xLbg+fC)bbEDdl`3_eV!wA&Xk;f$$M-#tah;ERIo_d%?JQfJ+w;L*hONoBUa$LD z+)Po&{_%7Z wkDo%f+xnrwr$%^CbpA1pYN^vN4!< 2WB03~>Rr z0%<5at++S@I!clXxFt!9TC6o%vWHdSoRQ~-pWP5lX}nlANSyToLGit_6*# G}HzVKg2;s2rkx`CAA0sb#~0ix*t2mgQ68(3jp zW6%F>|6jMdGCY7~wikrLv^aU*LuTal|91CmUzH2sk)m-on<<@U 8Bj$g-E+~C7QgT*sQ%z{Uw1db)oLAZ%Zbl=W9Kur zLEtWoKqQCg*l`#%Xvdf>U${c)Ku137Z(F!k1Dcjfm>=TwD1m;vz+3yyOX6j81pkA; zpshsnhV#;S@GAa=>}5fvRSSRS@wy+$UrmrCReiMQlNRBk=5^PRFL{@eHayIlmdt5Z z*aEDg8h>;jABfzlkr92{CE`LcND#*16Y7Ii#pVX8bmZ{rqtAnH6_bmrzC hm z_5~P06>i>tUn*_4(B aT5N zizq=DWz9EyIp|Gj7<}%$_Ur1H*;0qIKpA3u-tc5tJ Z zUo2}ZMux~+p7@Arq_CC&r_NvZ@~kQ;(PAZcwE@=D)h;YJdnT$}FEdQ;U`7J%PA)ZU z-x9?%jt+jEa7p)aIo~rv?qB*jjA0&&EY`>k)^j6$C9zn%VlG^WjP7fzSc>|H$95g}T&8h0lF0YVb3)1BOK>Vn9 zt~;bu%GK02uOR4j;MsO;89r;2w$1VkcMd4)nRtw*I$T(zc=S^2AnFi1!30?yD(1`e zlgvoqcYdm0nYXEU%v>I|NJC6Q`7r@AA^Y#Nq J=bl)(F(L%% zH$1hp9IVLD%f)Owdf=8N3|* TY|R@FQ6CkpvYF7T`q2S8Q+ao$zg zwr?urrSUVGey8eu|MFzZctF4SPvd}M^^3Mco_OwtICsK8oEIL>cRi-6>dLW@36*Eq z>|C1_>t!|$U}WY2tBTXBEA_;y5K)IeTw{_(7&scw68 Yfu9i>+8(66 8=rBIo9f*gVdJkDAg3gSF%Yi0yP1DUt;U_zzyhnE zfLPW;t*xN)9I`hv|KM)8%i+TTHhrrI^S)(<&Qjrn^D@=QI04Ok-T`odeo1TSU`VJi z#k;doz-Z7^VOr>hdG~W#l!&XC%^tw)yy3f9sbaLXWl```q0~6v5WdD}#kwiZPchA- zK*_=z=pv+%4`b?sKF{-LK6a9IGE)hHOf~L7$+ys46|Fd;KxJDDbToFtw4y? 6_er5H&DEM zHQ$_B$`u&}wF`S^V;ai%>3Dz5)G8crP+nY%+H_uFI+Q@28_*Xg9=Z- c&L~75`(}Qyb?d32T4pOJq7n@6_HyDYUBMu+D z#Eeo0ok#IthJGvZx^*z{qCxgLQ=Hg`kYA{>qN1cAlKpAg(LkeUk)z7lJP S(z4a;LQy(q}hy!fT@u{SrY&BkWr>|?ZD78}dC>B+x?>48M$ETk$>M{y6xnaR! z=7M9{r)p+BZqF=7*zh?5@Szr)qmndn5*6NxFfL0TSy)qu1ndc1Npl;wMR5DQvhu@B z4Q7NMTFAgQ3eMJFb!~tphawoHd<6rw-U3My9Bk8MaX` G2rkyEmXIRE;kXq_A z?0~G_ AP87cv(2j_%R%#%D{DSTpgD-5t^5#+mS?i_;_%`+Eq^lt zC7 ?jOzSSNnMBTNaFuS` z_tQ3Bwn~?v$93)k;-mYlp{8H1!vgw(^ZU9J#ECT5+kKk*%&KY3){@caL7{8$Y;tqi zyK&cHAs<=3-4V}boSv8Z|#MQ z(oIM2El`DM_?L=NsoI1t_4c`pV|!C`tlqx4spumu r(9!yJGJT4LkUC0NO!Q332ZhlxB%jYoPjtlBCZ ze9%<+I4Sl*uC6jP!#_=2JU`NG1#4C&sCY-M*@zG6;g;-e;{>GXC-k%!b^X|V&s*lv zncv7SZ|sg1&n?%`F%S?uj}diDjkXI3wmMX(xmJLm>0kw``eUWZ?`RuKC+ad^y@*pl zGCy#>kw@3mr7z)NN$<`$Y`;gEHDpgO@|rfeV?I-7Ww4S?_?)tp!ti^hp4Deg<7q>E zRZOj8?3vFJ(2CDZcqBB0JrNsxV~=4gv{@VDm=Gq$cNK^ly8@dL**Q@nwXL{ny})YL z2lln`{E<$KPKN`sp`>xKSh7(0(5B(nO#;Nk`9AmV*~oLB<+ps0IWY$THlmNN&ROYk zXlwSp#)V!~8qFp7=?$JwczOMOHkDT2W+5_qh7V$>%*j!|yA>*YZx)KIz-r|2pYHEQ zWl(OEp4k6V?;1C+X*S+epYb=FXeD9pN3JTm(2RSmu@SZ#KHN~*v@O8Fiiq&1iI`i9 zPu6pPoRyswP`H0-6l2+{zSn`m c;$M)b?z0+v@DShi@?9 zeFc0)at7E4hKT^!h25C+M9%$3K(Gvr;I%^>! z#-!I;t~p>Z7@5_rf` }%MkRb4}2#_9nGVctBqRUW*hU!cGd(!N* zjxj4q8%uMqt#Yl{D>vw{<0a+LVDJ x=u%;D*A)9r6B7;nF(u>p u>9ub?V{sT7wytQ*G~_vpno1V%&ysvI~708v~am0iy3w z!wOSv&2 ZMC6*4ekqh!6OB5e}yZ=Gt=MrtB4Dd3u?9kVOb?N(Q|@^hF0dMMSP zcuI|RDQ6=+QW8o-aD;(CRz^&UkIL 3j&3f*2A~=UcPL@~YPJSc9)B|3EYc{h( R6im zELHUB*vR-8?rfRJBhK@-3D3E_%`R3ZB79yt;?Q2}zqll;v0G)0^eE74V>Qj4D~;TB zGNiq~tlw|GK_QeDH16CoYBX-t0?YRYG;}AFgLPgLHZsi&T8B5wc~dmcyC8NnK559& z5(ZV(yhMKe0-X-juP 0I)j<`f(e81<^v*K!9Kk2{qr) zp#x$;+4poczE =<1_MzX-iE%{nXj}AflJsam5rosw`ugc&0wo zk_gmy<>krn@Z&;GA6gg!qV7%gob2!`VPC6^z_SO6@_rRvihiGu1(}cN-hrlmX)&T- zRi&`f1}vs-JMjZ)w>8ZLInitx?H_v{v+k!!cWh}`rKqVevrYXrl1Vr~nI#skJ!HqY zQhhIp=@VgoA_SR#>dSWwUi+4MyW%J;K3b #)f&*hxznR34Wp<#B%ax+)VXbAI zEaRHPw)Q&WG?djAP&@#^ek*-WUafSmtUD@AnU1s!SHt9K*Q@uUqHRSOl{ujJ5djyv zQUE{xgpXz~EH ZIR+uboCkFff5xb7Ba9(- zR6aUmo*v^^ayVf{;#2d8Edzy^lDvo$%<0Mbv1!uSG(O@vky~N_e3$vh{G&4;Bvw93 z{ T7B PAtJz9|OY3eXInwipCHl=>gV{TLC^E|Y?2`HRw?(5IM6lu#K&we-1(t!~ z!~G5M&jrDqCew>t_e=T1Y$Sh}L+3=C+tD~idt-}~sOY_SGYn_Cd`jf`vqgi*nRA$z z%QXAU8a6qODY8sv#-zNjZ}hyK1wro2$-p5+zS$+> Nr5(Qb!IUR1z{{kgll*d zxh3hCTL#MajwWt~in q72` zP7VRQ5aYniXtjbh`ngiUJCuhZ!v~3h&gzt$@#L;9oY6EF{wXU*&cZeN%;YI;NP~J` zxT)}{`ajL`+F{}m9+uXpk&4r={74_wovlKn5!xnfi!!6=`!}s)CwO#*X5;trk&&+B zue07#M`qsDDH-#2GhTu-Y*Qz$ )alR!B~pM@-H zOMkAXv=E3|=+GO_cAm?ayV3 $@Qf#|ZcL>`+i(0#-E zA;Bsz5NL3F=UA*1uu8Sg0lKnond53~a9nU`w=Y$e^T>briyO}@ESCm}Oo)~Yix77# zomXiDFNGda1oY2v_64?JDSEi$9W|IZ(8x{%(JD)EOwTpl^u+-3jKmumH5nqi`odG1 zjdZ)P0xI(1H}ETyb$RXDl340zOUqByrGG+}{XA-)$@ZoAlY@GDb=WhLeo2bgZZQtp zSe^}<*9ttBGo6kVz4U5H$JSC_uZemY7)d}5vWhIf)@Y@#8{I%=gVBn~#&2I{=G??0 zoMIDzR;MaPO`a3+zBVqn(rd0dBnt{$Z4EBNQO9<6pR|$MlU;uVUXCIyzl^k9O`>=? zIW@Yo`F5n>8<*dL+}W8@Am>pCiFhb7ao>D;qBsGzGj>$rsk0a~r^nWk8*Trk*U@Yp z+Q7%UO$U7KL(HevCSjbHMj$p_fRbIuxdPXm7||W^@5{^JV(tC4 6nrBy>S) za!j@h(LjWDNT+J3C{$^up@#!yiV`o>>VTWr``AcTUY2hI`mBQGGc6|BBMesPJnYE@ zdsT80kM;`~dn+xa1n83m*r0;MS+R?YBn0bfL0WQX9V;b?#izlpy|OaoSQ0XoePqN; zxb7-246?Pq>lsPR}8u-RIb7XmK|^}K+IPr zHE@pxlLUYb*FbA(Dikgrp&Y*In&NB{>{OCqK$^d1CkcGa2o&~gn?L}o%%CN)-}ZhW z-?vF%Cc{)HkYJlc=!!dn!WOpF!z4j%wAZ1ERYp2^`Q%CwYU7utIIfxFLxABw8Z#7T zYl>$fsbvP>r5qu^Vs*1VAifBP6^&+#Ps@>;S=1^=a6)aPaa^R1Ea7p&Rc`WQgwsH< zGJT9Mhx6-M8b_hlt5X}Uz71GR`VzSx)~{abwf()ugq0XfEzqo{3w>CVpjII~ObpsY zzm6ThOi8}Yk1tk+GmdLGE3)30FieoO+y-dDGE}oo52yUODU@|@ozB$J!odqe-L)}+ zRWCb6=fIowM{lU+2%y9OKh2FmcM}`Mhi @34PS-Gk{j29U#^LO;~Qt zBdt59=YXQ@JRMCLB)II^A%G{voADAN=%~=FnP2I=d1cQ^T{Q{*;eQk%7z*d6!^#jp z`MbWHT7`|ui1sANt3uR6|HUmIjCjfOhWSUiFE;Vo^Pu?79fP6et>Z8xY!4k#I&n)} zi0DzSQ)$Dtv3EHo9d17@8Gok)vBKh;BIV`~yyu-KiYRJmw(=s%>s)sQTJW8c3Sz`N zqP9o`xs%A~1^(Se$6mf72(b(0jI0$#Y~U1_({+vvx(q>O+TQ&~;@!XDCn&&$sgMmP z{Le$&F)4%Tgyx}iWF*ax9`HT&y+xEQR&(o~O1+v$8Mk`ym?|7r?fL>vSd^4ulYT+d zxRv3#UMUvPY|YDGg|RC6l9Y{l&V{|Ia(M51!y*@<6aW?+S?0fdp_;~E`bNSY?0rQt zXPx8u6Y0-q)`oZN?RydDQ0GEzc^=e>Dh29H-Fpc5DzvT0o7o;iVyoGTE3w+V@pcV# zlL&f**}Fi>9)XWNB%)-kil-@(-X{(>OMdX|^88?xbmr-(3a8mIY$2&v)DXyc54nuO z%w85J&!If0AC0`2A+DQ;8TSo>3Ak(p6>&Ohz3`x1h>bPz=+cR)yw$W=;j5y_1Nnzz zX@g?(haZW@-h_FdvheZo`sBRtkiEF z7`kR&rTV(k1ppY80*+-Fpy9RUbGh9%Ode|}D_JQJpJGNBgeH|x-5mQ0LlI%UEo0o= z@3oeO0-sP!hX)A)C8PAzYSIsy{-Pb5wKVG_CagCMAB)fi6%zn2cN|vTv(WTVL={k- z4`^6pE`dn`h_T_)2Fi^u@0aPaflfD@!OFUyH?G!V Lly3hr{SX))qWHK44^)IQ>paqwY;3R38+&m+L~C^il*b zJuOWbaqpLJmoJ8ez8=qzpC(d0nS8Inie}R4b93<-0RKv$_r?&ihfMGj)kgUkEVR!i z4SGb}2-Hd4JYl@Z2d9C?KN~aDZuDL(c>o@@PJl?0Ma|Uf)^D~P2e5(KUf-CBaSgW2 ziGp$;OMQvvTn`jow&_CTn(lJ3ZTcc1BRpnc^u@{G(w@&Xwbk>|&deZCtaP?_%~cD! zg~ThFf8jo0a4uuE=*Kn>XA}lX6k#(JD@9+n;a?B37%QpwA5vk c3HCl_2L)o{{V}wmH{hVe3@({gA#m#BOe8)LmnnX zMHeF(Jm$e&YS$5l6{2KLX24g8C6Yi46OjR%3?>mx=&3NSA*JQ qP5%OZn?I ztn3Mdpx@In``2o}91X?W- IP2C!W&_Mu#110 z1AA4PMLK+|XKIH9UmJ?iP0z;7PJ3!=@TJWs2aN*jvn*+5kc@*X`&9=(ZFY;)V_|lk zLeC`{DmJ~8B^;Ji<(?OzdyiU%RxO90DQ>>N@o8Z}O&c?sS%j928{z>M$PA*We}S8* zBc?~2Z(5iW)JMq}*S}Pa+mo|Ns|WWH)`%PC3W}p^gR!QOZ!!?j9{w0KmE&cxn)Qas zn=6ntu*mZL_$R6(n!50JOD `zg_@7>%e9xI#BgQ*IF=a48W!*Mz_KA2mkG>l^Z6B6#h<5ez{0&nh3j| zR%-n47n;875v>3ANg!cy!38|ZN~2d7V^a8pdbx|g*hG>s0G({Uc!fC8g2fpm(^w{4 zeb)oDm}$9a0-}U`)HQC8T9&hQLA+VEH(1eA3!XyxHP7Ee$c#I6j1^~UXZBaGRj;77 z)j(pzp?wBFWqL6q^nsd#)sLU_%Y2s6iY(wxAJ1Ax0(jX9M~=}-MEHd0$5Z6&RAcvj zz;rvg LBb?n({uP`;P@Op{l41a&3t_`1td V$wZ7qfl7F(JK1BRe#Xq&1UWdi!q zPh&96l(clPRHmwL@my2o6f@QLkTKQ=cVzHfO-F-ke&ktb7o6k_8Vm}1Z>YahaOtv< z5}Z+5)M7am)J(Qr2&1Lp)Pu56NK~oCgWhGx87Bq-Th R;K<(8U0{ zw$^v)NgNxk>X`*sn^i<#%mn!OvmZB!)I`an|D^mArzfqfJ`E%4^l#jMtdDb5f2D1i z1XULsQTsmb97B*iBm^P|of&fpM}%+|Dhk2`>jwYc=0OhxOYBG#+MfK~fhM6~x-$|~ zD?FkKO|h20e7ar}%&bh&<7nL6XIfLxQrKa#R^|2ZCO>e*&hC%ZVGTj>z8^PlANDnK z+kGb=L5?WdaHQ#R4;cvJ-u3nM!i3>1L!+m)qw;YvKF07&7l%|cd+^j8)t#rT8DV8_ zIDAClSvba_N-N=p$4wvFsgpNLG`t)pNwWhj)~ouE)TwEu6LzjjLNE()@)YyDAc|35 zzc@~30EjkPI+bSr4}~ZV%kn5NgbK4UcA-w$`%pfs057O1B&4%lC&5b4ytG|DToP4Z z^!4J&T(t`DRs?ACB?`fXo&&79`m9O$p4Y4%3Eu{R_V3SYDWZE8A_cCkBgpov-*RAs zsVCwP7)IN8Z%GlnUpQ%H`LHrgq7rhd2W~3qe1E5VXDPL13-pG9tWqNtg!AyNkz 3sG3{tDCDK1r`+S?>%$nZF3=jtNv81kp9%EvmVm-cTJ-8?|hwv)e=0QB* z7I|gCN<0q|!jg#opk~vgG(nKu9m!PyEFHa(N*46!nQb(Z?>-nf|p8*Vaew^X$~M z7gX0}m1Cjj_6MWS2;Yu` pvG8h{Cg_9d}67YF?0B( z(BS&A4mblJ5d!gmzrGTuFuUAzw`U$+eW^lB$flk$kQnUcNZIniFq!W;D%Mj?xGA#p z%w!-T^xE@ 7y1X9(91xlM 4qHX9t~sKbTOi-~pRpoZ#miQ1Q9z zdISU8QITe9Qcd9xzl`7fMkmy8)qoMkz0-aHzxN&f53_=kjV#DM5RJC&4eZgsI5*P5 znFNlRUxI0nbp4opl?Dm}vm|KhR?vwnipYIqqV%e$=y2Uex6ykvh=|dGM<_tqmd!g5 zE bI1(Pd1f`C8y_T2CTMm#Le}IPmvff&I;UThnbq4_+)ncz}B5 z^nC1pq1E8Ilj?Kt`ddQ;NS((wJTn-K1^zObVlXY1)*arz>SA$Ix2Y91T$hAA36+Sa zmC2m_yDJSU&)Z6wTl8vN5WeIXJj12x5QAJhp}Hvm^kAUtu>mxPXC_jxNc_6 l!QwO8$o9H+0u$&yL8o-w5BSXW;cS4a>r#XE&R` zQ{8t|?t8Z7g8#KAQTxHu#@T%FM0^O|hlWqdy9ZWrk#e@xl!M2F!OG;{dpNM)s-3!A z-EHJs@Ub>aPfOM 19%cE-=yq5J$lZL1lBGO(^54Bj7W| z-XKO|*mkEL@XTmo_=q*z|L8mtp;*oPk)gZSoCXTL%NmX(*)S=VJxnF{;NMDwN7Utl ztr!sIflZ#a4$g$-%6J=QY$`SVp}&D8)c$cFbOv7v>_Yst`$A?Lce24Z3t^V{^G*>y zA66B@& M<+qJyDHs2{tw`*=z7So&Pfe3O1YD1Fm+y-qony!x$z`U?V)5Ve*) ziEA%wu~dJBJe=`Z=_zB^aYx3ddPI4qDq?{M)4i41)8F!! Mpma`YC9 zYOFd@4u!E!!5@RTSd#vpvUmuB+63l)Vi+nad3_w5-5qIb3&D^3_E%Lf*olgi60%~$ zfwXH3gJzyE>2lEd`hz~01c}ULv0!fx+gZ_>n%BhKA}lM7p=Kc)pmRqyTC`C>{&^_J zuil?Z4CmKJR$HsPQ24%NI*V3%1LdXf7e7c#Zm3$CCdOx#ZsLS*9kdl1U+$9Hyz<2A zj2iWzvINk>zbk})=xht+&!6<(`^bBL6B4;1y&bH43$mQ-@z4G7*P a2 zM>XV$SpV%h<>FPuN>2;d=C{1X@t7nrrG9%i#357>@*p_eopcaTJ5oyLab!3_GwaNJ z9k8p03B6TUNUj~W{h9kbpYV06G|SX=m3}rr^a{ p9y5viaR}T;hj`0- J TUT^kk4G;*toIhnV=0Fj zgKX;O@yw1&Otj6!pi&tXV!i1?^%IG92cU;z;!D}M&sm+TUiM5MQr-+VB?r?R8P^0W zX)leX;J0iUh}d<+;7B)=B|Arv+?NH2ngy?JMX3v*Hu4V-Sat=$q&YBcGyIt8?_QMg zJD52@He$_%>{g04c=$M( 5#bh$Bsvk}UT|(B1a&V%d zJCUL9v%Q<}n&4t2x z0j_oh-qVhwk*iO0b~`YOAW4SIK}hMj+8V5kiUvKGO3wNzdiJ~voUVKiIEG1amZ?al zLsbqQ3@mkMv+J)^Vsy)FeiWHp6~040L|T22#-Hat0nhF+2VZlz{$}(D&R|c;Wm`Em zO9_31e*doS*_$TB9C-TaA~&X~ZYtS9qeM`fmTirmR({g08dBWZ2U9kjPXW~1_BqYt z47=z*oY_6F(c#yl(tzYYW?<&&p=bi9Kl~FtC?5Ep)-uo5eL;8H68P?U_O}n@Xn<#m zLM_+!&Vg}sD~xrfdT=X?X(;A`3u`?ho0t{Mbk(A&9k>5aBae$ywwnz!0B2xaBWyGU zh4~47eMf2=1e^LVg7`HEkYpG!)Y6zmXof!blA?WY+Ove{HHoN5$>&szdg>`8M+tRh z3oZCwU!%UPcAlu%>!tYtX`9}**+s*PpdmhIuZo;%8Pp1z6am3Y1df^)6w@sXm%yS3 zmY|m+X}pZXhq$-C9TxepbZAlKW$NkqEFZ}ieCsY4>0bfo_lbA#H|tczpzt%g5kJ+h z5Dl}xsg+-al;Hi3ZXbGn$*?<)F?kE5LpALX=$W6GaiE8uNBWN+YS7mRkmmzLUosDJ zJvVF)aG_L{oki#8?pIFQXQsC6Qh3ip6t3#`_(OVlVI_~jZ7HW5=EMBx&!UY8s26{W zx~*!(fJX9DK$`Im&d$g6yoU;&n(c1zFjH=_pR*N#ccrKA-%CCDdfDVO#dA}ID 0|&Yu`TqtHIUwFnbH^lGRZH;0cb0106XUyWgLLN z#aR2-)xG`4XbE=&nAw;MwiM@i3VwC_!C#QBEB7ARe+i@iX~1&_(!U~A6a`v-etx)F ziZ}Lqg@KR#7uRq&H~r~S(-S2hD)~qLh(g{d1TrZ4AB~+&f#>q)KI^iO(ei2`i07u} zJf{R!ptrhuT= nA5~w&mM`&}Yxbn-TVp&!N8J)8ZjZZ3<8GAES;7N42#P zZ`jZn#oO29);|Uciyv+q=)N*;g}$UP|DvJ3wE F!vVrMFdbCXyuRP9 zoZWwQ324d0C5-KRXpWs6iHIdYeq@H)8Wq5s-c`+sn-Wvoy1Ddwy|I}nghp{DE)fcg z3Bk=x^jz|tjs)&6g_Z)1iNaOwIk1ju>e<9xfGO*6ZP?d3FmtJHbm^9DcRSh&{_=y| zN=n6G76f(LGg9`Yel{P=4z5Xg%&R%0oi8k^K`ZUg#?T;0i8(a&gY01BK?}8Ar_TY; zbZ0b5U;HMy;n+MV+Vt^b>0`0{1aT`c;qJX@L0mp#sVmkqF%$6xrJ_yB!MGr-F*KaR zyuJ4A6|1Z4%f7$7m5e&eh6?V(^~=s2V*u2&H&@S{z^_|VBBhpqQ;pv tGiSY3Na zUxhhvN1n3p=3D-$#1)69T1(oxZK2HGkFiH}_5ll8JaI`pHo2NuaAbIzR#3ALo!haX zY&LoJ;V>@d7ovdznj;&dqz?=`Z}tyxJukd!n>=vlbDP=nJb3uhq{XYr%JL5t`!B&z zv=7sS6)NYZ7}tSoj%b<}odV8(vp` `;F%$y&4> zU#yjAH>kR{5yt;VM1kFR9cNRHuh&6s(RIHqCZVk2!T(;=v$3Q1Fkc7Rt}4ol#Nbj! zn0ehI#+KqhFl}Yxnub9$z{cBBq|*|O#Zn^}o;J&c5}Wx-sXC#kcf)hcN{p2F^_($s z&599yM4PAg=9fjm^}Z-Y{&{-3v`uWmpN;s 9`^wn2R7#+?b_KFRG2XsRAhkK-tj*)JcFZT-zI*WKLDf^QV1r!64nPK_80 z`k50;Q|KD{Q6}|3_}Hs%z+x+aEINeu&QSP7K%g$J=Ivo%^lkW3Y{)ns2t8$<+2Ne) z?`?=F0a=E9r9wDzC=_CfKC8{oh&CR`GPat?2j%t`8jwH71ENs1vYgVQBsUjaJ{$De zaz~FZOWu-{X_sku>24H^qDzq&ap@}bU*z9;i!&@ CTT$jfr+6(%LURk8R1TU z2Y#Ic7qA2_aoo6x{#70XOZk~5Kz=Z1Sh7fhVERB8atraVjc4|(e#v6VH`Z_271HGL zIOsfg|MG+Fl <+hgq^piFt#fdi!S**~MsNXY_nj z^psG2|0 P7VsDRyd3H=MFG-k_NK#+c>H)ZX4Pe0-{YyQGJ@vj&3BgG(>f0&W+FZ}AZ|*6 zD~p(+Bb;GzcVUmspKx;LBcZt~@VaO6xs^M+xv3qMe0(UpBl3`6)Yn{MW`YSZBF=DW z`6A`bhY5CO9BON7zZ0Te@+Rt#ECqr?4 PiFUg2rnLjHuKk;l0(SAMT zPNq5VF_$vdusM!qCz>!>@yw{klCvZ^2#e-1V`DJ1<4{0aV~TJ%tfk*jC>npdj>a-N z|BzxDY*t?K9}&Y}$c_d@u-T!HWv2HuLq;4>$Zup7{*}&nx$u2cL^c1oVtDP(faG9} zdV@sR6AZeGug`9%sX45A$K(-i<91?Z9X$_4!Kd+c;9=q(#rs+_xiH9nfHP&m_OB9F zS}J%%V@}X^#Z_^dOtp`=?Z4(~pojA(HZyfRzdz#$sf+FhO{(Vk$P+fd9r0kQD!5pf z^J~p=n=+3uiZVIv^Yj`*LXmD3)&K sErkM0OW{2I$eBPqvA0(t<%KH_i^^wjgw;F!yDJE?)TLtxwoJs(%%G; zeVHYtN0%g(a%_a-ecjNIpXbH{%#b9se~=%&7w@6OO_4 prGlIM7@@V;cSY?Hraj%mYWLwjb*8OD8ly6(z#;RwZWlYjjcIQquBRipSzXAKK z{_d*0W*THOkT<>hJOW*oRwV~|z< mc?{xJCF9; OgTzB&mq;X^HwhCoAj7asB0`U`BIS^uOEEE*PGx*xrqA |&s;MAmc(+91G zv*S_@9XVeEjvtg$Cy^1n>__BJmMMKoeb8kG@0T+H^oQ!%%$F{Rz5iN+$t0SLO(zUI z +@KL!`Qw;JCZvo!;Qs*z{+(RP0QS9aWlPo=581AQKaauCt9wmE?e*9KVcI~L z=`M=d5N^NIyAL6T*p$ri-LFIn>^M9TAhB+fd%z)u7!_>!OUZl=jjMW(;!YZ1_^y;& zK}}}Marrd&zqElG=FwJH@eJOv(jkj}__?xHxon@MLZ35kkGr+>KbLLmCkBn6cNgPc z{IOmA)^8Yf{H+@XTtbEa^qeGk3 -y`t6pDZM z3*rYTS~qh(L&U TtRTwbxQ%iA<)i;p~V^EwU!lhTn-U03ZXocrL{UScZB0ZdJMu@m1F9fVp zDQ<=#+<*+?=d`_Y;?Bu0kAL@!hG7A=wh%Dus;7_F4k!J$lKI&zxVykhE$bO~LE*>W z#N1fClbHecT!9lld*(rU9SAWgp{%H _G2k#nY+ ziA~;|5POV32T>yJw+$w)hQmn5ib6MwH{C{2#vQY^k{m#f+Bqf=-t8(C`EDK*%JpD3 zi60z+P3m?RwqRD d%>%VWO6Oq4?ZmjH_7gY#`8nDHhq)0Jlhw zXR(BxSAV(69EJ41i{=Ye{kzlgeA^iWBGAjv{Se2H9=& f5ETUkkG*d zlHumT7oNbY3CfiW42bz05Pe4*h?vFZ5O?It?PHfmB%A_tjxOjkmvSKYMlRm7vMl>@ zvo)DC=MPEa@Z!6Y%G~4ubxJMbVs=aQMIad*#-RCt`53bddxU7Qe+}|u?5q4Hsf*%a zPpSo${GUGwP-KuncV(TGDU3r2|166;vU`GcngllI$8bz5#10#Z+x%tBCa*##g<&eV zMU!w0%&rKYnQ3+ &n zg(yI2*$EKl>N(%KedO5xro^)q1VtCW=|P)L&*i~M(~4GV372psqwsFADuoX^kWSN5 zVyrQ)%XCRtuAreRFJaJW2U!;_ld)Ty@ZEklXuo{oi@H-5a75POmNd5}QbBeCdob(_ zt`9>JKu48M4jm+~7Kk7wx1pp1C9w;Zjc4v T{tn%gnNJTJ^rv9fdW6ZqOCzEH`U9yYj?(dc@|G!=U{FJ~!HWPYqLB{Nk z3KL!UdvjgcHisfc)FHGJ0;a0N$Md#d_Py`O>^?k`Qb%~h1m7uKF(NnpSON)8&z9y> zM498qc~&s7V|FtrvTBjMXn+K`<<*;`mj3 o;#PKySR@ZYhcur#pz?2BjaV8?$NZ jf;wd~ikewiE*Se*2j(sN%fQn7glZMY#XSKi~UeNLdQu} !#}?YcGjjzs(lc&y5>(MlFd;NiaYf+Vt-_&Dbevg_%9=WJFhY9pk<=Dt)TY z0HBayG&$H)1M)C1uxk!fYU#dB)9^On+p6S9vDbAZ4+2;_fgTUxd-z)ShIc}cVBT5> z0hb&r^H_e{zs9`|>wUnF6C7|VFOpTG2H0$iVWB&M`>LeX>je{OtW`NIhv8`hCYv7* zHRvMEVb{LnVjp!x{(vOu$(&uHz0M1x)~^%Nc)vOzfWVF*hlyGhD9f{`eoX*Bv6#N? z>p{O1eKr=(KL&VS>{b5{0J1<$ztOG{$8Y9ctWUZ*8`0^ZYpc*s8342?lG4O;+o%4Yp^saC8nEizPWg>7(ev2I=%{^PN0EOr$Sz7t7P 0u^1>;(HgyY{9vshhp!|BO{p;1z}t!x*>9{acR zi*(L;PT%p$SA<*!?=J^0&ERBEG#C;&2GGjK`&ebi>3SuYGqUi!h9$(6oRF}cILE6Q zlqSICiBs9Blj)0}_Jx!W4@Y+ nf~I>|GdP?r7VZjHTmoeYu_vO5Lfy-8$;qxQF4Reh@N#&*ku ?Bf z503{Y2F1=}g%Y6U@S^aQEqa}67z-!iGMtWE62n-lT+lXy7PZm($&I@b21tWvyMO5t zeakn01MOehFX1!TlnUo*9Ro-9wp>&Q8!#%L*dYmXnOzBjKODC8t{)EjM6U3aWo?-r z2kYA}=kfAk{2&BHzaUVQ=kwAAEGPuSLL?# K(0b46 zX%xmZ$2r2;XptMdA1rk?7|ufrP)NiamvUVxTWaM?ZA`Sb0IUSS(x}=#AOe_UK%*s5 z{=0iErO#HdL<})VaE`|j<6sMX^1f$!+S8s&v)QbK8D>^`Swj+-1w9T2G;!yN=@6e| zIf;3%y9^($OJH8EcK*}=aO=FF<{ Fqzf`he6Ivf}K26#=1K_w4Cbngh zjl0*fQf1=T@v*=M)!A=(%iGF|ABEg-c~K<=A!cZbRy|@|?o)g2cuQP1hA_VNO=Qvw zvT%fY+z88>*XLe;Z3L*-9*rhb+bUyeq!PrHa_uV$X zksX-2%;@NE7-CU}#cDK6Xj)FQ{bR}^^zL`R*NupfPz {i~r) zLnessa^s!piBEVu?ahXbV1}f_WSQbvc377MvKdv@mGIX_aa0^-RR!1(faikN;J=AS zua$p5Y3!U>@CrjZsjQ|+Dbe0+k3Q{DkD~kC?|$YT59h|(9OEY_bI$gsaPN3%Cnod} z@yM7N!tl<67$#t%kuk0F&rD_UZdhqu=D-JLQ2QP|jsie3u?!pU7MTGFhUMfK0)Ynz zuM2tEpF0cDyWjI3nwKI#tuZA+5$E9m{~IzD8dIa~Vx5NaHv{qvvF=V900V7XVK;ES zjoNB`RvPzx3>?7n9)ej2M!@^te@pOQ>=B>@co0T)ma%%kA+ZN6e_Tpbb=yJ$l}c(d zFg~+w5TxgE@HUcWV3%jEy=QAPLsdh}fQB0Bb{`eKm}5a?&xK3<{CuX_Y>!^`um2_O z?d?;V6(k^mals5*$HLn0Fj)29_=-ogqW6E6gvc_go%Yo(s1CIn!LekVJy7D;!Z~Do zl9*|Ke~(`Es_&yz)vQnzi0ktsYf8xAhXseO{ET5>-EYyrX!oL#66RNAMBv3@9zce9 zd_Lu6-xbs1>yR9*H}};?&a1>4W~-MS`~C2*jf} )yuJKJTnU0(9nq8&B>mL=b<+1d%cm&K}ov3IAeASGsY_3D9b;GvAIhJedM z*i1)Un3xAq_YagmX;Ps|A&b>Jnt;Ixw(E+LLR@l+kphCDa6Bx5!Z@lazXDt8v$LOz zLW9WRPh5iKmw?x<;|pPWW~TYotMt%^J*1RHRbvGz$T14N`nw;ekx*O(>Yt_!F5Nj= zmGxXXwjO?ZYy&c6-ai;-5Y9;{5zi7m=s^#nyWZs{@Z8B1r*0yp2oSL^TO+PF!y%Vd zu)VGs)nMQ=Y4-j28K~yh3U>EVP~P(avvS|+9Ecm&T-_(4Z#r(Nm=?a9hEOhc%NWTT z>qM+2b4>T&4N^u=2ec>+zctB+AXU{BC>ttMQJnX4sT0?0d$PKkc>w;3Tphq%++P z9XqrdedYzXtF!j?zn~a%&U7$8giAa|Z_67E%5%k!u|}yG79qf}CK>#A?0!rMFi&eV zl;YQh#BI>N2s@4pyDTF`ia7vSNevMMlP1y K) zG_S%;i*PS)d}@DRkIsh`u#!MNV)^5GYDb0d=L|9bA;dFFGkV#}UOXhU>cs^sXQ>QL zOQ;LnGF)N>f1*K%=$R^7Gsg1MTB8mfmW|Vv9zVFl T5oqV1!#Kf70 zd3U$F-IX5kDGwi3fDoDWsw-nm!IoSY3J$E#QJw3)^bb0kbT>hV-?5Ec&;mmyhR%gP z`@A2Um5fSR+rqI>9t{QjeLcQVE=y-2;V*eekaamBEZb|nkTBlj ;zOz&6MDMBZ29CX-MX!q<-Di3rUP=OYE_sX8bL zL9v_X5~ZaoG|kc%5KL-#_{!qw-dp$_?}vCFDLQ~~W9cu(X8~fht|jnp2u~yv%+`h! zL&Lm(L Z&~%;T^2V%l=(d?Uz@2Bi-;f)7$f6&xnYOlIyG0+Yf9#! zxtNj)G0}So6b^D7!gTraWqR&&pF>x!T=AqY)Fo!f1V;--4$s}b#y+b?fRD%Y1NfM> zO_Gkn{%k@X$@Hhk*zHC8C?|auYrGInSoOy?r p%Rizr%g&5CrztjrnTFQ2d=DpNT>9s5a4nuU-^6iZ 41@n zs9iO`mr3Q-y!**tw&4AVIa_oLMe9zQ&XfVL&9UaN+042P$5}Xib@XT_P&8*C3uzDE zbIv6RP+Yi$BzIsX8GF18!Xpt=Vpsfi7B4DGFMv}Cy)sm6nRKWaClWRTlm}akqBtmm z&a&`z$ySX-*!pFxb3h>cDGEq@wd~3xj@>|qcic{of81mJ!YPkb<=sdSVN%CbEr6rY z+0_0%J(lwp8d>e%Cht&<&p3G#>pG;A=-JQua{9=vw-yBkh#JQ^ukCR)Z-%api}zS* zuFA;fN?}vMglt6$JZKaN?n kM9dpX1ddQZ_Hb&;X9L5Ygq!m+6Hse4Z<=MN@+He)V`wpT6qR zbz0bEYI&54Y3e*4e=>B&l{QWl3z0!Qnwjak>#n0O{n9U@OZ%5f&3dY`@@r&_ZO)0r zIDad@rVeBIe1qart;};f-Zr4uS`7u&2;+R$xejH6t#<)G^X-lWcu+q>NGlrX@jbB& zIStB7Ac02buSG`||J%|V=PQ5bY#9JsUTJY;_-5r9FmYmZ9vT9n$Q~Isxly*!n*RaT z)K*j}t8zEt vwSFXu9mjpOJ z=Db&wD8%olM+uc`m7ofH71StM440MX*Uf(v#jAK-V8&zUfPw#5pj2}8e#fuc3w1@q zf1Cm{9zt+*;xCgU6|ZakxbV`I$X6wuA39qGz%ft@ieE } qYZ7jUZa z9VM>j)p51ox{trJ Dw3m5 zjtIaS+WK5;TSh;LL}Mf%B98qJ|B^%l9)?belFyREb6JfLq9Ie4HT(yP5W*d!r )glkYbWHIH zz;k-d@I7Z2RO*?q?k}KPQrk_n7V|!3C=`NSt(7>B%AESMGiqp$e#XVTvOUbTFT&7)~Mw%qs>mDGffdsg)NiIW># zcBDQ70D ykt53vkr%UjZdwp>e_3u;M^fTa`^ <20v(@%KCjB3&Z+@0(CNLDqs#~6&B-$&lUl|v#I?yFv{p8Mg!IS+ zhO0r5Ty(vVt3kLu`LM?9WmoW~uq#NO>UPNEWm+$Qxk^3^yQfv#3}Zw=w`Q)b339iO z;hxrw3eiwOXk&)YCqt^z{NR9|_{7hplx6|uMP(D vid7%;5Mn4mFCWVJGALgM6|^l&UbJ>7 zW>s5{cqq3@E(lm+b~Bzkc=^%W<7jdW!V2WdrOW&DUElfbbmhurTa}Ok%o-KM_&ra3 zuf}}AHH&ChZGd%R{_6t0i&{lg#tqcy{XgWvpGfz*=iQqIR9MCbaUWa`%EGWj7U~P6 zL`=yI0x%wI1wu+=fDe-mrPRt1ihNBzo|0ohAmOngpwAsr)NFme^JQEK ?-w{EL~))kf$far9Yo+@Na?lHjz_YEr|plY7Q1M66(P*nEXPUXR< zpcIWS!qXGn(<-S!`!OfML`od1*2_{s$m%({Ff+d$&=Xb@K*Ux#Uw`L2(I-9hVMC=j zR49NVRJR*-A->DS-&@yA)9y*5b&-jsr!N_>n3rMJhrOrTV0-CHUqZ9JS+gI}kI;!G zruZ~@&a&s3pjgn5hclVRXK=kX?@4%MNL RCv{cgr0x> zJnGRe$f7lmy84mr(E$L}AxUgSirj;9k!1G+bVG{pwmb!WZZ(ovXn!`N7rfxBi%|64 z03&LH5H^b0hW6t6`}mx*3}GT*ywdqLO&T6Kw~jZ?c8A;zUo)JCc=~KMqq~39-RZMF z^U)qkgE@pAaA>q_GNt^Zn`PPTRRh{Kk7_)mo?oxJfzP Jj^{ypiE;Dot}Rnf#t=Tw@qaqY20$(3w@F8a zSx0@T8=8pUO*A*u;GTm5@+NgTV7yJ->?VT?;Ol=~U -&&1=oMT>=4)kjFSB@N0C1V4UJlYKZw?w8glT{$*nN z+OK^v-EqeqL h(K-G-5D4^!rRu6U4u zWt`Ilj_JSQVWpZ&{wx{V@Ct(}8wmIckwyy{z}w=Go5RL?VtWvX4ZhfY93k+R4j(*~ z=m>6{tbEmG`r&*le>%$sfRsv9#}gCXa-+ZnW5_sq2qEuRN(R3PA%=F8(W7^5{H-?< z4G;J-CrpaN+CBu?_rcRvg>Fio+-sdI@H5U4AcAut*TS>(;p~wo14D($gH;%U2@{!g zH9|x;xE8n}A7VJ?;NU7f<4eD|Y#*yD7NQ}>jep@;mpem8qFvJeM|!B1@?Ux)hk37H zk0+%@gCM0uce&{<^wg(5nJ! QGGUwJb0lY& z` v A%Eh%*`9Bovfz5Kv zn yA~Rf^dX;_+O}HAQ7e=jHyA;?(gl>*L=;3Xm2(vVSrSYX`v!Y@N!2!e(Q~f9!FZ$ zm_0qOWb8SwAOH837FkPU#G0x(V~KdW?jJpWX4>1^qi22D(~0uD%)8-Q;m9|5UypgC zQ|lo$?7ml)jE0GO*%&Ekteim$GHkEgDw>6_9g)vUS&MT)@V~Pg^=8al5~A`t8#))* z8VxJxL6x!-^A*Z6#0<|mnYYk*zpGGdh}vy$qQpA_u(O2F(zZ~5sVwdBiLGlFe^)~O zHvXusS@r}#Hnc;4`IT9H=?)4hR7oa;pkIPTLol9aiGvO~I^&jObvOYZ#FD34h5#yI zvg|8ICCWKG{Kj=zR=ZX7CeZs2o?x{tF!n@jS)v;m`dvsjCnDPCM2~vZr_wB?qF7Mr zF(s}NIY$)d({`pQTe~OepP19;%e=SpL|h4J9A7d%a@5HYn39EG>PZYnTG=2fB}%gy zebsZmlJ@rZ%XMNUp{KeY<{Rm}c5X5lT#Mvb!kw7%MP;ZcSDi!~^?5|4Fs$dsGq-t4 z#tDcRcGDuiLIYgSWk5$Y1Io3Dl5Mb&yg`4C(VJ^J^26a0HZk-Kot3G1Ga(Ph&%OBf zcB4n5<3X5rht8}4V5Ayu1L6hWR=L9aF+t7WYJ9uCgDZE_$x;+2RN}H$a^YPWv#DbN z2 H reM^#7>tGFN(r8S!q3^V#vX4OdtBt`6Z|`Z zWLy_9aHWr)D4CbfJS =PI>=Rxf+iPzxgR8=7?_eoslY;NywK^7jsxgf#tK$Jj;EIi>kEs>v0CXC(%2ZKM# z1u&jqSHcYTQ#5QMjiM!!Q)Idp{BebX&v_2uIWPbkaPZo6WGFMXu@<$uEb$97`#O5_ zeu@IK?RY(Von%nP5*V?-l9kslB4vq_3UsoBx(L;~@qh__LCqD&532}rsyV$9ybOZV zpir{JMH4FI1`p~V>l4Elw5fD=K?oVx^OtkI@*1E3_FafmqDMaB;q*~=y~%6K6BE F9qV{3r>5VumLS`B&aQNi Ed3 zqrZ-d+X`Xovk>|6KlL M(+}bsVza;JG@-_WY5F%$PN{MU@G~PzYPAiJavw0cn5n!^M zqXlt4a});VMKrSOgSQ>v+|rDOF`$E(K}=xW4A7*bAOHx*F>#9me)oQBUj&wP>CVPc zko%qj2Y1{~U;Wk34IT{Zx^3|A5SphjCmTY00qv5*;R< yPSd zkSFP?A>b=nd?>_6#1(chVj%AzK=trk_Os>%NidSp;9w}VEs(EZ{G!+3e31dEp_&gX zGM(SpQX!l$Nz3NX<{WjNjev7u08FXm6)!!WYrts@UQPA;$SA1J`QQgX1fH%#QXzg_ zykzv;A#)I7;#9ob;kv_vLpnH|Q _AwdVSpZm*3d^(n;mITArTD`6)Z6eS)?Qj zsRY0TC5D`X3HVP0y+Hq0Z`T?^7UIcH3`3=15A^0QUA|1uectow%H>P&92`GYdjw4V zU4<42%f`d6e(os}^Hg7#KWiL2$Pr1P^h_xZC%@=L&!_#%m#h#J**k~z>;w+Et`va~ zfZj`aD vM_6Fbo2)001BWNkl &z?>Ffo1n-+KVv|Ni%FCdfIt7PaAHvpEaW z0Fw`P5wI47DCar-*pK} %+BLl9UmE1aCucAtnl3$Pm5u=YElL&co(6g2_m*` U zSFX82FMjch4PsV>!#wPgN@cT{(m4DXOTCdtyAiq35g_bMTiv$uZ~nOOYx@GTBa(%& z63nIfJkxi7*SFLB;DGSfaV0yskyn(TI;Fw01p~o8iSs8XruV$}ee_@d{7plKJ*$!j zw8@h2N?BgW$-y|g!TllU!4)^wvcS-ikRNXn*8IRUK0x`9{}8dzZ=-q!I%b$>gwBA3 z+mB^hWz;X5vEkCwbn?yy*tRyEGXvlR&9oIK#7H?-pEZs)^7;x>9ULBvj$zy86^pBQ zi;b$#Aa!fXzJLY$ob3_4^{sECzkSQw=x{!daci}D5k|E3!vp%#EOZiVefIdBsIc(( zX)VNLB L4mU9t~NwG_bk!^eFQ TOU^` zbNG`(d;Wl+u*K1S6jp;U^NmZa4KrXsIBNe&W1jZlRsP5XhQLmOO!LDzed9O2jP_ JdS)#9d>5J*=?WOFmvWY2sSBjFrN-D^ZuNXn4>ZgQQya>&+&@cbWuUkPW zoue7LFE9=D;V^NI;d>a8F$! d3yg_CO zyh|~DCO5i6zCz>i3?!M5n=8!6lLH0Lrv-3s3;^Tj6Ppps@3VNvV!Xbv4J!KLg Gs=iD_iTPA~19 {?cn+AKdN`2qmi&^tq52}*{-jUx$$Y)6&xVn&1pU5KR!F60O6Nn zFs4M5N<9qCJ-PnQ*VE_x<9|eHmPR=qF?J4B{J@CBRV!vWsv+o5f+@Y9eeG-M@bIuG zW-!Xh?Rlvf$Yw#U@NDNyI9LN>ha= zq~SR3B&Y`c=oLbznk%BJM_)yjuf!r}Bw6+}=-e0pnyG%0OE&5WI+|y|WaBv)x!v-F zVdIUQGu?j2ZSEimgLAL70Fpbzup=4|8h7w?^$uXfGbftoOe92CuU@5}|Ap6;jZO4? z*y>XSoGrmKkyF}(ICMERahzH?XHOt317b^!uug$U*?7fK2+^g7A_kKRp+JdC7%eYC zvLO(I4EHf65O^Z&W2^B^Elq5e0n@D?`XD{-agTNHACe|jIJ*KHha^TbApF#>0dSPr z%vDzW ZeV9jf;j<5hId7uXZ$kR2adRu0> 4s_#Hx1ABb^%qfKI{CYYR>lEE9@<)JGY8RcKm7=!3W38qRZw4WMkjk;H~n&arwA z5EjTXY-&P8bZ~e`uYK*$)4_Zm!V%13UUP&H#LhD$0xEzJQK=K4LxCCD?pc@^W_=nk zC>ZYvUWzX5!u8mTAVduvK(`gW@Z>99iQq|y-Xj+v` ^w9eH*~gEo`)ePf+})gU)F@rjt;Y8$44{JjOL