p_aD6PTIZ)gGP7r9&z@bby=PuO(o&|TV4?s3fLc{WQ5OK9;Ga+c
zegXVA@EyT}9}o{+e5GVja`_E4R^vWf9z<=D#wq~BDsNcu+P@9KVJ`eP%zsS#
zSAhPLwExb{f6C@R)%kz9yY%GcOBWN6xv6`=55fvQfc2G
zk!>=HB}0}hw*_!k(|>#rrSMK13P;U+)+u9##^ukKX_lGc)lwQ{H7R~7`5}N16l$kj
z*h}#+psoDpO!K0^@k6Tu4FHlLz-@5XHze!9AXAOtWoRDxTe^^MG!ENi
z)uqBR*PA3r5d%CBn0)o(?FJD@N1{}{4hR349m7}_2`60sojNqwL(8Kf$h=p^$Ln$E
zID$47fFhXW)N(c2-3)%$>M0nt7&tdxV1~;hZbHz*y5}=HWW!KwYeJzPD|8NA?bp5e
zts2^0R-+Ur?eT$qq>@%C6&FZZ85&$%xvbD&yM5%s4)uSo@^Kq%-L&xCw3`mzcIIQd
z`h%$BTngm@DYHX3piIrqBWLF08Ka?e4*3$W)LWpVA;f;kRsX7a`JfRYDyz%&d(-WU
z5IFCp-6_r9X{@N|@gK-#_{|3(FW`m&++N)Vu`Qch+!a&K@q@+`A#dQmv67mWr;q*g
zBK7POtsU7>z=zH$!72OtV*~!+(y}zOYaYG&WDqzE*7F#$a4HhCwXzi8^iCdO2yTe6
z+i(4JdX@z#e1>K6x6WWO$?K+ix2%ew%Pyx)Of;Ar_im9iAFyFdfW)2Cs28!)L{0AO
z099SSNBl4ZZ4C7GXLYOf47pTH#WxuABb_|(Jz}UT>Q7=FQ$TNZ_mfeyd0fZuHd^DW
zq@PVRP!THp7fsQb
zbaR4K?@nh_=sc6#b7uG{c5@0|r_e404KB~uYUQgQOvSlWk4o+{p|tdR&4~yXtYG)5
zmGdRgK~;U!>z7@QIgoPiQjl!8w2w%ThEz}L*wmNyndt>LM{giwfr)c3Kl=Ea7)g^~
zGT=bl<}B!ta^w+-JB1mJS?;lYZ76tbWX5%En&<+zBK>;Y+GpCBM}GJF0Z%^fZ4ZH?
zC@R@P9cIp+bb2YIs{HX#v5n1>7(|kTwV04{2ew359mYEr;tliI}ygrj{za
za8yFOZ_s0C3_y$cUjm%47HiYkZ#BBmP7Fd3FutU6C;c^`LhhN9aUWRh%$&Hy7!tlH
z$KjPERm=vVO=~FWpp^$`$^NImd>?s1;@LIGFF)GDFVZl1ws$tIsxbL685QEf%>+ZN
zGVpy(bp0s|b#?VM0DZ^hc=_II`I@!06Hl%QCOM%+d*6}-Rav`RNSORBh3D_2dg1Nz
z%{Bs3k-$|AG?ja`#(O#6g3=9_jFBy$URz>FQRAGLFN?BCLs3EZ-Rnc~XxEgSqc>$N
z`$U#quC2v*;OZ{wmlep#Yn~?P<``gghGbd&c-?`^bDBE&p6uwD-xLqNbi86X-dv2G
zIyi1)X5ht4R`$j!GHB~0`|`w?GSUAgxbcciez+}NLy
zi~ahGQU&IR|Rh|ifxegU)!pBAJbNMGD;lO-l1tb`6ivuLE5^%m3g?SuKe|~`qK2x
zWV9uJ*HnYj%)&EDRpgJ36?;=4C=d3*cDI$UWNY^6CMuX&Yj)CqTv0o
zfD!v#oLBu5b5%Ct?8TIBT#Lcr1ai?>o$YKQ|DM>)6sbgAM!63WE9pNb9AR`JXNXyq
z6N%m`tFftUk#Q*0;uoA#?|XCBHNME;lC=xwRc%;dIp~F
zDhuNmZP+ZaONn!#gxR1K`vv?L)@6&yt{U`{h;t%F&QGJ6E$--HlYQ+w46%Bp6J8W7
z_xdK%5?jn;PdvSX8y>x?aj?kf(^(yC;jYE%7nSE;_UjsWT>DruA|&CclslP?+ssIb
zO1abb>A5odg3#GxOhA>GOHVFf+Yl7A@>BJE3BzJ?ZG^(*ttceT@?Hf7Kk9*R5)dd|
z+|i^e4eBr~Wmvfjw`>bA4nEY=ePRb;niSMepaj=q_F2%J17zHO{bQh~$NQj-SZ@>=
z_tS%NW;dan=6tO2cU#>jp%d7Q$}OA}HZEI*AVZC-wzB=u?)iW)z_rvI&nX|yy)O@%
z7c%}LM-r&ji&;AglwtR{57A3kd`7wu=cmoMS+VX_ZBedy!)UO7TnhiQj=t%9`!TMq
z+QvepA~$f-S3rqC~Ll3C!!4QLb08sh*5P6Mw`J_WZ5
zK70wVF8;!Zc2~qS?w#DpHjyzLK;jOa?h#wIms5(Z@8MUA*@m|xbFym0P4^mHN>|U(
zjpo({!Q$FAYa7+Xy;oI@&QCkXqaP|8S$tG;LGCN1&jsyYHI)18Ws-}Vzn@-5Uo2O|
zW-69?xJR?4;>Cm*?nKhDv%kyyPQ(g4jq$@
zs?W}>Wn9vQ$uw9`X~YhSk$#WjrTv#fW%k1fc%$lJZQ^26N^Gi#%seuD{0dR*oh1
z{NrG#>`_Rz5K$H<$iaBOku3GD%@va1c?Bs^mZu``%P;0G6`I{dD$2j1{qUX_+D;+f
z;cycwkIjs0>3rXE%_vyvq$f%5&7ZlrtiiYzcV+Qup+ars+-%bBf-%fCf>7P&ZDvVW
zAFR3e+4m{kbh%}{5~KN}WE@mH{+cs#Q(g~q{-vPmoZu#!p-zJ)%Li8U4+f8SR=Hm-
zFUtfi(w`m-%n1K@S?aLTXmI}Jv`;Gk?z3(qw3i0*`0$x}z3@G=0XD)B&ZMDJ^9(37
z;{<1FNLxl_SA
zxie%RWnBB#piGe<$!Xl?%D7o}JG*%Er5~JY{o`-t5gUml7nea}F!I^Mct-KF
zqwuuzTG;U)?){zQ+#e5J*-m=5+%+S%_8v<+uF9~@@YGyEye`)DK18Ga@~iy!%Bsr5
zJx;9Y^5`JN{7@0H)3YO~hV^;M$eY^sTaRadOMXIx7MWtK7
z?l|`9{{G~AG>2>i%Xq2w+6D2*-z_`lQ=#EbI&2ZXC8>~8CMQ;jB|Xe3CaX{(yh4?rof~=LfnV9`$>O(<
zq3y{TH2R{*;kVD1k2$1sb{vRj6$Ga<*WK{upy$T?#67`E^!vMq?(-X$f&}+htVhq&
z(B7V%1_!O4auTSOq$lTisrnK_YK%_JPph40n$tA_ci*}TFrGP1>+3jJKJ*x`PRdaC
z5XI~XZ>4Ta1Z&i6rPhxtc@9pj%foq3F9)XZSCk)pEgcw!8vYebe)PpgzA)fdr9-kX
z?>Mxb3b#{cMll?LF!{mA2bb*E@&eQfF)cKa-IWgr1mJo@(PQUz2eVSTPn^^_s@c*mb;Vi-wUfm6Y~;y!
zu}c3L*=%8qp?d3g9=oA-&&Tv3qva#@ZB%w#KHlk@{h!3`l(ubSWeykV`o(P^iFoNo
z99(7RI2dK}0H8_`{xpLsb#eKJK?9@3g(X@A}se8S;=n_@BTr-SE0JW7N7&!kyiRRNgOiU
zz|xC!(Ws1UZkFJ39@w^3&UcY)ntxySc}lZMR=83Z?WNe;9FgQ~--++Ne;@pjz4#_)
z;#m+z$K$C+-&ST)>nOjIKbIoP@|2_WgWT4b9sfhnkY9eXQds(j995J*=~AV$;=0p;
zRoZh(D47WqNgdvNf55T*Ny)g^yjg84DCKkccA0GPy4|8?M}e+h>^I?|OXAet27{OQ
z{o2Zvi@n#El`YHCw9Zu=tW(>*myF|2E$+T0XHGLZeW@=oaJ)Sb@*MQcljbruOg!!Y
zZ6B9kbJz`gTOfeo<&rG>g9XRo?Nj$HQs}H{`Dm~-{&i&Q#0yyafCEjrsCc>x7VU=N
z89j>TKGifA4N@m4q8c~9%CNhvqSgCK$2E`VX}YMcLtyQ*xaYG0Z=@gtJBkMTB1dB!
zdDID9LT{i861SCezW-c0p5!c%2BgY47ZZjB*^N;iRJp`KjeVNUjN6ZuJA|e+Ji=0
z;ltdPZ)zkL=@G4Kp+)FVcN-Uw{mTO5Mo&5f8SY9jMXMXB{iW6>e1n>p6UY_WZ1D7T
zf}>$5@T&-e|GfdyQw{z$*fT!f#k_;1#l4lL<<$>Z5Nza7&6Q!%i&QXN$Rtf2uh3a}
z)J4gw&YBYJSe=z<{p)%z&cC5kZk)Z{uB-a2@@(iZ(NFiwEEt(k#qkRbCreYHW`q4b
zXxi(_lbd0yo-~=Kz}UeIdX-5HYI*t$+k^@j<`jGb@qLF9c&dO6&ClzgS47*hY`}YZ4k6AbnXazdH)Q=7{`JVZH-Su>g>C(OfhD
zuFCoCS6QP!-r6e#ipK_b9k}$3hdWJudF|rUpQfL$jIOh&`Knu$=Fcz1cbd~XX+9iT
z%+;o|DuNI!f^kxY-z%t<*a62~_a3q3#{i7o>gVWY!`LsW)E?2y~SCTztsTVUPh}DOx+xIwmiOE{)Se>WRiSDpQxm1R8NOE{F@XH`<
z4mOPdpKnszi@E%Cv+8}HTM~&w)M_)G0O;3W$P%$Nue}ezdcwj(3`Sk9CyHO&YP0b8
zZMpQgrp!z_ZDJH1c7@AkE53NvvmK9)EfK!%<|F?x|7)LH<4SDz9Ys_1M15?3EL`A0
zw@ZmI9{K#%$m%K;2+U~BZB*JGfab>$-Zma-)y^HRkCn3|Bfmb(d-o{IH=T?M9XgLmcb3-
zzp;4K0IY%@h<G2-P9ePl*pZY
z>#Sjcpts9f(FZrj(?dtx7X!FHkF}r*Ys&6cyPNers?8%LpC%b%``h3G_k+!5eg(jn
zvp~UE{GMo+@uU(^p%-$>zK?j#6Ev(vn7jgE#f6(=BW3SMy*{p
z?JqrSe;Ist^bI#A!IE&{emXsPQnMt4G=*sayP={=>03mND8NQ5cuRYc@jBwR$6rK@
zUb)Eb0u-V7+q)q}5qoSf@UiPflLvv}-UkQ6EiELY-ScJcCpKo;bI09o>)vE9;wqGZ
z#b4=m>7js1bnW!k&9t-J!l^PB{SFU`ViIAu|El`?Q|0%CF
ziO6oI*p7X&T+V4wWxZ#45y?ykNP5~2-MRrJ-Ewp}xBF|u)jlq(hj%PepZll|-ZeHU
z43*-n
zJ+d17mstAtp(q!1kXrB@K`}^s>6`-vtg@Z<)W-n7DmE^BS_n%5DRD)1WVNi@6b?<3
zTod->z7EdYSHi@A63n#vaM^FZ13f0x4SB4#$SPThJFFd$&7dG90Uz6Y+
z4O(d{;@I~oDVThVbY%(kUw4OI)O{csoz0F~%(We$v08$oAf8?Ce8?dJtJj$}2`@Nt
zH1FXhCz|GxxM~yO@u#eF${Q`9HU52D{atkEhLm-9lw*VwX8_E9(E#?b+XMUuz4wVJNqa0k=Dq(OREx41f;~TTF3#~eq5MO&ljs*`+|_k
zkvFuItx2MQ5*2H0@6E4+vv+y>Z)CH;In1;GC1A`!>hGovhly
zkL_2$QIm~vvRLKQgWVY=jPanWCp0YUtmXz3WLLgGt|$nJu8k{Jc7+1F(rY1+D~E)5
z*^Jwi+}f$~SCWYDqEKn^Acr%loe$N;6ot*Dporn^4ega01n}F*avbyU7lSJBKeYfN
zrTyoJc?9|QqrYIE-kfP)f&A#a!#X2c=-u(U2cbqP>S87*c)riwbgWn!@ktT{wSRr|
zNEYG)C2Bu#nmEuRdqUh&ryx1JrGkj=L?$RfyD~-?JkVvD*+|U+b^UBFPy{OiKG2-^
zhXMk|JxnN?AjjMz*`G`(*_W#Qn%0synou|bcg*5H#sDIFE7;WwHV=Wf=0Ie8{lOYP
z%Rm*`Ns4WdZu9rYiFkxW_6u))m!M0ddhDlEjV9y
z&z>zeZRdwxZs`vniVPP2)S?{h6~8_!r^AiWE|Gq6aJY5OfbJW>=3!8Os*NUa;CP!f
z?PkI;Jz?HEfC&_IwubS|5*mnAWbU)NOAuO~J`DpU>`t$_Y81H3F0y%VUIGY;2lVp5
zOQqCk=uM)nv&I8(8}o7BkA}doj^iEKDIFjq-|b76gp|G*qX+)Bu=l#R4#ZQBg5&Es
z0DoB8;8WF`NNrM9Zp*4>dzY(kql1RrwORh2veX9b^hGEFL(u#Vo*{N)vQI+=NyM=5
zmG$NMjoPB5_))@>Y{rKm(QiY`=QW_Vpk@9S>g;|V0=6XC_BiaHaj0uE8Cd_6sVe5?
z*~Ccq$Zh4|(?@Ol-Zr`Te9Dn0l3>zr2{I6kgQF};UX*JjbrLiB9F{rgdhaQ*5My3^&hpm^w7<5?L;)(9zD--4DQ7;J{KP(o(IeKz
zIL{fC`=g=L(01Q?W;)uNM33sh<+)aD$IgAA;FKqEYK#_W^m1~K02Sr4shx~uHG=g7
zCJ>jo=yE;zxS#n>*AORQ^Vv_5?!()&h8XEvm>mRwKUYu6KLRzZyR}IX0vKY?c9yc^
zBtC?E@Th&4bd6$`9L~!L)zTs?v%-Kcm$*PBn$YP6t#14QDQW5=^&Vl(47ZQ!>h~^(!(17c3~0Z`vcq_*fk_hHl}DjBP?A^+L#Yz@rx#(C#9}#WZTxbuWz81hbZ+sw
zXXY7bF_#*o4=(&KwupE!D<~>{yA$*F*%$QLxiN6_y!`5~LC-Ek%-QAK9y(`t`IsURb;MVDO+&hvd$#PID
zfwRjIf+WV`5djN00({vL8
z148IBKwm`UQyat8?~823!0K|hoJv;G_1yi#)^ABR1ZB2d3y}W1c&%=`VbCYJC#G8C
z$N;qQvu4_^&CaC;?#o>`+mp&Mq2I^$PWYI`n+}{UGp_!`ZsdHPC{8QuRYiS~1n7<+
z-lt106>=izgtOk;@^ZPiJJ}!u+Wkv4PN1zh&nPhvqd+zKX(Mssk)FeRdRTmx;w7(b
zp_JzE_w{DM;bZ7|r**|YU)Tp
zk^4*hV-ZFzqF68(6Cj1Yi<|I_PA6X%ZrZQ2i-fQFXO0TMY&*V}XP_9375AP{&
zP22{qL|7I!;jXX7-o
zz%V!MxuVRB4{lM8eSZmk0;=27=Cp<}I>2w=mg1-)cwc!@QS!S?xa@NMYx;e{R;O=O
z?S>InobY&E!bd!HYvu8)p9;nMR(|0j=jvkL>?uhf=QX{j`HASsp_eBD-BxlTrL$>wKa#{faK5ZcC%y
z>!#cNYdNI^+#np)D{54pIzb^}k`x@6pD)VQw1OLIle8pyf3K1x4rlkmh660-CXzg1di{r5W;D
zoI5&)Sq7BPK1+Af3s@38G)3e4l$^WyD#unycixzq6gJi$*fdWuxg4m2xqC{hmDO}9
z2s?9zJZUE5?azK#DYql!!V=D?*_40_l4_sE#bNSCfn&$ljjB)h7?ioW
zD_PeAEZs4X{X;p7?!HQGBeH|9v}sAMq=^uvm%!?vlH1Zy2*T8@_%CpvhW5knrAkz5
zJ$>PycQ-)|c9~z-`wp0woM#saS&t4@*ZN}cqWf)+>I>;ku;79~quK4Cq%s&+KEJCK
zn?t=h%knU8WQyDZkmhxAPXUumR6E&Z7hv9$j5f<$
z;u3lSWG0$}!*YuQz%KRcS3JH9EYltj85{fzXq}ha>0pJ-n|puTp8T`LlW9vkA`;sjs{dxUG6#{9{_K4fN>qa
z{gOXJv($6etZhav2fS~=2Cw?Duy;mq2^yJ6V}wm7YDJP+qN_uHQ7H;PfKmOdfPtxNtewH
z(1ZEv`^KmF1{e-UT-wQcFiQoo3bywqt*E-YNg)qYjJt{+)j8iQ&Dn5^0#Sb=XU&Co
zQ#MVU=WA8<)_4Jmf&MKNxWrWtLh)%F9m+XB{kZ9Wh*j_cTCY&p-x(Af%NH1xp#B$`
zF-8Gpd1HIHnKDtI|Hv(EbO-!icbmPT=wQ?KJKhep2)h1%9YU2G
z59b*EIy;F2uv8X^aRuj9a)A|+H`mDFnn#Kuuf_@YoF9H$Y1J(JSRA<>LI*k4^2bLi
zO9?fT36N(^6v$dxv?ngI=pyKwvwMEh9Fx0IFM@n_7K(e!L?K`uy7$P%1h0ms)q
zJRRVTmq{Asp+M2sHK)Aq+K61boJT6`$1F*RACG6*hjWdZ^>g$aX
z2}1+Bm>(h2KjVyCO5I92x{*EWM9u0)UJKn#PF3Z{ftL65Eon)7;sP=pIcv-ZVhAp*
z+^`N3u00UYNj?WlHEz;TkGuwJxF669G(aNGFN@faUcK??Dz_lt2NpMsk;A8|qvtZU
zmKq_$)n{9!NemR}VPV&^j>7oDj;|j-C-`LbKN=)=hR2vfpUdEwe^x+V2@jP}LgcAl
z-WrGoj2*w
z`NLA3n8Mg*+Gls%)iD@)jm}lAip3)#VT1Qfsz(3C`6@a
z+^#I^sx0D#1(pg=J=&iz(=G`mL3y8rs^x2Ml?IMHxV4wbOxpXkUE;bhN3Bx{EhyeW
z*tcN#@FX8~Yy_4l8Na5LlM9ny`b4~Ko_+n*foF@K3pYSbtpcf$xY{6J+gbhi
zjPrckQu@}o*Wt*%&%r}jt@K*vsZvkv$HhXUG
z>rWgF-8Oh$<%oca#lcJ&ll{-?Cm{n^Q+{Z>1?JeXQO~>*TZ1gMq+ANv_8AGa&V2e}-&V+n`7J4G
zpHDRYz#Hb8&lyC>C~_toFKEA=PYiNSyLF*9keAyUU8FsR_k~$$PtzgG@Yw~gx?+DRsBhJc^Eu0Y
z+no?SAKC*2SZ&Z+ghEc0%)pdML`~z!CdGuYS6vZykvvHZjC$p}(3@98z>uQ7(=BuL
zvIDpIk%v1^C!0944~AphrU*JlT`Hg-XEu6=K~Wm&>u-Ud?(bhc8A&&VpWc8LO$~MI
z*!^(7)!vyES{d?=9-&Jo^IvesmEuJTe{gG-j+8evOVH8K-C$bi%EoQ^
z55Vqh?b-EsKvs;ib!Aw2$xofXP2Cg*vw?1|tj{`vS*i<^E=%Nhtiw6ds@d*1{VFHbehp#}IZ?(?W
zw>Q3WfI4aaV;eHl9)Mo`OVp2Yut@ohLE}lRyHdmCYfcFkTg7mDsuk#4dLX{wPH4+YQdmg3(vGj?_L`t((ovK?P6tQxnm2gzf*Q^IN
zpo@VJ@xL{DnTOjFZ!K9DD>I(B6dG=?x}?dGs0oh)X5=RIWWdwmg3%c!;>U7wx-uV}
zUxGxl9tEvEnjX)lZ`)=$7MV1meE=56dAxt-_v{{{^x@{4n#+p7cg>M)JT2gTDwlK^
zH+k{%J_UoA48N|-W4_H)$}bPvRpKR~pJ#OUUBQhS&uo+3*Y=wJ*xbMhiw@dpfE#Z{
zUW55P|2ZzR;N_IjXsGRgxk|pX7G9He7M7T-rGD64We{Z4V)is#<3&2Sj$bk57i#jg
zUMQxloZ0XcL$chT%*nsIt^I-IUEY|Y56_9Vi+$DI^9KIj^^XeE{D8En57|SQ@0Mim
z)_IbNFpbiU0PD#Z$3xRTTQKWz<4J(iUkDXZcK#!ZJMAncE3a3_q00>S87BWm3P_cL
zer9~91T#As$;M}6g42E~DF>9YKe%RTvH#in=q%;l{wc?ZhxK3u631`y5_l!bTTu1G4$`(?@|
zTP>5uGopI0=;>G_p+AyBXdP^gEw4e_@wBflwzE*^x1OuuQMvhX^13ZRy0-a6tgj*|b827PuR+I0J+OdrOAyk*iu;$qHc5O)KUxFmu!=8y<&7wMq5%0Vv%Y|0T
zdH&cDiukJ2UL#hQwoIc+earNU?}^5-2%F7h49ea{Wa#h
z!P@@&DLv3uJ@(vutJA;VFhf1WTh3yPEeQ8+{e}xE)s$`Cqk;XqXq6rRj`GENnsQ;J
zd^Y~RSB5gD#|LCr{{t*rqGX2T4h{M*{Yb6Xv&W`};|8A1<@x0iPXjye
zFkERni#{?_1`(7Ph@t^lCJuW|3)dnGJmT;2ad
zFEC8|u4HXb4i7Fwa^=#J{CIjlQ#@wvkLHhA2ZHpz0eWWGxKftZ@^Bh(Eq|CY4(3zO
zejofTUiZd=LYQRZXhW%Wzp%Ie(cGEQL#DCo&wW2qpsYgDit!kz;P=0dnFf~Kj+P$N^xZRtD!N|aXsoeN<6e$G42--S|c{P6#Gp5&nfuf~o
zq*~vq-|L1HYm(P+lvUQak;7Aqt(P>1s>uec^(>v0srn{*HH31|WxMBpd*JWAhqQOT
zeC#1ZAIj2*E&3Wq&bU{tR0h(55Z9;Nh&ZQ^JSwJywB93G;c?3n2Hd(_FINmerIN5*
z!2CC{@4nmXs&Cw?`J))E8fVIKw(ULm?ItP8ZpOi9L|TG=^Wuj&!PjUBLmjt?nTNqV
zxNHA}9M?g$gP`J@iB)W`Aam_+)F@;%T7DWVWe1^sg|b!#OQBvnQpYUzT&2t;4ZgL<
zXwTVpVl)fJ7lOMbQDLZ8A#cbpt8r%|3n`fIYBtWDWO}Gom911nq34I~4>FuY<9n9v
zZBQU4e6^}Xz|7?BLW8R|l0PI2SPf@-(Wiu>1DYLrTj@
zaJ`c;pwXhy*b+S54})1!ZCYrYM38D@VQ1cY`{Kkfrhpx-Ho^bBmLk1+;huZMSc!XQ
zzx7TGFi!4VKxtTgys_6Zd*w@?hMq+^y#s&fjlg|QmrFrw-_gCJ&Ab!QDIO(Vzo~ow
z?8=SaJ8>;}+Cmjl2tpvQqC*f?+f;Bx`P3p3mQo2b^1hOt(*^b5n##UF9tkxGW8R6a
z_V(A+_;5wbKy3L8)!aVSWe8fbx^yQ{Yi2KuWR(A2vL?7jM?7Czt2cN4KhD$AX!^(g
zI~kRzJ9lB5NijR8SW{M;9H^CFc?Z-l{@d#FS!tt>LA>Lu46ufgO!tEL)F$Q5Z8-9p{n-Gjcx!caMDDv1R
z$uXjd@9+JsUz6!Vqj$<`x7-`2EZLQ}<$b1kQ_Hi2uTYim%OmbUEo!PJH)M;CzK0ZK
zytC*AdB*GEo7!{8YV<>NrSxC~yrXq-m$81Kq_)0jUWHTLcg>*)ezLB?I(#6Cy8G!5)fcL?u4Vb$=DYOn$_<=4LA+iUq9F}2sxi>-Uz63eIINBwzX&t{
z0L7cX?*b4pM_!|BZLA`+ul`=56MLio<~F3EWPZ%1lvacMU~V=$CB~y*sH`li{DN=6
zQ%>d+oYkdWPM2U^z2yz`W40dIp>hon?|DAtN((0bvCD(u
z!aLwaEP99s9`mP?Sg_0?7gefM7Sav{qvXT{NvM_plWQZzR8>OOm*2rQchRMeEHAhb
z9y+4$Sj9|!Ra!LS=iQYTG0wlLH}aW
zrEZ`5tbA_{x9&1~WDxpnM$@IU?4(xDtiTyk6vmd2(6!aZWJ{N>$MJxpcLfMhwz%r{u%l1BQOTxU=8O
zgg7{i10u?x%tIoqAUH9T?-K!LTVo@g2mfqg-Yf*jhsZw#(dE~9h4aCe1R~+-r6KcU
zD_!PZ!Nj(&y%{JS4}I4ZQOG&ftC-rY2GcUkY3nRo;+gP#-KIA^B*7drxbIBC~u0nFd{bzw_O%y#dm+64|K94NTVPS*1}qZq)!5`m`f#ORK{jJs7S+0m!7r`z(AO9*Z@pD^CB3QYSgvS1;zI>@SW{R3*
zLyr@*a}46K)Krjh4LZkUDetO3hm5~UE7U6;v`Rr8KJR+%Mgr3z#PQcLxEBSufGRx)
zOsm>o)iLSTRMn@CyNG`p^z*l4081?lwtpJK|9QjWUupmM`2pGw2_S6vp!k^(?B6#j
zKpgU)MgWW#gxWt0ti7fB_vs7JoRiT0`=SLUD2%+G_iict`}74Z@crM1F67%EfIcT>
zc3kKGGz1ez{|)mW)BY8p|0M0dbMv3F`A>EJzhZ9)$YC$#p*PgpFTh8v0M&|
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..9f9bf74
--- /dev/null
+++ b/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "note",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "preview": "vite preview"
+ },
+ "devDependencies": {
+ "autoprefixer": "^10.4.17",
+ "postcss": "^8.4.33",
+ "tailwindcss": "^3.4.1",
+ "typescript": "^5.2.2",
+ "vite": "^5.0.8",
+ "vite-plugin-pwa": "^0.17.5"
+ }
+}
\ No newline at end of file
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/public/192.png b/public/192.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fb4484cc1fb3852376ab64cc96c8e546fc3514c
GIT binary patch
literal 1575
zcmZuxdpOez82;^=#*S4)Xyz6Uib`{I*=P>khn#dpr%+9trI5=u5|V1tg%+z$}GJ9S#7P^fk1A&8Z!uyiw+mzgf_RoZKCnS@Cnmnl{K`-$hr@
z0q+%}9iQvw-Pw4P)qMZLlhG29!mQ5w7uCB6J4-K8Bs-whxkMs0f-|Mxb@nQdydSN0
z2kOCzaRzmukcJ#sYQlrPJV>4yi|Ko3xLN>~oIQh~s@?2WGp+OOYEmqz%#~H@Sfscn
zWiG&cikt!?FoD@nVyo!!zOn>QRzrB@SjXzGuHwhT`xG&T2mZv{x0*?G#wNse%FKsd
z=A$`~N)vc4#+-*yl;MsGz4c4zRx+@3@c~r5`xs&>dBdlkN9@>6y`_cGy|vyAVCQ=#
z^|&rPC}qvyJXVzL20v4yfY(FqvhoLWw;*oR;wB#q!FC=eRdJ|HMAa#)jw9*M%E!oF
z%kUBX0sTpYCMmW9nL1J8ZLO&1CqTK#S0UUen}LeJ51RAZ*l=<}=X+?a$xl-X*jtG<
zOR#aolP8sNIV+GFt{6W8|M92UdvtWINbg<)>-sqyEs@x!FE&-@3T_sIs*qAjEZ;>`viC!{wz55hTY+bqSje5UX9hx;
zjuhJg6LitE>nT5qt=lN#+^6x1;YBh0!zYK7-HaY=1d)@PHKc=M`Jrr6e;p-;uaWXL
z8Uz7@+L^C(jrg?}Hj&CH2l+pWAEe^!vGEdnA37_P6~F86?*7xZB^@b!Lu0;%QRAdO
zk>R_juUk*U&;GJ)#dG7*{gf$WR{F&?EhFUc4EMg2udL-1vMggzl~T#8!27YX5T#L7
z_Aw&xKT`?x5SBOlw1*QplMrhH8JhFrjWeMFo`)R1mw9)hpjSs(r&!WG{YnGE@`Q^j
z=C=ce9Y_s0UehFu^lWGA;^yQ_S<;>ytVs<^O<}DZ7KT
zaZ?X*OWPn67b>-3`xjS~a=T|;??xS7(&A28;v_UB6h}!;_*hRuHG9dfLi5k3LrJUP
zVC1l>7edR!$INTBHj~PcFH}#Vc@3s@r`p5){?#4oHQ$`nJR^)yI3l8qSJmKzt;1<#Gq(-{6(oXc7$1Ii=pd-V
zaxh0fUd`@=^xNx{$<)+7v+VlZ4@X@wN~qACP6C<HJOER01h9cHUA8I#YgBAFPO?%vV)NizNjW$CCS
zx)HnE5KP~X2&~RqEj!HceoD#*rCn?%0y2TTEShuK5B_FL;-ztI8y?NK&BuLr6lS56
z!~iFR|HI4Pkx{zBAsVXmBSE^W>+rkinhrdeW^f^BXR00ESBoV9&8#x4n;@9oUdKo}
z?ZzQziY*dJpksF0x{H2U9VpUgRbmZ>5f+!-l0X}G&S{lZd9Zwcg3NT^6^Iv|_RR-?2WUoUNS!4$yUR$EyMbZ?r
zXOG#@U4*r(`C>=*TPxMz9IVJABjU;`<-oCF7V_%53qeEccwQr>0r+3WWrP8B$?HT`
U8~BcI40~Wr&_>$b!07D%0hKloa{vGU
literal 0
HcmV?d00001
diff --git a/public/512.png b/public/512.png
new file mode 100644
index 0000000000000000000000000000000000000000..c37f323551204470b99edfa3c215ab79206bfd63
GIT binary patch
literal 2810
zcmbVOYg7~07Ctj1Kob!Jk@`lZqD^V=fuf)Zh*wb|Ak-Js|Efgp-35N1%Y3Kp<0
zP^h7zf+B>13Kn!yMM13r%aueB62o*n8Ky>;CNgnECd1_W917z0cZb
zp9~6IXTzGt0sz?fulL&w016=rtS#W@?j@II_(2jjuk!_!@)-lr_%vu!=-QFiM4G1c
z{SA7}*Rq#`CEe81$EnHk_gCs#Ybp-)XPwI_dHL<>!+~2w`|iBF4gf37-_IvBsbjcn
zAhECkJsy0qdg`<~x^vYk)rF-tcbqdaYYvm;<(!?5G`atx?6zL?xIXFR`b)o%yNed2~WdHJJ?uP)mT4@c7Ipkrq
z%zb?rl5y&Vsn3U@EpD@D*3i`F_|^u73y0*WALiq4Ope;uQuGb9{^Z%_b@C?3mb09P
zrFdzoTXDE&1dO(uWe}AVO}e5B4#_G17Zl5LB`zMJ7R{)Ec?}_4tHM3^K)1|03rW|1
z>M52%eRZv`x0!65TKumS3OYgo$;S)7YuvYtpjsUGnGOjjzKAgywGg645P1$n8EDxDT(LadfBlcDmH^_H#;4UP2k#17zH1e89ay_o7Dx
z>W#xh2|yZJsd|<+0pZrra?}{nnmt6+L$;A(G7T?U6-puv>2|sD%*1AEEhi~dW^-Oy
zm+28(J3m;_Z8lx2hRx95
z{&8pA*7tB_{HSI)Z3D8#j$bdKr9wEr)hzt+QP5%Df|-Z#7fLYqYl!I)V<0&>?``Kt=-rvytcNs&{PA7>XkHiIoTH;
zPrDE_FILx5r&M68AB@nm$;j|ggWv$^3b~h~l2$fg9Q2_>ECUs5McVQf(mCrOj9B(8(N6_f*s9RuCuZXLJX=*E}q
zqVox>Bu&B)4Uhl(h7esYnzRGaq;@YP*`kv8!T}8-G~Luk2f|W$D06qf5Er-93$AFm
z_>X!4^8C|bF8=VLPJo1V2tj~Gg4R8KCIsI=P*zQVeVi_yV^9L!ACexa;f;k^l>I_1
zk=5wvCvg+iX+}y8uDgxUH{9@p)5Tt~7~&mI*OJGR#!}Op
z9)*JqmB^p4oTNMOfAc85Pd%x%l+;0#CGr;)#>uU5&xN3=({xZCk{QBJ!;sKlmg7zA{`?r2okK$@%j#D+28nHy
zFp5{6z1^Sl_Bi@}w=E3s4YZ)whB-FXc7%(cP3%JVFHpBfdS4^J>kcYHUdZZSG7BnP
zk0Gp{hstiXY*Pt=q_Nb>9S+rvuZV`fz$nxpwT`Wkf9jq1oyhl2V%w>~uy(rBdp@ma
zTSM&n%rIA!fYhco5#a2E;=){xbA%sKv`68_e;1u@gm<084~#rkbA8wHnKZg>vShlf
zD1z0zyeiGeR)-eGB8ijpo@;F3Sd=H8%5>3>_XxqTrMoXT7ZAucmrL3>3kb@0*#{QSC!#;j!f}5
zc*8VWZx03vlV8x{;Ub?41$bXp(-ilBUCOyEwJ-8Yinb{;E6#(;Dg2L1r4z|Y
zwwE8`-IWtrL&g|CADY4xSAcKhXOu3QsU!W6Ycu&@E@BlkTas6nfDY}2z9lTRmz7-!
z*fDy_b?JZbH2a!;-siyC18+j6F~t|QVW*ENocPi5l+C*)^N-1sx9plMTWjIjyK){r
zXla){n-7MwY!@2((WtN^zsqwuxbB`+j4=zmZ&Uki~
zSH{N_HGS7L`sqE?++4vviwO$?8UTW5Pa5w-q-z{>AF@aZsr(S)&R6;!SMJ3S!)4L4}yN&DM3>25BTW(EJXfqs>~qND!?X?Z`l
literal 0
HcmV?d00001
diff --git a/script.js b/script.js
deleted file mode 100644
index df50fc3..0000000
--- a/script.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const text = document.querySelector('textarea');
-text.value = localStorage.getItem('key');
-text.oninput = () => {
- localStorage.setItem('key', text.value);
-}
-let clean = () => {
- localStorage.clear();
- location.reload();
-}
-let c;
-let darkMode = () => {
- document.body.style.backgroundColor = 'black';
- document.querySelector('meta[name="theme-color"]').setAttribute("content", 'black');
- text.style.color = 'white';
- localStorage.setItem('theme','black');
- c = true;
-}
-if (localStorage.getItem('theme') == 'black') {
- darkMode();
-}
-
-let theme = () => {
- if (c == null) {
- darkMode();
- }
- else {
- document.body.style.backgroundColor = 'white';
- document.querySelector('meta[name="theme-color"]').setAttribute("content", 'white');
- text.style.color = 'black';
- localStorage.setItem('theme','white');
- c = null;
- }
-}
-let download = () => {
- const textToBLOB = new Blob([text.value], { type: 'text/plain' });
- let newLink = document.createElement("a");
- newLink.download = 'Note.txt';
-
- if (window.webkitURL != null) {
- newLink.href = window.webkitURL.createObjectURL(textToBLOB);
- }
- else {
- newLink.href = window.URL.createObjectURL(textToBLOB);
- newLink.style.display = "none";
- document.body.appendChild(newLink);
- }
- newLink.click();
-}
-async function loadFile(file) {
- text.value = await file.text();
-}
diff --git a/service-worker.js b/service-worker.js
deleted file mode 100644
index 95c88eb..0000000
--- a/service-worker.js
+++ /dev/null
@@ -1,33 +0,0 @@
-//Progressive Web App
-const staticLoader = "Note"
-const assets = [
- "maskable_icon_x192.png",
- "maskable_icon_x512.png",
- "index.html",
- "script.js",
- "style.css"
-]
-
-self.addEventListener("install", installEvent => {
- installEvent.waitUntil(
- caches.open(staticLoader).then(cache => {
- cache.addAll(assets)
- })
- )
-})
-self.addEventListener("fetch", fetchEvent => {
- fetchEvent.respondWith(
- caches.match(fetchEvent.request).then(res => {
- return res || fetch(fetchEvent.request)
- })
- )
-})
-
-if ("serviceWorker" in navigator) {
- window.addEventListener("load", function() {
- navigator.serviceWorker
- .register("service-worker.js")
- .then(res => console.log("service worker registered"))
- .catch(err => console.log("service worker not registered", err))
- })
-}
\ No newline at end of file
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..6f970f9
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,26 @@
+@import "tailwindcss/base";
+@import "tailwindcss/components";
+@import "tailwindcss/utilities";
+
+html,
+body {
+ height: 100dvh;
+ margin: 0;
+ padding: 0;
+}
+
+
+textarea {
+ vertical-align: top;
+ resize: none;
+ height: 93dvh;
+ width: calc(100% - 8dvh);
+ background: none;
+ outline: none;
+ border: 1px solid red;
+}
+
+div {
+ bottom: 5dvmin;
+ height: 3rem;
+}
\ No newline at end of file
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..1a5fb9a
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,26 @@
+const textarea = document.querySelector('textarea');
+
+textarea.value = localStorage.getItem('key') || '';
+textarea.addEventListener('input', () => {
+ localStorage.setItem('key', textarea.value);
+});
+
+document.getElementById('clear')?.addEventListener('click', () => {
+ localStorage.removeItem('key');
+ textarea.textContent = '';
+});
+
+document.getElementById('download')?.addEventListener('click', () => {
+ const textToBLOB = new Blob([textarea.value], { type: 'text/plain' });
+ const link = document.createElement('a');
+ link.download = 'Note.txt';
+ link.href = URL.createObjectURL(textToBLOB);
+ link.click();
+});
+
+const upload = document.getElementById('upload');
+
+upload.addEventListener('change', async () => {
+ textarea.value = await (upload.files)[0].text();
+ localStorage.setItem('key', textarea.value);
+})
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/style.css b/style.css
deleted file mode 100644
index 192387f..0000000
--- a/style.css
+++ /dev/null
@@ -1,15 +0,0 @@
-html,
-body {
- margin: 0;
- padding: 0;
- height: 100%;
-}
-
-textarea {
- height:100%;
- width: 100%;
- border:none;
- resize: none;
- outline: none;
- background-color: transparent;
-}
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..edbcae5
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,12 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ "./index.html",
+ "./src/**/*.{js,ts}"
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
+
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..75abdef
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..d643d9a
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,34 @@
+import { defineConfig } from 'vite';
+import { VitePWA } from 'vite-plugin-pwa';
+
+const manifest = {
+ "short_name": "Note",
+ "icons": [
+ {
+ "src": "192.png",
+ "type": "image/png",
+ "sizes": "192x192",
+ "purpose": "any maskable"
+ },
+ {
+ "src": "512.png",
+ "type": "image/png",
+ "sizes": "512x512",
+ "purpose": "any maskable"
+ }
+ ],
+ "start_url": "/",
+ "display": "standalone",
+ "background_color": "#eed076"
+};
+
+export default defineConfig(({ command }) => ({
+ plugins: [
+ VitePWA({
+ manifest: manifest,
+ registerType: 'autoUpdate',
+ disable: command !== 'build'
+ })
+ ],
+ base: '/Note/'
+}));