From bec0e606e60d5c785cfd0cd5969d849979256507 Mon Sep 17 00:00:00 2001 From: bonamin Date: Tue, 17 Feb 2026 18:11:04 +0200 Subject: [PATCH] Fixes to Add Melody Page, minor UI Tweaks --- backend/melodies/models.py | 1 - backend/melodies/router.py | 4 +- bellsystemsblack-300x138_darkTheme.png | Bin 0 -> 19052 bytes frontend/public/logo-dark.png | Bin 0 -> 19052 bytes frontend/public/logo-light.png | Bin 0 -> 14278 bytes frontend/src/App.jsx | 10 +- frontend/src/auth/LoginPage.jsx | 52 +- frontend/src/components/ConfirmDialog.jsx | 29 +- frontend/src/components/SearchBar.jsx | 11 +- frontend/src/devices/DeviceDetail.jsx | 141 ++++- frontend/src/devices/DeviceForm.jsx | 204 ++++--- frontend/src/devices/DeviceList.jsx | 102 +++- frontend/src/index.css | 103 ++++ frontend/src/layout/Header.jsx | 27 +- frontend/src/layout/MainLayout.jsx | 2 +- frontend/src/layout/Sidebar.jsx | 23 +- frontend/src/melodies/MelodyDetail.jsx | 96 +-- frontend/src/melodies/MelodyForm.jsx | 641 +++++---------------- frontend/src/melodies/MelodyList.jsx | 119 ++-- frontend/src/melodies/MelodySettings.jsx | 160 ++--- frontend/src/melodies/TranslationModal.jsx | 37 +- 21 files changed, 863 insertions(+), 899 deletions(-) create mode 100644 bellsystemsblack-300x138_darkTheme.png create mode 100644 frontend/public/logo-dark.png create mode 100644 frontend/public/logo-light.png diff --git a/backend/melodies/models.py b/backend/melodies/models.py index 6000c37..5b87936 100644 --- a/backend/melodies/models.py +++ b/backend/melodies/models.py @@ -28,7 +28,6 @@ class MelodyInfo(BaseModel): color: str = "" isTrueRing: bool = False previewURL: str = "" - notes: List[int] = [] class MelodyAttributes(BaseModel): diff --git a/backend/melodies/router.py b/backend/melodies/router.py index 63adc76..41d3c86 100644 --- a/backend/melodies/router.py +++ b/backend/melodies/router.py @@ -82,7 +82,7 @@ async def upload_file( url = service.upload_file(melody_id, contents, file.filename, content_type) - # Update the melody document with the new URL if it's a preview + # Update the melody document with the file URL if file_type == "preview": service.update_melody(melody_id, MelodyUpdate( information=MelodyInfo( @@ -90,6 +90,8 @@ async def upload_file( previewURL=url, ) )) + elif file_type == "binary": + service.update_melody(melody_id, MelodyUpdate(url=url)) return {"url": url, "file_type": file_type} diff --git a/bellsystemsblack-300x138_darkTheme.png b/bellsystemsblack-300x138_darkTheme.png new file mode 100644 index 0000000000000000000000000000000000000000..3ffde5dda3f3d1315c43865d7c786a78e32f6807 GIT binary patch literal 19052 zcmW(+Wn5Hm6D6fVX{1X)x*G%p1O%mf>5`W2kZ$QlKthS7Lw1*?kxprr?(XKj|Mvs1 zAC}*}&pZ=n&YX$!+Q-RBxDZYa}4GS;P=ZVX9zLuCGd&(tZ)GvBW@qtTb8i@FFvP?396yp1 z^x|jm7_GTbY(*8Xx<{wSX#8SLQ!d%t+kUFOn)f@LENdIptuWk>(AFrZAFZG9otgK8 z?i(Nb&KRuGBEOximxEiIve&TPL)h+{r@aZR^$45l+tA3BOu6Zxmgm1W_4 zEwjwamlkPlNw;F%z_y*T*H$WMh=19eHMQ!tYoJr@HY}H$WJj)sD!8H@J(-yjkzzqK zJ!!9Rg9^F&aY<^*nZ#C(&4Yh{{2MNf&Q$|dop3VsyK1$1U3)6?nN)NX5+mYtPoi`V zr`if)NI(_*IDE$5XMJ_89n$z&@BXE9uZ;c=*^v{nZ1-b@l{~bqknEqYPY{mMI1<7_ z>XLJ#cdu6(qi5nee}5cJK*~UxK?0+CqKbzc!V~^^W$B^!lvR7DzXRV2upA$vX zA~)V<{jFb0{lz4M6V80GzL>2<56^1)Q4=UccPwCw|A4a79@;J@q@HKu+l7RRmfMV7 z!53hQ^Ut%Zgishsc;SFJjxNHHKoG%bh1dVri`(%t^t^%9_213UO4R;>oPxQa(u}jF zrkaa&BgyydEVSuXz8x>3TzRK!s3n<5ji%d^6gH z{65s!-5A*{;=G-VjEGY}_X{yWGvVH4FeS(A`d%rM8tEHuoJ#PCFlgxYNkp(}DE1oT z5B(LJfQl$cjT&C|XU}gWspaxh*p%61sg#VFOYorg4{u$Zi$VAEv+pmbVgDA8s4c2N zlrOkQ7A;S4Pfl8g+SS4F*v66MV$Q@mR=!t+Cplq3$Zo$%sFNd#j#zKA80tV$f=r{L zqj8MYKM>gL0%sp7ENO8S)$%`jZ()KEP1ASHtvQn5q8jZf;FiUTx z%-A+0cG{h^k`at?r@{M5{~LGil6=YRss&fJD1pyBw*RcPA8?*2;5;R;e+Z;O2Fg3_ zU;?D$?rJ)r#;>uJGRs}E;@=T;7c|`^P0erZO(@mO4zu&+Ylg41lb`Zdm#|kcR6zdb z&Z=5;MHgGkFO zaiXdgna=NIWHH6!K=1cA*eg}N!pLNp1Y}E2?{5v;d33??D93`3{FQ>`sa)sG+&MaI z_Sl?1@Ef5HRk%}e;mw)#vO9c}oR%1aLX`U%^jnuiZO>zUmu#oGGloacXG+gJ`0ewf z|2738)aSK#L*82oQxAbq{s5y17M>YK&umP3~?0b)qdI$3!&Tg|kwDj6a@f`_`aA4@CFA7&#L0WP$(&4M7Jmtvld=Ew25(;?S0;z!6fhy>oKJ`@e718<0%cC0a;bMR^u9p^uC`M$o2d`kK2-IHje+ zB*GBy#+-e>&$LDzY>Wlbci~@S82Zd|tGxfS2FQ~+jtDjK<^*gKnfzP0DC=+k*&h$> zBtBK?^RsW?9Q})pY!3N-p>9T!uwR6sA?42{y)%PCP^)=z9`ActEA!dTCbMFuT6ht~ zNL~+}Z%SFI;cgj2UJ&0O)4kqhnkV;8ZGL1%tQni#P|6M6g=}KFDbieSG*aW#uO$<) zzy+po)p2d4m=oNNJ`7c1pR6Ys8U0x8@0PSz(w6*hWF~tz6L+? zWJV)@{(vwEN@_&feqX)77f7BIy@$@Wbwe?x@9-I}Znc3ZYQy`ARULN0DK7Am#Qk@0 zW3N;t5T5k1JhOQpgeis0gxOW$Rt4cdDD#6~W~7~cRMz`MQ=>T{^n*ZsA)H@K zVE@k1A-*=FTT0s)yQ(XGS<98n zA7}fk$g7wX$Z@V0bQPp)roeJ6cO+y_^Q8*D|L58P6+jX7K3~NJ_Z{Ud)j|mZA4_adK>ABaz;S{vc%{|uGnH?kd> zLE9dP-#NPyh6_tkfBN} zPm$|Sq0m;19i8<-%R>PNdqD>~AI>M@CkKZ2-nt?7@Uq}__~_PNqcpDs1jK@w#$*De z%9E4FK-j~I2(a1D^^I-rrPgBy+TWxs+hI@yab9NbWsyz0zP=l)E4}aM=Ljx9J0g3S zd+2!LbaKL|#ZcZCeT?6@-t@Mwu9aP82_b3`dHK^AxW^$JduE$r(84cMtYz#2W}LyO zdU(&8!zQVxdVu436S=dDQE;pNiAFI<9LXOelQyUP>ao8i8E?TtR7~DX=`z!~AR>$m z$xHc9`36-yw6u8sOM<2{9dnaOqJ*IFr%Lcv!(B&;h*Qh{?9fxBSamDtRTcC?hA3|; ztB;=cigQ$4kv!t!pzmtaev6*^u-V1!vWu}-SNRY6eSFgJR%r_1hzXR=&b5_X-Mw#t zv4yf8anc9m^80{mx64{8YWjfcfd1yPnuvjm1N;^K+4~~qWJ9?*m5g3`E2zb|)fO2W z@jGrv(M5@8=9e4T`9aDL!TnR+_y5GxXxwu*qcRSreRlO64r@qe=hOUEB@Uj)KXm{A zLx`fCtOao;p47BK1XblvZT0WIhB`yc##G@@xD9YMs*i6AmfF9%r%4}udemQHuN;^< z5Q^Ls5;ny4ow>Ta8H-NF#~R~Pj9|bGP~CFAX0It1Z)!_l^I->d{)g09sfeh_|Gw}!Grjj z3{xS7MzJoG5Vx007x;DPgG>DxXGye#d$)9>4!2{}gwAejgTtHs`){zdboT6rQ6u0p zNM1x;VZQGW8~ZO?4R++9nOsd7bAp0x)UE_PG<;virCIR5#7LuU8>TYd)8FTmj^ljN zU(GHVKzx%rZ@7vN@L?j*wF}>NdD>ToXt-DxBpu8>swp*xDE>*~J}#>&=0i~DwbZbL zr}gM8goC}Zf~I}}y$|(# zXbYa34^2QeE?nifT@|XXWdOdGEWD7xi6BX+v&& z1DeQ>dRsCiUAQPy(4(75Y~l>rvEb8}(@OT@`VizJyYERSyAzh(Nkmvta}gk)U+pku ze{FgEp4IKQaLn7$bH^>K%LeV5$qA>qjL^u~<{Glw;FadP6i{NdFzj`vLG_dQX#N0M zm%+d9!f`&uE6$Xc^QcQs1WN?BV)0!AZP&Ig7oWLHQ$#rUzg!@rV|-C6(otL3I%mi| z&BbLpoC3LCS<8esuFM4_Vtt`?edTRdh1Nq@_I-(T^oDRH**_BEUQS^m zVD%c?wr5b#Al>=1?c?`PSD~wF9h1x4r07hvG{;im!yt zA`Vt;N1q#cNGv|cxo2~#bDd`Qn`DA~Rt0ta;WEFcWMHHczmC=a9@1m=4*LBxM`7yb z3?JO)C-7gKPy~8R#Op(|C1X#tJ4(l8Oa2BU*v7FNy~&;7E&q8kjKClJMi(wkozrqs z5d2Kmwa>I{wOg^m2=Dx|Ta^y(k(c!nN}xLOud9soAA~rK+rtX0nyvn8-zruRtf}9W z^Vqw$w>P}fQmwSOZin(?FwX){V`AvD{;Ftwc0#^LYgUV-7s-~6rpPmSyBB-Im1_d2 zjN+z{!g(^Fed~~Oiot{j&UPkFz0kLLwh}1pi$Cu5{pphlwBC}a66g}s<+M*iYhnl2 z$igb~i*KQx=YlY-`V9OkRT8|i3V%PD3+c;L=dA++ZA}}NCI94_Dg^u|1XZneej(S@7^%kEXdE)0#9*m}8;8M*`C;LQxi>d( zqs-j{Ov%j!hr$LdE2ZmPXKTBv@|wEvVP~W_>nB```y8}3qzMCZ-EZ>wkj=?u7Z=_N z^PYn$gh8-z-Gkw1t9ZmraO6L$w15QnsJG!gMbSM;hWOhU#~fy6=g)Y7dE;G=pLNV= z*`=xvqAEx>8KrDUB!~=`7`Awargq+6W_g~|=9P0Ls2YhR-nKhP2kWyMxEkJ;0%gPF z=!7nTWWrt;QN+E=gzz>Qy=@{BF+dKaHo~g6oU0m79*|OGXNBg2*i#Mqg%~#Fd&Y3M z-*OXzj(9*C(U0p@>_rm#pGqnj^%+)QY-6brd9vRKu4n?lOt<$9*Fj3q=NXj)J4M)7 zirgIW5GT8psEawvQe}y-Zd)GrN)}6}oe(d|Zfwo;t&hXMl z>i||oP#o<5wVFjdOW*Ejj;I?nAGlt_v%ZP*L*<`FDZUm24n0dvQ-8CqlxibP)~#bP8F0WnI}PbBt1*T|s*^2y*P08{wXHa8#7~x!5`4bITbxWZp#P z;{d9=DXpt#TNw1ha_(O9kQEmn@V^Bvu(^USBl(CAQT{2txu%=+fMCvnlg*n%Y@Byf z#36<%(nRG@`U^M9b-L6qulzV-8xpNQpbNFf&5%!AhLQHTGQ8akS=poczPZX$+}>s^ z6BTe;xjU6^laXlx6LDQ>NNb<+ANbiO+(rD%%9&pQeYDf|)&5iM>9Wu~WllMlDGmCU zhBWSmHM1*<<{p^b&+N-Tv-hp%E-8Ah+c*RfwasQu0#Bn6qeIl9 z{;o6AXzQ7$o|}V_55p3z3W@4hSoy*dkT zv!GaEvEcvle^=5_$ig4}&R^1RGmHF{$q7=-q{aPcPC=GYS(O!BjYVoL>|Lp8{VZtz;LI1Bb&h+}PH|_ginE1>Q?bcj#YB5A)(?)q z&>3xBn7GOY*9$dw*Jkw?L#fNVC%t0LG;VTtf5~QA<8Z9@rqh7sW0^5C^;GnIp(mY} z9Cy%Pj8V)x?4y;=ALRbog}q3djzBJgE^=Er?E@Ok~dwsjaVmrO8@P`*QyFIdM0|d{49sI&d z5WE|zigz`C!z{MvM}&_ZRZJq$XG-nJ*i~~+(tCY42i-Jvs?Ht9n+7CIKkZL6!yFqg zbhbULZF*iGNg~F$RQ_|5w&5#orTJv`(2M28&ghXk?XclIE4wFyv)1X^7D`aQ&6UbS zKKoeU`OobPO!owJw5=_&qEV~p$*-a`E{p6A;s+b@#=9QF-i(BXR0-$vZ|r{R-e!Au z^)?IdH7WuLuEH@*f+N>CU{MV=j;%7Z+qsEMnPAgQF;92Nj4<#2M^VJL_Y1;tY34}s z=S?cu_K#9_?Zqv@_!v7u)`tg_=&|t!ojE2JrD8Ig@&`lrS*z)^*L#nvPC4!=`r=Elo~23{1;6JZ*32_%?Kq8~wbH!ZZns}ThExvo`?lM4sH$#!aM9S?_K4<#CD83 zFx;*qJToVWYs5po{x5Z|N{@5&t9yIUfFsZU`CBk6?tju3sb5GUi{-6#8>|=LA<^brmuW{$*(Ji{`eR_OBQIy)&iK z?jQgX=J$ebEEt2LeGmB%KTgucmV)rs{=Nxy`8nYRKm5^$Ir%3x>|VT zg-e$tV4zv^Jx;}pf3YEht{y;GR>1{*=0m*SZwYlDJPcWW@hw14Ks8wu6uhUq;gkg{ z9uPU8)_uc!KS6@Fy2&9R)3e=OHiiSXB$crbSXJRlMFt`BXf^pD^;-I8HsA4PUPWvD<2Z5|c6d?Jl zC}hY$y->{XhTzW@n{X_4KI_mH>h=w9S@hgjUE zuTngr*K`_mo!w8U!CJurLb*(Wj_*Kiy{?F}LuAPeUFPtTfXwe}SbINDAA!*fcuy}M zNUymCS-GgNc<=UMZd62ycaL{S`ZxSEv{98I1xi)Eb-TCNfbWY0rs{h?1yNY6DJsKsKEDpye3xH`2xOwZLBCkndl#{TPgJ zUr(7B44qWaKN_D*UA@uad#d%Zq8=l?S2A1Wma(4(&qluYz6NTr&|c$n=*@J(hGBkl zmvwlaut(hqgZpRhcf6Fj9tP1KOcjp~;yh$BRrRO(DPfjt3F_MVy&8RgNhkE2f{ zCu4wv^odIYl&q9?R(=3}?aYmDM;q>R=afpA3g4*7FMJD)=|K=mLN%a&%mz_;uRz4L1G#%g7_L-lTyHU4zrR$BT!U`LnVzjU~ zz16&>jcN&F{`9{ZY*O|yJQI^&MqFn)b2w}1t!GlFs>1T%;<&=t2#u_K=)#Tqih%X$ zY{#P`mV`7vK=2pwN!|;r$#hWi9H)@8I53B@y$ICN@7j9Zf(J?}IAJKm*k{wpy6YXR z9KF=m+eNBxd~JOZecL z+r8Y{{e_EVJ8CAK{(A;0vyF50=VdFOJSclf!jCe4)QZn~=G%nwP7xfQ!PSCBj29dy zKHZ6LHS4)YXmcI>>;?cDi(*B8Wo}@q5Fvc`<0R)hmrmyCUmOL2@p=v7m|rhzNC@gE zdft7gcx$vnL;%5@!a7yhk6;RJjQg2zAmnX)$NVS6v|c>TnF2(UT_d4J`2}8b_*3_@ z(OP&uGVZwr5!7*|*(u6CY;AiYxJ2GZcg2J4-RP~dxvlPOo*8a^tLQ9$Jrkc>9DS$k z;C-;P!o$7sWIfq2Hiou)*zLFbPdI_J7oO{h3xVV!)K%q1qNxow=JK3fZW1vftLSBQ z$`2qP*)rZf-E2uo-K1h8ODh+cvv1u+Dc*8x$YyL?iZdHGbQzn^#%fFaSH{CqQ7+6Z zQB2g^yQ^dKS(p2`4wC=%nBHUo7fZ;(Go{VC&O`;qz>LNJQKWVqKg$_g$~a3(VA&42 zE~_UaVff(r?HcLOeG;r}OENP3;^~WPyaQF`Mp?gRwfBARH=?LkwZTQ_)JO$RsUGvH zPVq9*bRXlgv#KFOkY|_OI$82@MJbtBG|7u2#s<_ZPue(lrySx??dRR7pAz+ z3yPu>W)(Wp^2+NRtKoppsypE}Zp8IRI0c&9mQQ>=8Ax@Y->S=^aHGeQvEnBku}R)57vXqOTrV_t);@iZm~ZuNQ=agDE#<-RDyQsxe-ET?oJ|A_zf4F>_(tS1S2I z=To9iR{ZuTNdg*2FbG@Gg$QpY1Cw4{(ySV^U{*_XZtkgkAu3m+_knnnZ__xv8FU-* zLZ8nyk$UkN`$Xi#+sc=8A&1$q!$HQufbY>!jZrN`?do$nbAPIBrha!2{Y5P4G3o2X z7$(v;)U_lp*}wuDyLrt>4@*EmpzOz;aiMOE!UXO!*p{???4w$J9qU(wIicu&Oyok; z12fsz1m2DMe6;j>`^AUTD!5F;*4+b-)A0a9bOa0v#+~+y)WLYj!WL3!kg4*SCsJ<| z@2_*r3XktJ@MYG%nZO`b-b)a+-4*D9Kcn*;@9o176I#lh0QHNcE1Yxw6q~o2k%4Fr zT5E%F@t3qH$2vF|wwOWvF=ZlgVLJk&0j|)KF^b04uJ!D$xvsb%dVKv9L}w8D**`eI z#uGTBIKL68khW`4y4tGVu^oMvO$*4c1IQgmDOczN~=Hm3{VCOifG)` z8gg;KPd8K*8ChIsSUAV$>o12n!Fmes_LVGv6Fp8$0K>rkF$yA7p4hIA4fD)G z$T<$qsK#jiV^^-B)0fQvCtn|xJ*)!7rH!BX%Jc*w8EgxiiJy;A@%8;HtRUv#9iC?X zw6ei)a!~ziPW)YlB~+VY_+RJOe{#(d4=#qC`9!HGlwD~bTUnhCqRUK0^XFJ@iv3X- z16XoW(_)M=PN+}>no$=V6T=Rc+Wb{~Vv|8N(BGW{6L+u76sM^xHYst^F?hu8sW|y| zQ5Fh1Io{ouy#rvaV-&&Q!y6@E)p@=_UGZ83>u!8gq6G*k-+9VD=+kG*QBNnIw83#P zM9HS(mPb6zdA!Qj2zz*%T%dwA=|zVvSMRtXjFhJq<;>;nPP7dK$=^#dHlM+lL_=E3 z*30gA>IK0u&w(jP{&{BRv`;`9I2r@;<^FRMYWHvQobr4C0|nt4p}#f|MVvrlBQ$Z9 zSiNqRl3;*S<*tA`_AUyvX;sqtr zit5hq8DP`~zpcL#Av=?zpP-D=w7j*U*eY~F*BkPF@h41@HuoKBd)PNGTySpA($4XQ z70kZ5h6-+s^^rm7*VV^tNbsowsm_~$H|TkP>xl7`Hl7BDX;0X*An3bD!;gzOMWy&gybYGJ3Pz*LxdPV6Gx6PI#`YSn`Yv(j5bJaUD{s+TcUht zbp^}4Uet2Ztwqr_XHZsZQ%6hGy`gA=pS~+ec+=)tJT}X)a1r&RFH~&Dn=(1x! zn;WgCtPy5~Z z9iNRH#M-^rLcQaUF9Xi?EYAl@cZU^xoewvhPfxE`l(NYdMa9$)zm&}Yf)dviq?3!U zw*dE{oBq~tb-&*b2^MiCz<1%0a>Mk_INk^ z^q~cJ zm+`U~Zsrik5Z<1ZnCX`k*wfV5dSi?52!SN$v^(yZOt^O%K}ZobqY5S;dJ!QvBKV|3 z3UXFoJcX^>$I_Es(*iutM1L3SojCara<7d<(%Z)yHCq!vHl4u~`GJ-Xw_N_ZDyHW= zH^KEOZIk{M#Qsl`%fyISj}?loBq^+i%6-0T6`0d_q%W^^ROyRsv$jo}&!DIf7tmsjBtQa9##pg*x|%zm%rUYh-SOmvIWJOOi=>%KM(Ki(McF&%7i zL66vR=l%#iBlp1A;xCtX*}5}}90IfFhGf#S=9{}|$&b(yww>Q!WC#fUnB^NG8NCW!DOh9n4#JC5N7%UJU}D;p^nuEiJ-jCP;xU1suYLD( z1?-t6TkfmHDjZ|yiC(1Ma9eE1n_B1pC`l5Is)dl(tpy4yk#Cv4CAq$9TV!JQPPb78T~TO z%1IgT#vSmsqB(Kg=o{6hXp>)5?;M_~TjnuHqRi;i@0!Hcd7$r_EMDLC)NG3az{(s@ z>XA;uR(*%KajNB454xs0`v<4BmhpXJ;pcF<4?%YKWxKxJfeekYzHExkw}1Nl^BQN& zR^m?CWyz8VNp_TS2O68eC{UG~PkNT6;|rt^6}*y(dtKDt}lX`@UBw&|H^!7M+$t$M=Gt++a@-BLn&w-mb%~~n;ZL$ z;Rh4&N9wz|dDVMA_6b8P?L0P;t`t6mlD_OG6oS{wIlJ>~8G3bk?6z|jFbA~{i(=CJ zb2IwC0_7$s7Pu8k(8KZZS@TP~W&^8y%9uxb^T)h9Zl>Q|x`n1hJhPowx;nZS4I=fs zg^io;QVl;zqK*A07t+OiDjApWT?l?PgsHJ=h?nO1LWEHy)*Xc(<3Ttwt9`q-cgDqQ zyhH@mw|22JPXbX%#62fh<)hKphEt$zCw_W#Hrz0GYSvW|%9y$6oK{NY^tLw*x%13( z<=dR zMCX$FqkC7jTkS|Y%)C3+)uOTN`D{Ix>ZM>Y>~n&>McgyC`muejR0#XOaRbsQ(op!J zMH6LHaFgkAFocT~>(m(hdL$08`|{-p;nh9;)!cY>;f3(!C(c28H-b7e#ds$Sq03Zm zI({&aUSHlw2TRo-FuhxL6;U@R*^f=$!usBFjg)A4Uw0j6tQmQfe9;#661S#6#`hVh zB9ojg&aW0D8~D?BMKfG|!g{Y+Phb`pEGB!A2aoT;gA6aoR~m!=YgKv%E*$VgxMs7e zS3`dmG98vod52mFS^5c^H;)N66;yv54b1w1wDm`_rjRe79Oce&z0jcqL7@^fwrxB*dlXx@o)z4F3E7;NCFZtidKYw4cI8eLY|5pN?r%U84vw zo)oJjuG23qphbuXSM12a!SH*d{M%jSPIop}cCjmBz9Im4QQPnu`!Z3kQ;DrF2M)Dv zyih%=SHu>Kb^F7;y7uAC@;Az3ppFF~UI{3k^iDecNz=#TR&>{OLsTpjB8WoU5{D0* z9ZRBd90IWf9Dd}jw=t<Y1Va2y4p~yn?}EI)Td5r8-p4^C#H2K^RR(XLarF;g#hF(V1vc>s`q7%b zI3bNJv`mN4q+MwJk#rSuSWNH{zN&)%OKOUl3*Na`mZfw6p$A~Oex8WH$EOC&Gr;;Q zA8_wHcu?5RJ=^e;l`q}z+)_j~tZYV3A%-l5^}O_+f0@Emljv9xE|Z&g!QS+Z8wHBk z!roZjDT(Q=L)pz zCKyT%9=O<{n?65u(YURA;ut(%jzrokgIRTOPV-407S6|Q1V8Jc;?`W0--*tRG8j)2 zYhk^|u@A2~-P$jiRc(&jWw>=@&Nq!bq_%r!&(GbsHt`{L${UyNU$x4-S^8#Q$mmy5L6{ zuVUH@6QOYK?#H-vjs^V$GFWP4+-{utSHDk?#XaSSu&m7ppI7!!vO;_wIFjU#>1YvY zISI-403=B}Yn+ZjA&vhRUEYaUNydzMr-LEH8?aM?fbwr)FKj;GdzKpqDPqnIqs?}~e8 zgXfNa`2l-L9%B5%jO4>bmfO{292(=Y?z3?e5!j22gv(rMI261DkuUxD+O7i>$cQuw zHC5*u*$OXf`Ec~lS=ms`Q&m&vkG#1gq>;g{wmL9w1>$~roam=(cf?IHt)zh_^rSAi z3}P)k|6+qPG>E```)f?GzS-lVqck~6V5G}WKUW5?q6J;8Tei_a^@(=>TR0wdLHtbl zi~`zv6gv-C*yv;3hKdW?4gE=&x}(EdXA1jIk2E^zH_NM;mD`FezXy8(Ibow}Xh1>? zUv7~bYv0j*n*}JPD)?WNCYJDwl26FO^8ZsJanAfTf(kj6zu|*mOCXM- zr~j{QMSei3NpyJp+BCC;)kPFlV44r~7hCr$f?#H&(A#e*+*+jskFR#}%Zmp1gLdQ0 zG!faS=6bR%=~|9b-Gd@Nj7JF>xzS`!f4zq>-Z=@->@Z*xHUhn$mb9x zv%lYGTTm&x{YfYK3?BN%Pk8PAtFj3PO7!5F!_H)7gO-}QZxtboq}V|K&==g5V@b;v zH>PI7``YWD08*cuYvxDDei94^*M=)(9p1+;-}lW4CAf3DZTcLV*7%J`@lH zXi9fuMJjE;i{p-C0~h6s(W%tCH|Gu!e}4*0mbeV zc6}JzMewSPt9_P8Hzt8_zHa8o2%C7{%ZagwiOyXYl@XkYtKO74$GjYGowX!Hu*3oX zyS~^uYJ7arG!|CnfdOLfy5iljZn;3>3)3VZ*7ojtn6!)&G z09ys=tV0XdEofy4kmYI`V%rB=pJ{hEhCvZH-}**;_dfD|7j6HWyGp^WKZ?jsA;gR8;c zdXmtQvD9U!?lM5Ekp9mBSW3`E(wvnuPF>f?X$!&0EucmY8@Xd$V_l^X!VzWIC9bL2 zOR8y!WMK*zzKRSN+U$z`_^(Jb+gsUXR+xQ%yLkG$eOoAP1Y5M~vLH8WsDF8h$ep_9 z{)^2*psRB^K{Qy|X*=C_V7i2CaH@bvQyO|?l{8?Uqz^WFi47?xqCWA;f%T`QKPN@d z{qb(1PhAUNt;bqE;Z0mNH7h}E_t!0m$eI>&g8u9AbitCi2hA<|)*^njh>!s3U6(Fc zx7mkgX00-^;5MKkA1wID;c33Ce1SFh0fOyMaE{vLs?^oQjr_#y!dUaoh3}3fcw47D zT{?g0LwS%yb4H0*X&{eL_^>%F@qYQoq z3=9KAfSgshS>j*4%T|gbaLi%6SO?lw9P3`lZR@IaBMkX9kH#yv9MC0MFhA@?3(_vf z74iZCNE}VznuOtxFoP_q3&p4aGt3`bLhqtF22!=3{N|!adNsb95Kg8^WIK5eTip3O znwjl6ST6rOA=7JBXKL&yAKwr8F2b2DooMtb-I?|Lfof+t!^UaH+w=1cVUGGQTc)Px zmls)pa!UofSzQ`J+{ktI;XT_q6!~K7#JM{o?~4u@hZ42? zlA+^c;d1>gadqJOOYMghi6&$xTzNlj`ztL`Cl%(*A>PP3!`LAJKZh$M&;yT}XyZ(! zm|VjxsAqfP95i%&K+H5OaZY|f)lt+PtRSI^(9Buqe?_;OGdzH83RIi*P7~BXyz}Yt z&Ae?k8aWBN)b{QO%37yKT2{B)x{ErIsQa#v5p}uv>HTC;5xD(qH0?J=_nE-vq4&Yc({V_5o%MnKc3hi<3lJH<%L=R?4BeXXNygp&1nGOTRSjLR4ob#|NP83ryH zGA)LuO^-ptW57zGkU5m}hX}=6zv93^(Sl*%o38E^lsxK}r*UikQ8y7{iI#qTW>1-$L44{J?8glK z#pl7Q`yma$IS+1=(k)p2;6rgd#-3rNM`6jBMI(aCMofv&)*x6cPXvRibmY`Qc+SZy#8a?RBvNlvk6MkX%tj$T^C%dBK*i{I7%_U%2S5_ph>NXtqdp zJ?aPsDAb%3pym(5LZKuV(XB7JJ^0UZVzRjN(2o-SS)}*x&6RK9lP3q@-GEk9fl#p* zFKRmMQl=M3^v@V$-QoKXA?zxWsrO#SK=xA#SxwXjuMfcw@K`RN-DmkJzb~skU1w_s zs!BQ3Yns&zRBc!9JrT_CZ7lp_4nC1+&}gICR$14bPa(eT4Ok0o@jr;weuyyuji`;9}&i=d;z zo5A05cxHBCc1<5!X1Flybw*1N+KZ(9eiL$7VD=h_YneVOi3G%;~@tpf2%H zx%j61a~nvhj(FE83!qnj7FHidzjGW1z-^d+i%=C~aF{>C#@25)WZ$fOQS<63c)cuh zqGUcB>Wykm>(ZbOmShvL^u`t86q%&TpGXTAl;&?0k*J zb#`WJnf1rGnyg%r`C4tbuog<#+gs7s zacwTiO&s9PD9^d4|8umd?SO^yixiT->V#}9b{Au&`ik<&v)#FHXglhXaK>Ni^b_}( zBBhG>?;rMw(`Q#QEFM3vMTXL1Kfb)7|3^TgL;Ud4eSMFu+1uu1H24$ah~mM1H@RJ+~9cIY$mUFoVYQ1*N5UK_Jj zz7LIzKjxLnxu!{wwqnSdZNr!(+FmDaTN%dy)v&Uj4xBkzf<8M8e8_tGdwbX|aX6A0#?{hxi|&B>DWpC3C)sm88X|IO zT4%N(xzY(VRGwKM}W(LBMHXD?wII9pgmoB?H(&BR9vnmPtcO zmdY-(H_~~rfaK=0K%_so-ivow*YSMVVpgd;{supj5zW_=Ov(5z!`$yu0?0)Pm)#2yX>Vd~CF^+R`0>8< z_06~yh_l);F1^%V2!NBvX1Xi@{}aqvc-QW9lhFP5jOpVk;erD{M0E`(z9yk+NrDvD z1m%mJZjtY6XpecNKLSc@t|k8=_EI1ulVrbtxB8kH;`b} zzq3_|0?@=DaiYlEmeDH}tNfAIM;Sg$1`T#F9Y2(~1QYMhtBiNfBzLGv+@ywjoNRqH z!%`i{Svde^`m8HeNepyWEbNn!Qug-sKd%Wh#Lya5)N9pASkmPS^NH+>{XkAW%n~*d zc^D9l4C|za5rCjTd>ajxTC?(IMcXGGdB|;MeUKkJRFa8sK23(vh|Lh?XH;8^lg)>P zGsuL)mn)x+H9y&cqh_l{Dn5+MN%$l%Np#Cp!E=5QFeHLQeUfAbmi6u&6&o$-@l=px zuzx3w9ykwR7aM=96P=YV?C(eV7%PK(;SV3%?1cLYykdVQ`dYdd`5MwD?f6303(?IT2#MaVM0<3lk|SC*5MN9Z4DuncuNp| zOV?F%s2zpPNv^Om-E+l3yNKn$%)({ow}~Wy-i*kID!gHwb~b{b{?V(GiB%Iy2>Jp6 zwo?!QEB3!O%mH1GLlb+K4IH6N`ArsAyRjI};sefw5_&`Le>D>rxbd&l!^v_Yc5#%nl|MA%lv|kg4{dW&rPKve0P>%wl#T7v2VtuTYhY!JRZb{DlCBcnaQJ|JAem3 z3sOCQd*`-BHp_R7@x6#Y1wJ-+q_*tVHKg0g zDAX@nexI$S$jpOW_TKHI?q?fYL-~J8YjkX)dU|xc`dF)&E*Dxj{7JRyvhW4K0h{jv zcQxv@y{&?bvuk^SovD1l;lB8=nlV2!d9*S$dnaND^j?zQG#>;xHfHkYnxY$CypRV} zrkvC)+km|Iq5Ry_LFLLk!zs*HEDp@C{V;H^k(fj((_f9BBtG2$p@5x4~Li?ZI5H_Y(oB<{qa zojm`pQT7c9s*QT>O)JnNj*pF3A753z{J$>Y_HJ*~4{rkQ0ImfO8-7dDRkj~*9I5>z ztJgDxebe@X-U!~A$ahlk)S4(Pfcb-y^Sh=FeL`p+@iD`;*nrcZ$|B0U=~_2Dvgeg- zx0(O0qTz2uUVJdIN6Fv2*j`d4)x@(oj&!%ge|q`A4JX@sLfxTpq_zY2h|T4Qp=|e{ ztrpi|_6eT`oy~;ZY`ht1xCqkZ6mb9O#DyKjPX&ZTyHQu!#(nRx*(YUth?}jzbqWVFY`t@CZd73pU?2JhNsB3*gwn z{U>%!&E6$k7rG6&qqeObKpBdc@Y*)yjc%+#x9awru9MyT#9)Vt!_Fp)x)DC~#EbcHk|b&8=(= zqWVIk zUb{>1b;6M92EwA^O61r+4m^eUOWQvJ<~m&jou`F=h_jtJ#R6XWu!9xkeyMTf@E>A- z-}V*2>j{f|cSbY8<|ObG@K;FR$3EJn+)o2v!jA2%i(xQ-O|}$fi9a;?n06MK#kAUv zqtDy^T$0HDM`z~>%mbe*@>PTIyqCq;MD=9j$lo_Zi@4g1@r; z2w}s*e9Px*l6nh+V1*N}_#B-$t$C&INy~5M zY)GD3DyUHAki==kgNDxwo;+94>jMn1k#J6igv;P@peFdC@m;|7XfovuH!(AcwRiFQ zQr?omRK|05f4UrI-tb~okYcU*LG@es9Gw@!#KEA2}2G~egcZC&EnVKCzTn~O1 zXwqhTvr93L`N)0k(YMt!B$S&DIacQE-q^eZCoqqKzku|k`I*VHy$2u;Fu?hb4WqCk zc1<7JDeGFqhk&a|hOI$2rHU*3O^^8sf1NqDTL+eIL|$THeaH5nN_qk_KYuVBuscv# z0}QYM6&65cdUnWotI$=zl<{87Hibhj0ZK!v((;KI>JXjs>DSVjYs2ssZB7V1jkp_l z0(@$IW`Ak;H&9pu46s2JR*LMLzJ0)(ZC@?vB3i8UcVeQjl6A9jcxMUc=sjWlCqhrn z&rB|RlFdM24KToYps*q;)3cj^%P{*8uQyx`-V_}{`MN3~-{7vvx$O zDbmyPGn1=^C=3+V00W#y3M*pQ)S(fPO+A}5X!(= z!hYB<2_CZjU4^spPR!3tw!I(uKw%9qz!no*ga9Wh)icmwdSGv&1#yu&b*?(UE& z5c0KS6#lP1^3D>@csq{$BIxfB-=CkE>}n}V#6V#UFu-d-VWr6YT^HC~EcqhPKO?MD zy4bJ-d((0jQTiQN)^cjWJ8SzTp`(W9k^hI#3xs{JpKoWl*A4~>Yk&b>V+t!pWomZF zVvArK_I6A0M35`W2kZ$QlKthS7Lw1*?kxprr?(XKj|Mvs1 zAC}*}&pZ=n&YX$!+Q-RBxDZYa}4GS;P=ZVX9zLuCGd&(tZ)GvBW@qtTb8i@FFvP?396yp1 z^x|jm7_GTbY(*8Xx<{wSX#8SLQ!d%t+kUFOn)f@LENdIptuWk>(AFrZAFZG9otgK8 z?i(Nb&KRuGBEOximxEiIve&TPL)h+{r@aZR^$45l+tA3BOu6Zxmgm1W_4 zEwjwamlkPlNw;F%z_y*T*H$WMh=19eHMQ!tYoJr@HY}H$WJj)sD!8H@J(-yjkzzqK zJ!!9Rg9^F&aY<^*nZ#C(&4Yh{{2MNf&Q$|dop3VsyK1$1U3)6?nN)NX5+mYtPoi`V zr`if)NI(_*IDE$5XMJ_89n$z&@BXE9uZ;c=*^v{nZ1-b@l{~bqknEqYPY{mMI1<7_ z>XLJ#cdu6(qi5nee}5cJK*~UxK?0+CqKbzc!V~^^W$B^!lvR7DzXRV2upA$vX zA~)V<{jFb0{lz4M6V80GzL>2<56^1)Q4=UccPwCw|A4a79@;J@q@HKu+l7RRmfMV7 z!53hQ^Ut%Zgishsc;SFJjxNHHKoG%bh1dVri`(%t^t^%9_213UO4R;>oPxQa(u}jF zrkaa&BgyydEVSuXz8x>3TzRK!s3n<5ji%d^6gH z{65s!-5A*{;=G-VjEGY}_X{yWGvVH4FeS(A`d%rM8tEHuoJ#PCFlgxYNkp(}DE1oT z5B(LJfQl$cjT&C|XU}gWspaxh*p%61sg#VFOYorg4{u$Zi$VAEv+pmbVgDA8s4c2N zlrOkQ7A;S4Pfl8g+SS4F*v66MV$Q@mR=!t+Cplq3$Zo$%sFNd#j#zKA80tV$f=r{L zqj8MYKM>gL0%sp7ENO8S)$%`jZ()KEP1ASHtvQn5q8jZf;FiUTx z%-A+0cG{h^k`at?r@{M5{~LGil6=YRss&fJD1pyBw*RcPA8?*2;5;R;e+Z;O2Fg3_ zU;?D$?rJ)r#;>uJGRs}E;@=T;7c|`^P0erZO(@mO4zu&+Ylg41lb`Zdm#|kcR6zdb z&Z=5;MHgGkFO zaiXdgna=NIWHH6!K=1cA*eg}N!pLNp1Y}E2?{5v;d33??D93`3{FQ>`sa)sG+&MaI z_Sl?1@Ef5HRk%}e;mw)#vO9c}oR%1aLX`U%^jnuiZO>zUmu#oGGloacXG+gJ`0ewf z|2738)aSK#L*82oQxAbq{s5y17M>YK&umP3~?0b)qdI$3!&Tg|kwDj6a@f`_`aA4@CFA7&#L0WP$(&4M7Jmtvld=Ew25(;?S0;z!6fhy>oKJ`@e718<0%cC0a;bMR^u9p^uC`M$o2d`kK2-IHje+ zB*GBy#+-e>&$LDzY>Wlbci~@S82Zd|tGxfS2FQ~+jtDjK<^*gKnfzP0DC=+k*&h$> zBtBK?^RsW?9Q})pY!3N-p>9T!uwR6sA?42{y)%PCP^)=z9`ActEA!dTCbMFuT6ht~ zNL~+}Z%SFI;cgj2UJ&0O)4kqhnkV;8ZGL1%tQni#P|6M6g=}KFDbieSG*aW#uO$<) zzy+po)p2d4m=oNNJ`7c1pR6Ys8U0x8@0PSz(w6*hWF~tz6L+? zWJV)@{(vwEN@_&feqX)77f7BIy@$@Wbwe?x@9-I}Znc3ZYQy`ARULN0DK7Am#Qk@0 zW3N;t5T5k1JhOQpgeis0gxOW$Rt4cdDD#6~W~7~cRMz`MQ=>T{^n*ZsA)H@K zVE@k1A-*=FTT0s)yQ(XGS<98n zA7}fk$g7wX$Z@V0bQPp)roeJ6cO+y_^Q8*D|L58P6+jX7K3~NJ_Z{Ud)j|mZA4_adK>ABaz;S{vc%{|uGnH?kd> zLE9dP-#NPyh6_tkfBN} zPm$|Sq0m;19i8<-%R>PNdqD>~AI>M@CkKZ2-nt?7@Uq}__~_PNqcpDs1jK@w#$*De z%9E4FK-j~I2(a1D^^I-rrPgBy+TWxs+hI@yab9NbWsyz0zP=l)E4}aM=Ljx9J0g3S zd+2!LbaKL|#ZcZCeT?6@-t@Mwu9aP82_b3`dHK^AxW^$JduE$r(84cMtYz#2W}LyO zdU(&8!zQVxdVu436S=dDQE;pNiAFI<9LXOelQyUP>ao8i8E?TtR7~DX=`z!~AR>$m z$xHc9`36-yw6u8sOM<2{9dnaOqJ*IFr%Lcv!(B&;h*Qh{?9fxBSamDtRTcC?hA3|; ztB;=cigQ$4kv!t!pzmtaev6*^u-V1!vWu}-SNRY6eSFgJR%r_1hzXR=&b5_X-Mw#t zv4yf8anc9m^80{mx64{8YWjfcfd1yPnuvjm1N;^K+4~~qWJ9?*m5g3`E2zb|)fO2W z@jGrv(M5@8=9e4T`9aDL!TnR+_y5GxXxwu*qcRSreRlO64r@qe=hOUEB@Uj)KXm{A zLx`fCtOao;p47BK1XblvZT0WIhB`yc##G@@xD9YMs*i6AmfF9%r%4}udemQHuN;^< z5Q^Ls5;ny4ow>Ta8H-NF#~R~Pj9|bGP~CFAX0It1Z)!_l^I->d{)g09sfeh_|Gw}!Grjj z3{xS7MzJoG5Vx007x;DPgG>DxXGye#d$)9>4!2{}gwAejgTtHs`){zdboT6rQ6u0p zNM1x;VZQGW8~ZO?4R++9nOsd7bAp0x)UE_PG<;virCIR5#7LuU8>TYd)8FTmj^ljN zU(GHVKzx%rZ@7vN@L?j*wF}>NdD>ToXt-DxBpu8>swp*xDE>*~J}#>&=0i~DwbZbL zr}gM8goC}Zf~I}}y$|(# zXbYa34^2QeE?nifT@|XXWdOdGEWD7xi6BX+v&& z1DeQ>dRsCiUAQPy(4(75Y~l>rvEb8}(@OT@`VizJyYERSyAzh(Nkmvta}gk)U+pku ze{FgEp4IKQaLn7$bH^>K%LeV5$qA>qjL^u~<{Glw;FadP6i{NdFzj`vLG_dQX#N0M zm%+d9!f`&uE6$Xc^QcQs1WN?BV)0!AZP&Ig7oWLHQ$#rUzg!@rV|-C6(otL3I%mi| z&BbLpoC3LCS<8esuFM4_Vtt`?edTRdh1Nq@_I-(T^oDRH**_BEUQS^m zVD%c?wr5b#Al>=1?c?`PSD~wF9h1x4r07hvG{;im!yt zA`Vt;N1q#cNGv|cxo2~#bDd`Qn`DA~Rt0ta;WEFcWMHHczmC=a9@1m=4*LBxM`7yb z3?JO)C-7gKPy~8R#Op(|C1X#tJ4(l8Oa2BU*v7FNy~&;7E&q8kjKClJMi(wkozrqs z5d2Kmwa>I{wOg^m2=Dx|Ta^y(k(c!nN}xLOud9soAA~rK+rtX0nyvn8-zruRtf}9W z^Vqw$w>P}fQmwSOZin(?FwX){V`AvD{;Ftwc0#^LYgUV-7s-~6rpPmSyBB-Im1_d2 zjN+z{!g(^Fed~~Oiot{j&UPkFz0kLLwh}1pi$Cu5{pphlwBC}a66g}s<+M*iYhnl2 z$igb~i*KQx=YlY-`V9OkRT8|i3V%PD3+c;L=dA++ZA}}NCI94_Dg^u|1XZneej(S@7^%kEXdE)0#9*m}8;8M*`C;LQxi>d( zqs-j{Ov%j!hr$LdE2ZmPXKTBv@|wEvVP~W_>nB```y8}3qzMCZ-EZ>wkj=?u7Z=_N z^PYn$gh8-z-Gkw1t9ZmraO6L$w15QnsJG!gMbSM;hWOhU#~fy6=g)Y7dE;G=pLNV= z*`=xvqAEx>8KrDUB!~=`7`Awargq+6W_g~|=9P0Ls2YhR-nKhP2kWyMxEkJ;0%gPF z=!7nTWWrt;QN+E=gzz>Qy=@{BF+dKaHo~g6oU0m79*|OGXNBg2*i#Mqg%~#Fd&Y3M z-*OXzj(9*C(U0p@>_rm#pGqnj^%+)QY-6brd9vRKu4n?lOt<$9*Fj3q=NXj)J4M)7 zirgIW5GT8psEawvQe}y-Zd)GrN)}6}oe(d|Zfwo;t&hXMl z>i||oP#o<5wVFjdOW*Ejj;I?nAGlt_v%ZP*L*<`FDZUm24n0dvQ-8CqlxibP)~#bP8F0WnI}PbBt1*T|s*^2y*P08{wXHa8#7~x!5`4bITbxWZp#P z;{d9=DXpt#TNw1ha_(O9kQEmn@V^Bvu(^USBl(CAQT{2txu%=+fMCvnlg*n%Y@Byf z#36<%(nRG@`U^M9b-L6qulzV-8xpNQpbNFf&5%!AhLQHTGQ8akS=poczPZX$+}>s^ z6BTe;xjU6^laXlx6LDQ>NNb<+ANbiO+(rD%%9&pQeYDf|)&5iM>9Wu~WllMlDGmCU zhBWSmHM1*<<{p^b&+N-Tv-hp%E-8Ah+c*RfwasQu0#Bn6qeIl9 z{;o6AXzQ7$o|}V_55p3z3W@4hSoy*dkT zv!GaEvEcvle^=5_$ig4}&R^1RGmHF{$q7=-q{aPcPC=GYS(O!BjYVoL>|Lp8{VZtz;LI1Bb&h+}PH|_ginE1>Q?bcj#YB5A)(?)q z&>3xBn7GOY*9$dw*Jkw?L#fNVC%t0LG;VTtf5~QA<8Z9@rqh7sW0^5C^;GnIp(mY} z9Cy%Pj8V)x?4y;=ALRbog}q3djzBJgE^=Er?E@Ok~dwsjaVmrO8@P`*QyFIdM0|d{49sI&d z5WE|zigz`C!z{MvM}&_ZRZJq$XG-nJ*i~~+(tCY42i-Jvs?Ht9n+7CIKkZL6!yFqg zbhbULZF*iGNg~F$RQ_|5w&5#orTJv`(2M28&ghXk?XclIE4wFyv)1X^7D`aQ&6UbS zKKoeU`OobPO!owJw5=_&qEV~p$*-a`E{p6A;s+b@#=9QF-i(BXR0-$vZ|r{R-e!Au z^)?IdH7WuLuEH@*f+N>CU{MV=j;%7Z+qsEMnPAgQF;92Nj4<#2M^VJL_Y1;tY34}s z=S?cu_K#9_?Zqv@_!v7u)`tg_=&|t!ojE2JrD8Ig@&`lrS*z)^*L#nvPC4!=`r=Elo~23{1;6JZ*32_%?Kq8~wbH!ZZns}ThExvo`?lM4sH$#!aM9S?_K4<#CD83 zFx;*qJToVWYs5po{x5Z|N{@5&t9yIUfFsZU`CBk6?tju3sb5GUi{-6#8>|=LA<^brmuW{$*(Ji{`eR_OBQIy)&iK z?jQgX=J$ebEEt2LeGmB%KTgucmV)rs{=Nxy`8nYRKm5^$Ir%3x>|VT zg-e$tV4zv^Jx;}pf3YEht{y;GR>1{*=0m*SZwYlDJPcWW@hw14Ks8wu6uhUq;gkg{ z9uPU8)_uc!KS6@Fy2&9R)3e=OHiiSXB$crbSXJRlMFt`BXf^pD^;-I8HsA4PUPWvD<2Z5|c6d?Jl zC}hY$y->{XhTzW@n{X_4KI_mH>h=w9S@hgjUE zuTngr*K`_mo!w8U!CJurLb*(Wj_*Kiy{?F}LuAPeUFPtTfXwe}SbINDAA!*fcuy}M zNUymCS-GgNc<=UMZd62ycaL{S`ZxSEv{98I1xi)Eb-TCNfbWY0rs{h?1yNY6DJsKsKEDpye3xH`2xOwZLBCkndl#{TPgJ zUr(7B44qWaKN_D*UA@uad#d%Zq8=l?S2A1Wma(4(&qluYz6NTr&|c$n=*@J(hGBkl zmvwlaut(hqgZpRhcf6Fj9tP1KOcjp~;yh$BRrRO(DPfjt3F_MVy&8RgNhkE2f{ zCu4wv^odIYl&q9?R(=3}?aYmDM;q>R=afpA3g4*7FMJD)=|K=mLN%a&%mz_;uRz4L1G#%g7_L-lTyHU4zrR$BT!U`LnVzjU~ zz16&>jcN&F{`9{ZY*O|yJQI^&MqFn)b2w}1t!GlFs>1T%;<&=t2#u_K=)#Tqih%X$ zY{#P`mV`7vK=2pwN!|;r$#hWi9H)@8I53B@y$ICN@7j9Zf(J?}IAJKm*k{wpy6YXR z9KF=m+eNBxd~JOZecL z+r8Y{{e_EVJ8CAK{(A;0vyF50=VdFOJSclf!jCe4)QZn~=G%nwP7xfQ!PSCBj29dy zKHZ6LHS4)YXmcI>>;?cDi(*B8Wo}@q5Fvc`<0R)hmrmyCUmOL2@p=v7m|rhzNC@gE zdft7gcx$vnL;%5@!a7yhk6;RJjQg2zAmnX)$NVS6v|c>TnF2(UT_d4J`2}8b_*3_@ z(OP&uGVZwr5!7*|*(u6CY;AiYxJ2GZcg2J4-RP~dxvlPOo*8a^tLQ9$Jrkc>9DS$k z;C-;P!o$7sWIfq2Hiou)*zLFbPdI_J7oO{h3xVV!)K%q1qNxow=JK3fZW1vftLSBQ z$`2qP*)rZf-E2uo-K1h8ODh+cvv1u+Dc*8x$YyL?iZdHGbQzn^#%fFaSH{CqQ7+6Z zQB2g^yQ^dKS(p2`4wC=%nBHUo7fZ;(Go{VC&O`;qz>LNJQKWVqKg$_g$~a3(VA&42 zE~_UaVff(r?HcLOeG;r}OENP3;^~WPyaQF`Mp?gRwfBARH=?LkwZTQ_)JO$RsUGvH zPVq9*bRXlgv#KFOkY|_OI$82@MJbtBG|7u2#s<_ZPue(lrySx??dRR7pAz+ z3yPu>W)(Wp^2+NRtKoppsypE}Zp8IRI0c&9mQQ>=8Ax@Y->S=^aHGeQvEnBku}R)57vXqOTrV_t);@iZm~ZuNQ=agDE#<-RDyQsxe-ET?oJ|A_zf4F>_(tS1S2I z=To9iR{ZuTNdg*2FbG@Gg$QpY1Cw4{(ySV^U{*_XZtkgkAu3m+_knnnZ__xv8FU-* zLZ8nyk$UkN`$Xi#+sc=8A&1$q!$HQufbY>!jZrN`?do$nbAPIBrha!2{Y5P4G3o2X z7$(v;)U_lp*}wuDyLrt>4@*EmpzOz;aiMOE!UXO!*p{???4w$J9qU(wIicu&Oyok; z12fsz1m2DMe6;j>`^AUTD!5F;*4+b-)A0a9bOa0v#+~+y)WLYj!WL3!kg4*SCsJ<| z@2_*r3XktJ@MYG%nZO`b-b)a+-4*D9Kcn*;@9o176I#lh0QHNcE1Yxw6q~o2k%4Fr zT5E%F@t3qH$2vF|wwOWvF=ZlgVLJk&0j|)KF^b04uJ!D$xvsb%dVKv9L}w8D**`eI z#uGTBIKL68khW`4y4tGVu^oMvO$*4c1IQgmDOczN~=Hm3{VCOifG)` z8gg;KPd8K*8ChIsSUAV$>o12n!Fmes_LVGv6Fp8$0K>rkF$yA7p4hIA4fD)G z$T<$qsK#jiV^^-B)0fQvCtn|xJ*)!7rH!BX%Jc*w8EgxiiJy;A@%8;HtRUv#9iC?X zw6ei)a!~ziPW)YlB~+VY_+RJOe{#(d4=#qC`9!HGlwD~bTUnhCqRUK0^XFJ@iv3X- z16XoW(_)M=PN+}>no$=V6T=Rc+Wb{~Vv|8N(BGW{6L+u76sM^xHYst^F?hu8sW|y| zQ5Fh1Io{ouy#rvaV-&&Q!y6@E)p@=_UGZ83>u!8gq6G*k-+9VD=+kG*QBNnIw83#P zM9HS(mPb6zdA!Qj2zz*%T%dwA=|zVvSMRtXjFhJq<;>;nPP7dK$=^#dHlM+lL_=E3 z*30gA>IK0u&w(jP{&{BRv`;`9I2r@;<^FRMYWHvQobr4C0|nt4p}#f|MVvrlBQ$Z9 zSiNqRl3;*S<*tA`_AUyvX;sqtr zit5hq8DP`~zpcL#Av=?zpP-D=w7j*U*eY~F*BkPF@h41@HuoKBd)PNGTySpA($4XQ z70kZ5h6-+s^^rm7*VV^tNbsowsm_~$H|TkP>xl7`Hl7BDX;0X*An3bD!;gzOMWy&gybYGJ3Pz*LxdPV6Gx6PI#`YSn`Yv(j5bJaUD{s+TcUht zbp^}4Uet2Ztwqr_XHZsZQ%6hGy`gA=pS~+ec+=)tJT}X)a1r&RFH~&Dn=(1x! zn;WgCtPy5~Z z9iNRH#M-^rLcQaUF9Xi?EYAl@cZU^xoewvhPfxE`l(NYdMa9$)zm&}Yf)dviq?3!U zw*dE{oBq~tb-&*b2^MiCz<1%0a>Mk_INk^ z^q~cJ zm+`U~Zsrik5Z<1ZnCX`k*wfV5dSi?52!SN$v^(yZOt^O%K}ZobqY5S;dJ!QvBKV|3 z3UXFoJcX^>$I_Es(*iutM1L3SojCara<7d<(%Z)yHCq!vHl4u~`GJ-Xw_N_ZDyHW= zH^KEOZIk{M#Qsl`%fyISj}?loBq^+i%6-0T6`0d_q%W^^ROyRsv$jo}&!DIf7tmsjBtQa9##pg*x|%zm%rUYh-SOmvIWJOOi=>%KM(Ki(McF&%7i zL66vR=l%#iBlp1A;xCtX*}5}}90IfFhGf#S=9{}|$&b(yww>Q!WC#fUnB^NG8NCW!DOh9n4#JC5N7%UJU}D;p^nuEiJ-jCP;xU1suYLD( z1?-t6TkfmHDjZ|yiC(1Ma9eE1n_B1pC`l5Is)dl(tpy4yk#Cv4CAq$9TV!JQPPb78T~TO z%1IgT#vSmsqB(Kg=o{6hXp>)5?;M_~TjnuHqRi;i@0!Hcd7$r_EMDLC)NG3az{(s@ z>XA;uR(*%KajNB454xs0`v<4BmhpXJ;pcF<4?%YKWxKxJfeekYzHExkw}1Nl^BQN& zR^m?CWyz8VNp_TS2O68eC{UG~PkNT6;|rt^6}*y(dtKDt}lX`@UBw&|H^!7M+$t$M=Gt++a@-BLn&w-mb%~~n;ZL$ z;Rh4&N9wz|dDVMA_6b8P?L0P;t`t6mlD_OG6oS{wIlJ>~8G3bk?6z|jFbA~{i(=CJ zb2IwC0_7$s7Pu8k(8KZZS@TP~W&^8y%9uxb^T)h9Zl>Q|x`n1hJhPowx;nZS4I=fs zg^io;QVl;zqK*A07t+OiDjApWT?l?PgsHJ=h?nO1LWEHy)*Xc(<3Ttwt9`q-cgDqQ zyhH@mw|22JPXbX%#62fh<)hKphEt$zCw_W#Hrz0GYSvW|%9y$6oK{NY^tLw*x%13( z<=dR zMCX$FqkC7jTkS|Y%)C3+)uOTN`D{Ix>ZM>Y>~n&>McgyC`muejR0#XOaRbsQ(op!J zMH6LHaFgkAFocT~>(m(hdL$08`|{-p;nh9;)!cY>;f3(!C(c28H-b7e#ds$Sq03Zm zI({&aUSHlw2TRo-FuhxL6;U@R*^f=$!usBFjg)A4Uw0j6tQmQfe9;#661S#6#`hVh zB9ojg&aW0D8~D?BMKfG|!g{Y+Phb`pEGB!A2aoT;gA6aoR~m!=YgKv%E*$VgxMs7e zS3`dmG98vod52mFS^5c^H;)N66;yv54b1w1wDm`_rjRe79Oce&z0jcqL7@^fwrxB*dlXx@o)z4F3E7;NCFZtidKYw4cI8eLY|5pN?r%U84vw zo)oJjuG23qphbuXSM12a!SH*d{M%jSPIop}cCjmBz9Im4QQPnu`!Z3kQ;DrF2M)Dv zyih%=SHu>Kb^F7;y7uAC@;Az3ppFF~UI{3k^iDecNz=#TR&>{OLsTpjB8WoU5{D0* z9ZRBd90IWf9Dd}jw=t<Y1Va2y4p~yn?}EI)Td5r8-p4^C#H2K^RR(XLarF;g#hF(V1vc>s`q7%b zI3bNJv`mN4q+MwJk#rSuSWNH{zN&)%OKOUl3*Na`mZfw6p$A~Oex8WH$EOC&Gr;;Q zA8_wHcu?5RJ=^e;l`q}z+)_j~tZYV3A%-l5^}O_+f0@Emljv9xE|Z&g!QS+Z8wHBk z!roZjDT(Q=L)pz zCKyT%9=O<{n?65u(YURA;ut(%jzrokgIRTOPV-407S6|Q1V8Jc;?`W0--*tRG8j)2 zYhk^|u@A2~-P$jiRc(&jWw>=@&Nq!bq_%r!&(GbsHt`{L${UyNU$x4-S^8#Q$mmy5L6{ zuVUH@6QOYK?#H-vjs^V$GFWP4+-{utSHDk?#XaSSu&m7ppI7!!vO;_wIFjU#>1YvY zISI-403=B}Yn+ZjA&vhRUEYaUNydzMr-LEH8?aM?fbwr)FKj;GdzKpqDPqnIqs?}~e8 zgXfNa`2l-L9%B5%jO4>bmfO{292(=Y?z3?e5!j22gv(rMI261DkuUxD+O7i>$cQuw zHC5*u*$OXf`Ec~lS=ms`Q&m&vkG#1gq>;g{wmL9w1>$~roam=(cf?IHt)zh_^rSAi z3}P)k|6+qPG>E```)f?GzS-lVqck~6V5G}WKUW5?q6J;8Tei_a^@(=>TR0wdLHtbl zi~`zv6gv-C*yv;3hKdW?4gE=&x}(EdXA1jIk2E^zH_NM;mD`FezXy8(Ibow}Xh1>? zUv7~bYv0j*n*}JPD)?WNCYJDwl26FO^8ZsJanAfTf(kj6zu|*mOCXM- zr~j{QMSei3NpyJp+BCC;)kPFlV44r~7hCr$f?#H&(A#e*+*+jskFR#}%Zmp1gLdQ0 zG!faS=6bR%=~|9b-Gd@Nj7JF>xzS`!f4zq>-Z=@->@Z*xHUhn$mb9x zv%lYGTTm&x{YfYK3?BN%Pk8PAtFj3PO7!5F!_H)7gO-}QZxtboq}V|K&==g5V@b;v zH>PI7``YWD08*cuYvxDDei94^*M=)(9p1+;-}lW4CAf3DZTcLV*7%J`@lH zXi9fuMJjE;i{p-C0~h6s(W%tCH|Gu!e}4*0mbeV zc6}JzMewSPt9_P8Hzt8_zHa8o2%C7{%ZagwiOyXYl@XkYtKO74$GjYGowX!Hu*3oX zyS~^uYJ7arG!|CnfdOLfy5iljZn;3>3)3VZ*7ojtn6!)&G z09ys=tV0XdEofy4kmYI`V%rB=pJ{hEhCvZH-}**;_dfD|7j6HWyGp^WKZ?jsA;gR8;c zdXmtQvD9U!?lM5Ekp9mBSW3`E(wvnuPF>f?X$!&0EucmY8@Xd$V_l^X!VzWIC9bL2 zOR8y!WMK*zzKRSN+U$z`_^(Jb+gsUXR+xQ%yLkG$eOoAP1Y5M~vLH8WsDF8h$ep_9 z{)^2*psRB^K{Qy|X*=C_V7i2CaH@bvQyO|?l{8?Uqz^WFi47?xqCWA;f%T`QKPN@d z{qb(1PhAUNt;bqE;Z0mNH7h}E_t!0m$eI>&g8u9AbitCi2hA<|)*^njh>!s3U6(Fc zx7mkgX00-^;5MKkA1wID;c33Ce1SFh0fOyMaE{vLs?^oQjr_#y!dUaoh3}3fcw47D zT{?g0LwS%yb4H0*X&{eL_^>%F@qYQoq z3=9KAfSgshS>j*4%T|gbaLi%6SO?lw9P3`lZR@IaBMkX9kH#yv9MC0MFhA@?3(_vf z74iZCNE}VznuOtxFoP_q3&p4aGt3`bLhqtF22!=3{N|!adNsb95Kg8^WIK5eTip3O znwjl6ST6rOA=7JBXKL&yAKwr8F2b2DooMtb-I?|Lfof+t!^UaH+w=1cVUGGQTc)Px zmls)pa!UofSzQ`J+{ktI;XT_q6!~K7#JM{o?~4u@hZ42? zlA+^c;d1>gadqJOOYMghi6&$xTzNlj`ztL`Cl%(*A>PP3!`LAJKZh$M&;yT}XyZ(! zm|VjxsAqfP95i%&K+H5OaZY|f)lt+PtRSI^(9Buqe?_;OGdzH83RIi*P7~BXyz}Yt z&Ae?k8aWBN)b{QO%37yKT2{B)x{ErIsQa#v5p}uv>HTC;5xD(qH0?J=_nE-vq4&Yc({V_5o%MnKc3hi<3lJH<%L=R?4BeXXNygp&1nGOTRSjLR4ob#|NP83ryH zGA)LuO^-ptW57zGkU5m}hX}=6zv93^(Sl*%o38E^lsxK}r*UikQ8y7{iI#qTW>1-$L44{J?8glK z#pl7Q`yma$IS+1=(k)p2;6rgd#-3rNM`6jBMI(aCMofv&)*x6cPXvRibmY`Qc+SZy#8a?RBvNlvk6MkX%tj$T^C%dBK*i{I7%_U%2S5_ph>NXtqdp zJ?aPsDAb%3pym(5LZKuV(XB7JJ^0UZVzRjN(2o-SS)}*x&6RK9lP3q@-GEk9fl#p* zFKRmMQl=M3^v@V$-QoKXA?zxWsrO#SK=xA#SxwXjuMfcw@K`RN-DmkJzb~skU1w_s zs!BQ3Yns&zRBc!9JrT_CZ7lp_4nC1+&}gICR$14bPa(eT4Ok0o@jr;weuyyuji`;9}&i=d;z zo5A05cxHBCc1<5!X1Flybw*1N+KZ(9eiL$7VD=h_YneVOi3G%;~@tpf2%H zx%j61a~nvhj(FE83!qnj7FHidzjGW1z-^d+i%=C~aF{>C#@25)WZ$fOQS<63c)cuh zqGUcB>Wykm>(ZbOmShvL^u`t86q%&TpGXTAl;&?0k*J zb#`WJnf1rGnyg%r`C4tbuog<#+gs7s zacwTiO&s9PD9^d4|8umd?SO^yixiT->V#}9b{Au&`ik<&v)#FHXglhXaK>Ni^b_}( zBBhG>?;rMw(`Q#QEFM3vMTXL1Kfb)7|3^TgL;Ud4eSMFu+1uu1H24$ah~mM1H@RJ+~9cIY$mUFoVYQ1*N5UK_Jj zz7LIzKjxLnxu!{wwqnSdZNr!(+FmDaTN%dy)v&Uj4xBkzf<8M8e8_tGdwbX|aX6A0#?{hxi|&B>DWpC3C)sm88X|IO zT4%N(xzY(VRGwKM}W(LBMHXD?wII9pgmoB?H(&BR9vnmPtcO zmdY-(H_~~rfaK=0K%_so-ivow*YSMVVpgd;{supj5zW_=Ov(5z!`$yu0?0)Pm)#2yX>Vd~CF^+R`0>8< z_06~yh_l);F1^%V2!NBvX1Xi@{}aqvc-QW9lhFP5jOpVk;erD{M0E`(z9yk+NrDvD z1m%mJZjtY6XpecNKLSc@t|k8=_EI1ulVrbtxB8kH;`b} zzq3_|0?@=DaiYlEmeDH}tNfAIM;Sg$1`T#F9Y2(~1QYMhtBiNfBzLGv+@ywjoNRqH z!%`i{Svde^`m8HeNepyWEbNn!Qug-sKd%Wh#Lya5)N9pASkmPS^NH+>{XkAW%n~*d zc^D9l4C|za5rCjTd>ajxTC?(IMcXGGdB|;MeUKkJRFa8sK23(vh|Lh?XH;8^lg)>P zGsuL)mn)x+H9y&cqh_l{Dn5+MN%$l%Np#Cp!E=5QFeHLQeUfAbmi6u&6&o$-@l=px zuzx3w9ykwR7aM=96P=YV?C(eV7%PK(;SV3%?1cLYykdVQ`dYdd`5MwD?f6303(?IT2#MaVM0<3lk|SC*5MN9Z4DuncuNp| zOV?F%s2zpPNv^Om-E+l3yNKn$%)({ow}~Wy-i*kID!gHwb~b{b{?V(GiB%Iy2>Jp6 zwo?!QEB3!O%mH1GLlb+K4IH6N`ArsAyRjI};sefw5_&`Le>D>rxbd&l!^v_Yc5#%nl|MA%lv|kg4{dW&rPKve0P>%wl#T7v2VtuTYhY!JRZb{DlCBcnaQJ|JAem3 z3sOCQd*`-BHp_R7@x6#Y1wJ-+q_*tVHKg0g zDAX@nexI$S$jpOW_TKHI?q?fYL-~J8YjkX)dU|xc`dF)&E*Dxj{7JRyvhW4K0h{jv zcQxv@y{&?bvuk^SovD1l;lB8=nlV2!d9*S$dnaND^j?zQG#>;xHfHkYnxY$CypRV} zrkvC)+km|Iq5Ry_LFLLk!zs*HEDp@C{V;H^k(fj((_f9BBtG2$p@5x4~Li?ZI5H_Y(oB<{qa zojm`pQT7c9s*QT>O)JnNj*pF3A753z{J$>Y_HJ*~4{rkQ0ImfO8-7dDRkj~*9I5>z ztJgDxebe@X-U!~A$ahlk)S4(Pfcb-y^Sh=FeL`p+@iD`;*nrcZ$|B0U=~_2Dvgeg- zx0(O0qTz2uUVJdIN6Fv2*j`d4)x@(oj&!%ge|q`A4JX@sLfxTpq_zY2h|T4Qp=|e{ ztrpi|_6eT`oy~;ZY`ht1xCqkZ6mb9O#DyKjPX&ZTyHQu!#(nRx*(YUth?}jzbqWVFY`t@CZd73pU?2JhNsB3*gwn z{U>%!&E6$k7rG6&qqeObKpBdc@Y*)yjc%+#x9awru9MyT#9)Vt!_Fp)x)DC~#EbcHk|b&8=(= zqWVIk zUb{>1b;6M92EwA^O61r+4m^eUOWQvJ<~m&jou`F=h_jtJ#R6XWu!9xkeyMTf@E>A- z-}V*2>j{f|cSbY8<|ObG@K;FR$3EJn+)o2v!jA2%i(xQ-O|}$fi9a;?n06MK#kAUv zqtDy^T$0HDM`z~>%mbe*@>PTIyqCq;MD=9j$lo_Zi@4g1@r; z2w}s*e9Px*l6nh+V1*N}_#B-$t$C&INy~5M zY)GD3DyUHAki==kgNDxwo;+94>jMn1k#J6igv;P@peFdC@m;|7XfovuH!(AcwRiFQ zQr?omRK|05f4UrI-tb~okYcU*LG@es9Gw@!#KEA2}2G~egcZC&EnVKCzTn~O1 zXwqhTvr93L`N)0k(YMt!B$S&DIacQE-q^eZCoqqKzku|k`I*VHy$2u;Fu?hb4WqCk zc1<7JDeGFqhk&a|hOI$2rHU*3O^^8sf1NqDTL+eIL|$THeaH5nN_qk_KYuVBuscv# z0}QYM6&65cdUnWotI$=zl<{87Hibhj0ZK!v((;KI>JXjs>DSVjYs2ssZB7V1jkp_l z0(@$IW`Ak;H&9pu46s2JR*LMLzJ0)(ZC@?vB3i8UcVeQjl6A9jcxMUc=sjWlCqhrn z&rB|RlFdM24KToYps*q;)3cj^%P{*8uQyx`-V_}{`MN3~-{7vvx$O zDbmyPGn1=^C=3+V00W#y3M*pQ)S(fPO+A}5X!(= z!hYB<2_CZjU4^spPR!3tw!I(uKw%9qz!no*ga9Wh)icmwdSGv&1#yu&b*?(UE& z5c0KS6#lP1^3D>@csq{$BIxfB-=CkE>}n}V#6V#UFu-d-VWr6YT^HC~EcqhPKO?MD zy4bJ-d((0jQTiQN)^cjWJ8SzTp`(W9k^hI#3xs{JpKoWl*A4~>Yk&b>V+t!pWomZF zVvArK_I6A0M3z1^@s65Knh9001|QNklDp4f|h*%J{F5f$-7RYXNpR8&P&Ra8_&Rrfp<6{4!DBBCOy>Zz)V zh^ngEtE#Aq`l+ajh=_=Yh=_=Yc%CP}&v$0-Zf17&|J>ca%MN4r_P)0>J2&&)@Ao_3 z@AtE0$qP^#?al=13e>JPB6AP)VruBQ8%G3 zt!H_43aRh(pP()qQTr1xB`jZTOlks>%z7|`{Y=FR!mA|R#Hn&7326j$q<(I({s(&g zw5)b@&t3VNr=2ezx@)LMalW!<6{9cs&n8i~p&rNovTw+36SH#hQhOUOxOWzl$_Mo- zge@xk9gONe7}tWZDJga)g>e{cR70oZ($+fzc;ig>7rCr@^`#r#mb94YFi{`lcp68y zW*H-ssz|EY2u49t?>}G~^El27t$nYx0`0wx`a8}ap)a#lW>8d@W5MqPbDG8R7O7c% zM!}ht6Ja2lkvzusG-SH-gOadhqqpnzKR2hkpIgrtEuH5>P4vIT_4PIT7`p1W9`zG2 ziCd`8BnfzC!0kht^VeYx9Kjs;3-z&NHmDxMayX+}g~h)Y$FIN$o^>UuK0^>Tqwck! z|5=rAq~i$bK=X)fZq|+NJzG)KugG_x%|4a+9Pv zbGy}HSi*0r1v}7JINo8qeDcnmq;mDIg*}x^p=(F!oGQ?@J0}Omu%`OEZihQT=-Vg=xV7R(GPOz=FA`bq6nT8LTg!MI%@MuoZ%Csk#rGX>_VM~n(; z-8J-MzG&M+R|!S<48`|da)dW}tSV*jD$hb^^hQsi846uHoD(sPb|ow?DwViiG%RLZ z=urQy9ZGZ0m2D!DV8J}j`WXAq6X<4gw!I1W__r%jm1uXk5|+r8aMYprzQAOs>Pt?h z-L@=r%*JK%I9Jrl(b3`a*EnBci($D^T%M~+A&S&8ZgeB?(uH>q1D)jR`T zUWT;=zq@In-Qn#LVzI8lV*L!qhbAv^*>%Af_L7lKaU@Mr6-Pt|nqToO>#a#xrmz;% z+iTqD;Qd^)p<)axy5ZqxQ_1>txfvGfO$+VP|35omMipWgFx(`vCp>d{%qP@b7F32* zlrCZb4|H4CXz5V@!L_ZHd}pRz+1?}K@*?&i`3)6McN?nLMRL$=iX(mIHF_e8h|6)!Lt zsY}pt|0mUvQ_E*HO1cL)zG77+lvOIP6){vt#B2kdZQB5)i9tPx_Aa1}2W9(bpgUi) zp^_4o7vo}*PFF}Jw9xKgZCF^eyRkt3ZAem(!hEz)8yj@}*gci5XI~mU9qov|X4B}d zi`H^Fmn0EfN&7M&+W_vn25-f8U7onFaQ_T+f7NWL0K+njr|V@?6J4*kgykAk!UF9M zW}XVK^;fZA!L0f&3$karZa{Zrf2NXjj=|j_E@WotbOB5B_ZE$j9k&MGu+t*^SF~8Y z6uN=ExkMoCG3G^Gyni~~wTdu;uD3YF!LeLXqE1S+3cG~cQ``lzx)l_(Vfi;Lv^$u2 ziiP_+r4W{P&{WkeR8ztjq@<#Bif6f06-j5vbYM_Vz__t98it@df$OfFN!Yhx$)a;F zq{ZYA7(+Mc?P9b`lGaZ}`)6=4yf&hRk8~$KvKaW=(U(`TklsX}+c^J-0)}z?7E;0w zA};PDQQv4XTI92z@>_I|(W!(P4c&=!egT!x%&_vcJAiqL1-Tmw^QOXB0)uL&pSSJM z^cy#kj9S*{?I36aj3w*cQ^5U89XYSN|myDS{6X*uKT`Us7Q9{1CLjBX| zD8b(lnbcAyp?ED)ZO@?(zlyx{PqXZJ2_}nxUjGKpFL5t(pE45c99A%Q(k`K!ap%r0 zVZ$=*5*BFJ?mWe!C7ab1M^@LmLCQgjyMiJ)6{qV-H9@G_mkhCo1EJ$a^;z<02hB$E zJsaRcn(imVGiCKOCCxL_4a2|1%lF|0v*y2shDig~(Qn5V*KwFe9IdUvNx-z{qdaj|w%%w1rIPIWDar?o}r z5CBCG{)K0LXHb9>NeoMJrqp)ZeCb*W-4Hy8Y4MBHCHecO(_x_xu%ByPp5^i%<{2*A zP?X?o)hoLs-EENvir~*C2Eni_K1Xr4hO*=5*yp>>7IhIr|cz&m}6) z|IXzSP)zuU*-y*@9p#|t2`tcc z8JWrDU|@9NRnTl43Bxj{;D}4j5}(#(2tlQ2XFpR33-r%G_o3wly-a|;UhBr&r7kG1 z_1rq$6mzt_hkC}fh)yH#5|(|AqBblW<5y~)V!=`xr z7mCoC>`RUU6k(qZ$NvaTdNd5n?-{0DPm@NJjGd`;vjgrcZSS|6lIMHQ{`Kj2rhy$6 zZELGh&&ruDP3fBzpjdCf)ZnEZRR+ z0%N(xS6S@WH*(68UO%*~0j@d6_`v9R3K;(n9A7GH*J2FIR{x4hSQf^m@I1w$-GK#r ztDiL?Ch4B$K&gAEI}y~Ga&!^ND~M51?b40J>sk)YNmH%dVQv?j`}&bcZ}Pl!pS{+X zn7GR<^r^v^RYJziR2$3S=@tZ|Zhz!1}SIvhiL0znf~?T%KW=v zR(r~Nj|<k(%Dc6iHTs6 zQNC_hB#e6p_x;@!l2w`h2^vz{zAT%(&t(WP{?Yh${Yd}R9m^5W5sD3fB5+(?hGE(0 zUn$4YlH-zVo-%(c9(Hpl;xrj#fNqyFaSBA4-nnL{S()&+Ay|r879=d!db7^r2t9<{8sf7MbOXHG*VFjJ_P=S7FbRpu?swR!}cMqcmb6Mpo zL)U1B63D5XH!Cy%SXiP9!gHfzSiV7}GQ7DKIh`y)r6ck#@D`EogKv+iuR?Y%I<%96fGN z!wA$RtUgVQ)TM;+bga-Bjq`)0J3AVNMVl00J&~JXm29_JGM3On zyV+Gj?#&)PG@&l53tD4Pfr;TnGjuv_J9G++ya{e=Fm$I!X2bFfD9V~=xY3h*5zuur zp*DHY^a=~(g^UrcD;e8WBt2J>rliF~yLSh`h*qY&SSDQ#O-5N9p2poTYrDevc6$*& ztdi{(_jLD!gjJ^9tTrrxbTgZTxtAoFG$ebF>|APOW+mzLemF*{&oW&*JXQ&#yBGCq zit`*^40KrN*G0gzEzpj)71Wrx{uvVqY6fAiMN-wa9CjS+nEDO;?u7AvS=$xrC(9a< z!+S83N&W)qsFqzF^WPiHjFx8pYjEYTev zDZ}c=*G23<#%zw&rkfK1(w}jO$e*w@Rx5haRhIr4ax;l*?JBMk7HHQBYEGGUGe}rijO$P@b~A@MF@|*~34%*j=>miF6+{_BQ94I< z^wa<>21s{!wRP;-i;m+=x97Hm}{UA=+&IN}hh1t2HEUq!vfO{s*#NPeqA zbb;*18mcL2+MU7BA!*?#8J3RYr^Lf~1^|bu(vcG<5O=^_PKi8Jla|JbjO}NdvYSOx z|9Xhin(?0>FQ6_j+aKKH{cc8xOzj%z@ZHZiuFJ)+yqwQ#YPT#dVZnA&gP*YwS7Oor z?#NjSw6w>L>{w}7;7*{T$~4-lx~TlNZG$e1rE3g`4(HoP#juooLGnWM`cUspITmX% z(9tfQ=Re}RZ~iN&%PDty;c@a>8&Utv+CNuP5&Lw$PzU{2E&X@2h_5s=wcC1bq?=+A zEA4*S+b!WZTB6-FqdP%#srY&^N%Mjj*eeZ;A)-!6xu#?luMC|@1$7cahOE%F zJ6lG=uslB|mN1GovuNqqqV!K=(rzlDg3%7$oviH|5q!8r1G|xLE9jcCS9~vG1ykBh zw7VV6BVnc9FH5_gUkv7}Y`asb5>|L2jwvazbwNDyaugtmPNI*K>AVP?GyH2SMDydS%-6XRWI!4<3I?0{6vt-aiGKJ|B>A$Yknw9^tGtJuB95@xzzB3=1i!s5?sR0**VH$$ShoD|U9g}Q3=f`bii4Q&k) ztKHFD6C~)aNZzbsbb9EF6T~=#TB3u5b#;^st1m71i4KrsMdvYm!_^tb$aQ(pboO@5 zl~l?8Ms?w z(XMA+JZ=O_uNriyZ{<=6%ePxNmay#eMkFjOLdw%V8|U?%@=YIJAwsDu{UEet|Y_IV@o6sq6>Fn|T~7Jm2>j&0PVpgDzlts(CYzL+py$44$< zRT$=rL)80F%UYi{C9FRSFke)EPsI6sO&}r%6XQaokHxDy~Cd7+_o>NnMnU^wEn1 z^M$teRl$Z;b(k;FU&@&9Ic4Q61M?-*i2&fGStYD2?N$ZmD>I$f`YRK|8aJ3PNJlSY z5k8S@HsptO3X3uoQb|Z%F56)YD7!=FsqX0>mnSRT(4L)6VPFHN!}zp2J4e1tsM%lQ zMeBIF#3*>XeQsgW-Ok&;gm8}Uk}wK|b7t;wF}XP?yH^#Wqs$MvRKoJ@mfs~T_`J$I z#p3&j&~PN%%>yuqTrpgNabc&ivzx#fu&5s}#@9CQz^Qh!@VPa*K+4BHIJ(;yr>!Gn zSe`%KG^A>A6P)nk>4wIzC?C}M{QWc2(PBkyB(!%h_qfES@AYFGPDe|JMf_(zKdh4N z7KkO3LvzYKub8J;e9KUO)ON)#L9$p~W`g2AFJX~?MiV{p~Iqox!MScQ{{f6SE z5GUCLs^=#C5NXofhe6jBneAMhWqmNFP4sH zCtaUl!`hU0TvTs+Uv@UVhwpx)^vJAE(a~o|T&I-D{93mTkM3v|hUI!u_l=b2jiW1s z{A{7!{yfFPdld`uRwKG2M!SR$AZ7f4&-=j~R-jH`!4_d$B*kqdR{*qigWG@>Gt5`# zYf^tl9-3nVZfmF#7K@>?0|%DEuqYQ6_u0xmF0t@a2nnKWp#&9HvAQy=gf%uWUs!lY z$WR^y3{^5Ckbl+{LAwdxEiEi{1tCdY9}>(v?)5O)e=8v$mrfVN8OcMdbPi7$eLQLR zbf`vmeW5GTLo{c(fo^CF3zKhuf&LlkQdL3^DAb<+U*2(1J-d5$E{b7XzGM*=Zo~48 zInxuKH;%5vE@7#5`8;*FPt_-lz`z8|yK}TV_BZMbe!IyjxM+oeemxfd+qnNPY-iCF z9%EuEF?1@*jvAcpSfpdSsX^!65l=$Ranw&qh?ht=M3t~LQ=orwbSWxfYb{gba*Rtt zY$KsruUxzg%WT|E4@i#CS;^K=pj|#sNv*-+`zA4YUSMQgU@)D3ar_jE*()=kU<@wq z^(Nn0#7m#PpVvrNe3!6XyFE>Sd94Q_Y*^t}#DKt*ZadrobUq`b z7umTklpRzdaZRERWT3w&n8JKDVZJ(-(NAyG49gbW*07B3XoqrH-L(cAHq|2OX>E!d z1khBb~bUs#xHupoEgc$iC0omq#$e06>&H4uxJRiP5n`ENKPm2zkm z>WVYb&NM0|61?SzWP;I@GqNi}yc%iBIbWEL$69_*%(W5>D-M*>EJ=;h(|r{IfMVj! zZ+zOW=^B7q;nHe5Drh81!vX3~KT6okiw>e-cdVmZF}v^TCT*qYIeI`e6m$n$wY;FViB_ z{99t^2FkD~7dmR2aQzDQFOF^|Ep0Jnj%Z3afLYpgWiM>CKmXCrT*?29q`t$bls)yL zc!pig97xV(Rl=;#8v}_}$`7k(yYAF*ce9H#Ex1t7jwDNcL*DpIRTM4}?W9bhp_H3F zDxDRlV>pd3Rf1t@xr5v(4f`*tsu+Q@_WS2k!1HPXMnxMJD1Uk3{+YjjfcknG0y9Ub z@xK&VLsQ$;LqwFkOj8W(^>`WP;{R{gM*%6`^Z)u2x|zdXA$?#sS^2 zQp!k>MCUO>_*R^6<;NC3%Gah0*EBkp=UXQg>>%3v1V;kTSIEQ(dUiO z6_v2cwmW3^8>D7F#f@W`KLLRTvO<-;@rtDnCoThpWndO= zZlimVcCDnB@o$!I*XO~{EG6Mn&lw6cFAH8tz;5nrgnX$-KK@ zoTQ!0D%r4_Q+{-t*tpX+R&-UK<|FSBIo4O0`p&aj^;WwOHtwL7#RZ zy;hlV+sbwr7az>mJY%*gj3J+Cj4CGxx!%mL65XXZK250|d(?S3;+S||FE#etxGe!a&1s%>8#Lnc_ zf^%iNwf>b1el9aEoM8pwF+=*6hZKxlQD3Ze0`S5p4LJ!p;Y-l{Q#SkRpjARQCDrWW zr}GKgy$69L!1FhsK{4=2i_s19YGj4?MEUyT|+5^??>9AnF@ca}v_%_Zbs>-lzziNwzEG$_jth;I@dN2q-b@ zFkiGYcpmp|EU93z3-eVCI#K6Du{s??W(`C_f#PIY+yOLY{PspzqHPts_v9ph54!i z9k*3orJPfkq?-mQRV9q+QnXEs@^6>IXod&hMZ194(B>)Ob}?c3xyA?P3k!1#gQRaq zvTAAx?HF>-30&Xg4A~G5#<5JG)X0+5zm8Bf*;ieSGy5kOp-@fB*~IuRfE75aZu{ zgvv+He-GCwrO%rbWP=D54$`)%Bm%cuuw8W)OT6%F$XifEYj-y*BuvOf4eCpCrZb2 z8UGc0$iVa{zdXOk(joVIv(i8IKlcCMUZ17^H;xX^awKQl8!-l#%C;-!+vjA%T7d<6 zCI`%ylH~y3-E%nV&VHP)u+OkM+fc7dZO@@^ZQY*6KrG+{i@rQ94Br(nB%m*<6oQky zCGWq2$-ru}TfOdQzkh8QbX@d@q~v=-VrncIOPysdEEQ61`p2eG8_VP-5x{x z2EM;v80IVJ{EoVQNnPqvm+BTQSi%In-&MPus6SQ`%$Jr&sslS0Lv$wO9j^>P1?8S1 z(9(WJ2H4Qr%r9&r#yGzh4Ci)1_^ula(Yhkp80u1&y2LStptBS8TErhI1yM#-tBfuY zuC5+8k2*B#BdBh!7;PCg?n#6{h!8g&VmU}nwf4m2?qBur7_L}-zDM_XR7SNP?x&Y zMP&|zMg!z$%BmSkJ88oH)AN2$u?NL6itxFBpeMEKw8IVQ%M%#rgn;yV)^%ugD1$^o zTqD}pNUCTa_%7}S!Lo?1sAoZ4>av)a7G*(bcb+CnSf+eZaS~QwwjD_!HMAQ?X_;3$ znlBf5uY;-luHE-sQhH*CBUR^t?;=U;(@}cw*QG9XDXtd6gFSqdkRn*m!Wm^)adf5~ zNG8nz6gBAlK&glE{Zh_&!UXgm4&&&a8R#yN zV=As~VU@h=+u^$+SJiwD_%6_Pj@N2nUFtF(3~PsM$1>Tf9NC2-h%veco%o#T5m+v> z>J~AQw^;^Mq$+0he%F~a56qWCzpoAKb*anPFf8Ot4=>00U^!V~vEtBYVi=Ywn?ez~ z4Del_*8g%{>M|w;639|WC^ICzB<%1d?fxZYddU5oB6JDxU2v-ich~=NUFtGkQq~?w zBzGdJonbdnhs%nk(^W||IiRA#m7+_4?_!?(L1%OQ57(tG`S5i~1j~OI^lFEet8^!Ml#|YicNxl#rH`Y@G(Xl6=&Cvkdky z$B^N)5M3O67dOy1*y?yUdSy3}QSr7V|%gN?2P z#%rC7bi=;Jm>7A{ude^qy3}QCZCT{v&^e_zXhuS8qK=+%&YMo6Z&qU5UuL=(e=+L+ zSM@(ym%5CzgcWqi_`b{GDPbg|clg|xAkVOi*uNI`cMtdR1N^5hx z{zvOlm+`k_t!VH-;W>RrFfoSEXln|eNAF>mE=E0FK>rC-aWkc-=~nc6nf$o|*Cz7> zV>9?O7O*bv7l`!1J4AV5Fipd7T^uC~Ee8`@MbxaHHF2RG*$< zqUHjF9Qzj4No~G#>qH^gH%xBAAG{*(1UeFmaz9~SR4sE9wB|3B~N9h{v z%F{t@Wndf2axg5)R?%+sUM2>#qa+nt?cdF$go-JXjwahiKr$V|@p}P#^>4T0+E1wO zb9gU*m76dLLBA8<@99>2-bKhXDeW%<&F*IRcb-q@8`790preRMZA3kY-+hh#|4;Py zU!4ETK~(({IPPe2bexp?vHtFHV`?-0JQ4N_G+XoBPr9}}rN8SmdZ5zyneDtBAxZf? zjnm2;^QJ+Vk4=tteYrPZJoX>_f%8xC0-^8SB9hkoG8(iKga$B&P{;RE;{9ZmEqboN zh83n$K1*~uP1Wcep8Mj_;s;m9&uX-8tzu1fcm?ATTdY_{~1FJKt~DzmMagBI-yPQOLF4d#)|V9OuUeZ|(wL<5 z+gDL9pgv7{4)Hx8Cr?T*e2 zRL}b=(gh)9qBvM!V}v1M$HAI8Nt+(M6xiV}jdn3;GrSGI!9;qLwt%Dx#^n>Z=(d>2 zO!$5`wEGbtYb)k0zY=}8q_y!w(wkl^n2)>tPGT}rCA8=3w9xV}tSsZ==3rPk#yJzi zGTiTO7KsKlM+B0$1TCM=ut=)K|MeyZ=GA_mR6X{xqZiDwJWOkE7xPb+aGZAExwF3r zC21%Qu_i79L`k|~23lLA<3JckXrm(+!wSMfPQY^ACuUhq$ijLXFO}Ew+OJ%0U-%Fc z@R>HTXc9hT6W?o*r1O+RkSjFT;ueK~hd+Y)xVJ$0#6E`wqDVLROty~?zyP1{`!WfO zn9znKI~#s;2*>-}Ek{S$I1PbiCG;?S};w5uSdo6pXr@rjF`IG z@8bmn-4QogBK%2H1#frnAy>IwUj3t)7#8~v{k|IR`44cfcTCTU@799uTQSy()W=jp zFPUKpdsUCgqMbS1lk8O=(AbL#Rn`ASNZJcvg!EEu=TZqJTh!K#YK%LqCLOX#gqw3nyaa=GxnW3Q9qXs2rm3clly!wvK|Zl=yQ;nF zGfeyy2IjW5$rnI~1^lj?V2_d}_8uk$DUt{lipM9d*imZt>`$ETPcovX+;;~Szzyx~ zeG0!{W3tbo-^6q;b4jkXyudik;F+ItNsiU&{P*yG$|E`Dus`-y!e0Nlw23xpEH`QY zBT2vSxG}197L^d+U(paBgJtZdl zK}_-o(%Y5Z%-a$cE=~4TS(uf$|0E{y=bD`ZYMg&asH2-ng^;8IQs>@I+sPxtIqq>s zTQqOP?OZYy(rc~CWjj%SKO@x3t^`w3J9yzn^b1=+g$u7xHuCd_75b35NeH z4C{gP93*+3N*sGgo<&|1CQ0ja%B5}!jY;~PYLhBS=jc+HNxG>hom44?(*w;!j4HSm z-+#bVx-^_fgCV}bQ(zOQZQ+UFa>+xtMI0}>uwxARkjz?FHT8|uhfSzotA>2$PO&<} zBHc*_UvPw>2`5DV#C9JM34`VymwcEMOX2*7DcS{n_H`)&HeLc z2BBF?jA{~Nz7NlQo+1Aj?q{-9sXK-tg(>|6n)M|odkd58Z{0A8`nk(}sg_z;P$Xp? zZgT0VxAl%m|Gg_2&SJZ3%Z!Y(j zf!c(fnu?L>K9bqEWPZ=Hh) z`=5fTy&{}Nmlg81?n@LiuEen1LN+Yb=uU1S=quTG)T&-vmz7~j_XczF_bLA=_k;SD zZ65S@O&9o!$={XN=#KmB>h1u$>dx{5;W+xW%b6FA{c`J(1`K+OZH-%n`6^780p_d1 zbe+EUelJR(b4eQO^9giOqq|PWk%snIlpbg?|DyZTxL$Vx_jaCc3&SZH>euFF0NnfC zzv{|6S^dR}MdG_T`@Mpg9PQq@vA#{d*p2hQaeMvtCyGm0ewU#alCX^Zlg3%TH8Qm!=;+Wf$nq!{>FBJc0e12Cq{+DA| zP+73(K6K=*^*}eeOHxu08p3VDXdGZcx+Gtx#Xx6Z_&-Pt>r|?*R}d=FsPx?fVfV6% z$4IJS*LhSjfSVm8Jx23=-U%pT%|0~T^O2a)xwFWkkMPiE>d8aH_PpK>(VXW7`+RTw z-Y#J&l~DC`cVnDWwQ)b3MZ$6;5*A}bF5l7hBjW<5a$AJU(8kBK+^#$2XYzDsWAFJ# zUEv^{@*MNreFmQHUTe~pl(kAMrg^6wMz+=+Q;@Qz%Gjcl+h2@yQJYiew6xJN6GxZg zAWFcrr|EyPZ5j}cgtYxns>DUt)3>}M%xgh-rmxG{&Pwi=qulS;y!X)-&MN9R`tz;q zsM_zhvS3Mygp?QWl$s`CiTjmeSaJO`jCCf4rAt_BC(vWNbF`^)Tf0A0MgL=0*!g4$ zE2|Alm9+eA)I6+Jq*N`z-{917C42t?jaeoM@Q+iP8Sg|C#PuE5WS zNo7lOGML$BPj&FgwlZU}-=wPS6!xtj(8e`kzmfY*3+IC zq)N|{oniS3!;-%Lgxd>y?S`)E=1`bnnVf}%#5c=qba;WdQRe(Nm}$$}WQ7Vs8A{KY zQoWeaq8%;WvK;19lupivrN<#Ev3!-JlcEHY!j3Z12_LPCIIdYTf+7s<+ga3oH+-gF zDV}gkF^0vMmQ{wO`~QfT#*?{4XR z?=q~sDq)6xky=Ut_5W)9Bk%gxZ5!bsX<^&FnlN9LrgLJ{JI4^roPlm0Z4sG`3wd{;&3)T*mmVWsKP z1F6GIbPmt3N*?p;a6ZTdJt=nncBc6+;rln$7&5kv{btTdEJ;|zu>6^#{l;%!#XVlm z(C?j^bVIhTBe~ofymD?0kyt{{u7uT`GD}!prj7Q<#bX^9oc?Unn#X&3ETPAeC2oUM zwimxymC`>7vi?u&<6u&qbEd`A!+E1oIY`gVUWCqRhe??U76o0BF+Bqvy(GRLv>M3O zCV#JxIBtpHRWHF{KC4Z1 zpGxSLl(2L^EXyjPBw;l*hL!UBY3T(-j5LemXp6Vw&xu{yZ6+sU5i9yG^QKoNtiegu zSX6{<_*En$rb$&yNE4HXPWFILq^TfXB*;59HME%y_k4o;pTW^xGT=fJ6BG0@8PIzf z52pOzx%V@63_X@ffl`Sa63ptU#;~wc=r@WpEWaqj+9bkz#I6(zKlvT^KFN~GdCYdT znR#BrD;v-BK19s;8^8TuF*?N=R8|9ZJC=S8 zdCGA9k#I2?EVJ^M7xFjEBbpncrHFs>bZAp*d0k^}&sp&q^S1VwZH@Z9=EPhzhhC)OoOku{;(r=%;DK;#@ARo&+uVP#%(E2gW7oHP~ zy(H!|Itr9V{HQ;8s6GyY5WXY8OotEi6$49FH98eFyOZY{WgI;;G$Xpl)T&p+8(9y{ zF{bgAuF+)tvf$SDtgD8M%;fz260vLfvz9^Oxn?6WIKKK|4F0LSv4+uI!h)eWvJ+=) zl0aW~y3CewwEw^5Vpz?d4XfL3D#KbUUUU!gJO}7VBD>hkxvN~(rbUP_dr&VA8|Eu1 zkzUp4`rhi%YX+k`Wy|=3XM*iaE*WxZa^MN_)w#hYl^11J-M6nK{!=#5LJq7XVM+IU zTGXB)w#~`rcCCLuUwY$f3x*{LWd2!e3bdt2SfxGP&HXbuT4u}XuHG*v!_rj3Yzh1* z#SjIwb30bbbAS#uL;rL$r^Bu-rZpj;wy=X0J{=a!m&za(2VJu5D(o_=Z}8g|K93BF zN(88GcDaG{yvq&n&xC6DOn6IE_Rx0(l1*U;R@~#Qo^zzfvT7F3=jE|vbYw4iOXPsR zE%o`CNRv#G*n3!1UeSIxIf@Umf%cp_Hx#(Xdj`kQvuW4d6hH~VaOB?}b2Fsqk$%5H zZP))OQ$Bb;_Ui~dM1Yc95vpQ$>>shjeq8;2X`opgGO36x`CNDei;QkS|6RpO%bH0Sy5){71El?j%M=gIos;p4WnoR`O;nNyd#j8a7mm~CqVDtX7>V+rbBG?*{5I=BF)M!Ck$P>4+<2y58% zy40mI5*IQGU}5fq#PtJ#T)coVUvedoj|-sLQ>%Ym#}wvkfkD*=olrdQ%2B#1)TJ(U zDaX8)3#Zd_1fpPyOS#GA;hP%1Cq!GTWRap zDFD!h(+v)WI$8glb*amXCwVP(2(z!Qa}wnCx9!pn|;tMsi%_q@Ks$}JJnf655wF=xywd~-T(jq07*qoM6N<$f>B5Hng9R* literal 0 HcmV?d00001 diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index b5533d5..05eb451 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -15,8 +15,8 @@ function ProtectedRoute({ children }) { if (loading) { return ( -
-

Loading...

+
+

Loading...

); } @@ -32,10 +32,10 @@ function DashboardPage() { const { user } = useAuth(); return (
-

Dashboard

-

+

Dashboard

+

Welcome, {user?.name}. You are logged in as{" "} - {user?.role}. + {user?.role}.

); diff --git a/frontend/src/auth/LoginPage.jsx b/frontend/src/auth/LoginPage.jsx index 3d54d59..227d801 100644 --- a/frontend/src/auth/LoginPage.jsx +++ b/frontend/src/auth/LoginPage.jsx @@ -25,21 +25,41 @@ export default function LoginPage() { }; return ( -
-
-

- BellSystems Admin -

+
+
+
+ BellSystems +
{error && ( -
+
{error}
)}
-
-
diff --git a/frontend/src/components/ConfirmDialog.jsx b/frontend/src/components/ConfirmDialog.jsx index 176a0b6..3f0c7a6 100644 --- a/frontend/src/components/ConfirmDialog.jsx +++ b/frontend/src/components/ConfirmDialog.jsx @@ -3,24 +3,41 @@ export default function ConfirmDialog({ open, title, message, onConfirm, onCance return (
-
-
-

+
+
+

{title || "Confirm"}

-

+

{message || "Are you sure?"}

diff --git a/frontend/src/components/SearchBar.jsx b/frontend/src/components/SearchBar.jsx index 78ac533..2daac49 100644 --- a/frontend/src/components/SearchBar.jsx +++ b/frontend/src/components/SearchBar.jsx @@ -21,13 +21,14 @@ export default function SearchBar({ onSearch, placeholder = "Search..." }) { value={value} onChange={(e) => setValue(e.target.value)} placeholder={placeholder} - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent text-sm" + className="w-full px-3 py-2 rounded-md text-sm border" /> {value && ( @@ -35,7 +36,11 @@ export default function SearchBar({ onSearch, placeholder = "Search..." }) {
diff --git a/frontend/src/devices/DeviceDetail.jsx b/frontend/src/devices/DeviceDetail.jsx index e7d92ed..d12e746 100644 --- a/frontend/src/devices/DeviceDetail.jsx +++ b/frontend/src/devices/DeviceDetail.jsx @@ -7,10 +7,15 @@ import ConfirmDialog from "../components/ConfirmDialog"; function Field({ label, children }) { return (
-
+
{label}
-
{children || "-"}
+
+ {children || "-"} +
); } @@ -18,9 +23,12 @@ function Field({ label, children }) { function BoolBadge({ value, yesLabel = "Yes", noLabel = "No" }) { return ( {value ? yesLabel : noLabel} @@ -65,12 +73,23 @@ export default function DeviceDetail() { }; if (loading) { - return
Loading...
; + return ( +
+ Loading... +
+ ); } if (error) { return ( -
+
{error}
); @@ -90,18 +109,23 @@ export default function DeviceDetail() {
-

+

{device.device_name || "Unnamed Device"}

@@ -110,13 +134,15 @@ export default function DeviceDetail() {
@@ -128,8 +154,14 @@ export default function DeviceDetail() { {/* Left column */}
{/* Basic Info */} -
-

+
+

Basic Information

@@ -137,7 +169,9 @@ export default function DeviceDetail() { {device.device_id} - {device.id} + + {device.id} + @@ -157,8 +191,14 @@ export default function DeviceDetail() {
{/* Device Attributes */} -
-

+
+

Device Attributes

@@ -184,8 +224,14 @@ export default function DeviceDetail() {
{/* Network */} -
-

+
+

Network Settings

@@ -198,13 +244,22 @@ export default function DeviceDetail() { {/* Right column */}
{/* Subscription */} -
-

+
+

Subscription

- + {sub.subscrTier} @@ -216,8 +271,14 @@ export default function DeviceDetail() {
{/* Clock Settings */} -
-

+
+

Clock Settings

@@ -239,8 +300,16 @@ export default function DeviceDetail() {
{(clock.isDaySilenceOn || clock.isNightSilenceOn) && ( -
-

Silence Periods

+
+

+ Silence Periods +

{clock.isDaySilenceOn && ( <> @@ -262,8 +331,14 @@ export default function DeviceDetail() {
{/* Statistics */} -
-

+
+

Statistics & Warranty

@@ -282,8 +357,14 @@ export default function DeviceDetail() {
{/* Melodies & Users summary */} -
-

+
+

Melodies & Users

diff --git a/frontend/src/devices/DeviceForm.jsx b/frontend/src/devices/DeviceForm.jsx index 723f73c..f705af6 100644 --- a/frontend/src/devices/DeviceForm.jsx +++ b/frontend/src/devices/DeviceForm.jsx @@ -200,36 +200,62 @@ export default function DeviceForm() { }; if (loading) { - return
Loading...
; + return
Loading...
; } - const inputClass = - "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent text-sm"; + const inputClass = "w-full px-3 py-2 rounded-md text-sm border"; return (
-

- {isEdit ? "Edit Device" : "Add Device"} -

+
+

+ {isEdit ? "Edit Device" : "Add Device"} +

+
+ + +
+
{error && ( -
+
{error}
)} - +
{/* ===== Left Column ===== */}
{/* --- Basic Info --- */} -
-

+
+

Basic Information

-
-
-
-
{/* --- Device Attributes --- */} -
-

+
+

Device Attributes

@@ -303,7 +332,7 @@ export default function DeviceForm() { onChange={(e) => updateAttr("hasAssistant", e.target.checked)} className="h-4 w-4 text-blue-600 rounded border-gray-300" /> - Has Assistant + Has Assistant
-
-
-
-
-