From 28e03cdbead49fd3953739ba4e57498f263c5f49 Mon Sep 17 00:00:00 2001 From: Kyle Dickey Date: Sat, 27 Jul 2024 20:54:05 -0600 Subject: [PATCH] some plus features added --- apps/api/bun.lockb | Bin 84275 -> 84275 bytes apps/api/src/lib/document.ts | 31 ++++++++++++++ apps/api/src/routes/documents.ts | 28 ++++++++++++- apps/web/app/entry/[id]/page.tsx | 1 - apps/web/app/pricing/page.tsx | 14 +++---- apps/web/bun.lockb | Bin 362239 -> 361189 bytes apps/web/components/document.tsx | 70 +++++++++++++++++++++++++++++-- apps/web/components/editor.tsx | 2 +- apps/web/components/sidebar.tsx | 22 +++++++++- 9 files changed, 152 insertions(+), 16 deletions(-) diff --git a/apps/api/bun.lockb b/apps/api/bun.lockb index eee048456d594dc727cca65d070ce422a01661a6..e6b2a88bfc7eb659cfd8bc21aaafd3e88777ad9f 100755 GIT binary patch delta 22 ecmdlyiFNZN)(tbCu`|XQ=$Y!7Z(i_hauNV)p9xR^ delta 22 ecmdlyiFNZN)(tbCu`}f)mZTP!Y+mqeauNV^b_$39 diff --git a/apps/api/src/lib/document.ts b/apps/api/src/lib/document.ts index 141d0db..2536c14 100644 --- a/apps/api/src/lib/document.ts +++ b/apps/api/src/lib/document.ts @@ -93,6 +93,37 @@ export async function updateDocumentByID( return doc[0] as any; } +export async function updateDocumentTitle(id: string, title: string): Promise { + const now = Math.floor(new Date().getTime() / 1000); + + const doc = await db.select().from(documents).where(eq(documents.id, id)).limit(1).execute(); + if (!doc) { + return null; + } + + try { + if (title.length === 0) { + title = "Untitled"; + } else if (title.length > 255) { + title = title.substring(0, 255); + } + + await db + .update(documents) + .set({ title: title, updated_at: now }) + .where(eq(documents.id, id)) + .execute(); + } catch (e) { + console.error(e); + return null; + } + + doc[0].title = title; + doc[0].updated_at = now; + doc[0].content = await decrypt(doc[0].content || ""); + return doc[0] as any; +} + export async function deleteDocumentByID(id: string, userID: string): Promise { try { await db diff --git a/apps/api/src/routes/documents.ts b/apps/api/src/routes/documents.ts index c05335b..a3594c8 100644 --- a/apps/api/src/routes/documents.ts +++ b/apps/api/src/routes/documents.ts @@ -5,7 +5,8 @@ import { getDocumentByID, updateDocumentByID, deleteDocumentByID, - updateDocumentMetadata + updateDocumentMetadata, + updateDocumentTitle } from "../lib/document"; import { validateClerkToken } from "../lib/clerk"; import { decrypt } from "../lib/crypto"; @@ -82,6 +83,31 @@ docs.ws("/ws", { message: "error" }); } + } else if (message === "update title") { + if (data.title !== undefined) { + if (user.publicMetadata.plan === "free") { + ws.send({ + message: "error" + }); + return; + } + + const doc = await updateDocumentTitle(data.doc_id, data.title); + if (!doc) { + ws.send({ + message: "error" + }); + } else { + ws.send({ + message: "success", + doc: doc + }); + } + } else { + ws.send({ + message: "error" + }); + } } else { ws.send("invalid event"); } diff --git a/apps/web/app/entry/[id]/page.tsx b/apps/web/app/entry/[id]/page.tsx index 271c9ba..a228ff0 100644 --- a/apps/web/app/entry/[id]/page.tsx +++ b/apps/web/app/entry/[id]/page.tsx @@ -40,7 +40,6 @@ export default function Page({ params }: { params: { id: string } }) { return (
- {/* */}
); } diff --git a/apps/web/app/pricing/page.tsx b/apps/web/app/pricing/page.tsx index b5b43ea..798a8f2 100644 --- a/apps/web/app/pricing/page.tsx +++ b/apps/web/app/pricing/page.tsx @@ -41,9 +41,9 @@ export default function Pricing() { features={[ "Unlimited entries", "1 daily entry limit", - "Export to .txt", "Blur content on command", - "Private and secure" + "Private and secure", + "Export to .txt - Coming soon" ]} href="/sign-up" /> @@ -51,14 +51,14 @@ export default function Pricing() { title="Plus" price="$4.99" highlight - interval="/ month" + interval="/month" description="For the cool user." features={[ "Everything in the starter plan", - "Toggleable entry lock - Coming soon", - "Unlimited daily entries - Coming soon", - "Edit entry titles - Coming soon", - "Export to .pdf - Coming soon" + "Unlimited daily entries", + "Edit entry titles", + "Export to .pdf - Coming soon", + "Toggleable entry lock - Coming soon" ]} href="/upgrade" /> diff --git a/apps/web/bun.lockb b/apps/web/bun.lockb index c7d3077caae1a00fe257a76fe8cf4f914d867543..fc90ac31f029f1c8e1e206ece6cc4ca994d97230 100755 GIT binary patch delta 64821 zcmeFad3Y4X`}I9D$v_5-f*=qO0g+7&J0u|+`=Ue;lubYaL_oE#nwJ)Dcf$pYUTe!g({t%*f8m33Ob%vv$#Gm93aRK4(hqWd(uqO4g1;kEd`G?CS8i zNmKpS55(F0$+=T)BANh4;Ck>)u=Jl!4FpbuXXNBf zoir;a@LA13paJ&#u)4bqRyW3H=S{tQN+3|TmThMdQ%?P&;>`#uFeWcACvQw3ptT@- z+SI&!w7{#BQpd8;<#0;&l&QH)^i*ukazXawNt*UX*y?bOD|aKkRlUL3^4G4etv^k( z&d~t7W}qlg+?4`~M|)TBZ0BGD!<56(GqT6zX z^cT-l^=5z;gsac6OXafcy!`1nn2|FxPo3;e95uplL%TvQ zgf&%puKd_ZvnU-1#CY3d8bq#dWV_YJI~-HH=t!*fIi7PtoxP>8<&R+b%$qu8O3sWx z;7HJRYTa3uM^IkD$eWa%pM&pDn%K7UV6~k)neLL#rZR) z&Kx(MQ{O9#ZC2DARdwfFo|``gb$enUz;Z0kYiZZ&C9pd61Ujp%_->fxSX_&GDtA?D z+m|n3m3tpnA11;IQZ`%#?g?wnuWf7B`clhXiwjAp;xp~6<5m>ZppLe%-94WM70rdP z8Z2-fm;}dTf9dTF*Dl)G!8SJtRo#3RTc^}LNjAo}!RkiKWZT-9F;izw$qxi#-7se4 zOwOJ$F%Y;k#SUj9EI)%g1p=(m;@H$cpdow{tX{l>-UjXl6ON+d)+99EGht2YKpZIA zCfznzEh7+M-4s`bHK*ezHKPFCEbIrhHr({(a|&W zMo%pW1QN5XeTCEW^CsnvrbACUeMT>@N?g;TEBe`anhdMo6LY7GO`LjJpmu+2-wkVZ zOvp?0H@BR;X)|&sX9u!pjGLA{BQNL83vIWaX51?Gkc-1hG^N$}$N(F+Y2y;}3#R4d zt-Q$kT?BKwbS=J`geuN-8B<5kyi9=`=j;)%#*KsADf!8Py4V^oYryA5-r=}bMYV=n zw;{MDxt|TO_II%C*By_Uls8-6C(uplUk|ghztQF24{Lgphud!72&;DoV3q&K*;l~T zu$x;hDy~IB>p33QI+-vvKRY*ZcED#E45Dj#`q8jX-~OZQ@@ow@#I6l%-j82uuv|2T z zvb_AUi8)hd1(K%QaxGwu`)$grxsNEWso;XHB^h|h`StQ_x$j~5-v?KL$4<>p9Fv__ zHD}6HaZX@QzV|}ajG`7-*!%{Lx50|*q?}n()Su^^{*dFRVEG-JlQS(bH!n~P`xNZI z-n|_!w0>jBS3f_U69_bcqo<%d^@?(KlA(cZg*8#RJzbbE{>f#CVximl&U#n#%E8ONWpdUy~pF578NhB z`Io_UDVIh0GvKyxJ$S&4c0D)8*8J9iHO$U8+4kGRYVSM8dtt4!D;L`Kj~Cceb1y8v zGo76R)BmF4-ivI3oW<7BW3c8a0hXhtu;#1h66-LCtpR^bJ#m(2JMsdo^C%V8!W}nt z8mC?$upV0hxQKey;oeKFoq=6Tcai&Wq>S@!vkkQ&Lk(AfH50#(uMS+k+?IO>mVVjP z8Hv1~8Q*=G&0lEj3H#&iHj?9Axsp5V34Pw3w!?ENua0-Zu2w{%1qpSap)0VS3Tki= z4m6S*sGx{sVr#2u?zooA|DF80=wHHh;5T9IAkV|nJ%egs?X zgyU7P{LX;2wuTwvUx!3q&g5CTIgP#*X+y}>kpF&>v;Qn?b+oqQFsufCy~Q^8HLU!n zR@=EvSYy}35SRZ7T!Z}hwYJ_wSOa)(E%BG5X%E?+y$!43ZH@_DUQWLM&R}x(H106a zHKOitZMYq*kh-%g=MfsxfR@6VlB-~qyUgj03v9#hKVm!Fr07vw;Y9@X@F`exojp4z zkuy5yL1(Xk)v;4>pw&F}aa-;vti_}^xs!AA@+a{2paZM^TXaobwkvl5EdOJ3M$hER z6?kX1oq`M7kfHnZ?+|qP*z=UF*y3p$ksa98(DSpWWsjbe6WBz#1nj#u1OjKl4K~{H z(J6e{YjkRZqN_`6w@!wuQtDDlH-LM=b>OSuhVVSR)rKd)($Ax7Du4JHt6%u6<;UPt z(d(7kFjRw8E+=pF%-l(11M@fA{FyMrEGo_>p*Zz(8L7^0ZVMFGa(c+=-#%w2W*4k_ zTVQqUA*U~c6~Aj-{tQ?h8tLrbuvSzDxQ2F>h9tC7PI3i)p~oulIjjcuGD5}mA4c#$ z8$c0`|7RokUk@O6tBt@e2BH->mXmez)M@#bPn|K=ORHJ4sQ(U|G4l;OXV1VYn3LBb zQTO{fd3=n+1=7E*VBYiJwC9AsYh!oB){=Mc4Fb8;*OH!`GkI$6oSd9mJFUNyV3iBN z%74>#=*$&P%!#I(aT<0%?3rkzhh5j3i^A=MekX=6D;>@ zU@f`6?^}BnTpv4U#tdBuW)J(o<}X3lmardN6a44()}FC^oRY}Jeq8jz>^|iwD*o%o zMJc-ifirOs#-ZYNgbrxQz4WeaD0-@o%bAi_Fl9`j@gAFB8&(_!d}8e+xE^*KdUV*j z(fRgcJJ6M%>Q0y?dkqPVC>K_RG76|dZ)|N1H)Cr=6YR%5flsitS8awHz*%3|dTrp- zvF}1xz32yT1=*7(u|);ee`!0oe4jlf`0yxuQcm{RoSP7|jn9U4jx3_!8SquGMqYr! z)8N|h+3?pN@y-q23ZDhv>o^~7iQUt21GpLXZy$QcYGp(o{Kn2;7q3h0+C@o+tQGps zj^-z9jVii&Zl|<5^(5ifG<1g*g-^b>^ukiqHc-7k-?A8g&S64u6dUIX;C3YQVSrYDYI3*66#y3Uh5(4gA6S zs1AP+4*COm8dmVDhsXxACC?Cx9B_JmPH6_NyzcFE@L>{ z0y`Pjyw-&kk?&%HeuTEcirD>dWBB${ZO5;~R=x9Jg*dM~5NHKA#+LsetTSp?$d=0@ zzetYOB51*!iJ*~OhpmQ(!-~XjzuN`W&Q*L5TlE6i?cn>dTf?6OZ3AoJ_So0M>foiY zrZUahRbX}S{XnqDFPM*mHV97#f`Nwc5?CD=h^|mi#%==lgB6K0VaZ|-AA}T*y9p4M91ML`?1{&XmgnGK43gQb~#iPfpqh)Y9 z`Y<>{72quRy|REm(l_6I;?#OuD?RZ;qqv&E1zuT)%;5W8O2^D#AFqJd`CduK%*fuD z03U4fd78H+Eh$*fOG(NMp63lKTOU{f;sLaKP z+A-eTj!D6Lyn>X>;3r-QujKPO$4lvy89d?@bjpmRvPEbDDtmK#BztA(>%ElJ%*e0k zJ<&tnmSxFaNor>B7O#xgue_AB%t&)i8}%>F+mf0T{MIW$Yr`I%hE~a&o0=54+*x5S zxH8!*NY9L%#-=og{1}ZXG7(GR!2{MBXT^GRQhBW z`5FNW=dkakd4)--!IfSaxnE)H1hzeFR?GGx=tm+KOM$PXfrWO|@;0SrMC#SH73^&E z!%}$sKn6Xpq-SRM1GKJQddJjA0=v0_PIs8?F(*GLLnGavFEpnkO60 zepsr*jHV`qmtl4F3R6=fACl^Ueu^LE^tw^cS_K7I+Lc0D1(7va{e2HiS)>e0vt#?4 z#Hp+PTI&id*H%(e%UY9OR$mzCZWq-!!VaZF_>oPYvc)GVKEh7@C zAFWNWf){uxeKR9PXdNlXSn;tLORW)Vdific`c=t46H>gCtW4rpkd+yETE8Z{b-LOQ)*nzwFmLh*Xmi5A{1Xp+k12Ti(c_qB2du0PM!!ynb1X8`ij;XEBf&*T#S8^Piy$l=65njQd%;0jbWKd@0BXYDtStIO%ExeS$ncT1Tr`ugs%l0e^RaZgGpD_i<1o5nuoaWll&kG%YcY=bSSeUELEaWD zdk!jWKVxY(vfD`qZj|gYRLNXtF_DaMg|kBb^4f`IPXd(;CfZ4h_}%;n%e6q>Da=@3 zzlAPXH(?F4eW7PxVJU8Q>NB{hxX8Eg8C>F}49|>wj+TWM@Au(mn$%Wk=jS&p)wcWU zz&17lgagk@u@qKY@(V02NiH??p#f1FiN&cw$<0^;PFU5M@IS3FSbz5KO|1UWlHmpn zv7dh`Od+NCa^m6rK`c!Yr!v+jSQ@?E0?zJWJy>fFmgX#?h=zZ}>h5no9Xac$rmM%T z$#EFT7&srE6uB2m!?M?-AFwXMvQyHXR@L=5e~|03v|R1E@*|c4VC(h7p@!vOwgm0g6VrrVy|Q)>{G&T_xi@FQ45y!7|d;@Him zSjWuaN-UjTzPs=|&Y0nTGoO&Mom98lve1WnrMYQwBqp4wd=zU?)CylfW5fK)eVLmR zV~RYC^=F-0-74nI!aCt0^7?;RXEF(+quztpcxAbnk*CqlwOXg7;OAb!giQAJ5?=dz zWxPJh6_hq(+XA zBFJu^NGJ4a-tLP=ZYn@0Uh?CIp+$VKw7 zY@IHQ@EI)52z7&-oG!!ddGFsgg_aHX<`iZG%*c=tCql>!-i{?F>@ZlLJIlXu zjhsF5#082Sb{1AAN^<{^l@xgtOLI-h^rX;NBfU9A8Id}d+I7oaIz@(HX^)`@t8qFz zhBgh`_njp1;H*~JcGL40Nu&sirR(x`oXF$6iPUGu(6(v4=qq!(VwJZJE8|4oH&_~& zzrjY@jjN|WO-G@Fcs+3Yyh?qAmBJy;5(&3i7#c7^N6^rXnZ%c2eF4a&1vwsGzA zfpO6WH1ytB_F~BdMjpnpkqc7qD`)xbg&U4%O1<*b)bK1)8D4oxYUD|2{y;RbRdVfo z+5Yv#l4l#LyRfwOSn`)9$I9?Z`=y5Om_UPG`t@nS3ErIRGvg*!4Cr($1;%!9P;+7vzKyHX5^;n(Vl8dpJQqDvT?8i>ddgUxvpNF9EYLi*{7Mv+pzR@hquA( zq5Efen-*q78s?p-%{em&%f*MeUWujZ^tUi6bTrS~baO_eUB2BE?48e4tYp7&4gNta z+Z9>+T}iuY8_%?P{@d!vP^|WT&lH&DSoZ2Nw;(C>-b`=PqKwGC%TKtziIZivy+!md z4xxt&yg7^M%N4eseJ4Hj3hx-=E<~*fyXqTWX}2F6g8o=)h`o>4-sCJ+1EbxBrMNS5 zv==J0-KAtkQaBl_r&qo_Eslf=5$sM$p^b%Jr(1cSc2(5tT!!5Pt20Fy=#k_&48pDj zcWY``vGH$z!ihx;&c6Z4A*CSuyIW)pmd<;>*~oq@MTz^gj!EHq#kB2}c1#UjTOfV1rV@**tFmMysr%g&Zg`pCR!%fUX$aTtoB zz3E<#rKr(GqV^t^Iz?~r=YQ@ml*#Od#LhG;bI^B^GIp{=tQ{U{`XqV?cnH-0q?TwCbI<0b9_BMI9vvAD% zO1RDrfH<NH7o|VKK%90hCk!jc4$>c7b?v`NL zQ&WD9VD+cGjdZv9(dDXHxB{!K&10K<2CF+(Wv|Q7IPI2GvaOsruz zVQWsbkthNuahWKl&?XA%ZtES>Atk!-ht;zLR{r#JcAoV6L@yAUt(eVlZMom~G62#?3|tA*bnHNbZ; z@J>4etZN3dP?l5YbW1L9qFNAcYAZzXM~?d7~&PKPYs^zm95W=jJhWp0!`fmSjm2*KOv<^ zGptTY;pQtjhrPmnsgaSSx}vjkE=UUBgO%nt`!OjSeck@GzBjs`%bJa)#md`>(aCWb zin+ZO{ehL{XDK$FR{2qVG>uO+J3XEe`4ZdCk2d?{`|KIXT4e9I5=+srd&f4c0lptC zpSt%)EtXGY5>{_NPu7!IBW;Ux?bHYCt(bo@MlQ!{Paaz+pYlHRfVb(%jK~4RbVNRJ zoR}18@}QlZYMxGkOR@aVIKwObl-@9WLCSV)?)s!)D=+2g%t+p98#S)*-I5~Pv9t*> z!Q4fhyT;$lSZQ-eY0DurPbWp5!{Qy0O3`kEwb9Af5}Au-qs>wX?^m9G<5m2SmXucQ z$D|Zk8=g83N3AV{;36yy)8@^uXoa7}8t9ehr-n~i7hO_0q_h?|>j>^6SazplLkaK4 z;tXbGWUfDPBGAJ-uSm!%Cl0#d8FFVQ?%|M)GTB-&NY(D_)& za6do_jOV3ITz4)xxX)EunOYJ;ye>6KOl8vPf_!~=TZK-!`Yex9? z&9v;5Z%qw93~6lCZ_PZ;56uAZ07OO)AT;+TaCgg|DT> zlIZ748%WvA*cYQt&L?H7-b%{0wfls2=1b8UQ%TY6_Ow_M=lkx0FGs7MN6I=jQ7!Tr zDeXO+(!-O2ZM?GAGs9PG^_zG-HT*m&+>xsMitmL~e^PXS)KXtde=9APge}%&TQqY5 zDSAw?CrHsOslaw=g*($?NibNXWu$E8K2p}nxvxg6&Lm~q+H^vTc`aI_KPhUwnHEce z!Q$?7QnuA|UXK==P0DIpNcrx9wY;*oGb2NH*mcOnKa&($>@5F68QG4d^MUtx>=wtd zbiL=qUYitY^@d%stS8>|6usfic{d~Sk`t-^b249G9z*N=W^^M9rY8sA^ya*m5q=Df zyOOS{;UlEZ_BX@&Z`l>dZor+?P^^}A1+u4HkJTBA#%3l5-|~*VpAl)W({_N)alSkQ)A#6!%f2F4?7RwY*nqWFe{U)+r&_iDfq;g(tE*df8JzhGNMpn-u%J z!P0QKMVOTo-i^g=1)n6G_95R|s*T7Mq!b>m&D_I1g~gk@jMQ+Kk7>h{Rtl!+?|l?- z#=u8H`Fp%hpJhZIL+tB|bRk@h#myJ)#(q*!e-w+mB8C$8Dbs7x<8Vhxo#*rINlD?F zpQ%eK(Vx^5Q%Hlcq=tLxU#123dUL+ajNR*R+!T47)L5_dv$WXH6{7TGX>lZM--6s( zc%OT724sYHB98KXj{m~HiXKgiB{2+_nZdDMdU;yhm(ew$oBp4$bk6840N<(a%M3lT z&pWm+BNG4Bi8%AIbq}xLEAC^z@-}^y5&n>@k$xM=`xP>c{VJtwpz!(<)+{Xh4Me8{ z{A9_u^ldqYE^jug;lYa54Omy5$cy{BqIDhCv=e#1V4d(1p74zpJeP;aV@gqq>o@CR zFP6gXUm$}CUcuLykpbUY&Hv^(a)Yz{H5z*1Td&hM8Ij)*?JCx(dfp)$FYZ(r*)>>l zX?L7won^nhsPj(S($`51sDy#wijPyP17I!$|M}H;kO^YQl$j^L})GR->??@nU zou8Wclm8V6E9_-bQ+%!6&w;=kKedjOo$9K;@Ck;m6_T=zy-BLKSN=mC4 z>{0zXO-p(Msj+^lURku&#iac6JhU(Dbvlv}Ih#MH(loLSa5wS}*5ngbKmNo@D~dR* zPYNxq>~;DnBXqQ~H|M8}=2PN=flF1ABM2%f!Ep(C4fHGS%k1098+(=aS%*5|1BiCi z3;1KK*t4&RcFfiZ}B7VV`;V8`~Ip5?3b}n0lhbdpkA1HY``WbiZp7q%&-5>Bq zbxVk)?4ABN`?L%O?($RnNj>YQR<$C8rjW~`NvRS{t=kO7E5Z zL#*>X1JnW+0d?dOprazkV2=bU&tBp4C|JiR|MfpPjFtmJfLZhp*l*t#&Vqr;Al?6;KE613Lbhxn9V@1AZ~fL9?z|uy%DRYn<$}DMdDY z{4-N3Xwpv(HZy%s4%WF)PWJ%ur$Ev9 z5>y7?06FEB$Is_h#c%X5tmALl>^M2tph$iC!!Kl6?)|#|3yzS_rQUCrE4JS(msr0l zmsOv+fcl46-Q&XO9~IcHOs;|cQIREa4fGvx&GQejl3d~Rx9$OUasLo2$qw!xV#S5M z(LcnR?GCU8m;@_+Y5ZBUUoqVk6sxD5;aIr4vwOjE(9h`uVg3a!(u-pyFLwGMSPczv z`C|DS4lCm0VP)kO@v4(x4y*!KxeV$2<0jZTn&s zazd*653KSrF8_arRX*00hgov}Dfk@-y8>b@?NgmC)>5qvtAll6t;92(-VD|u*1*nz zRjws`GMonMGCsiN4+_z~E}z4lFbdXDktL1hMLgE!i{*Hn({mk9gw;@i%fHgG7M0q$ z7FI-Wa{4XGkfSBALgP8U6;_4YoqY$abLBx;BYOz04Zi@(;dZC*fOUxF_bpfvdk>cX z_g%hNeu_SH86Uyw`9YU)2-ddt3#^X(4xa*7#j6~h1j|7+$2DPNi<-}BP6RfRETi_i` zF2R_Zp@5zOC3!cj&VDM7hAA&nB=+w9t!Vt*w^M{ySEFJMtC96j**cIZkz)25TUhF#iJGV%^S3!WVkE0_Q20 zL#zr}upC|hw}h{R)!^~fb7_-`offbertZlb8%)h|tVJ21^dSfiDs8+BXwu9B74l4BzEXN(m7biJRcANt9 zFOb2D{B?EQ6IMt1!n*ew5q5WhBN22|WI4Xn=@nV}DD+d|8L%3d<;qoLmAl;OVnuEa zEd2_{SL&^fGQ{fHwXjajn_YohU>#ybWU;fwDsNy-;oYzt-{bPdvRA??_n_0o(pNjX zD4Gzffwe9}Ec;<+i&b$QtPVcy@;5r(bWZ{*5X zWHsCZT?0sjRllv{q)NnJ8L6(KSUpd3wpflcV3q3%YeYR@mFo%XsL0ZLx%}QP|L<65 z(S>JGKzEv>T*1F%uGkH@V(7kcvMW}R)!r0z@l;s-oery?`L4WJ{h#e@vC7SXB^C3c z`g0x6gB7Ujojt#j{@#p(gzxAkSPk3)>-gVcHMrP0T;kXhn{^F&bEXTyJx*Q;tN1Ed zM@5!?zthF)=UQ0(f5_=#b#J}XA91=^`s2>7z&aCch8%8i1;lEw1eUa!7v;a?^sN#( z#G0VDV0C0Ctbo7g?Drji;CPqI{}`74PqY#hfqe+-;Q^QNHO#-j56=D(9)R7Q!fL1o zEC;<{mCKS7$MVx3TOGN`@eo-0CC@i1|~V4 z3d`Sg$9axtI=&oM`Jy>axYF@eE@LjN2Ie{a8dy`Xz}Yv#a&WV=7r`3wtf6duD zVE-0(r^|TP@dvKJZfAcCD-wI0{h7=E-0_!A-|y^$&i)qGZu2v&$dtMK-(3D5vi#|9*q< z?>88K_f3ZOh=0GqAPE2Mn+vl2{C~f}@V~iGIR5>WnMZ!WYlWNTNsRPWdS z!qP{f|N9Mw-WvY<4aWcI8x4JK^gnX&zgb^5kpF&z@$WYn`mmbg-)}H%9RB?VykxvJ7GJa)cODA|Y-$LjBtj z!Y222gpCq*NT_TQ?m!rSJ3`?d2obYgLY+Gh67NK)Y6|W|*d}3*gm}|p1;Xq*NiAG~ zaEjS2q4^4g^t%wMn+10v?2>RuLJgC0H^Th85LVocaGE(NA^C2Eta}h@o8|W)9FR~h zA;I)niLmS*gmo(s>X|YLy;mZPxEG&@5E_`Fs}NS-i%=?|k%`=gFk}_N zEkXx#P(t!r zgsg`UlFagl5DrKvmylxmJdCjHA%t}gBcz%#3B4ai7_kl^-K<%Ma8yG4dW1|fbUniA zbqJ*rx|ql#2t(E*OnwBRn<>Ag^wZhG2127 zc?==(afI_t!Q%+qBNrVf{f+rDnNjM~7phk`E;U0-5LRzQD3y?HBAXC~lpsvrgfPaGNQm2nQ2!Z(9FzMD!bS-@B#bi& z&mxR}2BGj-gj};-LY-$35=#*#nu1ba|(;SqL{5(R|7KF>q@+}AlB$P`iFnwM?ShfXW-3tg; zm@)~yUqBe~B0`~A^CH4g3Gpu>6q%tfA*_B8p;W?L6L}e7$V&*5Uq-mvlt_qs8KM4G zglkRiR)mcbc1XD1B)oz!ek(%ZD+mkBb_sP}K}g(&aHA>MhOkY-9tjIgi|q)rw;?Rt zj&O_FEur~#g!ESt7MlgHBJ7fINP=flUPGAwD#D7_5SE&Q5|Up-$a)>YnB}h{9FR~h zVY%tE17X?g2gC^l^gz-BO3g1RpW424E^EN`_I|vV%f_D(M zN!TM{ooVqd!t8et7QTz{h}kWn`MU_|?;$*97QBbBOTr-uPneYV5$3;#u;P7$r_4bK z$?qd%eSomREdK!EfP``hC8p0Vgk>KftlNd~j46}Qdl$lp-3X;-&2EIF65>BZ*ldP= zh_HG$LaBr;Ch`%&kPi_ie}wR&DUlHO5kmcs5neXAA0up(utUNtCSec4_>U0^_aJOH z+a=W5gOKZ2s_P!&k%M=I3(d6 zld>0K{$~g)_9DDz4oXPgi;(p>!Utyg=LiQRluOuc`h0<~>~n;5Um$#B$|Usu0%63L z2z$($FA?2>Ru!V#15EyDb75LSGP@UuB6A^BT`tV0ODn&pQO4oE1MP-gmkhp_Ar z!n*GeelukfdVhy7;(OhJ1kKv-bq69P{s-NG1kJD?bO-W1N-2u&Kn_!B$PWmU4i2&EDl znaJ-5Lw-Y;{5wKpQz9YmcZB-o2u)0GIl@K>J0vtS34b7rFGnc+1EGc4E}_mJ2#LoL z&M^hY5w=O#BO!5VixA;B9*keQFvR`G(%qrKOPhy?MG&)%SrEkDg?&hNJChQk`1~Nk ziV#8vb5KHZ2q7y5A;~O{K{z0xTtbTJ6N|7c24P(+LaHf~&^s1kL>M96tO+9=l@MPE zA=3=4gs?h{P%5E|iBv`yQVC&lWrS{~1R>bnRF8vtm|Rg$vqjX)Bt)RzX1b`4*)BTI zG^zrfZwf?x%}!C4X;Brov#a2CVO8ArGrJLj{Y{&bpbO0c(EzhoG|;5PLl>FFqKnNz z(IC_1WN5HiE*fGEi-wv$r$EEZO3@{zOf=kFSPdFs)`&)$V0GwHGgLInJSNIEkyD}3 zCR;Sdl!(Tf>NTJolM9)Rr_$9OHR$R%lTZ_VyqPY_HQPlKOrz7FiKaj_$?OzOHZ5vF zQ_Nh^RI^(&&9tcvO*acfGt6F5o=K?#<(tK#ndTs5lIzf9Rsv04Zk8t?9FR~hp}_R1 zi?A#KVO?E>D@>V$-gOa1)I%sVYw95!l@NbALXjDII>PFD2&EF{nn-_ zv-~WC0}{$5EH{0cAS^ozVOZjP|Zlt_rvIa$92!u=*!r|d=vJ0v`463#{#-vXiVY=kvtyM#JtBP5=K z@Q^7u2Vt9pJrdTL7Uv?&J_ljpxd@M#-4dFgi;$j(@R(VUh_Fk-Aqh{Il$Hqd6A@Ol zM0m;^l#tvKA*&U_2D7{s!T|~85=u;;)(Fd5A*^eS@Qf*w(7Sc$WHYi&=sevwv_Ux9 zniBDCDY4lMZHutF4MM4eEhf?qVMtqq$?XtcG$j(^+9A|$kMOd|ZI7@~!VU?qn1l`p zTbdnD{IEs_vscSKm2gz%=>Eunc5LV7a7PO~5x zVV8tM65cT>DG2kE5muxiyk`zdNKQe>>V)utS>6fZfP``hyG@@|gk_x&)}?CN~pd zql6t2_M3#x2;(ym3OgelG}|TA>5P!r1>qZ0&;?vs*&* zt_bPf5DuFK-4J$3I3(eSN$HL-zZ=4e?g&4dgA$UvBV_eJ_|+`$fp9=Vxr8#)rzgU) z9ti7tBK&5`B=qiyFrrt8`-YHN+bhISn^h20`0m6!Y2&b8Y5|aBNWc5d= zZI<^(I3S^1LW1dYA;Pl$2b!~lf)X3YSEqY~l=A~Y~V2O_K*Dy%=GmgdGx^nS?9*nSX2tq5fTSD_82X79MrN5Sh%>G;sytep|Lp)tXWH*CobT@eg++mJpnR68b|-Gsj| zH*?2^dTl745?WNr`=LXunKm;N7jEB+KO5h$GAHz4P-6V#>=_gJPox7kUx045j1PI$ zC%FHM{=5GE&jX8NO|WvXl^lIr$#)kt*A$1^hu*u~+?5lm>$}Oxo5X(~&)@SFIQR8@ z_f`J%wc+G>p$9_Y_Se(14b$%oRgRUf*ceqmBl>^API!Ro3{u|%NB?Wz>uPSum>8-R zV@55f{}1t@ZWZ<4HW2?GH4XZw{#ffQ4i$&*E)4{#s_dJ7XUw9-IQWYgAN}7*EA8O- z1<+hxVXaCT7`96O2 z@6Uu`xF1*Yzw7^I!<0KiC&xC5{{M$RoMiu>Lk&Cne?kT*ZI`Ja;G}w9+LFyd<|DmchFJI9PSfSqo}%*Rq+fzgTH)mnm(~_ z?6ewA(;rN%*9(V!=r5Q0((wV(I!<#MKbko4^Y&U!sPVeByi{{1Jd-6h<*|{&TyK3Ry)vF>{AHjProbc8Kdv# zIU2cw`cZx_(mKv`ntlo!eF{Zmr|EA)D#;7SSx)0m;RBVO*2HNw(cYq0n1QBF)5AiZ zP)|9UMV}O)AAt^aU*76@2+G&bDr+i^94(wyhjbfP?rf)NM$d7Y9-*MRbwNEe&D6P0 zt4CTtOx2O-v?89H<^PIR?X+}aebP%^!B%J*l-9=ePHW@JH9(u@w6;!bh&Bi))q3)T zj^VCuJJR=1PMsg&wDzQPfsT<*>p)sR*DR9bOP#3S4|PYBHp*#9q({3&nC-M=G(GA< zhyG$!qtkOGCQ9HK<23yaX_Buna;K$YPX_7~Q(fd&=Gl^ZWS@UrMnO$kI+$i9{{bFq zBm?Njr0RXHbC^lG7^njioYtB2l|X)@5B=yudIpeRJ?BIITKA13#qs4(6Y3Z9M@RiM z_Ds+i=*Oo`KvU2RGzWUDjebts5NH>C1UwoxE&IpRs-kCi+zD31m<#&H+?=I{dMpM@ zfOfrGfi}9^fHt>fO4GIh%fKzz8lVQ$8K}cuK{wFTw7HPYI*TNC2LArW?STGME&u0^ z+S{}$hJj0fR)c0=v#lrj^o6s)1)v}34|G1H0xfMVJ25;Cegcot*T=yRqz{81fu3M;2waVR4Y(HQAtwic9)_|H zybIn0Zvj2GWesI^z^{O9Kz}&>0(cQ@1>F7>1(wjb2W|!0(F?(KKs)&;kPSwIFkfl}}scnGWq z_k+8^Jzxd69V`JJxEb66E&_wW5HJ)B19=)9;PT;bKiY1zz39qO#_Bl+UZPxU3A%LX zQlU$OE(PnrQ=kNN1>Hb*&f}`LV_znCH%E5XV;$KhRI5zu2%VnG;G0+m4=m9c_bpfUJ^GRMJf zUvGnXq;E5WtkdT=HkUQK>|>YV|uqv7kp0&oLZ2yO-`Ku;mK3|vL|SwN3uS^#bUP4v{B zW;kmO5;d$= z2EFGhMwwPM+2o=b-!nxwB}lYrl2;c22KX? zfX^lTYlf~JKZ0WYNZ~MvAHerO7n9u^){Tg1TuE;j{k0)2n*NUTH{c*R0QQ5gO#IlG z295TR{1|)$+@}UUX?dyoKGS7vOpTPUNoqg(*2%i0{S0)eI|6=jwk~(aKpD{G?pxDn zVoYnjB#rR*s%RVJDQpp-TXLS4?q53f$&4Ys9 zoDtgwdwyic*JQGxGvoH4f;5;A~y0PyJqJ7bwl7cN?X`sE|d{HXN zWT2Im1a|<@raC%3YO74ebSLt)FGjUk@}s_@n(F*hm+5Ae6LGRbt>3JIKh=v4QPHq5 zw1KPLq$f%bP_cv`aJ25A8|doCuZbM})p1v{qn%W~osK5GkfZCc59!_x(Z2Z8DzA;J zM<>mfD3;|n*5mIcE854uPEy4Q(&V%SCnl%%ZMiYAk*Ifn)zm1exUYObw=bo}a4-m5 z3@!o#LB(>HU=IVjfgTJrY#sZkKLlIj735s{ZjgsweJ()!lFjLu-JAp*d6f_6*!D(Ov`A>uKU=nx=JPFo=b>Jbe7G&e{0dPO* zdqGRmJHblQ_kg>=9pHAb3>a{m9*3}i#MNK~h3CS>pa@(AbdOmGUjgQTX`lei0yDuB zP@giB;Ta$wvfzH>GxCUGYt_SnM4PYtoz>VN0ummgy zi-0O2Y*73Dty9tV$sCx9B&R0;ZIrY5KX^laejpc>HKjymH%jzUh3gFiqy_#GSr zW#A~-2;^)t*alt)&w0VWj48VCIcxYt@0Ua|Ah(}D)>Bj z=`WfZ*aB2mWrS!weYUr(Cq_XfX~5R z@EQ0Nd;<1>kH9-%2Z(m~P15Sb8$e-Iqi+KZ=0hOuU9cPM0v`Z%;yqBLOjQ(AL99wj zM;&Wq>am>uUBl7*zpEonAy<8+wSE*$m*!3HpN7A%qP8k2WGWc#oWiaSf8}&JldTA< zoDgkDWtFeUNS8lpN=w%w-WnWd!*v)#;ZQ>=B-SE{R@5B+Q(Eh%qSI(Ynt#o=^1d~t z)A)qpw+cly&S*cPWBxl^c{+>rURtZ<_X<8V2EBWWcC})C4MVeBp=(8c5VVeU7OH^O zuTG5U+SM7X4>Gk3!2f$Z4*|ZMz z>8O^`Nw7X0)u*KTv{cU3V05;{+AROts772-`(N3b5JfShM~Uk`;dEFb)uvbv=n*3c zpblt3zBWgNR3Bl~0<)-m9Q*+$0XlFFDP-D8f zpAGa*=UiA7lHnwf0`xd|m5XZ1Z;Pf;w1HcLR$x43YNK@|tv9@CtO)H=xE*!}ARl-5 zzPi~4P9>A~lYtw_m=A`5>%nzk1{ey`K?YFIyMj#61#~v`^JDr|??JLV=mylcVWu!Y zW?<0>%;De?a5@<2YA1+D^fz+5m7%yxEx)3iXY0J5WH3rSxIR4=N@R=OBO)8rQg z`xBtGCaKz%Af@pl>UFgb#te zzyqJ?X?#ma+zR%99Y7hXa35F&ls6iukAf?}Qfy6dbz3?4? z&l7z6Zqj#wJHZNY4_IlkX0ge=LUJp38K~)(fLuQbHh~S`X|NtV4ju+;z-pkmd=P#B z=;U|^R?}-i)W;K~9|MnqM}YjOzUr>iB*+ltT&#-GLb5whup@YibhM0|mVk{wPSvP7 zANBPj=@&pLcm}9*&%*k+U<>>_cn)mVBq(4i7;Q+7{u@3f|0D1&cpK~lZvgpu6MhTy zApMTx_hFUU1wH`p0cjtC-C9n{*zKV7dMc{}S_PkhPk~m3MyI?lVU6xv@D2DJsQlMp zA5i`mK$_Cgyy#RML^}ZXgQBl^Q3w?x6;vZC7%ddlqzhUPa;nf*Y#`dH!{|SN@4~F1Y5_(a>uW!K{im-1&j;rLeZ|)YbOP-_E6^M0>pp$$ zr#~cU4jKY|9CvD%$4ebh%j_-SL{(K%8u4obQO7Bxt0H0bV_7s z-hKzs!uk?GUk1d0Aozp4a-g@j$KepHGB`Og-xbr*HSpi~E1i;R{O<}?!@2TwTM*5! zxau{h73=Q%2R~Z$S_2i!%AeN8{W>M1&c!-SR4^J|Euz!@rm_~;Uma@U{Z*4)F)GnB zO1gH*qNotv)uQ%a9cg9%Rg2nM`O&mko!2&8abSunOojp!Pnbf)W=8d4*j zovjg9yk7 zw_O#}aKl+w#XJ=g7aZBHWt+AwTbsReW9pgwburbdhJqv8B)3Ek95HR?#UzA&51PL7 zV(QeZswTO~*|mAyyX7B#^CShS*|JSapphw>7t=1--aG--%cNX9<-UJm==6Ix9yx<@ zlxp3&W$V5scy&wyKMSdMHO0r9ezInn+^b`<_*?i5SH~1Yw9oMoPVtpy`jVK04*K#U zf_Y%|4X3>Sex+%l;5L+MDDxOhRrtK4+b4y;Uv*Kn;4(&71LcUh{u&&{nD?%sm3WhR za%`>G*4hCZUyI(zOuv?9&o;qDF}2R%n%th7n3Jh@Wu*~!q~CP^6#CnaaZ#hI*{q^j zX7R$91oPvyF?IRzOZ;^)3H9{NPZjFaTT}Gu`u$Jw;rqz;iUprBnJyFv&NG*Y7MYpX z(Pr3O*pyDRWgg6)>*!SzQ~i4Mj^@(q8D%-QzZ%Q^zsw#x@Z_!Wcxz*O5Lem8a=?Q3 z*Pk)uyefaTbDCLqeatzHM^fM3GnbC~3{P#DWyb%q zX*C~DZ&08v1rEUK%(c~qPnvX1@J_!oZ8WyFrjUY>69vs<^BH2giQkL=?Sw;0kN z6cp}ri>AQ1EV)(@i z#4eVo(SQX@qOpQ)P$P=QSWr|%5iuaf9=oxE*n7j^r&xmTclMlR0YUw~_n!Z(yYrhl zb7tnunRE8+g*gh&?MJ7;iVs~n&PE*IK@gzKr`>hGrnY*u3b6(S6`y8Oh1pOe8vv%& z=8+z8!=Lt#1V99eBE*1i4~8+E8M-n-XS!`V{q>7gcO>0p5A@Ua5!s`J& zXQ&rcVlJc=$KWtRt=DA-49oUDu?*6n6h@{+RcZo&&s+dl|N4C0zeMFDi1wM}7!I-C)HxizSNdeYk^97OxTx?{#QR>vokh_CdY-JeDdGv=S)@{xg^-p> zqc`hqEm>gm%!!Yl<}d=kGkR3xuDxIVMbVq%&vr&Hz2JMewl!rg#OUt^080;j#r55r zhi)UXD>PKhp|m=bnk_>A#?Y3<@a+$ANQTpB0ekc-ZCs@2kg`K>L(doK>j{)G9n#pC ze_68Zo%jsHS|JU_{fYu1hU2`%Mars4>8te)I+@;rXtZ-?Z*DC@2lcb=cl=&(BID)* zt_Ia!f)+8g5qPU{1)EP&vMG2|2h9M>qv6t!t&1lU>uz{YOSu;AxE?D*y{jjbwZj*vY!pctJJT!eY^SQ+2Wpi2gyy%;o1@P$SlOl|sg ztP8vvZY>)KVj9Y;VIG4SYoj%mkYf#wZBxFeQWRX6Fqsa# z>uQu3JJ;jmEaRVVx<;%C$Bfh4gI5rN^ej^Er2=)ksnM!jw_IUkWh~@akJi^T_S$|P zU+LydZ0?l23WoWL-m*aY1~}y1&@l(6-HYAY2Ggt>3rgG>sQPO3oCgj*8LYiV3lEtV zuxOgwfDh?frk{F8EZFC(N#J3mDym*Fv9J(UZ;gblP8P~!n=7d8Bp@;AXSNkJfwWgHcwSI}P7x_kvg;ct;2JxA@ z-FxJ>7F-q-z8)80B70hahsIh>ux>}EULM-jewb5sF0%?{3Lk?)8Gowq8w3@eB?ePR z0P>Di>azg`;X34{VjIv_`L8Js|7D5tLwsB-a@(YLuq^3|{V4_9SY26t2v#ZI1I%=b*^oK2 z)AH>{C7p*i(hX+o5MPSir1vx}27=A!UJLsNr>tB(Nz%>46IOYz_NB)_NYTDjDO&Gf z-ihaIu^8E{{srmJ{uSjMS$~1TD)Xrx=f~Q(Eb69FuKCgk@EWs#U@MWpckZCGkmYTd}z)OfSrlb2Lp(z&+u`)0j!mGrjQ@a`U0I=O zVMC_?FxTkJr~S~to(qbuJzb5-1{MDr3CfzR5$^Jl@s^H2NxG_UsEdPFqla8ED{0)=() zz^uPdc7Ji&fcl)3me6Ee05yz-9j61q%yh^9>Bh5>H?YK??8ze}EPzGny>{vAB zM1RD>KkK@YDISk^ccYR!AmDg69_W+53OGK!>J==fyu@3B94kKAH2i(= zNDU!T;%)@G9ex)K6GFIkM0nFZ_@QTiHN=KJFmezXugbNKZ=NgV>nUld|?;?56f4*F;3XeYC@pVL<7U zReP0=T*m^`o2~J%!VgSjn{PcSI1w?ng|^@p-7erMx$VUQNU?|mE!nGI`GNY@IXQrP z$Gka^uZNA+owH`duARjP2J7EmP`-dheP{gHcK!E(b{d5{+Ce%MNTZIUFLwj!^dIQM zdvLHMyRh2QUFW}U_Kn72PvI$0+MTBSiLP|$Lt%gGdsk6|;=_qZrQ`~sg2F2Qvk}Sq zKA$aB#H+*qH+96gP%nxN0v*+^71C*CiY^|~KlczaeZDIm_NR=qaLK#=v~9mKV1qp)jx4A!XQ)J_OZU)0{*2K+cs$ zAJH4E)G{i3AYD16Zy~K3NRXxVO@ zpuF21zVSk}VJkGsyrER`#D9_b)Tx!XS)jeR$bv|pZv_kb;*>ghv5lv`r(lJi!)f9v zj23ZKRS{!3PZW5O`)R%FXPa9o3G(^<(>X3riw5aM5Op~7-2p&Oi{tWQ%t-n2(P!H)N2NR?QJu#=Im38t!UnOn9;~XSs}E-+m4X+4ea>SQbzmf~ zm1pgrcpxR zRrf4^B|d>SM`oO9xFuw>Jok}^^cIicApA&bs4k^`Ptz{yTNqWw z{35Nf4!vOpo^bfk+O{3iVfl6M%bZRl4Z!ODLhEF(jdlgo~ z>Uz;gO|C#OcL11(bK_UF?Ye(#rUqyU3TyVrvdT^eGH>Ks4Gtbp^C8?k3kbGjcyG|e zJ8w^}Pt$mR6U|=m3cWFJpYIHfl02T$uAoL9I)SWHA!FJEJ{y5t#OxBXMX`s;bB-pgt}2xURI@gupV zv9d$}Z_G*^yWRg-F^KSXGqc!qpuTBnss@GNV)P8=_HN`q>czQCGat+sO!Biht>|X|5gWdtZB43sy|()&qN;|3bTxaxTWj>rz> zuimpOih7(gBnfOrxwD`cVAt)-{vthkhQuiRrKfy}gMQ zVEPO$C8%b_ew!BeYmc=#-ycBaq};=MuJBuWN7FAq^Yj+6xaonvcXx9@TRzwgLVUsY z$8YJKt;)~jSKBRVAK<-wuts}yD-~wJsQI#gHS4K3#9*hzd zc)c=t0X4mcxLE>3c`)r7u+cB6*WA4dLOCJF52SMbCdPq;y(R}0AcJ|fUEjL&5|!naGM!cMXy9c)(` zdfJ1+L_EINym*zbgE7k~TX{(3RhKx)coECyGY=YnU++?^fxy!BMsj&95Dwy@RbM=; z1OaJbwCyDvbtjBYXXE-ZjP@0k9kA&T^%!Hyiuyjl#Xyd)v1(iV03}0pio*Z#>vEGa zaA{1Zo@2BHgj4ndSZ6>ucT_36tnL|euVXhBdbzW$NYRigm`jwlhg0Z7#Gq)7zoo|y z$=1%m;Q_=EZ*1u!wA+BnK0||fkz9<)ZxJ_nM*OU>WyS8W7k6SX$1I}AM;|nht3T5I zMO5iA5JEmDp~pe2|G69WlJW{OwO+!f$M3VF-(0vkS4|;aIH}5IO6aupe^BF~|H8mR ze`YW@z3gC$f#z(t<-BQMTIaX}zX^k(>yWYU3G`}1D_~*4MXHj)}L(p929&k)1Uz*YuqPrkeT;N`54cA9IlL9qv=xBvCd z4?5Ohud~^@8n)s-Fxp1&b$1y#@@Al?DOBi$Oy)v2o?*67U8ls0K}05k#hx8&5&`N% zlh`qk7PKAVDz%TG;~D67j|jS(febcGG~w{mk!4BUHr^6Vz(7+YsHskNkY-1a|8p29 z0!S-pd)c1c%7qTRttq3%Fn5%34S;NDn%f1txUG7|-o>IEWalx&SlJpunRP! z`v)_2jb+@pHqCsRkK2EWRS(Sbh^r>F3IKCg0LnpvWx27tSFdQLh6b!Z7!;;gMoIgj zgU`P46Ra@l_+|7IdP#YMr=4_e8I8(BsEX9kf||Y6+gZYh|178L|KU-Fao}K#S;1#8 zi+V49SmQeA`AB(>wo%b>=Mq?&-+&QA8uH}pPWC`67JsA~QYVX2N^HGhkQ{h5zhw(pPy z$MH0;rYjjiz!M4W%EI~~pAA&uVpb4dr%tbPpthDUwVLomQ1H=_BTIBA$4sIP$h;=W z2DLjh>WwB;hES3Hd4k9h#+$-fBb)&bTQW*^FczMgmEdG&EqlDhE3rc20kJLuKy*?K zaY}oeOQ9S)<>ZxoUQ*Ky@13n?*c=9tsYO?E8;&{0{a-jo=`)+s5oAio?PSC&&ufJx zFmym|6IK&Buz-Vc27VgLrigOzsu=lYBdv-~s7_F$BY%mY1xMNGMD@2BkHK`RI_`&u8IL+r}t84QZbE*^MisNzs8IC z$58P6qgFKE+v_?r`8=-&^YZgFcG_A-^+nH1xD{v#o=l$JVlR!43>e<{T>z2!He*+UY&E0{7jZ|JM$4B*d)68*dXgC zd*nbMSV4A^$3_u4#YRz75x9nr5ViKr zl|Dp3eHNg=U=wL7r+Q}1@oh^RCr`E(Te+1RqV>8FF_#>Ruwztgkp|uPz;KYndP7>j zmBNb2o~E7PU~h*_S)nE3k~dEU2L!R4@aI-aFNTtxAHbCkFQ9V8!SLZK0}RUP>I++` zPjN8hS#8+Lb=ZN?EyZP*;_Bj{8r>)^`$rs(bTQFu#HfGRoU>-&JDbZ z9Xi-IYy9;FdlZVY<`mtarB<@Hge{QcRtQ1=Sh{N^d+L;gWKZrTWRp+^$I_vJ!Ppl~ zvEDYUzQMz~d03PpP$^&7`o@m7myjz+BV*}w3EA0d62Q&?KaM52q})!*ilt5^5wQgf zZnn0evn6GJ-u4H%jt#E@*FVgIlu-&Xc48-$ER89~AFY0YR!hXSuV7p@d>mBtbgRR5 z)0Ff52IJM8d@W>K`s?of2VblYfVUeC?BTm*c0$>fW|fxfvekEK1V>Fu#YMuIm6xUE zcK8A8DP?gR7*E&Bpj4b3FHU+?%uGIiscJn*S4V7FM#j^^GB9NxhJmoAueHn$D~GVl zeSR#yG#zDk_-Suzd602>0xyMP(h?s#jd3lnsHd!)g)F{Z;E-3e1KlkvPcyUMPGoh| zh0^s#l(TL7HJI!1UC&dAoU**bnSZ*UT*^KV5JwCyB~oNL*};4R2$m*>RA^(~ap`Sy z1)FQ1@@`dc_vwbg5b4#s5n|bw$X$d5b zJiB>%SXlqTOUxPXcSgQ-upI#kOJuORk%GRE4L&ykut6h7igut@_k;G!*ssOcC7$jU zFF~;brBmb6E~W})*K3rLln7R1r6jR)X>{Ln?m_?V8o-C10bp(o0FzM4zQu#cm>&*n zfZm|6R`**x^{xIuYN}DbPol;)Fv|>qNS!{gmB-R6DHJu%W=sR281*#nKs$V zEgIK2#KU3;uH~RddV2E8XwN_DDIE3i!H-3Oeo-hd{~%X8jJT4*LJn`^?j2sf7N(XlE~d2=D#FVcP>}MOE>3Ml!hqKF^Y7FCfOtC>|kT2*uAA= z|A}hyGErky9K-e~;1e6VW-nWs+6!>Xo$w7`*!#ZHzD@V6S^;&?fxmg8iF;k~N?2&* zZm=OKvvUEbK&cJgx?9m`Yvzgv=I|$)h5A zS)bbCVrl^#OO@UWtC<77IXPX@)#aVE2slrn6*0axo~I6uxW=8QxQdtu>eC}vFcz*{ z=6Q;AMa)`W;0By&xv)lRgH*ObVCHj*5NRy@b&)qsca*(M?I40xbAx>Xf3NNOWC=vD zcWv;&^aMKVh)7v@fr?a;J&kLDtN>(#*=y1~onEH^$-eXgQu*r4Aa%b;BPzi#_b&1d zCy)Lz_3@N8?As_96)!E+qm1<^u@Zc7iJn!0nfUp}f_AD!Z8R*H8au%}*s<>B1oPaZ zIZiOoho3{S;6Wi{@%9Ss1B2Ny6(2Q22@*WbDiV2g(yjy8rr%@iJQcv)j?9+HHv+(wX z@w+b_{aZsE_?yBQ;zuBCA>CqN(t#&oqtg^yDprTJCs##h=ciFRkWyqCRrJC&IgR?b zmEu2mr6F(j}Zsxn`-N-fg}e@rLG$ghC}!dUDo-vTP174&3d+sd;wggs5I2E$jO zEmh=}_yZ!DRpbV`I#jzV9xA>um^!8Ngw@O@dPw=LUD+lNEArv&dMbZTyd@zwX23qB2?rTNpwj(Wf942^hr^w6y-BX zgHHJz&7P)JmreO3icVnF_oO-^%kLK7aUD5%QOnEgoloTNgD{c=Z(i?!8a%JElW$X4 zL(H`-;KOcH(wERQ<~Gl*BO^|gnLMi@!E z=-c<-PZfsx`zDK(If^S5rTlkf7x zk=rr`)*lv~|LfJf{1I1KU;OHCRVbisE##yG?I z$LN+b^20H*cftF!I;3;O>=WW5SHPd4S>}TD{o)Cobb;X|G9poOgh9Q_{m_mExXKki zok@N6KjSZy_jjvMzQGap4W>HW(?MYgvf{n!WA?;`7Ftpi1!DXJF6ifZTB=M>Wj=+nR=)p(En%cMgeO2#;jbZ=V98l^p*3w1>t$(OUhs-0d!UP|+#Kr*pNZ!}P=1)m4XTfFJS#GkDpXZYz0aKt)Ksow z)F3(knua6An@YXGVSlLp{OHd9E!++q(NypLhE@aN69GgcAci%tj@%nm=SvNd1q!wi zLKB>qRCu;~G1BgNJYk0@YEqdFD69S7VxGqB;-GOS?U#)XR#@?gzK7QsP}nSK<@{~W zvL|XKa0*tr7R%pKLvJYd2M}y+KI!=kSCJA5<$e%ayd3sHPf%MPq`en&}6`dA>C>RWzUk-D$5G8YQOx_5N4 zB|LWi9hLOK_3b;_)&ircGBxo*m;C&^7*JU8mJpO#rFld` z3*IQ}(wcv1K1BH(0)lmVhh>?7)wLVzIf4~$PXwiz$M}_tPdf%E6s3Bxp;R<$YMITg zG0?k5(R#WT>ovg0Y_c}P8Y_Wdwys-re!?Q3%50lQjNkpB)Bt7Q^igvTUb`NlQ66Sf zZ}1vz-t)2l?(_ub1Lb~=(-2-1Zk7%D-uScgTg+PVHUdg`d#z#0~>YMD3z%eQkA*Ag--cqs9(`i%LdTc z+8Q7T6xO>X8_KUvs8rcSqb#(biFM%7T|h9OSDA3LS=nUjuOTj2&^91^taLi|2UJ2| zb?CM7VZii58loX6ENp*Ht#hnK+4F3}MW`$h%c15#0GJ7<)~VIBx92vq2AC;Ww`PyE z>soe5NsY1zKQ&Po#!UyJGI&#NRa_m@Hsrj9u%Ib*A>2#Sv7crOo%dJi-8(F=<{E-M zL1ANHOL~Hg-yOT7vHmR4NeK7Z1O%%ogXc8-cHsD8xhk?tLTdZh^`5T1TzP`Vt0QAQ zOwd*IIwcxoGQVAv)_8p`Z?vKI0GKBN!1OwIXo|&zB-?wMgms`Wd(}PU+o|=YzxryF zBYKLghfY5Q!WD>Te;mIRG`Jso!!0a|H}w#Xj}0E-V(KaLHj;iE7`J27S5R8T{UlSR z`iSdIK(Ikmq06rL#I{GrYlt(Tu)bff<1)KVeE(dv=6jh&Fy5+`+pwJsVY>HP7;fF~0zX)kz9%Wz)-_xn~lz8}_h%2(h;nZt6(E=$S) zLb_;4Rt>OL5ovd5{)z`2sJGZ+WpNRmG9;4!*?+IY7q!1KI0?<)kK}kY z_;6}-?mKLa;K$~yXfos73SJgfzKxF_l#a$WgVLCm81JqUItv$2>e(FcP`BqKcCJD! zLT;3x%Cev{g-k~%ggbQzZ!Ta>-wP`_UIS_nw=jM zlEiz4qIKC;bbjq}3YUCkW8t%2F8xAVDoYa|wWa*Ur#ggk3Y}cMN@*+lY$|;A&Bfu~ z79o`Do=FhXckagp!E#Ddl|6s?q*enwhkjC=T12SgU{%=S1MMWW=*WdDP(77iK#VB^ zCtsnf>i3Zaaz2h+t4t-B^O047g*oaYb(N}mVJ65$S6nVCwcIV{F^TFKu?J9?MmdX& zeDXh1U*#X)eR708n>ya)j zoonT@uQiI58hir%+kSC1)4EONHM^_MQl|{DGqkJ*HEquanldodD9O92qnZVZvsTI% z+6rIKt3P$w{$(`X=qx+pkDKcPWJjmU z#$a9@`3~=q*|G2b?9lP|uW--yNN$atHpKe7uT%YKYJl9N{Je3Tdq!QK-~Ye&p4rTz2_YsXC=fy zg$jwzWn_}594nQg(n$xDe4nqiuC1xt=X2kW@BRJ#{%SqE_Un4TuIqYV@9VIxwf5e# zmqWLle|rA;cQtK1b=r9Y{upqo=CP&=V|&GKuaQuz>)xIFYcH>Q%fSf=leag`y)_)r z(RaasT364>i1Lg;;M(jFUTWsly!@<5qXNaDK%iP6P&g$!Yh*q-w^HyN>`!3_o|!w! zD_=;t%Gftzm51}Dj+~N}mmO%kU`MrrT4jAPe{A-ooY6A^WvzW4982L#%LD?I;4u?& zz1Dw>@yk!lnUpg*D=#mFmekmGbn%b8RDe5|3k1%E-?aKC*cGvN!t%R~NGMuR_y7sC z!fOd#JONw1h@q5vcM3yMH?#Z$x*W8{yUJTf|JF~W{&b>JKoLLB6Iew&7cLgz?!k8ZZv(Uj~6Ur<<#paLWF^0MnstuG z*i`}rfx_+-(0HWTf|pwduh30795E$pWOiO4kW|xma04ud@50KDG(0XRKSz#p@)Eqo z^HRKDzP9yW4OaPy*;B@3w+IA0y#vDh3;m@sIx8>#8XQc?o|>m1doYgbVTIcM3b`8A zRL!#GM@^VUX?p1vN7Zr`)bYdW>;4c`t>9F&?{f<0f`VOA*XKj9eCFj&nv^{y5I7a| zgIZV5=P{JmVB}56%Fo94;rf2tvtYHIGm-GoAH|m6+hGQ>FtcGGP#vC-J1Q%0Y@kgb zpA7YOyk(}sn~px%Ixmu8t)DAtQ0H3)tm#T~Ux}_(=itS@^*YQj7S4oqlH^axojPVL zr@nh4x?w>JRMnk%ZBG73)SU@|0L!s(R#ShiX2S|<6FRG`a3#!gEUZmEm7CklkL4(= za-YD8VJfUa8V{F)d%;@s&$jT_`U5_Qu;v+n)wCng&*bH`xHD z!Liuix(CD63ih@1n;VX*FyF-1DfM`wKgP>pg^`rxw>ENQ?$k;7??B?5(O z++f*iZ4XgR&0oNhQFBdL8Vau}tmewV-j)^g$7Qm;AdDXEFIu;4+3E!iGW^(MVa0H) ziy!koSX1^otQa4+`T|(xX2Dt`V_-El1lHi+(%qlR$hOo6T~pf$RDe_36KqC)-h`YH^kj4ozhJ#C?vG^~T$IqupR8K2#(aFvq)`dEqXWg(?%msM6LVo` zb|3eumY zQeay@KYC`>>%~rYPt2tSTL$@FpM^CB3$4A}+BaApIU#SlypLl7RPMg3{rMbc^9R71 zu&)ODQKt^^qgx8A{CsOCz!kCgQVuRxxP^pP=u7Sbr&_^UEDdc>n$hVO%JP@br^EgA zTnxvduZA_Hi>*By*3?dd6~<6l&9uQ!Rk*(87&spLRjwut;HO}PH-w?1UP0kW5}M;H z#`xp%6}B9`56e;iv3~!$Ti%SWhWprht>Bv2_u*LGTAb~#!P@9rTjeaLbMk5pG=$ZW z3LbX|6rLRCH}pBI3Tr0#0h~M0cX$e0)BhcgH9|XKHMj<@13x;+{ig6W0jXbDj|E)w7`*T{BrwX#dR~~761G^e?qt{YZV5jS-&0g{c;b& z@^4_Rwo$qH2_v)e%4bi?6=w(Toa#PaKCNKib$pf4t7R~~=K0Gcj!MjVynlff`)|9-0?3>6?$EL%Y z;G8j&a;Gq6x!7t**YB(ed4WiWM(gC9Iyta$wqO1k%aao($#eYhvqt7l(Lgpw*Eo!r>+A8@THvE{ zN9Iq-nN&V|OkN z8nEN&ny0nc;yWy#cKtx|@Aglmqu5%wV{#{R3I+nh(KP^Ns9y;_xyZM_r~di67c?Z4 z@%ue~L!V)*2QR{!i50K{XuQ-fcMB|ibncV{-j$5~WwD>14(o({_+Eb`FRCZsTF~AQsjf2Vu?am-I}I4!|n+ zmhI^?umXC}=I?*l5A;rK1vV2_Ala7t!}41X*4jE}G2>sIL|*p9X}ZOXyrKAvHKB&Q zi#%ul2iOX<*z!794XlJUGWS`1%u0W5--fj~%h~)HuMv`Yd!Dl;2p3UicH~l*Ez3NLCY8XuwLHaFXc*-_FE!>)~eIo>or zHR0-TS3=X$f9OSDkJ{w(NLce!0&5svg;g#)Z^YD`38MmSUiR}F!gRBsurdjaQ_yA{ zeaW}?!WxGyupB;X_4{Eh{dv~TgB92it9OM}ua(WO2djQXYoFZg*Z&f(tX<_j5?U#n zVFj|n7P#BmEbO`(S+U)G3t`nVFrvWry!( zGpwm!11o>FZ8!3v#n`M#<8r8?u>U=}$jrx1ZkuU8nyNY)$5$*H-`R7h(Ik zOhMt_Kj8Tq2N&UB9Sv$QAAz;JrV)?=iJaDBvM1%um^3o*{sBL~7}j7!f9%^wKJriN z7tkY}*G-=a>!3*JL zuzKDEhdO_X_Xh$O!}q}n@N`)FPCv^H;HKEe_xZd7Ziu}KR=K=sV{)100QavEPH=xe zzh1$hZ~VDEcGMs85xKb&MsUMADtDrH=XC^KbN}qOe$OAZ99eJOsjm)CQ>78R z>wCXmK3o%f7rM5#{Xh6q{N#_`2o@CHh@fl4jR@*t_D_L83pfK-#kz0<_}62Bz$Ne~ z%4vk2rCuZWK3I-lp#g18?T-5+PzBaV9sAXvl44l?pP^hOxTs8!sbmd|C80U%R5s`} z^dqcA(+xcyZfZFWu8RFZIOsX5SS}c7g1r{j;>#)@^oG1GEPw7fLGPo3v9QXuME4i5 z_hDb40d@s#Q4R?;bQ(t*>eVz*AHE6JoDPOHmx)$C7jBIGRdmps+ikE$WI3!6nh9&f z2EcXU?v?$(n_{cp?@>W-gzNvoCE`+q_Yu^VQW#H z3u{PMp{xF(kY8_(t+xjIGV}r1&EUJR<$o}IIovuFEbu>FLC{=&8}uW75!M=*3#(uQ z95jc=V%LT{zzQIYuA#1ltq}{t8i`$jpf~rqzx#9k2(~)f;i6z52`<3a2zCFR@z)Ry zvO-H(jw`})c<8j><2T`2*!RKeaeW-C$NAU_yeF*kbzqIuuMDlqt!v~r)U9#Q+h5*9 zS4Z~!=9hmU3qg*iTkZ!dfI~E(p1uSt(j}Gyuo`+C2XfREPKD2b)8Lm*1_GJz99TV_ z{r=jM7ra@fdiR~He|u}&ypJ-rAKh`+Go3%#xW8sx-9B4xSo?CFm?}ZnEpC|}{KR!y zr3d@E8N4oZi&~{SUq=P_Jd=IZU67I(tnWIB>A`+(2CpxT-?$uAoSw4!#D+q+d_@NqYzb-HsHt-bH@^CY*pb$ak-*J+a;JmqHa+R-iI zb(UMq>w4EoP7ejkxm}afg8kj1sTGI0&b;N ziJ_Q^Zr8SHPA9g>E{IX?g4T)7!&s^iE!V+MU8h~Tlfgcv(;%ciI@kSa5$-CiPJSMi zt`!P6R#bhlDFrUgqS%X$-jJC?k7 z>oc^craLbs&8Zw8sjgKp&~>_}J4I-%C>ZU^Nimk3Fye$6zR(Y>j5iopxK3s|K>X9CefDJDZ&Z_J3LaaE@^^u1pU;+#EdM-^$MOmO zv^idshp>GAiZYHl>+Urm>mIDD{78uFdn}EbKlxp_`1bQGdDIp;(+8lq|;TbH=K{Z2xIZ z#QHP7Jy<&1y?Wusbg`#*GE66>(dE>``)VxB5o3KzQVfPV?{5N^xAYzO*3DQ7*wKK7 zf5+_z!~Un?nt_#pRo)w}-B^CZS`@Qb z)5FR0hoot8ATZXQkG~b9oX%c)iLk=5@8}j86~Nb2G-L#};<-H|}5{5SYtdK@<1omNBuLQJMb2a;WFK zvs?P=PpGW6Lc{^Fo zXRMg6fxv(>)-bF;ORmA{eI_reTj`QlVg2dlX)ONP_D+)QdB)0Mk!W?YR=G|+gT;ih zWwP#q-?~n2dZ>P;+ch^WG%C}bmzx%Tg1z8!w*Tc1lpgN9 z$!X5REGm{9eim@u_!vv8+3#-^8n?qwUM80E&e1vz-PqIJdQF;h5K&?Hm(o<$tM(jj zS6E87U@?K#`VdPqQN}xkV;K)lVV3_;QmhySK)0U4;w;oA&?nJ3j}ujOy!(z&mp*Q} z{Iu|Gh$(K#!zpf2etM`*Uw3PMTBt`qx7^gU(Bgh>*QsgFhpcDLQtIiH%3^#wxbxGJ zokvJ97j}#J4ofZjJ8E;*rK0sWoT*sNuyo^<=sfag9{!GCrFf@qeP+CsSBgmpT|L0v zdTm;0$pE+9^t9l|ZpQTVQ0;;4yyM`i;~b}xw_x#4T~11L4*Z$Npv4aIL#*R% zkRM=a&TDxCdLCB;4R394uel0Kd9~dgc}X!gtBzOjqrX@Uu8#DDo6zu;Se?A+x09kP z^pWVD`keK0?l(LUi<3kaSFmGPZLp$bg}M%L=Utx`e8DZgKHVud^vodAm+n|{!byd7 zx3#>xUuQoSi&jfzaH7*_nD3IikjzA91eP7h)Wp!@VeY&e(wwb`TDII3P^8>&f1AP? zi?ME&zpePO--LyC+mnM>EH*5~-h70=arz|-u>8E<-I8K36p^1*V`OBxYB+{rrJc!J zhNXTnf1Q(}Ww@EGlbsHuBG^MVmbUUWSZava>GMe}{|d{@IYY-rhHM9mXtA|8sYfJ5V_fN$BqxU(<>1^cA-K_` z{OPSke_q6D?>ScQ{=kxBe~5Y!wN48xmiJOw?);v~PUd*OL2rD*bFg~2vA3oK$Gcr` zO^=yyCQ?RuJXU91c;`~^RX1Z!x>I|ie?J!RZf}QSab=>B1&qOcSi0zVO*-FW{kal5 zam`|~$z!I&Td+pBvHenFawAb{0py>t)Vs}CTx{izV1C8Ykg{A^X~~oQ9gcmIdf#KU zAkSNO;ft=Jq?_56(ITZK&g$fTbvc%HMN09$?MFA`wsa?LN+d|#t>2BM70Y(P)NjS| zPY{i6be`Wndoz>R1xxRc!WxFql00|o?P<n>k~td=et|y zr#XiZb+*$dTBtKMaB zmSA0u#m!x-#Bd1~Z}eLwhsw@&w=PNxrO$TD-IM0bob5Yi;MlU?#F7W^#>$Dl(YO42 z>-JblokYkw3(%gZt-LFuGgXAx42!GraAXo z(SHN52g?tc0dXqa>hEeq!nxEROL@3v9Ie4A$VvA$mcO)mv%bsD@jJk0H`gYHJ7D#2 z=O-pR3rT72!`kii$-{l=&P8+mU7t^cIL*dm`KP7)Jc8AW^8QHwjHRCWSL}o$|HLMb zdK0lakXP0lz|~kP>D3D!af|OycRJ1UW8%c%B%O)nkCM8%221VO)q7jymRR#N6stdZ z^fNWd%~;Mpce{Uk=e@rOU30s4jy#IkmSUWRR0_}cF93u}H~L~Jj}gXt(pr9}zQJnm zxo19|#5>L`dp`2H<_>q>ztWr+5c^Ps3dGv*PXApZ*5t(CMmOW3^w4Ds+<6bBIdvEM z?f8>@4VLyHE*KpW!_Q;2_pTE`H?jySwM&Y@@Xtmz((nvfy3&Q$`YGn@yu1Cb;HFJt z_;##;-a7l7RCmw4R(i8VXYM&zmcy}nd3RvXkm^b)e{(wbo-ys)UWuXe z?sey_ObhqAm)1NVn@J6h_y}KcpRE=yB-O|3TX@--QK2{KvQ#rXgA{iH#PJF#KU%H6 z^7of6-w`X#^K%m^e~fhYZO8H_q*791xXJ^%gzJnQraAgbta_nUaVGbCRg=}|MFKD3#Lb6xDQr}8@oCs zhJ-)*x`cj;)rA;X)BTcS9y+s*Sd-(hH01u3=ou`X=-!1q{0&w=FW9yZyIohOIrlsq z2~KOl)wysTcmZGInqJq0)T%z+KmKJzL?<}aaLJNsc>B4=zl-?vPBBe=U ziLOcv9&|IFOLyw8^v8^iyFH&9V`+P!&zXtgkFeOzn7B(Gk6c%JKbPoC#_H*p8lULw zz_OlsTIfHJH6PWpLmN?YMcSbg2t z{N(T}r2O?%?Wr^89A{=0mcP@nn}wHPasIL_ejqj23s);R^XbSMq>Ii&Say(aOXLH= z;uq3Gi=J`IZA@d+&e)h9?y}k&gH_4SJ)|_n>}^c=UMw}nT4TYVx5m%oQoAbAxe`lV zpZ9Ornbm6(L-#)KZl%cA zh+6snHSw}_Zr7L7oa@&`u5{|v8m!I~@h>j<>jQxy5i5KEtF8CuAbx{CO?)`b4R3EO ztvf!!;#!H(5~I9#<$oKi1(tsuJB6ho^Dn689+ACOVZjpV@`El^wjrH2#V@|xI|9G*go zPLSF_3NNHWTOzrgN%`7cr2KLpp2@9Q9LdclMZ45pb4L4(6rYx&b=~T9_T7|d5_Go2 zOZa{pz8z_60x4g6j+E~$w9V`6J1Nm5=q%3eCgm49K*}$6aY;nWBgHIkOAc;vo%hn6 z^6&V|kcodG(YeA}{^oogRx5u|aR0IzOZTIk)hiR7gIHSUY)*V6(tNu+Z)ch_ZM!e} zA3!~`-7U8(E&LxmR&IW1Xqs%)wGg|Ezn(TAZHTz5a&P z!tF=Vf9LM zUc%DQ(Q41c;LmQ+p7d~=_wg@3;c6eSoq4HTQms7SFO$+aALH&|?~nP=kA*vC?)|1< zjUbPc7i$-mb`I~d#l-O^-O^Nx$kDEPpd}8=bEWTEy!=ZzG2=1jOlj0+9v~8sLh@4ctPgT9-QciX|#=+C`R!R3_HD6is#Ly_g6 zyZuM8?3A}o4DNS}KTi*3ec_fnl;*tj#hJ0@^X*^VqC?!he(7#Klor1IOYU;K5WgbT z$@AOnuzxefXyJDn)-;CS`?ezd4c7JEf*E_nzpDA)V!ZbkE9I*|;D$&Y=Y_vmNni8F z@@Mi^V2z7d;hNuQsdHU$Mk;!=6y}=q*%*aqM`hw zZr88UoK=WAt@(t5)B1O;Hl7m=SF3OR>i$+U$y)w9=2x-&db&sb154}HACC6lMJ!z@ zZ^e>N-bL`2g!GEPr&H{h+r3S}=c* z@)mda?H^eNCN|81IHp@I<<2HG%}be|^usb~@jpja$hD*Pv zP4To#e~mOYn-uRaaFTnRiStrNNnP)ya!%L<7cL>?H+#iNd!mO-8Mo_?Y0iHB#!BcpmX`#ns+wF;D|-9 zjDFq2>D}A7qi%4Uy%`scHqDLwAtjnWx0(orI`1|-kHmvV`-&w+p;q$215aH zd(AvO&!2Kl^0Qb8^?ea>5=B4f@HPnqgnG#K6rdx6% zCHg!9^?i`yo4Zd_f|cEQC(^>t^2cC){YF)S{+x%Ns^WG%nHFwZHPYPur2J(QeZDR3 zOedw;;0E!A#PA_3FGy!(wP4`dGx}aEKd27Xy>b3LC5A-qnF5XDaA;zK?53nNn0zvH zEHPaEf*@anX*OI^v(J>TQX>+|Oj3N;$nuJ=sXi$+ft0@tKRTmzinsj=ZzJW^aIU;C z7`XXNTYIrac=c0i*>IglNoj7p?uDG%rd(7oJ-W6ARt@bW<*j3aCqFhq`ifPB+oB5~K0aE@77~ME%FCUvp-RzcploGtylq(ZV z3$MD^&Uh%kiJ2#5eiJV=8v2zKpJa21xkR4kf8r+$=Tu5C!E7xXOl!0`AsBd29pqfA zsuRv0|3a^ce&M})rhQVO!=vsqEvtuzH4O&t^ZNB0sr$Xul1qbu7rj*fW*R;X^_QeH zq?fsOwTv!E#HA1ol7UWd&Ki$XEpx-+9i>_2(!u$lKTwE+fsWD~h0WIC`5SII3)TS_ zL=tB>OlmX;fw7+YS60J0K+MkJ9b%QA;F}(6kD3A$0PD#s&$i=9gyGUv71=$~_Dez$1X8K_qcj zmV?Js%p{x>tj6XW2s|#6!(%f9*&D(qkd*x-&v)F@v;`7D!u~5uL2!nIeuLRM`>2MH-Pv}phK+kTY$!!_ikSPHuxN{8$_8| zvB8D~sV(-=CLhXgY#o1$TDNqhB@CtIR^^Vf42DyxS zM`@PCWz=)TwbMJqN^;HApW6qx3V4TDNv;6iA=Wst!+J;4Aj?k+q7{M~OoBC_sj$kV z>BX`JwjH+4gO0H5F0ktNvU)$5e}Vpbv8?2kRv!SXok2E#kj7sQhrk;099Vhdc&P+m z2P31HRuZ9Ik+mk)t37kclvi3|4~;1+pI%zlsQl_Sk0VMDHzj^tiZcy zD)XK#^FLt~-N{R|X;~?FX@RQmx7Ec;9MVZusjJ?JJ;L%0*${4-UzFqxv+-x zPOC4pya-m$@3CxPm0xD<`(d3|kHhNOQ*br-4OsrRS^ZsDhgj_v>?ENf+YPIMJ+^>Y zjt*G;BUq7tWA*Q0?SUs?1#%j$0H2Fj`KbV_er3zmV3mu9`4_0o3snjN7s=uft72VP zbJhe_R#RTe!AYucf*qQS$jWR#>Ae_J%NHbq&&+i{)M&w6RX^pwwzeWudFRrzJ8^mL#%d=TK!wA z!xwu6zq18?umyg!1;m=qU!YlR(>n;wG2|CS;cBN6+xV4IUQEW?P2}}I_br- zl3jUGex}vMvU|bu(;IFI7r<)pW~<*~`BqrRt+IrtxT`c{W z0jw3(0#?OVumVbgb)1dm zxHb9WHkOkur@;IRwBtqoI$F+v6-du8+o$f{h9k&97ObN*OCMqN(ky)>`g!nFSPkfr zW;#l<%FVR8SR*$JmVQHlO^B6oBdo~g!rHSI*!+dC4zWh$ZflEGekrUe{1+_857~UN z?1y2Md)(?`=><<%p){+3RaO_ve%jh%ReT0kfE#T7M$4NlzXa-DnD+nQI{a_^X^s6r2Q-C0!fM}3NH}JDCRXw|FY5V8 ztBbYD|F9g=isBHfT(spfmSbS~bzn7o4y;95#p+ed`0WQsc#h*>9i>^0YgoNBE2i4k zQ60+{!75+RmM_g}_!4w=pc$xn6Q&S$_IrE06(}uPz{=jGMyXi3#-S*+DmNyeZE}~xZes7!gBPepAlGL^(U;o%G%FZdyVC1t-j9k3$XmWWbIdB z_4IXXzh&)WkD33sZN@t`<6T%0@3Q)bmiOBH{nq{%)<}F}?ayrfAXXl?ty+X8>s0zr02MI2>03@aeVaxAPNt_Z8ARbiE{W;xF0*R=M9mTOzS$Z|c{ zdn46=gnH5tmg9?IHP{rE<7QUB%-TracPNRl%Kb0CM=9`5v(jIn$hm9W#Au*^#{wOtS$=YWcpT6%PM1AZnBbW{>-3uf6u?xV3jg(s6hw~y_4g>6e;qga z^cPlOH(On-faU-NG#BU)%Px|^aW+=H+kyPu0dz#TAd(QP-~#1xlx8)s5Qtr%LoA1j zWN?&b=?2K(*}gwP_H@?H(Er;nQqKDQi5x!y6u@IL{`nr|pYKt$YAf<0{^xs?f4)bt z->3ZZJqqW;Ki{ML^F7Kx-=qBVJqlZa|9y%slK<)Z6O~iG%Kh^_ir)Ni=zA5t{rKm5 z6b3?L^3V4uEC=4r|MNY{Ki{LA^=k~4#{Wk;A1M6uJ&L|i(G}{S?@|8w9))G_&-W;N zrl}j0f4)a4{rw38;(f28ouc&jC(>n0|L1#@f4)cgpL~y!ppTsY$KRu@n~@eA+_m7B zn|GD{@rv=6ynnLd^n#6>N4;O;h8bmQzBpw}g>iqr9MK(XJh7}%aavlF#}>XY^rqv7 zx~%)?+8Rf{EqiqA9r0IK?lqX(MM*7 z=ws7(9`uQsEjnoSh(0yVZ-YKFMWWBmLD3=8`gZ6Gvq1EvIRcq3cLZZi=KNr{;1RQA zKEiPcrzCuBGVVZFaVNs6I}nbV6A}jAg)rn!gzwDCI}u_QAjIB<@Piq27s7f8nmT*AAY14QS!rXfh<}V6%3k8E_@1o$9Cdr_r-b0ZnQ*;kS4of&HA#7S3gvE;y zmKlVy=7@wYOAs;_BRFQsVua%oPDv`kRA8h9kWM5(!UT=A4I5YiXKEb zEa9kx`lj{25Eeg#ufrd5n7KT8WTsiX}990wLjXgj6%*afICx4oFBhjh{f6`y|5rClK11 zJra^uA*4QuaD^#)65+6fqY^rr)~gT}KZUSt6+&loL_(LR5i*}b$S_NuLO3qrl!R_3 z<7tEy&mgRN8X?o1kT7sH!jNYWdYYBbAjGUeh+U1)+YDNbuwKF@34M*T24U=4go$eq z`kM_Bsy~YmzZPMD$yv+G76~O12AQ~L5vD(fFzZ=_t4*{~5{^p9Hm%nqEZ%^yY(2slb3{Uy7Z5Tx zAmo@O8xW35I3;1c$#?-_#YTixFCa`bCnOAf5n;$igj}<7BSOq3gxD7mt}%mNL|89j zlY~6uY(f~j8DZikgsEnOgz7IL#BWBp*5qtP*dn1s!VDAl62kPC5oW!FaGfcZ(C8I} zgqIO!nHeu5?3QpqLV;=g3c}o15$3;wFx%{rkn|ct>Z=GhnW9$_4of&H;TF^SHH5{l zBP@FjVU9T>q01WxnXe-hnI*3y9G7rP!fhtw4TKeMBCL7?VZJ#bVc=T`L*7KV)2w_G zA!Z9g>{|#6%%Har)=StV!8Ohngt5g46Sp8NG8-gR---}lj9^SoF~SxJB@&jHxUC4& z-$t0V72#e}ETPdhgoL*dmYErEBkY!NK*9s2@iv6HB?$AkAv|dINJx4IA+-eIAyZU> za9F}o36Gf8?;tGRjYr$lQ*w(k$7Ia9qME2~U`ecM(?XKv?xI!YXq@ z!oc?shU`Fi+N|7x5VI2@_C18vX3%>G>m_WGu+}&`5ytL9n79++IkQ1R_4g6tcOk4Z zIlBV~DgrgGPFs=6>EZ&Q-Y!AX)=7@wY`w%ksA{3h?dl8OHI3?k2 zld%tB#eRfU`w&XZ2?+xaAPm`$u-&ZOj}Y?_LhJ#A9cIu0g!K|ON!V$ej}XRwj4<&d zg!jz`3DrMAi2oSjLzD9{!WIc7684z5PY|XbM40sn!ah?hq0y%Z2?r4lm>CBVc1t)Q z;bYVIQ-rynACOgw_{v)Le_`qv2YUm^Tza=t>?BB4aW2^0494B+3+hOOeA8j!Fod z*54s4{vKi3cL-(85eZ#>K*;sCwl!Wpo;|GKlKO(I90U_3$kTCEVsUbfi zR4^-lM2PtbA@&$TB{S$4!g>jtBvdxePY7dwMws{$LRGUtLiJw|;(tb{W^#T;*dn1s zLY#^F1!4NH2(x}cs9}mFG&+uu@GC;Rnei*aZV3k@)H02aBg{R4F#kA09kWM5(n*BW z69{!p(FugZ5{^o!Z(5&3So|BpvXcl6%@GM*en-gs4WY4F@*Bc&38y49F&V!jtT=_R z>UV?$b3($vKM;nTLb%kdJcST*8X@)%gyv?@9|-FuY?5%9aZU#ZEE*ePI8I}?G#ju@ z^$@; z8;vkO3Zb3ZBOxh_kQ$9}g(->-4G4BH2SpuC>oC;GED&`zM?_sryE0IQSt9Cceh_st z8D*jF=0Q=WIRTl04sM6U;I^k(8H3)-1Rbci86@gsR*U)?rySJJWQqEl4WcVerSi}K zlOq~vUJ(s4apyo+nQKH>n_|&mQzsT0VrGbjnjNBHrt!JZa5Gz!W%h_hnC2Crk)}vA z${ZABo7NQxb#Wy^T~?7$$Cx7s!Lg=YB`C)%5sfoHh{l_Y^PmalLD58WLNv+rt_WeSOvPq3=&N-t3`RnsS4$rEYVc60W#IA(PaGjGD3Wt zRYSPW6ia9nhmcSmVV0Ru9bvbG0}={M<2Z!57a+`!Lzr#$NJy%Ika_{aO{VAqgu@b! zO1Qk5GHW6fnI$z5j!QTt;Wm>IkFerGgjHIT^UVnf18X4+ zxe(z_v+_cOnA!-jwGbAVLA4OpOV}jAHBN1Wv2_q8)<#%lHb|&`5kh<&1Y>gQAZ(FP zB4LS%y9i-=U4&T|A>3<5*{#(>mkgok1)R;!h>dygro)t zsr3;aGDY5)vG)8#ZtZa-B(*z;*VuaOZ(8UPrC2W$g);LWN#$JLju?fO+W`l(4 z2?+6*AgnVvmmqABP$FT2iAzA3-V|Y00>Va9ETPe*p>s{srlGF7Z)l3J`%+3AXiABf zOyf%t<~Bo^e<{K%W{-rV<_M|H5MDDy%@7VtI4a={)4Dmr;uZ+Ynj^erj!5Wo8A4_Y zgkrO#1;TL&rzE^>GA=_{aXG@O%MeP;2?+yRA`H14VY^v*IYLY;gxHn{JItV#2J37aGwGfq2%vF#BiwnO;YY>-g>3WWIf2)~+~_6S=flt?&X;;ulL-T`6O z6$rnXVhN2pA|!M`IAvyZK-ewefP~YgaYux?oe<`C3~}EOW%hOqao^AxCAAYpqD)aI ziX4`3R6^La?u@Xw3&OI_2xZL?30*P}GP@u+W=R)>;}T9uC~q<{5LR?WSe1bgYfeZQ z*bQMwSA+^?Wmkll?g+8n5Gt8L-4NDG*d(E{ak?Xn%|w{k9igh(Afb8>g!oK^Y9=QW zVT*(k32`Q_2g3B82(x-1)G);o8uda*=!p<-X7ohZE#ZKKTBdO?gt@&D=J!IVWA;c$ z>VuHl8=Wy$%!chtJP3t}gi~Axh>x0nH9FfqaA3|ndgvMq`UxeclPDyBDGWsE` z=#Q|fA3}mTAz|Q^2t)cKTxwSKM~E4K5PKy;b2I2lg!K|ONw~~70}#dzM3^`Lp{3a% zq52?%_<;zCCTAeR76~O1TAR2*2-B}Zm^BC?*%V7?bTvZ4RS2nO##IQrB^;2DZW>>W zFn2J*{Hqb#nLQGch9IO4M!3Qh4MsRD;i!a;ru7hn#X}L64MFH^j!5V-3?XwULWWr~ z6ydmpQxdwFj9~~Xh9j&RhLCAaNEn!fFl0DFPqT737g25{vY_5(kceA}tk6T@Tls^Q zb4>FIq0VOch|sQZehhyxx^DIjp&G$;&2mE3gZyVI(Xp5E`$T?JQrH@5H(BNP=Gd>U~|7TM_ zc})e!uS=K^+E>QVc#7xXoV-v>=!?$lZnz0pGLJPy?KI1nK>Xdta zY?G)9%Q{a!&{vlD1Cg9U<@6i^eZMDG!dq)*p zMs6;&T2)i0b5!Mm^KF*CqFb#O4n5^SF7<1Km8!#0-D>*FlE_c{^?P!aW61{YvE?qX znto-n*lIOkg`=NEEw!5d@(-=Rdp1BjGIZ2Jltcaew}S+Z+E&vOGW47Q9d)dBF6n-r z;y-yojp*?WcDw@hY&kuTpetz|^{vL4#1lB|Zy*|2Q9t8#jkQ{9tJOo}u^#^Tx3OY<#5e6wCtIxn z+7_#&Sgj#ivDH$o)(9=~OU*Q^HAag(&?4Px7o$CBN40Gf?Q2+@0R4DbL)ngknzu{9 zUeY=S*vbi{M*gp zC+$eH3ww_B&=WP>s3!@I!-LJYgQ6}n zmvoQX-&Dh(-vZYM4M0QC2s8#4gC;GK80kqL|23p7^$1RKyT0o^aVN}wEo)yE#>y$3eW*`1YLmkN9~6X(cN5- z2lNyoZGGD6%7b%4fd+wC66bb&;ncrwCk<|>p=q0j#~rN1o5C2 z&`;4XC}Vo`jv88^U;KXuz6aWMUjU~W%TRP6@GHEAc-Mksq<;cGgYUri;AZq&z^y<} zc=-nCFPRU655aq2C(t8o9;eK^@K*3PC;@NiQ9o~zCRr{lS%B02m0a0#}0}pd6h$2gK?}qg6>%0~dhx1hD~Z z1l))PUII^or@^COId~A<5AFpnxEtIF?gIV6Krjeg1+E6u=-jnHml174+IF#;-k{)R2zoS>E*ZK+=#uaZSPxzV9YH718FU5RKzGms?8C>0Ko1|=4)n_$?M>&y zSAnZRC-4Q@m*6ls0?hKhQPBlolhV`X+JZ1B17g6>=)Ztp!EtZ`{04ppr@$XzA8=Vv zx>(HwbHH4nU*O*W3P2&44RXLZFcM^gCMQpti69B+>bMcU58MwP0Ly`{ke`#Mzhe9e{0x2pzk(n2z!W_{;zh6k zM6nQ}!SnR&S?~)LXTW+k(Oh^A*iCv5&=qwTcn53;S>%lXqd+!ThQ9}a3-qX%vLFUH zpd2U?9 z7zVPy2rv?i0@+|R7z?_BZs1$o>Gy*?069=z&tc@@&4HRA9@GZ)z-bEU@^?FQJM%Xm z+yV6DhGDFW@~oL{q)R|1b~2m-ZXhr{KH+ij1b7nYF$-bv8zc2QI0eqdt^g|P$pw{2 z=rJ#wL6~7%N24>rA)LJrZX&Il6CSGMJ$L32%B=+Yy+TW%$2N5by+I$)7xV{Lf&pMK z7y^cYF<>mn0pq~V$z#JN$3+92_z#ZUD&<5z~3^{@vM8R^2BW zwd*LC4|Mmp7iW5)pPuel0(5^|fUf)Bmni=-cm=!)UIVX#H-PCiD5_b(d!%-PU0@%z z#?sy3g!N8EJy@tLx^B z;~RCAAdU@+ir1V3?k4n`VBNsz*{Tb$?*i#SD@`k|19=l*&dk7gxIfT}>Et9&J^d6v? z)eGfE(m#;ahVu>3h3+e$OW&8^3vkFB9UfI{l>H3CBe_uZ!;lIRdUGnK|hT|Pu(5@}be##LKk6kuQUo@ML6 zWr42Ax;94xU7ODZ+CQ~rYU`{HbhX#xX{&-NX7-4v%BI(dsF=pmtAIjc(3NZskR3@! z>Uwpm#c4W}ttZ+>Mp0{}hFLu#s#=^{jMO;Onu?o)Bcf`h{v`+1sk1unEfkBmB}(nSchtX>DMZ6=P4N^UJT8Z!l^v|K1S?QG3J4R9%F3KGC2 zpb5Cx92^;SY48G3wXjP0iWxjADkgY|s2!8ff`S2Z>$;1-cDO23js{;3N=fs zv(plsnVo8}k)F$?w|puWl-_DSBm01V=a3d5Zg|2!Rd)eY3$pnpc!Zk zntz-ft{-?1|f#1PzU?Y&TSHat0J9q`W12%&< z!Aqb7Yz14ui$LX7PGvUPbUIDEOj_mBbc^>!sSFi-4ZQU?O%1#bR90n#NIm66$`_MX zxk#XDT)`+``ZgdfjUW`@D+Roq1Sh~Qpo+)AuizIDX+%B!85{#Y0tN5`_#Q-p`?FX6 zNPI`$PVg-_3cdv2fIZ-2@HHsVuqdjpfQIfc_yQaPpM%f9r{Ey?1bhTO0PliG!0(Y( z5IcZ|RgJz6)R_Z7+J|62*a!9k1+iQ6uS``GR6(ptN=F>4XNp)(&(?4x|7>-nX~Dyw{rjCA>vrnGb|;^G2c zG+aLchQn(}h18%HNu;9Y@ZY7ieo8xyG^F|0d@E1sRQ#oYWT4A&MNsgEEf5)&NMw;w zIGe3Jo!5F>u61*|ln?bvZv-R3m#(jlY2Hf(Ti^|gR<_Pd70`;-sS;VuI;Zsksurf4 zsf>nPAE@foD&_3V5X*-?Y}J{fkvxyIMz|7O5olV!21m62Yh~(FSuLyzus)R4hqHW2 z>p540k@**E`}}*O>Tzl9zq2((8pW_4)TX#;14`$g=_UEPel&#@z);ec_;m`rDAbs)_xib&-V$93t3oo|2BZKz zfnVh!n(|wssTY^Smw^^wJY}k(wI;3i&T8yNv|(^7>?9x`_j|s2`VE{%CT~6icaU)# z7y{;jA}|#U25mt*pvXId_MijMoAj%JKJpl3PEC&LSxK?UMLx&_Q_PTSqWTuhBsm>S z1J{BXU^bWqZU(o2>#Tjf)oz4u0J0-x3rTC?s9r>qt@KSGl2*Rz+cE{-e;%O9bHJ@Y zP9qIQ94Qc0nh$OVix{W7feZAX4lIB*zIxB?0{sUBD}cTv`5FEmd=Bmb2f-p>z$f}b z_+1jpP=&|9qd=M2I9&^F0E@9TNxBKW4_*qEfJ!uaFT4!s4e%rI{eTZ2Jo{gy9|RA8 z<=`RkFxU>>0VO6OFREIBntlt&^*XQ#yZ|1)x>%8Tb@vWvFM$`w~{~z60NaLqO$^g2O=hUjS)J zNAe<5@eSJ7;45$hXaqGv-u$Z(6^s;8WoZ#;J;27UxT*fI(%5{U95 z0ci@Qt0VX?_=`i$p%!4ovA%88w~qSuu?NTm`ev~^NCmAx3(yVdTSk4`sJ~xm0_p;N zXiy8(1Q&qwfxeaO3_5`h`c}RjiMAje=kkp891F~C$M$-k*<8zQCb5mJ5pZ*ty$JZT={>1$gDAg1>S#C z5-F^&7W5TE84wMEK<|B{KnR3^%9M6eIvsKRpIB>Cf%s*ZozjIX<6N1#Lx||5PXJBt zpOybSF-mKyr$)3K{;q48{6*8*sWV1mWO%inG;4n;NWRwE-!-klziYBfk4og^lCBLi zVrzf%&d!MNcSl;}f7c?mPJ&2Utl+gHM@B6&3Xw88i6Uw7<=B+*&rU56RnXa1x=_Sf z>E1*%u`V4duPIUhk-bQH8ddE>1>4~y7D5lra% z!g!vd7{DA*K|M>17)~*qVmL7%K|N2-oIS;SX3U-${hprgVPO?t-tYbS&p1<0S6Axl z>YkpZV7RnbDhRmpkJ2YfdjD4#u!XT1)8gFrkAEJYeO;^R;qB?|8{p|PvR`nYQ9wrD zzkFR6eRvV01bX^0Qmtomx(kd^NQx5*K|_aIggK*}*O&*6exZ0vu3YUY=eZ>C_}i$37Eb z@R8&kfx8H*8X>jBdH87&(%3>Qim*o%F`eqnhcvfwTL`xg;%8f3yl638t2v7&Sc^qW zh7v_^ZT2ob)co06{4v)xuu^e6$)XOCU}#BeBOwiY<;pmC*I8F~{1h7}NaG8AyEyi1PUsfyX*P%)aNRNqy<}zp}>N#7|QR-yL3E#(D z#UnjC&%g|>-#F>U*89Jkp^YE24a!!sngT$SVA^GK=|`5+MkfIfzyV9ihH>jQMe@S| z?iheI3VqsVB?LsEFx`|EI{y~{uwHtPC{wF$5vxD|lo5am z0n#!5pXt2mbko}!Q@vSI3CYXMlPqTexfnx;8KGCxK1E8+>cG5&?7#$2kUGs- zn)Cs=2Fb15@Gp!5&GjU|9LMQ!dTKG&@k+Kkd-WpND!$LFwPyy7%$>L0FCU;CWzmxZkJ2m6z8; zzty-zQ^<7@+7Nvt;PRGlBMo7=1Jp7Wmvgjw5xm&XQ+eMJ@#A1k86Tg?y}*_QBiu59 zo-sI=NHq+;M5*-)lnkN~zkoQH=CI4pG>l0-lTsK>Xm^uttbjaEzzQ!^B6gN5VIQ@u z4@(+s62jA5IJK2{ID>4~q46pV3YJ0w8oyn8>AmZ6qjb9{2HZ8`@(0;Kckpn}aS^u6 zWl}D`PJaYb5Mz9?R*<1t?=~!}vWWvyU8P%$2e&4MqWu!6lv}~4)MhCHFkuO1Pr+Sr zk}p0u%xPjH&eX9dW09cZkhfSi+j1_b;Q4Nk+8AZvY{;+_s7*kzH0JntN3qt!TXzLY zL?UM|3`bJ|&Ls^}RUkLL`^G+Z-~7Cm#Xc(#pk!`2a~rA}P52uI;3}(r*LSbR$Ip8=eXtm)K|vRk7==?qQ3j~3teo`TugJ-Y3_1( zx+MT?>OAhItLuDZNE4&1!ITC74=x?OUJf;Rbl@Ywtd*dM7$`;~)_~DsY@V}`>tUGI zW6Au~#$Y4@n&VVK)hmAgh{dUTt6z9XY3X!GRI8DU5MFsdh%5L!Bs_bQ`GBCJL75PIIFovRR%yi0t3sEWOwVqZl6)0sHWhZerI?IIXcs0#$Al|k>tACR5&t?ak7R5|8WDYwz{P2(mL7RcS| zTMy}@sOoe?fU0`g$%%V+Zt99p*}O~4+>jMuIya> zqV`Z97g^)&hk_Kfz=S6B6kYkp0HFh7+oVYkYzsYGVnl2Lg)LN?OgC#*c|+%gM#^ET z5s&b?3INL+(a+^1e0!wulRMLl zl-f-xIUXhmYD$;mB_9+xMK&V2PHRDRH%gVX(Jd%+qf|0iCF>w#&b&cs8*9{z1;M~2@dN5gI)tkHIK`^x5J zPfnZ15MG{`t<7MaARzpY0Kw*th7FrUjkl8ra0K)D6;N2XNA&DAzrfnlWf_G<0ycZ` z(_FBS+@ALQ20;z&DU)^P-<~_EVuM3PVmIkX1Jj&*s zZslLUY~Kx94KpEw>N-%;R#CJY$0LQBxB6v zXX8p)D@Lw{3R7_8EOcbO9Yv35t8mp(*!FC8S`#_G({X?5vjZXt9tk_ZmWzj_#_IiW z&GN4F{HWwekM>DUi~p2t3+=&+M3(jydc(r%tuT&h*WWaOj)Hbct^OA~1!sUwyvSH54{1)lcvL>Y%yG4#`JnBfs^V3#}{ zg#D`@5+z@QM|VCL)|^f~cJ0fR2!#>qX>3z=rv-_~l5>GzIdS^f^B?^qQjTdgKAsA| zY-xA8nTVLkqToHS@7C@#eh*?Sk+$LXn@{_5fgGvIUTFn%Ik6W&?jA#rUR)Brb-Q;{ zcdVVs2LKyfLwnKFlZZj#Ky73%3fhP0U4j-YxsK})QXrkOv#>G=vQ zo=H`&@pSi1t8td!B5^76GmLl8Z^yD{807Vj$1u!_4I!`NkXc++QG_XSn}7}deEX-N zN%l3(SGieh*AJyfC;l6o@!|a+vyrJ!zn5$Bonw?}<%2@^f0AH$9H{f8iD|?v=>H!k z3FJ7FwO000tFxM&zMfxHis=hD?B$A`{n5jD6+83b_`_-K4`EF%_VCT74kypEh@Hj5 zY2|sO=(RwyEe@~Hxd~WFJYx@1nD zQZv|y2nL05{j1cZaj!haOfgcXj-e>D)yD$CYAf$&-p4Da?U-yt?4Xp3*!n*K05f`@ z`(sZOj$4+a``dzYZp^CY9S@FrWo-JEEH7c<>J*0emT3B{b*BMAQ=Z{tA9cA`9Tc{u za=-uhyB|+($S_hmhEcamu+NAv8huIfnPeEt(`LumeqbwuCQc*w%P7S!0Kql^-X<(+EOi~tUUmg|;tdWCBT-KPikBb9yX`pY z>DVq`>hHoS?5;(V0#k|=3SgyIZsK~Y63m|G171#kE&qTRsTisuI}Buy;I~3wp-5DmEfSf z8*-2XaRP{K(6-dfqhq)PIEVANnzwpKhpY*wIw*ZARfIPv?A6Dz*fPm27jAeBN>z+V zn4(rVwYnmOXoJEj=$2$}4rBKWr_)zZHz_Zub!51TP0nHA6nGVj1Nb1-z(s!sIHq;U(ajP@+BHiB&dU=UO6ogK z!&L$3@b@iuTi51%{3^Ml`*^B*4U52}49UsRe>~4Hsm1PZY`n8CGdxR1{@An{PcJjD z_!$R;HF^r$`)^hA>PKu1gX4-MO(kxg~yVFZc%L=r{Ds4XM92dK!Jc0WN7&;wCl$YRsS( zH!-B(ypWqxrP9Y|@Exh%Gr1VS2i^W?yhQgexcl+L25EHSCcL0rd^O5TX`Qy`EHd1J z6S?ml4UV%po2hlq>zkcEnq$A*XEsf}g26Ci@TUM)--e{Z&oAlO zZ6u0?bNSM9vs>piAEtdN14+cbQXD8O6f@uTzSgsNK|e)CB}hHzQSCcitIl_%O0|p5 z7eib8a@OAV5#igcLgA4Kq2Ac_NF-|@tq%B2tY5EA2fNg8$i2cf$h z0JfTLe|201cSB%^RuhFM)_B5I*Kfov+vRy1-@C=szg^jaob>@|5=m1~Rt9W3U1Pj1 z3SRCdhA-^aZY+EI%EH$R$1BO^E*29{sMcM{4NHrjxGP*dhNs^)qjNW2Bd4L+@;8z!)V!Va~C1c=zM;sGBT2ncI*}Mb~Oqybo=k1!QQ#I|VMU;>UgkZ)c z;s`qnZRPnVJn{Gw)-6!uS zc>ac(<6_Xn@=&vGalB*AkriecrM8Tvh$l#@&Oor~*>T#@*yPR|?+64O>l;fapTH6| zW2qOjNV8aKrI8)ga5UuYfcCKz!~&L&1Vb>out67L9`29FS8{rwbfKh$k+HNAz<@{~ zSg{oUGHgcYShqxBi)uIk4T>Wu!|RUUoI0sSF(FveEGk-IaI3eqolAm_kQi^^d*)w;DobZNfJ%=CGE#sMSf7qiomm6i( z5j`PB5NE^Rz`DJbQ`B?VjJMMcUQVgF^*_6ukMc*sTg_{YT7N+_#E`fO3KOl!?HZ4o zFO0DiqJd>5S-wE}^M&3lLD-#-`XPD!u_vM_X75i_4*=ekgE@rdaytt7mEc!|QlCS( z>o1IhLQz)3BTx;GfV@@A%ZPs8G@=P#bs&DLPn9O}hboHtSk2(-$Ww>3nss<4H%05? zV|Zejb97>nODC>>RP5%1eSfoD4eVtkFp+A4{zcYPJ*gT^bf*qu?pVqcP)srQ=J16o z3@3kQP^s)yE!1Htp7U-T%n=!aB^7?lrD9#l=t|54VpdW40sZ_F#?iOcW(kSsZ={r~ zNaOm9b$kLgG>RPk;Ih`$7?Da?<%}nxx;iZAr+1RGFn12?eJ4o?UDf#^?`+0_`D3bP ze9ir+As2AU5O4-Co8N zdXe^j!o&_Gm2B~!Bk358C@ecrwXEzo$V)yobks?R8!{W6ho{&wR?O>Sn$_g4dz48u zyA%{ zC>_|0)}z(Ub`RTBU`Nwf>4P8>xkq#Nmt%6CLlw9;zkHGL)A(D+NhAA+ncYX7bhM?m z&~i4@S6oWFHF68XxGj7Q7x!0x>nHo-<~$hz8ZvEdcGtX!5j>9r2bCt05irvXE^HsVkdH6mB8649Hu|J3IJ+pu#n4 zMQ+nXZ&bJ|2R8a|q|achF7?Q(fb3_;V_OKqzg_)anu zgq#=2zo6`^b=ygU3d)rVSJ{a#si5D=owTx`+(Nr)CuJ7Qj-2fAuO>SREhM)RrFr9SMg1d*lOU+cebaWVLSH`Ld{u26CGaDVIAm`=Ax;8hJ4 z`s@I*nUV8=V)9Z0`$1DySzatwZK$n%^QHh+S2|JN%&$$NP_#8j2Y7aCmAs?Q=t-ZMQ`pBGm`&&JrZ_9v zN8bksTlBx!I-;I$_pJ?q@WQ5}kGI)DdSV4Do&bPtI{lNm&ndNJ))@t$yp&&*%;&YE z1%jy2gCPfH2!?NCe7wx!lc}aPMp&{yIDYux-S)45en!Mu8fFdV_W@vL@~XeIXQG9b z)(H3jiUTN?B^o?jxpnlPMv8R`C4+fDnG`Phz`Zr&{VayuGa>>&u|wOdQ$iYfFTRpy zq%=#RqBgKgcOV$|&5Z_jA6cjTawFoW6sik^|7^jdl5GWF&73={jfj<^ZD_AGUoOV% zt!Jd{qPaH6WJk%{4u|p;OI)Ee_UH*+#l@gW>;H8fjCTv^# zw7bFCW`hxtOgC(0o&Q+??9tguz1O~T5BvOR1bovk3iA)-Q5=r57Unr<_Ox-ihuXTv zrr&gn(lj82#utZ<&Cr(VxMt(TK~D>oJ!@>+J%tj02>1yIHYuN3ZS8!x!o$`^#5did za9^21pV3yoOGwt+;Zq?iSGzaHwu)bL8pS1c)YDEjH#`yGg*7ru51PAlrV)(M9bpGi zio+o+mX5xOa2>y{1J2GN$dwMi=_-W+SDi##t@b26u#rhilV;bJ`3@Q02NM?3gYr)_&^(}OsExHlPEoWY+D~_o{j}vyCnh;y3INev zhgs=m3Ctcl&hP|!;`8N-2j=f)AD6JI!WW;-o+iK@adNS%BO>r9fGpkgzW1UA zOF{I{-O*Pv=0veK4~ooYZ|DmE0TvfIqquIfO1uv9!?|Y_&=nN6eVsCC$){WOeq`kq zBf&5s7pavVnLd*u^{C&3Z2Di(faSx1=_f3PpY4@kWR*y#05s&yQM^~<`^$FZZIE5@ z`lXEl-1+1{Qw^|2gG&@=K<4dmi5CbpX0OTcaeJSp_>3)$&6MxhbpAyzbJ^bvT|C*Y z@cPmKz&6a}v7lHptwxl;nmMVN9XFgGwmtc$cJRfM9}pWuon+7Z`i3xh`k&UVln-wth9DJ_wWJ47&Z z#L8=Q6A10*YZO!pGVTMCZBaVC8}ejh^HQ^o$aFeW3bB5H8kdwC;_v*-Eh*Q~KfKOg zC6xVReY^7dLG1XuV9Z^sm2c4JlHe}{*XJ$x2io2WHqhUspr&XLaFZh3aBYV_kiqVS zpm=l7#Grd_vY+_BxTq?qx1vXrhH4w-i%bW$MWTEkSAqe3KU2qa>c4an!EkyeCx_(kh=mui=R)b;ODf(Oj1{!NczOHNr$oY{h4C%n&OFA8hY zoH8iTzdm^Fe2h0qiqAbJJ_1lGPs#mb_S=J%*VS)>SMoH)2( z;F)%3t=SDOETNj{tt1o{b4-u_pR2w_CKppGbZzGNFX!+&kPUuT_LZaG%E4Y;GU;eJ z)TW)NN_o70Q$7XM(c<#56aRlpoI&_f9;x^h`Bsp9_3NMVSe=pH`BUlAHD5trHb;Qt zE{d!GKPYfzFGf7b`CLcZib!4}O$OwhCPzKz@6``>c6O?9lzkMc=78wu6pHjOGA?(l zJ?*L}yJ#oBprD#Yw`!NaAVU>Ecad8qNR~l0aLG1h-E^Rf^p^`i$XYsP~R%-C-4vTm1X`ifKlK+IzOGg^k5?L*BeiT8dGw zYM1R=F`!kns+D@L4)k1UR|Tn~f5r#=o(L3tnh?{bg>3VOQT!Bg^^$dyihfjnkSgN# z-tc|@_FkW3qHG3AEi@fm!+K@XkgDa4O*espp&qff(l5@>_AJ_=)y%*Xc7)|BuI!M@ z!t#@XJ3MXmPH7X!j zN(BPRqi0k;HuBm%?C;P2oTJo28W8huirdA%P9U^n(u?j-|Y(zL$`klJ-FxB=cp0T8Wd*O zzykC3F7z)IX{3z$Lf0AdYx#Qw&ZKhE;HQKlB zZQ!f46GoiBnTCRW{G zR)j3pOt8Bb^#?nxE9B5MvAM3KKa5a4S--JPSX=@+H`wm)7FR> zfIr;jhuD}21mY~>ZJX|n6R#G$ZA2u2g7tjF+o0|%9<`rx#7KEc6a1h*&!Gkzt%m)v znuy4%9(8;8Bm@|7)wFaReHgj{!TRWHm>3$rqtg#YM6`CXKVkqw!3^;l(YK*f*FUb{ zyNhfU?}Abhl)1->?b&I5Er$b(Nz{t94V1WwpUgZqz0YjS&c6urbOXf`ZO6^2*(GF5 zLH0STpv;zNIoj%X0)el;BW``^w{m*&xHU$^1v=%A`1u3?v%$sq`v($FMDyXNlwqDS z7wp`TNoHZm_VzU5A>_at^r@SpHxVr9P6_#tYLqYDq`k=TEjC2 z#x~*tuoZzid0~cQwSZQwMs`wgbu9A5W6b{Bs>8X3if|XMKX@eb$1!V^BN_bQRXI@D zN+Psj#FZUB&Dhd_e^O@VUxYqaN7U5?f;rc@TV&hYW}^=RAu7FKP*~J8uATmeHho7u zg`zB_2Nb0iH6Yc(q7+gCH7^&#kS}$VILS9MyAn{R`W%K)D&_p%tL4~#%cn(gdR_~v zigx_qxLpBdA~)?jyZkXJHN~{3@?bjkYKcuhHX&xqW6~!3dG1mw+a5w6m|mHAbHHyl z!p~QrP|xv*mCItP&M8D5$nO-jD$j2gTB0T}JES^O^$YorSlq3qCU;39s0>0KZXXSG)fg7-Dh|2g^6X^QCcy9oAjjaAc)7` zDT#B4W~!12&-^+2yLm-y(PZnVj`^I%Gg&jLWA;1aiZ2qCO;6stNj6Z|1z%4ku%7bX z44VGWIYk)KWD$lpnj^6DVydxF($KsjpUXD)O8j~5(F+re4h1`9+^C@>Os8(rh^;2! zBGHQ>?`6~f>SnxcQsz~dNeM?qwr`qEnDSc*CWjEpFvxMQm>)Z?zUnh^RihzCEUI1S z8cCvnWp-}W8X}tD{}UTD3#uaP3W=YyJKdhj1Ck8 zcN!an&F0@J78f`6*I-#acC|zJx=x!*>eyfVVsBR?OLQpq#m?{gQT%af!0xu;Tb)N| z@Az~msLlF+anE+y?~Ix}(7JEat6xahMy}&jXEbj;HPHXKCal+;>b3L zp+dul{WNO8u>Kx{5@)xQS2dvL>t$J|Jou@KN0n^qPab$%;EOK`yUA|${D&GCS@~fG j4=g}^eCXBy*{wMLbqA36e>~taN_#K6C01M_Cq4RqXMj~2 diff --git a/apps/web/components/document.tsx b/apps/web/components/document.tsx index 8536058..a264c45 100644 --- a/apps/web/components/document.tsx +++ b/apps/web/components/document.tsx @@ -16,7 +16,7 @@ import ms from "ms"; import { EyeIcon, EyeOffIcon, Trash2Icon } from "lucide-react"; import { debounce, get } from "lodash"; import type { DocumentType } from "@/types/Document"; -import { useAuth } from "@clerk/nextjs"; +import { useAuth, useUser } from "@clerk/nextjs"; import useDocumentStore from "@/stores/document-store"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; @@ -24,10 +24,12 @@ import { Dialog, DialogContent, DialogFooter, DialogHeader } from "@/components/ import { DialogDescription, DialogTitle } from "@radix-ui/react-dialog"; import useWebSocket from "react-use-websocket"; import { usePlausible } from "next-plausible"; +import { Input } from "./ui/input"; export default function Document({ document }: { document?: DocumentType }) { const { getToken } = useAuth(); const plausible = usePlausible(); + const { user } = useUser(); // ws stuff const [socketUrl, setSocketUrl] = useState( @@ -43,6 +45,7 @@ export default function Document({ document }: { document?: DocumentType }) { const [doc, setDoc] = useState(document); const [content, setContent] = useState(doc?.content); + const [title, setTitle] = useState(doc?.title); const [metadata, setMetadata] = useState(doc?.metadata); const [isSaving, setIsSaving] = useState(false); @@ -151,6 +154,35 @@ export default function Document({ document }: { document?: DocumentType }) { [metadata, doc?.metadata] ); + // save title + const saveTitle = useCallback( + debounce(() => { + getToken() + .then((token: any) => { + if (title !== doc?.title) { + setIsSaving(true); + sendJsonMessage({ + message: "update title", + data: { + doc_id: doc?.id || "", + title: title + }, + token: token || "" + }); + } + }) + .catch((err) => { + console.log(err); + toast.error("Error saving document", { + description: + "Something went wrong while trying to authenticate. Please try again.", + duration: 5000 + }); + }); + }, 1000), // Adjust the debounce delay as needed + [title, doc?.title] + ); + // handle websocket messages useEffect(() => { if (lastMessage !== null) { @@ -161,6 +193,17 @@ export default function Document({ document }: { document?: DocumentType }) { setDocUpdatedAt(new Date().getTime()); setSinceUpdate("just now"); setDoc(JSON.parse(lastMessage.data).doc); + + // set the active doc to the new doc and update the documents list to replace the old doc with the new doc + useDocumentStore.setState({ + documents: useDocumentStore.getState().documents.map((d) => { + if (d.id === doc?.id) { + return JSON.parse(lastMessage.data).doc; + } else { + return d; + } + }) + }); } } else if (JSON.parse(lastMessage.data).message === "error") { toast.error("Error saving document", { @@ -216,6 +259,16 @@ export default function Document({ document }: { document?: DocumentType }) { return () => saveMetadata.cancel(); }, [metadata, doc?.metadata, saveMetadata, plausible]); + // Call saveTitle whenever title changes + useEffect(() => { + if (title !== doc?.title) { + saveTitle(); + } + + // Cancel the debounce on component unmount + return () => saveTitle.cancel(); + }, [title, doc?.title, saveTitle]); + return (
-

- {doc?.title} -

+ {user?.publicMetadata.plan === "free" ? ( +

+ {title} +

+ ) : ( + setTitle(e.target.value)} + className="text-md text-foreground/60 mb-4 w-full flex-wrap border-0 p-0 text-left font-mono font-medium shadow-none focus-visible:ring-0" + /> + )} { + if (user?.publicMetadata.plan === "free") { + const documents = useDocumentStore.getState().documents; + // we need to check if the user has already created a document today (if they are free plan) + // to do this, we check the list of documents and see if any doc.created_at unix timestamp is the same date as today + // first sort the documents by created_at + const sortedDocs = documents.sort((a, b) => b.created_at - a.created_at); + const today = new Date(); + const mostRecentDocDate = new Date(sortedDocs[0].created_at * 1000); + if (today.getDate() === mostRecentDocDate.getDate()) { + // if the user has already created a document today, we can't create a new one + toast.error("You have already created an entry today"); + return; + } + } + const token = await getToken(); createDocument(token || "").then((res) => { if (res.ok) { @@ -83,7 +99,9 @@ export default function Sidebar() {
- +
+ +
{/* mobile view */}