From 7ce98cd04302ca64bcaa5491989858e92d409974 Mon Sep 17 00:00:00 2001 From: Elemar Rodrigues Severo Junior Date: Mon, 28 Oct 2024 07:10:14 -0300 Subject: [PATCH 1/6] Add avatar component and update sidebar & tooltip Introduce a new avatar component using Radix UI. Enhanced the tooltip by wrapping it in a Portal. Refactor the Omniscope sidebar for better structure and extend the Tailwind config with new sidebar colors. --- frontend/package.json | 6 +- frontend/public/images/logo.png | Bin 76692 -> 4947 bytes .../src/app/components/OmniscopeSidebar.tsx | 283 +++++++++++------- frontend/src/app/components/logo.tsx | 14 +- frontend/src/app/globals.css | 20 +- frontend/src/app/layout.tsx | 95 +++--- frontend/src/components/ui/avatar.tsx | 50 ++++ frontend/src/components/ui/button.tsx | 2 +- frontend/src/components/ui/tooltip.tsx | 20 +- frontend/tailwind.config.ts | 10 + 10 files changed, 334 insertions(+), 166 deletions(-) create mode 100644 frontend/src/components/ui/avatar.tsx diff --git a/frontend/package.json b/frontend/package.json index 097b29d5..98b4a1ef 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,10 +13,14 @@ "@headlessui/react": "^2.1.9", "@heroicons/react": "^2.1.5", "@radix-ui/react-alert-dialog": "^1.1.2", + "@radix-ui/react-avatar": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-hover-card": "^1.1.2", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-popover": "^1.1.2", "@radix-ui/react-select": "^2.1.2", + "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.3", "@react-spring/web": "^9.7.5", @@ -25,7 +29,7 @@ "date-fns": "^3.6.0", "framer-motion": "^11.11.0", "graphql": "^16.9.0", - "lucide-react": "^0.447.0", + "lucide-react": "^0.453.0", "next": "14.2.14", "next-auth": "^4.24.8", "next-themes": "^0.3.0", diff --git a/frontend/public/images/logo.png b/frontend/public/images/logo.png index ef3aa5574dfe98541fc0f55bac5203d79631bbc7..f0e113590e6a7ec456775dee28892582e3afbd49 100644 GIT binary patch literal 4947 zcmZ`-c|25Y`#)ouu?!<*-?fm&SQ5s*FJ;d%Nk)t<%*0>_VU!jmYee?4w%B(gh3rfA zvXs4K5?LC&)bo3ue$VH9&-vWvy6*3FeXs9zpL73l&bec1tjEN_!vFvPlYzdr`GM6x z9CYA=tK~|W-hrWU(J;~gfS30fDGsy;b0J54b0YuT+e$Ot%f;L`y#AXb3-zylqe0Eh=Ttaji5svzFKecebmfaWjU z_`n_>hb(Bt$`J^;YTb~r#lY8n>+P$jrs zu)*6Hoku!iJtZBSuvajW1W(){3s5E?4_r?S-a&}q>EY#rB&dk|%0M3YhcH4!=vNB< zs)~q>k*Sat)*B;qR#Hk*N<@`GNJvQ8+sPSeuC4nQ{a~gd;)=)PkO+jozrUovtR&Xk z1tG1dsECk~LCDC!4>I6B0bY0q0^G|-^mmc}tD}waarAb>;oY!aLWgx7u3&xfDk36> zLVq8>`^39B|D)vP^VhNt7Kk{EAfzRw5dV#aA-Mey+F|53?bo_~%PAigL!!(vK3EUm z!?slAWt4v@{6FxY{(ci|{u|*>@ZSUzZ#T@rE%~J&{g=R>*dO_aeIiZW2pA6=Z8uMh zm(TC66qFJFHS%w!7S;pnZGm%e#Hbz!{i6H<{X6@Y4(fmE{1N$!sf;*$Zht(--<#wY zdaz4W8I%!!?>JQkrIJY&0D$EgXlq;`faV_2znB_4+7>T#N85GC>Kr{!o@0^W11s8s zhCB<5`yDH2h1^PJgw;7Sq@{Lb0bNdXNm6BkjcDBM3Vn|Xo!j_)EAeoT-Jq{^3p=~} z+fB)vk7xH!eeK#z_vuyfS6uK~*xNIx^0G^t@6Bj}E}E%9oz4;Smgl;A{IPzKLwk7R z&95I^B#2XVGC&u|BDRUnvhhrPsicA3d?t<=uXS1twhkUF;~b7?1Y%w(?lXP3R5{CL zebY)45|-R7Wm?G{WP;Jg$&FTy<{VOtDosTz=5HxbBeln^_Y87REgdDM9Iv8BC*a zh*A0V>8s<6+j=oqZdaN0aw$-rp&6=~im9!D`{57JMwv4Wqy-WeuEIBq*xWL0`~sDy z;>+vVYr4Ik2d%e`Vh*9kQ4^qFxV^;#sz%1pRMmp#!TzB$mJP+%+1Ff1VlT`ST9OUu zP!{6UiT{j2 zopU%7E;AExCGPiNFVGEe20i~)>73>;hmIQb%L}4M^3KKtrL29A$_qS5IugC3H_50> zcV#H4WJG@|W*{VDdCsMIEdcoH;$pZ?^YT?|a|U;Gv+d=i;C4>kg6~;;>??yYMU`pd zWNZ4)#1Ua5ky77gr&vjtYxmY5DVxY3=iZQLz47P*xooix?brGD8m^^~s2 z(=KfEV^HtqojaOsi9Zs2Mc{YaTw$%@isI$C#6`d&s^<8}n*7cqUB8V>ETsu>@R(Q} znR1;R65|Tj5tUrX&+%%vEgFFaL}^6UQ^!S*H4g9iZ}fKDw7kyo@EdMaOAMPV@$PiZ z>2qQHlpoX5m@XT&rO5Mg#LrH)DqQCfd>{RDt(&bXiN*bIj_d{t9Q8bVlW6Nb)O5x? z4TNQ{_b=@C9>3lmK-W6s+`iAl1sT5QH$BlvulZ85ApQi{{b66$Rn^q2$3F|#nbc^` zL+)R|*Lw_TFh?^kp||>%Z8&O61`OYn%-BN&M&;;Js?stfZiP3HK248gBGnki1rbbQx$mvA}6E8HL$hT=0B1*J{uhsDV=Ckzy&&v9b`j?Q(x1j9Q6PhO0QD z>$@8kk}FW(>RN7Wdz5f}g*hnkhBa#VUgbLx+BoxOe9}VwyYe=J^-fnf-%J_x2 z&E&g9Z|_G4K&>=?FmE@KU*5C}crNr4S(-8}vbMGq9vg?;R2 z=VZ$k26wi;2gSUTG^e=KcZ~S>{ujkLa`3xeq>=E7B9UW5eX^U$i#|PVdyEN5KZfs6 zt~Yx77VhD*=XaC%N~Slz8WpaKN~~QO-zha6vYQRERuH>9)T%FzCQ7ofi`-jj5~uK! z-swNjbCTZmOeHF)iQHbNNS8ok62DQtb%9!SUwvQj47htA+=)@?EnPgMkhe#z151I0CA;nQm=3$){Lb{ zTWv4w+XxaR8k6mTTDTLXotcy8T{I}Z>xPSj>4$zmt6p-B%WUzaLu_Xz(qCcihD*)P zEtqGzW1-(EUnkm%>j0Mnn#+Vi)LnFze)`%AX$(){`$QkUQtB{!aXsqizA)#E<4?0b z4M(hm2$yz~ib#;CLAonWxkACOuPvr?&q9n0ITVAO5lp$uRMG&Ao^gFtR z$J1myhL|$h7K&`j?SC>(+R=yJ! z*s@Vjo_u)%)%#tdgnez0B(S*D#TGk7byjD-u6x0#+g)VUM$~X~N~eeB$r&@a2V{T1 zRYBLKn3j^vZV@Kfg-`Q#sV-b73WgG>f)KS4*zfaM%8I&{RZ+^+TRM& z?=eeK?Vj@HXYt&;xzB_1Xr%pVy?&QTm~k9OYc|%)(wHy;md^~5CR3^zppf`jn3-Pe z2uf6FGn_N5Y$+i7J#W_|w`bcr55BNfXAk(@+I+u5^^lgboU(_?K$4Eus;xaDHKL(X zhE1$Bwo|d1wzj^kwSvdk2fZV`fX5)r@d%DmBT@?*E5$|Vxx`psYZ31MgU48XkwypM zTw^C8wrsG{(x?eut;SNtV1*R;s%Zxiq^#u6dwey_a=9-`&cqZNGu_verki}EdEZtV z?v}6HmgR}wJa`|1#@w17RAk%!VY-YT*XURE%>7;vH+3{+zoW%6owYu)`m92$lf*hZ zE}EeaFJA6iMJchjn%{j_;CR__sRpVNbXDL^d(Z>kF1zr{*sW`1-MYP7_Br>8#qWeP z)biIAz3n~zOhm9|Qvo2fZ9l8O6XeZOn(<1F=4_<@PymUOx8trsh3eLBAnzJmX>tG9 z%w>5a8vFB?s=TmTyi4;RpB%vsptzQ!t0kpgoEZvI(`=iN{E}g~9h+;pd6IoSU*3Yo z6zn+@QF}^mO#W@2rGDfvd}YX0PCnjiRGFjA%F2l75b-R&&Rr5FnCl^(-=m&0UkQ@eQHncU5lJEX==7Y}%hs&=pKklJD3IWmZbk>19ECc2v=fU>aH_ z+BHuR+Lsa_Z;h$soogbocLOq8Ia->uh>n=E?le{Qe0{vNTxz?thh90csR?`lV?nCW?tC&Y&=W{3; z%K}9*1+9wkZ19Z&8z@l?dLC$1VryQRuHJEPr#Sm?R&xd^cFb_{NM#SsDBMPFfIbSe zQ#`JiRvWA%j;~fCk490)hgL>Grs!3+uK2W%=U%`$e>`6rpQyn{DDWCK>m3z#`WY{; zUPo1I^`MGJJv$i;*$_OMc7@;7`{FxTp=ACKmsw>FuI^P-zYncaCBD;Y_G>t+Wy{3n zwloX3V&|k&YqZRc$ZL7WA`P3DrUP&?bOF(_p1m?Gh%MQf`@Pqo8YeLsid6irwdw=a1x~NAlbdbSk1s_d&B#Mf~&#;L$<~o7^gStmC2;djPCb^ zS$!2@fnH;~uLxVIKeYB9WOL1wKJ!wl8lgqAlJ99C6L`6G#^|QI*J%_a@Y5EL24dky z*olQPJjNk+Z)vD#TX3I=GLg7n@9;)-CbaJ!<>Qm|x=EzsDJq!^_%*f?4cUdcCj)A^ zae8g)gQ4)sdF+e@LE{6hh~4MYJ?}0+Fj@mAFK%s+&Y?K4Pt%N!sitq?E;lhXxTov% z_}?Ucd{2N}P3q;iS?rFE>b|O+b`g$c5G1-9y7;CmYlbAB{ti85+z}Mjy{M3G>AR8K z<)J{eoVa&p)bL!ExNF1{v}9-0^{D8NBuV2-G7a%1g zS4`a)R!X^>$#@?Ph{KX1nuEZs@B~D{i^-=x@Tr-*_`3V&1crIwb>R$oLUf#kkYn^l vnk`EXIj`nN->{}Zud-k!_oh8YdeVqu|N7n31C3_`H7|K=#V}!xjMv;nW zFxiYU4(c9Sm`^U~WTtwBxKZxfvdCAiMIr@q5#pmf1O~hYUsp!r;$iGr)dc3jd zxH}4GeC6b^E75VZSEx^JFf!Dyv6{Kv&8Zqt3t1$W*KDjNt|Y5om{##^T2h$Fa<70d z!R@I4YyR)`e+c{^0{=fnfC=U3M-38dtHj43Z1D_uRYZdc{kQ~6?n1~Ne_Q_rF=UyV zQCQvf74maZd@K1k3fN+t2NjAu+7ui_X2$E_)sX@EJ3O2{SrX&+yA_r;>MQQQ7lT0a zY0Bp6HcjQ2XBdCOojj5$ULjfF??Wq~A;DM3qIh;1Ua&d%)L0t3{*T7ecn}4&#cY+c>utTnxjZx66?9CM`|0Nyo0g z)x^t`(rB|v9C{Z8S+B4&8>^%Jcr=@x(`?^k?IO*ux3L)`(hw?8^Xqf?5`2@wiX0NL zSB%NWYzO$@J=)`9N@JYWmyG$%$9z+7-?1jIk$UwYYQH`W0-^F3jhlSf%pPvuB4?30 zN@LBn=bgd>kpecmF!Fa&g>cu(cTyZ%ipb&5ycV#5s~b(dHpMF=L`*jZzc#X#G?#9t zkzO<0-iHsx^Bh`?m0wRJy=9g^XJgb<6MU^^0&68;)`Z#a2fHa%49lSoqX>Q2U>1RD z6;5C^olw9$91GGQQ+Qu4xE3%T5(wg$$t3MC%bvKklGw#Ms)7|qNf`2Soe zKY%33gbdwW`9gYLz&NPeVYW1skTszO@i`<8x~fu$36n1vVel@bjg@koS=8h)Wv>^4cukz03{#y`U@$T&1h6TbqQbf6T?`Yl-Z;EdFa;4YaD~*Q^BXcqew(DFI?=<0+dUNol8Nxu9iq+VXorL zW?1!bgx{+}3$XkYZ9Mzjt?HnU#Jd@z*Jt=TCb-~d53PW8jJG6fB`7572WYDJcCUnv z5;YDx5k+*5j7N1)2T`LobD&Imyw-%3?@t{H+C6}!w*Fs@(f3OTUgvX+nExLm6rW+7li%+tn8c>&2P8o1Fdj)O5wriZX!E&}c}>s)U`QQj zx%3{VnezWw+M3q|K;KRx;^Mq~0?U!sQz|(Z{xpQtT#Ru_c23xbKyaRu1D_RHy?Nj# z4w>rV-;-5wbf!!HZD^jn148?^#9kcD(gj$>X+nU~c?iJi+!V{g!5i0d4g zhYF79wJJL74olhIEFWbzh3@NX^WX`dkrtmzcYe!4P0Ct>x|XPX7dK|IbLa!-BaoH5 zQH&oB7Y1~aAkqtdnrmiTH7CPYON9Q{$FXjxSAdG-Jjc9Mj)(LOfr|oYe(Qw>tj(__ zAPb``anN+&zS8>EAoX|XhFWv1C#Cxi%WpysPXDlBzUsyMJ&$JJ&x6Pz>R%Ef3^FDwF!i0a_i2 zNDf2VUlf=hFLL*2nT!7Zdja&`zZ#l-=U4C1eQjL?zWeopzBw>%rrUSX#VMgu!p@QM z{4hF^?8QUWP&GSmT@2gLeNj%vTS>ECIwI z=D`12v#NwN@n0H17OBpRkz2OX9cpH1uDOSDX!pb3>HQm=AwEjz$AjP`TR2io|KI+F zbAGJsK^{P(3QJnZkU0C>1CUwffqb}JhZ?KZ0lHRG5sUvH;Kt4jx@3gR8M@0^hlUO7&Yr#js_8&We;gl0HHfNyIW4&~VDSc}qcoc{ z^N=N?2S99x-b@bLYp4EB5DgpQ8R@b7g9(ZNlyj@C02e<4-k4jJ4o#LFCKCuW@}btG zw)?0EP`0v%EXPo9mG1QaPbC;`*?!IUkwcOjPLy9Alc4&HZ}R^+r-|DTGc zCgbv^y$PsR%r=09bvON@e+RrQJxogkXphE~X2K1|zN(-bI!v`IDto*o&T{@<1seRU zpXKY6P+EFfTckmA;iZ~NhtlRSF7B|U0X~a4%$$;fa3Tk}Vw#Jh&U?7#fjmTdva5zB zF(hEW^176l>p0&M;`jKF4ir3e0oZ41&0Zt}CH@YH&oTV{pPnj1T=Mj1-)lhDLr3x1rPe?n;A6cr zN~AU$y^P2nP?|P3?LJ(j5;@u_oG{X%kSK9eli$j=F3Lx}C3uH;>d-Q% z=;k^phapSME5X2wK1ITfZWpI96%kzH?k9a{87hA9I$ZunYWu*GZ30{Usq!+>8HHd3v}+)T{|6wj4X zk|l!QFO+rLV(S%agXf73zpEYy`ZUKT3>K|J;WRaWA7c)44eSB`uNy}h^8Exa93e|^9wal@RRi7VEr+JL;S)UlwvM3~64fh)D% zX)4>U#lyjghm?cF`lm`6g)jsc&>4KWx~`cU=^U&R2@Cr7YcO{VqE zUJzNF5y5{*HwS4CPZ7=xjc_HWR{ z5RRYk?1Y$lXA^mX$n#l;A`_Wb?+$qG7XPtu6O@wRCstkO81<(i74=gD^hNS~Va)XKw*wPnjmol+p+X?>hMo zko554bGI&TVHoTJwaJB~J~kUcmmZ|tAqf^%+U70Ft!K7N5iaHwy_|`N(a!rRsUqEu z)q-UbmK|I+)~bG!d;w;XNMtr4c&mvt7`J+8ACF|N_nh3(68Sh`1-BaWWb+Mcx0@#G z;-j)N2Tt*s@6JNzn$g?EdR?=2_z@9IKzJplQ+WDt>*>4I3JglZAM%XgsAoA52#l-b z?Z&$8IJZ2yZ%S#W5d)?Q$f|K&M1{R!vWTf*CINye+^%%%i2i>0iH0^UAyrfyif|G5F@@C_FnVl3)ZrvVH zK>ztrNU>#N7l7S}Vbs(SY zjQJHYCw`j%LMLmR&RmoFvRg*_ifbQ@3PZS<+Gjp{n}C==hUa5?gr`F%Nbm912!m@6 zH@0+xy%72cHK|KUc~8qVUOD<*`Ymcc_kAw*l`?X>h%_P}l+y#$t#L&oyXCL=S7xMvwpstV0ZKN4Qh{v+x{)=EY z|F;@<4rL#Tna^T3)c+0G{Me=g89{o8qbq--hW8bD8OA=Ds@s^=z6hXXXsdi_x5boS z?hiN9CsJKRB|ZF3QSwYS_-(tuDo}au2*1m1&TVPvu4pX_IIEN|28~mKgop zEs%wph^dRdl+SJsaITQ>^wX}h9;brjrPMa9sa}%034Mw{KLgwZF5Nm9`f9rs*M8`u zD8A&f@B)leH2zqw<$?m{nci(1@@G=9(5);BZyRIP1_*5Jgjc>GLLvuR*8NhS&-U<+ z;5cuuT8nXxN$ms5u?bL)pV8I3kaLEP2oz+W{S1+eFbRtQ=308sODr#Q?QI)cD;tV} zJIjt98iFD{Cw=fD!d7&IySR2Hzwc$ZuLz-A$U1Q~HFt3R46&8_76NaD%#}N{p#BG5 z@;$qyeZrZa_De|gTAWoH0cI%`BY@p6H47(leqaK!B@%4}d zl+gV3-JAZiv}_+EUI5enCDB_gBr5zAA`dxk(-e{Hd%M#^^PV~~+%-U;r5@8kj5h11 z0)pr+zo}MNAMEJA`DgrEQcJ6ZZ@p6V4G=31Torh`J64c7lAl~Q4smxLdPkZ3Fhmlf zBuV`BJ8+RT{H9Hg(ZUHmX6kkeT(+M$iiaF>*h*!DgYt5$!)AyMzt@859O+FY%a9|4 zuPeNz<_8duKA9#4UV}wP46W32p&@9(RZqP`Odp^|qZ(1x1FPX%cf)G4orTN9Aa9 z3kDipoY04$BuX4Ac2Ln^6aQ{nwibg5eJ)$3q9F$%KEvHu5{bEaso7%J*#F%hc%!2o zO9S;j-CPO8ZzM_FkGNRXPEyQ=)L@)qmfq-=zAyngfGfcJgv;h&i#uMStWETq|*G$Jtu!0EgL4H;eZ?S>A+%g6Ml=WQF}tpy6N!R zF~!PlEG=7IPnkZCEt7k%N9FK(MXt4NQ|rbYGrq?h2-RUjp7I&(2K#q{MLg||Rqvo7 z;7)_8_Rla4^0Zv{OykmoV8uGO?V%|bdxc`EuG*Tq;=OirC#`VE!CmP&BrH13wHu)? za5$5(f2EXnXG0y<17su-@{Y>L#ZGw>g#WvlEd5s<@h z$!h=>)I^YF@TR<>c@fWpE&T}q*pbS9P%<8`T3S&aV7gxzY(dt;>r~+@78Ts{8?F7X z02S=l;aU1nGBDIL`d=ZxCY{5>$2bg{o}NrIO~b)-9=~(})an z^;faJswoMG8M78O_tzj$ajh@fVN|*bh+recPr+w~!EQBPwXFy*Qp$)}Ej7?v4*q4m zu45ia1kvNU%&?(g-eSxzk2xXi=#;Q9b(gfpU{Es9OeGJ0aYz@Pfhz^6YS>osyKp%)i z4ik329F(YTAcL^S6pOc?lWMBco~^Hid=7}$EmhAfk6u|GS~~g5BF4ar&;J$E~&ayP~{<0)$(8$f7~%yxiaG&Q!*po5kaG!cjc!P z=p1F7v?QFlvxWv{j&{`FS>i7t&x0puHy^}nH=^GA^b?a$_xw(tv zrR%Q);z~=^U*-ZK+5TN<&H8TO=Ss8X6`#*elC(>K<6DO>vewJr)=P73ZR=YpALQ^o zX7q_bj(nc|O3Enh5xX?i8jzBWP%qE5;lHpAu;a%oeWDrPhv<}7yfb^B#Ey>wByoM@ znD73A=lxu#H66!@SmFf|qU_5_ylAO`#HE<1x~V#!b;@iiu=CpgnliB8m5LxC(eJM= zA(HuRncldfq2djQ4Lw+oQWN9`5OA1sU`6hAcol6DtwWek7#U46GMo8@NHQ|qJ33Cs zrAJukQkJ+yY=`NL=klJfFS(fX0N9pMo(txx;p-vYdb*!vPsj^!nn=D}l-r*C1qg?` z3;7j^kvHeApC!54Z30JEX(DTl5}=s&AdsVkT_S=sR5e9~JvEQ8lcB(a{Cpz^8x_lg zUlS9UflG$oJst7`$%N~OH(Db9RiTmhKyLJ1b8R<&AN0S z(z@};z*POkQNDj;R_s$t>Sx%CjJQPJ1UPtX-H(6w3-PN3_k@ylkwd`-QlZ=IBh;$H zJZ1A$5X?Vk1&q$5?^e^*GFas7B!lwGyT=Jy(uK2&F2WCA$wLzII z+VMjYXi6*U$07t_4ZB_?5@p?RJ!Df5wA=c96@t@5Spk+fSDMjHJ?%3mfNp9C?xOa+ zK~^mYw)1}nPWI6RiWQ!1x`uzJfHdcv#BQ&gKr!3MTAi?0=B0=tI!jYb1rcf%yAwk* zjM!Jf7s;nSzU`XbA#LHk6ZL69APXM)k9z`JU-iP_oro6{wSQxb8fAg&Jqr&fBZn@$ z<-NnxgRf$Ey7bb{MimWl@OvcsRTHQYNt*Z|FR+_lXjNSp9ol`Q z9I!;1Fm1683#Kxl+3&Pu>pEA!NM8q^Le!cnNW%PSEBz;@@N6n~0d43eM?@9pPT1Fv zc(@klztCVOLQD?sbT~IVCK;V0q{2r%ikSAEQ_Lb{TNNXo1rv!57M39xG(fqdtY!My z1c8l?Dv|WnqMoD-Q$cPOCE$i=pwwGX^#m5}zeMV9-S`Jk=#5wsG<|KR{_}SM!i<1? zxU5pWz4L78R77(td-T7}!C<7Lvq59Hf&cEYYtZ_d;6MOtdS?bcArsu+4w1XK-y!>%B5sV;1Z&040r zOh9S-6mXi#F+GBq14pnbHDG3lQU8)`P`|lmyGbbX<*OHUWx@XbJH%EVg1vc$zSMom zTC2a6unKiAHy|BYj3I=@|hsFZ6|^b z-wF56!*Qwt`2pN_VO$xSBSseR0}Owi;`Jr%cymec(y>rAZ&^G0F~>D1we@Q@#A*hiSr~2K z7>qs-lzvoA=<2c1iOuhucj-O;#q!$HB3`ui9h;pbBG-;zD%emYpodf|%$3*j@1Bh= zRJ9Gv5+4-nFpq$=Hm%rN6W{lVm_}66=5<`}D0R`32hEXFO81*+H>4|@rdEND1ao-h?;S?&eQ-{@*p z+Xz6H$Al4Fxz(jZv@}MWvnqq7Lf)Z&FCsz*p5Ig@Vs z_4+y<&nRN?aprVYPtu0olL2SN>fq~S)oj0=9+L>uU4L@a&{d0paS3Ghu1fxP))0wD zdvtMT*Co%Db+~ZH&Q#SgHJQ1rnDQ}KVjG2v!}3X#=bAP-`JDnx9t|+bd%36zd8E|X z7`#aQ@4m|H{S+cWIP^j{9ljJu71mriqif#?Bx|6^MMxVpyY%ot((yO&?jkQ&cZTZk zYYz9xxjHdwDK>BSF)WtsmqVQWqyq_0EM?lB7&KB^fRTR!7+!svSu^=JG^^ewmE7Kg z`j58NQ`5b0dDJ1rX=h2*H!F*PeQ9rKR&`uBU_M<2$HVDFt)OAM3xc)Y=8?QPdI9ad6nusAi6u0Vl$ zkgu-nF8#DNNLRx<5mG*|H~WF(Lo211?D52Rfgh_DHG=ZX+70e^e|yh0Ezaf|)i}eb z>|_8xN7Kp2ZgPUlPK1`I7&E4V`AvG1@mi}8V1(W$4AmUHXN;_}Iogm-j5hSe-L&I-bRNdO zi`Gw2)V)u!qHf(Gf3H$k&`WUN;N5??6_!wVyNuo@tMwWCo0q4YK@=^)n+Gw-{nE!B zYR@HX_P|T=hw=|N7ww?s;M2>WiOgJ|u3`;hN5=#4nKQHmUm+E~7Usdyw~a;N!3z~g zkLROhR5@0!>o+Z+LpwS_7>N-;|eZ`!g8c=ZqL0G`{vlYg<=vVz`fdSn0kOw%pk(7=i~S*rl5O<#uY zU`?t|ek&YMbFaL2yM|v%e0BAEgZ8^QD`-djcSNUkB>nxtb@xc2g47HX1bd{f3|FB8 zm;c)sED}ebcOd_*)ABBKQ1KLIU{b9NH9l&zMb(oG+nWa z)WvqG{7FNC5{^C}P||=%_q5+z4N&hQG<2 z-V5mgtNo>7@tS5ika{(}pT#&$V5w3v?-)EsHWDAzr>zp9PQ}L{rgW1fPjGT#M{>FH z@yIFdsi*>ak8H-sI9!}A&)^Yk%LT3{4qQs@Z?KCv`WFW-U-EuWpkU8_sgnLdCir^& zNr5tf<8Z%^X7t6(pVa7?ww64YZERo1EM2x%k*Oap8Q7cuz~Pqf86~Q%lF_=cVx!0(cF1r@RN@NKtx<;ahJtHSn{jn3OwVPq*nI2^o4}^PG-piUF!#17H9r32J zGbc<8J3N>OQ$zVNFFY(@j?AXNRa%hGmTvMcoSW$%=|thSJn>H%fOxkm1MmcuRvhOc zZG(Q;*pfi1QcV$flpv=^g?6MIWe2$xRgtm$i~`Uz3vG}1r($=+fl+QO8e4l+aUhST zOd%t}k)05A5^SlDs29Iobrv=R@?7sG-WB?Y55-n;GhGC1~9bFEbj&{{K?#XY*p$}3aAYw*K&5_%$%)!6P6m_EGc3nz93%#;&`3jf;@*J-W0lI z(T@h-2!1*!7M*r7b# zU6C5oironZM*mg>_8hyNwgA{HZv5T-!ROFyJ6`z9{u`2#&mRs2ofn|ldkP+0N;i9Y zD}JUBFQrDi!&fI4v+kkG$Ec!=i2-(}!t||h@W%EZWt#MTh)N)L?<8dCz9mgiVRY=E zI(>S|xMB%7WkZogAK04_xK7cmZ(bQhX7|kejcfE8BIo@-iOO)@>RnUh-@Ib={Dr5e zfOwwS)Fulo4D31fRk8jaB^Ge%xN9xb;%aPMTK=z1frL7~e5;lIg#z{Ud^WFVwpT-g z!d$b8Oi4!)#0&SIat3k240HybT+UZ`88xjFbB$87P|yrZcdI$QoW}&tk`?!&3I{bF z$>bV~le6aEym($}D-axpt5y^#|9TdH)zyzJ>M8f=4C}EOZH25Kz~aA!&0<+;F8)UPy3Vp@Mjk!6l)nc&w#yvgfz ziLiK5&?=%iM&{$ysx^qbezLy)5wr?y^zVT*-l%)|sor%N>>hI;^V!m@JOl_7ZYC+$ ze@1CSg=`i2M?$ek>=5^wHQVF`XeCkqp#EDCG`UA7IFl&igoE-0JpJq~=Qasz`9uwC zhZ!nC3&DlRvn4aq4wd)To-p@aW!J2bR0go%{S+66en(AbUOp@fF)F!dgL7D1;esVje7P#8z8tltDvpWpP3p9j zJE(O$Ls?ihz=@6c?8q4ng(v^HaR&e8T{NqH1RwlXr&u2NBH3-VA!-E|clBvdV@Kuf ztA4kQwe~EQG0jGP`QlXuQS$1*?_!lWH9u`7Jm#BXAyi?H;rRP+D>K19E?C**965T> ziZL&ZaF32`#4i-^Uisk)3FXlmTih3=3Hb6{lJgd2LtEsWQ~rR@+wi4e=R_P ze|QwyUIb7e#PR_O)$#H>Yl(b$-<;k|C+nWAfJ5PdQ9!`$z?(F5e90yfW*1;*;#R-DdNaa07D zM)!97T%>|#V7vwW<{dEQvi?e~?8R$<)x9wJ9zt_?cO7@;u`#J1ZkS{=98pn(Q;8je z-%1F}zbM#v5~6dCrYZSog7_H=P^Kjz>$Vl(NT5&NdW$6FQpp#!tXAw}n@RZuu~*eR zFb6P2TVkby$npqqf@jg6dvu@&hzF3T8b5*hPKstVXb}M7@sU-f_XVp&ioWp&?38Nq zqwD#psTYpNKhdsqNFj3#k)fltYqPPA z1#C}vh;-acV((Axfy?;ExX*j=E!Q)xXY);7$H7kmftDK;#?oBcSd9P|YbZqi6z{6C zyhP1v$d9#2kz-tIKMB~_3P{gts5#Qi73SiX&%g3iZC8qBvjqqb*ixWQB&K!pk&imc zz)$}#I@2h3x8{_Mu^)^r)E_P)T<%}UXIpqELs@GN!!`m6 zqJR)jd$mvxti?t$;Nk+>9*1>X8cUBF(z!A}4<)d1V#H}_dq0s`=x9oK00MqU^+AB7hlf0rg+SSfD4EHtZIz_ySXNS;m6 z%?AQOATWXNYqxXe^V+A4Fx5%Ngo&Tp`{rg1h%$B!0Ee5u4%@E5&P28sDE!R1{Bq0X zR+0pO#;2!Y+g}kx+M2Rc6iE`hL0bq*@=sHig?X(AkA#owCHFEhuoxtE(%!+CD zR#cu7YC^Nk2bUyyV1L&?*ttk=su_+tkruEbI7ku|?)Uu%P)|~8Ir(-7AnbP7%Zn{y zoPZOB13o^tfzt8pl+3`cEaZJM25r#d!47}+q-2IhMuv;YE^z1XOun(rBbB1dhF}VG zY^9ZW|Ddv3d0i$r`L^kX?*Hryn)t1upWZ0pbOQRV=(e3}0b@@zB{KqjiBlkFT|grQ z5Wnq}7ry1^7j1l>gUYKL`gag~1+A!ljINzrb3&fCa*5Ag$<2ll*m~io}4ggNSUD)=wIsmnBfw>b5zu&tsad zIkz?3(q(i``XIPJpWD*Sgh+Z9Z1O5aEzH*ou;!s%$GvtA5@LbTrcW{+P*uD>n|%dVS+ZqWN8HQs<&X+UWWVAM0ne!bTBmB1U zjNDLFKHIH0ImXcG0Kz!WZQLM|xVpL(CFK4=^Mg*s95z*M`sBBpP1Jcx757zS13A|= zhZ?cB<)%-4b7Ln^a60{8PeQAz<74|fi?FLv>e?d4sZEip`Kb?o+g(y3hCbWzicZZp zjQP&3MWopB(-OI_Cv`qd@X)C_R%(`oZKB4*3)8^+$Kelnrl<() z*op$SlJ_@&j$P*`kpa>D8XVS73a(VPGs}H_Uf+Pgx}+mcvYt~g0PIuw*W~AF>Jij+ zsA3ygG%sam)E$Fa#738{$&NW;85zgtbgL)|%jXGmxVV1kDOhw*#BY0bcyc61I*o3w z-!w-*@OO{u5i`3iVC)raOP^aN&3aCRabs&smY^>8Ex)q<)jiq3Y-+(c{d}+s6)#Po zhDiR~;A5L7mb+O-H`D|bPe2%c@&Qng_0}Qb_Hph{f!54-Ue?BL?}V;oeSdi7o4avT zPo0%%W4Pv%)qy9mPqOKvrXVN?{v1{`auyf&lAVQaeZFeanm3es@a&%w+W?8z&MrUg zaC>*TiOic=W2krMiqfpy%d!O;xuVMB^&A!+N0+{+spnZ-2b@TzO@E-D@9+YoT>tvv z)c{$Pc_*VpE*+ourGv@(=hJTKVU)Zty39>a(>_=GO7qcBmypf^8XDDOV}DtIRBm6X z`RE^u63=y7bP^z~<=Q=t{Um*ja@kVCgW40_!4Bev*~E z4$aF`mbz}+KL=U9nRMq$eWndTW&r;%Hh8Yq3cm?Ja=X%y9&EUOEGX$72VxM1owKro zRVtud{}dW^AhZ_i!dK1bt(BK&PglmHx@PNp<$T?(($wqE zHM8llqJrx5<6Ll!_GFZl(QgY2_W+J+KZ<(F@-=0^``ZylhkngpT$+rc&f_*eaC|~; z_sfBK%im?$BCL1W2Z#P)#Lu54oW|*x+@d2?{lU>E$_e5hjBZ|>DCGHW=)DTC#!>DY zKzs8?4hi7{Y^L6~^YYY9fT&dKxZdAJW0(eqDSmWHXUlo|%$DdsC+HvScR!xOoP&_e z(y8@%8$LrQ6!rA*w+ZRI8qDY3X0PO^S4bTuh+=yIE515IeN$ZMLRew{_#I<^%Bgr^ z*ZjAbGfAxgU+P|I%B=D7Sr-ZdQC+89hUWEHT;#5>7gSWVwnZIXP9~l?e?gVqYLp%R z0J5Y*sKIjM;!JLe6KMYQPxOa>kAWN<-)8P=tSwe4%vr;*s8~7*80#-Ct@;8PR13?? zo3I7kEWBL6_VOJYHW@32i@Q>F$J5HQC~2LZBk2!E`3@XaJ`(C&!}I;qXt@cx zlWdXT9gkd|)rYrlJLct87+)92YA6W{5BCJrfaZ297V3dIcbOR=wT~0y z?9**_>oV&DTkS;e+u8%D+%=$1&=N6HG(`OWytv=T^=Z}rm{X*dJnQv`r;val$TYH)cCxLRVX@-Ugd*~daGed(c8h`?i zPK&x1yt6~%@qI*E_Xh^CGgkqEoF^cO8imohv;lNpK!K*Vr^{u7|7;%*(5*)e=Bt=< zY<5ipRB*96Vo}rM63rB6*={eU1CPo{Z3xCWgXRSrM=uIw}V zNONrfkZ)0e+J~d{cz9-6_Kj0TkRq_52kS;PE1d^g>njyglV6En3omMumDG?)`lvVI zgDo%^BjLE>T)Rn)rDa14u-V-H_GR+GBX67%^bZCkgz0!;f z1LF3RQh@6VuN+z}PqiF{-=bHwd1fyk5A=nT9(}!o>0+>jAOm1St`5yp+tLB{f6eZX zP&DPj6a%3Mmvlbu=AH?WGt4H9djlA2dCd+*siw1>4lF*(1GIu3md^~FHAK$Qk^DUl zx{-#$9%*2th~{5=q!#un5RgiTeg`G^58a@`3{N|8^O-w!yvXM@{X^O#I(l&rV1$U> zDZ3bva}4OnUJg{=sJw?+oC7-7PA#Bwo!OX8X$Ly|^PkYB;z-&(NsLj^kx+%0snRZ( zKjR?~O%S$6SgaIPAh=`;zDbFf%^t_a8Z4cRy4J@}9-A$iO~F0RGG* z>eS40;r56~f50fjJ4HekQ*zaXDH#BOLqdlgRhA8-s2F8{c|LU^lI94@iAu?Sr>10P z;2eHH?<|bDUJ?*G8)zGG{lMkD^j7HHg{ep)IPE-I2i#%#)F%QXc*tj+^X&$VELNKq zz;po%i3;Cz@_THIvg?R#=Qze^O0fDq4P?(G5*Ry#fT`>zuZz?tOjjltIG!;o;^E6` zT`_Z>=N)@?NMea9`kW&4OENIvd-X)`qAvU8{}kw9M6kMT2}F7striAdDI6x=Wdd7f zup5AQH56W&r0UF4!q^Z$;amBzsFgEcTs zKfe=Ix?N2X0Lqn6HdEI-D9qoo(%moS>ZNpQfsX_(G0|Mk|G||-R1tbZ80F#jO8om! z^uit-IPy7|(t*?r{xD8gAs+bRQt$bmk?rcOavZ}|_Dw@@45Bl>MO&fx_`EMSU#wGm zB`)dQA9TV~fyMa*;U2nTPvgzwtGD#95;z83ZlZtAK@yGpRR_gJJ(x()$7sH#2_(BN zZD@&{GbKzjflV{mds4ivog1VjpqY}}UpbWgFT6XT7>SQ!6QBTQCDE+YJ0~js zy#j_hti6>Ty&u+XU_cH0(Hh_fK)>r5M`a>~@_Da+c(=vPm*LbVhhzQ&qHl~eOg5XA zz(HIMhg8+wsMD;VrIc~566dC51|aD&8U^a=+gcxVXm}gO=z)<-ea$Vv$cw<9qB-t1 zBVZp7U?fw~MW_=Kwc{Df{3B6>LA9(>urK~N28AwK!iUH7Dc5Mw$>UNb!cEC^z@SDq zM-x$UOKLJCUjg|%-0YdB`M;7WGF%$AT3xVqMb~SdmSd9-i1+_s;rIJgV2LhT`DFdN zODq+zzu)TsLjmtu)3O0+C~y+*Ax+ShW4bbWCipV%v?twgKldu$%-l)p0VZ*oEA8z; zwzzOhvjHcTe^_hV%?Dk69fmyuSc`Rc=eqKpYuOZfd+qI2_B)Lodl3gmUUa!Mp-h=} zeUWX-*KfpbkDRa#45^tB!d3yPbslvIO!KnyFY}s*!S0m*7;1j29Ykyp_ zd9#Q*uSvi{u&$-UC4jnFX)-Z~@&Yd-!2c!i%A?%*m8$E#Aj6Wlan|_^@M?+!czH<4 z>}pourim2FETyOGyD}l|^mIQ5Bh3q%p1IX}-KeCfSoaUQh>@dMJDkoF=y{l)-!bFM zqv_2P@2-uIC~21^tqa$!s;U%W&8T` zJ_Z+P>SXkKgXh7^ox2M-5cPq=hHqoByfoqM=``Ofm9iTOk?fW%fUNn==1ghEEp?97qOw; z7dgssc{)I5`39lxiH)63#>5jnv8q_xS-bCxYbW-LWu-fk#;xVYtz5s2eCutl@)*uYzZO%?d2V*1 zUS>h2wkT|RdT2c_ySGP(z3K!Cj0%N#W$5hNI-n%Gj)Xys*Y_|IKgnZ=NXbj9~sfklqNpH8(ju#7hxs%gX9U$a*hc>AM8+uQHJ^CCGxzioWX;tEW@t49PTXL*-D)q#I0w(!M~XJ{QZkuDx+lv-DvI88s6SdQ7F{8e{QH zQxAP^#$wn3HLmdl=z#$=_ro(|YWU$s2?~S7rGJUWO&YQ@tPRCay}V6{NhmF?o`p z;7TTu3wTY8r^*;ZPw3f^Vc?nSQ_`o)n;Qj}dx_vD;A(1A$oBXhp#SZADb2sBy8Kku z@=~A3w4ri2V4pWcxPwAc?WSv1XC=gJ=#3ESRdu?) zbGGTzhxdwvwArnXi@5hs<}qtIv(?p*g*D<`D`y6%2z2$hQ)or!#~7@oE8Tdi@zKW) z3xaSgNS{_BS>HiI7&JoDQ0R`mOT2qko>Ccd`^}R7ntG}Hyxlh_A&PiLws-~G*>?x_ zf`j?UCg(O*~(7+3MbNhQ%vvJ6cv^V>633ukUs!-8rs!Iw=OiP$vgDS#mS`h5LqRR84+r z39f0jVgBhk;1=hKaSaR4E8{s*wTk^nqu5yganIO@7YUj}Z&&&m>$p#w^x47%Fjwn? zfi5Hj=t6pJ8jsgi7b0dHqnysaTUnr)UPc&Z)?g@2xT06-2$oS#cYjaG)#fzJc!vS(50o?PtF&dm;Hih@cp?TH8nrqEQ z<~ga(RN;1hQ>CftRO64p7XxRNXGSOEWm_Gy!HwtD=L%;+XKtc;wA(IYd!iITjGBS> zuLcHzDHga*b3@+phi2|`y-I}Fvge9R`w%4@dP}0=kC2YI4igC<-sRLa54=03-`Jk_ z%Nd`G=b3I{RJ9?PwwN~TU3=GO0F!Tg-`iA>sp&n zuv3}1PEh$~;ZRT0DBSd+PFVRMU%y`CB$iIXjW;h>+KF0Ecoy;8d>sW^eJ){DgAP*J zMH#8A&Yw7ND-G3d)+5fo6(9Pmd&k1K*KAn;drS#*IQ~9q4r?Ztfn*MgM0QqCEOoY4 zVEldHo);{4j=65f7PvF?8~rPkH%Qa(#Y?=rzUWi?%vQBL->xf5-V@YfTw|_ojpe;t zO~kvdw(%|0c_<=EP7KX8asjK|wEq1JOqZvk&NOL3l6i^_8}52xfH+lr&L@~B7N2f< zPDp5i?@Jr(au$DWNdPU98y!_6nCmr~VN zSdR=kS<|Mit#WRM!$KzbG#I4}+xmOtjxg$?VK=3)74v2tr#c&WMTuBbVde3hFEO|q zuG*Y=M1h1}d`NRV*`RY>{yk}yNA+F6_+lcG^b9W(lquzwb8PH^v2Lh*%+#I!!E^tC z;9X%L`J|w>;oM5Webv;`UOQ|N_nJ=XWk5j@P2R#e5KsS_R9!>vF(X;wT*(IA*$#KCRPN&CD zZe|iVk;v0A&@cw#jbCjUAhpDzC`dE*@>i~8c`4|}a15>A9=KGyl?HoLvHwnP6opZ0F&5WTDe<>Mi*U?4W57RkM{q8-h)?jW#k&~(~x1Y?pZ@&14BdZHU=7-eqtk#$qBZvEvpNfoa zAGZ3aULEBci#&}QoSZcaxL;*FMUORR->{Sjphv!c_HhJg%{bl9|35TcbzIY5)Mms` z8K5HINI?Om8yqD9BGTO<$mkMA#}ES3lE0_kI8Seqf*N zo_o%DPCfU2quOY!{LGCE*?j$`Z@u$aIi0^pV{EIorK%7)7%= zUUxBwwWu|;*OM)RYh|dbRtDjgZstaeu5Bx7`s$`!RR*^XPp?@03$N`^!AW50*mh%t z>tlmUa>~jEPki(jKM3y}FAPeAWc^ZsMslydc2&)9HELRN`rMqwc6FfBUoW?BsFx?x zaWN2EvqG-9ygS7K$WJNl+5d3iH;a7^UP#}!R>qCpsM=z|)nkukkG2R-{a>HDs5{+3 zjUHm(5nHzn4o2Ls?0qLBUaT0AtUtEiW{J5t@_)$}j0DXx zlVn298Sdq$de|!C-omQN`*wE1PBcP5|EPSOd?s0zxmqd`G8Vq+_{K=0(I$M3HX`R* zkMvcQ_j3<)YB$izLKDk%bTVoM@9)c)KBzKarzVtlk<(vz8s!sfk>_z1I+qra)6qg> z`n0c-Z2QrBj@SRtXTh{OpSIkGwO(Y>7)T}{WhZkoBn!6tbsDAD_veVg82$$Sli5jT z8%=)C+VD|HxWkMX-M5D6Pam1qX9)c%C$4_h&@AR7m?L5^Z-w2KA*IQ`ub%gys(6*< zQS44P0D2>20xWV((`tU@3B$)Wno=fLH|X@(eoaQ}vg-|+12&C~9XX4Zl}MKwCHU^* zoias*jZ%a6Tw!!)i`Q`3)O*=btFkwu9t8GJPxGx0TJSCkxLnx2)MA3b-M-Ha^1Eso zLrx|`6AYQjhtN{jU9~Scc7A1T-=uTMB1%MG_=o)!Bsm0ZkCH)&rq#ys5fx>^99>tf z8Y=M{hbo+Sg8+1L9H|*a0}oH8yJc5-3jnveR?(vFSF26@{Mpww`TF0Et2YJ()emA?>0#BF0Vy)Nd}pM7_&~RYvcPnXbS9=H z(BW282_mm>M8z*&^1e{Vp+u>!hg`fx#La6jnn<~CHnP}Pnw_Kp<#$`!>Gca1!-t1@ zhS=#T8)T^O$(x7tM6O~v{6F89>N6J-7gc=E3|OQiT3da%LngM(NM|eys&c{-g?k07 z$|-O&^hJ&cYonTwU0{lbIK)qs(1o|r%>1{HH~0|L@RI6b}=zG+kp%?kyLHbDu?;;1i57!|kctRKwi+)iC)kRa%dt2}_1; z46N$=ZHY+blPo;o6nJsRL-Q04z6{FnDiJ|PB?nOHHe8EOErM54l-(=oU5%k9?*)ub z=?vI?ZSd)$w~V=A3@NgK?G`&ni3g}Z%gXTecTYriQ2L=UiFR%{vbz+&OC*Y)@;T6A zoEs8(2>nY2>vXMkrReGGiL@haQWKU zg#s)Zy;Ih4WxB40=nnmjaRP_9ny3OX;D67P-ZpZHq=w0%k21ZOs0CTbIm6~`!to29 z7C9@7s_Nw?bj&v!U2gwr^T0I@O6YY6H%?d_C( zXICvNwTi^K%feg$|K7^<4=WinA@W73%jGLWS`$}^7%T~kf`sWO; zuF#VtO&9-rz8x{biG9Owj`6sdE)uLhpkvYB)2=5F3;)^V1@TjKc})kJq1I(@-d6It znqM7{Rz$1IyQsWnCz8mT%v>ve+blk7?#MKIMN4k>LreUbrsW?{cq4GXV3B*88Fo~J z6<}AX0h9T!Xjq#FR*-sQEyQ-pLT52(CuSvu!`<|L)dWJ-`<5fcLsyi*!kj!_;1% zC8p(+HAGsd`@M_&mWuCNB`l@Tgjo3TA`K?Jm7DZbBqRWv%fXOt*vL*}To~WtEt7d# zLuep%=&ga$Qx9NhOoI!!iI(c@s@=EqD1dB{2F4)26yvjY?zq||{yFZ$W(?BL-ASW! z(|d(MtAepX#E3)lw~5CgQ{R5HTqqJ?6kIgqxJes?`aTC4c8wo5Lr5VKgk(=#az|Xb zthd>MKGi&^gJegFKMYw6_+&e!d?-q5+;F`{EF?LiWdUl@cJ1IOu&OtmJbZAW27AWg z6(hKkCTkf5son~J|8@+gamlxxAJ+z2Ecsf(YA-3o3mpraDls4++kaRoWb2^QZGtkMT7NHi;%Ssw(CR|f=(I8VH z7$c~9%C~mXx4BPc!HkQ|JByE;BglK>*@q)LzwhSlLG+Aq=L;Ov-MPH` z@8?<&n?mq)q9@XBy1ulzcon6#e}e%|KS03X9h9(C7Rj4vT~T8o?PU&dwS5sYWYD*A z*44??bgR+oS^n4%_A7P{J5QE;EAqWsP1~5d(0d@)xiCMkuiVI$#{Iisa5C__0xt^} zOR6Sv37t!)S<_c)mIHG^Qh(_XzWvM}se|PAQ9sCp#OD;>XJ*p7K62u&G6?z+D-nf3qOPsdpKcC)pK&lh-*rbnb7rDw!Rku^&>1rsPu-3Ah`B+8 z?W*ttJ&$?%qc$R}a;DeMxT!0EXecfEH+1XaSPp1e-mY!05N@eVv=hN~!}jmq9T1n0 ziqgYKav>nri(?+q7q`WmvCGSOEIGvpW^Ya3FP>}B&5Px$ug()cx@(_E4ldd-Ehi?~ zWM`9?sFw3ZS+Z|GwD?m|7j>^vcbGXY1)hQ)xp6_v1R6QSsxspuvx0fH;6NiQ-6SVA z&#tX5UyAn7RP`bb|IZ9(I;fQUlDRz1c=dC|RCHFY1k=Pr#MRLSMmyZa!r*(4ANyD~ zZ2RE*`^wsAne2lQ&Vi00`Q#o2jts{J>YD2YT!Q1pt^=!a!fJUA7F6ft;MH(k?ci09iF>$ez>j{PE4-GorJ`$e<4|rYXheD*Vn&nl zn)4qNhXFDOHmeQv-jf=pO|dO>7lodaNXj5S#GSCa-Ym87VC|keK$j?R3=(1pbNtjx zY7H1`Zh32auzuteqd2_kYT&`jxqb&nE3K^$S%U=aH=6nxII{e4f^OS^K}KtIv(XmHDnSe)FTFk`+%GWkm3trU6o)NnP6M~#02+?bCN-KULIlke_z7>42S zscb_(h>f3c3_Xqs76PmZD$PuP0&!8qd#EvqIIXwOr7)DiC18v4Xk3T_xA5O5B`6Lx z!1&;kh;~bx;NW{(U}8`ET$O!8PZxxr`e+P1>mgSonj@90f5pI7IsCe!wLccid-uFp zB3LX3KimB2Q`$Wd*% z&p$#RG?Uaggf=%5Y?I?&+B}OM>5yE_ZWG4E*d4V#mx_xUN=iiHY^NMQeiY9CIv@-> zYGD1z^eNcT#K8WZNdqF6G%|mwJG7%~q->Nw#BX~CzHe6dF(x|<^tcJPovM#6>p%Jj z$sxc%e`nrK%3eOAGabHGyz4;*X?A;5^6{?8udG`I*>;QEFK%RZ2t~ zCXFf~z5zz$J})ngs9Khee#QRB(e1S2`DsOtj3>r})Vzr$c6_(*Nr^l?+6H%Yj0%VP zXlMry2gd}*a&~HJl^3NkePf1ji!5v*t{M;>Ug2-dI=z=?m)P(P44mG8o-U)15Ot^6 zXyV}2iiu=}p2cAE?3QZ#>MpDR+gUN=Fg^z#Ck5u995>c?R*0dyKW<;l%hEhU4V|E8 zGh%EZ96@$f=7fNx@}xNmDHF*& zc)%<&z_R*AO6G|ME*44fFt=W zFmc80nFnjaF~RoY%Ds`H_vL*5&jq-)mJOKzki?qzQhS*Dut$+&=s6X79+CuTrFw=} z#f6G+d2j8e$e>CC9*m`OzT%#Lt_KB40JQ;g3Y)2jL@zpVnjqX;EsA4gDBhjg0ox&zzQfkMn;XW8rpC+p_`M zOH}%zXDCvn_FKpx?@W*Q+_FU>^y;c#I|g_@S5e$GUTz)d+swVsHr$@j%`~{stxM*% z4Z#d)3F-Bs)3PKR*{SUVcpDp-$AW@gav*K*2%_RImp;o0;4{68s41Jh{tnQCB)!2s z#QQkkmsK(s6S5&G!j#+JSuQq>Q>cwrNq*I5#9SGwSiYs+yT8mQ;hu-4g)n2(GFno( zx8Z-5xoE=j(LBK=iX4LkenibmG22SIhBAEwQr#!*qDQ>jJ3t@Llp)}_8(_0){fSfS zIOztVqmvk?L&l?1w*2+6w@7FkjaI#6DpW$9@pp zWDqyrNLXO~!ue|NRU$!6Z0T_ml2}I#xs=T2JNsKnbnI|CoKaH6DgD?{olgvpjNMYr$?}k<2%?|_=mFzSBWKi91iNIQ2 zV$Im^QJyEJ4^^%F1OuAQg}{RSC|nI%2AT*aau)nYBwdJ8nN#HZQbPgctA8EE0C<<5 z^m$mS3~*)lg$E&B=UOl=z?$_GmoEzD(~xEll~8++r<~hI>K?4Y6i;I;pP>wIiP!(y z%D6{eF1jtjp;Fwd7!X-}$DFw8z1rimqc$V_+n6DX@Te@=p%5b`aVGH&>nqt$rkHAA z;#WQgy`KLkZ$xcnjVoXbGT>BF5b=5Pg`ILYZYsTt>mA^}rhrJPAzDRT#k*a*H6D#g zTs0oNI#Os?J~cq(59s99YZj#XxqqaYQqbSLWI3hFe_C#edVS*_T_2`_ZwKn{X+&G2 zg}}KFst-D~s%St1v;AT^jQ^?i$qJnf_Sj`0QtgqJ(|HWk=t6w<&bpL*%P2dx&2F+# zo$x^CQvo>6PT|kd=y7}09PI_6joq%lm#3U4nG_A|zOd(VrvX!@V&o+jIj96%39G1^ z`(t-!r1w@-|Ne49Ua6m!(R26x&!57)^i;|`K$*CN!RAQ?Hu032MI3!{Lb%EqIjuo) z{T0oveM+I4&PpgOL4^IvZyt|l zv0^w?RQaOENmA3!>+KaT^fpsT*He*FbjmTvk%sGs^sc~lCYn$ zoPB2d<=S}>yLh@>8;xqYHW74ZmNYpwa=K@zQCXK{S~=$gv;1|@>r6PhqKD5(CRL9w zktroq=NqL0M|xo&XNC72#E0-A!sNJXbbB(C*;{b^oEmV+N2C4g`C22+6*H+buh`uH z)SsLG`e$J{5v)rl)z$rH7}a(Uhs4*5c#noY1k{D@??F*&WI1ZcJw0#rq~-U=f6m|b z(B|0=**cZYSzR>F1kOr9O(IhCpCA6%N|K!3X#|W7&ee%=p@2K89&RAXC9f8C{iYBw z;40v1jYxHQy5;M9`{g=z;QxXc{k6=5ji^s_be0(5V zwW{+@wV4}adv%xa`QyHm9)mcgkk^qa<@Xe;)l+u9t+bbPWx=NER^6;PH+}t{l=rKv z3O%^sB;Ut4XVzsZDWC?cdeWPr?-@2rSPMVMPLJO>APOQ5Ox!e|hdL${chL_B*m^vp zi~eSbIA|j9Rx&!XmBFp(?C!flr*%=u@yL^r8J<+AyuyJlg@91s_W7Jnu3>e=@SRTc z@Ixl)k* z4tz0;mY%tJ2z9lCZbTb9GX7+C5|9q)2;Ka?QX@m%AIMphui-Vgj~U|RX?}Web8zE> zT%ox;^HVx-P-9kzw-Fck;x*M-m)#hJ2nH0+JAZ{GI&;OG)U#UHl%KdnKLdT3TgywZ zrf5n)(H2V`aU*--%53V8hyQn|bUG*KdA>~4y4*fOajTH%W zrRp$y%x?JZCTyw*FMhYK%)zp(%~gO=T-a1739tu@Q0h=8eMQON*u_>*;WS3OV$wx4w6ppj+{m}7anyq;0&m&S`b6`pT;=lB zqq%O{MxZ&Q_fq3dkn*C+%Lff`N=FigWF#)qIj!^XrH9Q6a4P2)pm5x`SQZ{s<&9Hr z>u&B(k9Zln%4oLdqoauY8Kmh(v)!day65tFljl5HRzjhTy10r}1n`q*D__(Z23mH; zoPj${O!CV#!E&2o(J{~Jo=flzC)q`Sn&Lr!?|<9W^doLT#K&{!D3iW~0K*g3CWCGq zCR<~l5>~x_V>VK^z0ck8-!c5RupdJzGSM+(C+~B1QTbqh7&w&eK@KK=+~=u!;kNkN zAj$1W;T6F;o`OjACt{v*296(^AHXa85_ZOgAHDdF6-^;_r1U4Nkqi-qi*i@oUz&g& zbFwn2&5Hq20fcCZS{xj3r)TF?YrAVIR`y+}aQ>qn(!N#xT2fAIR^n+Y@{_ld2kDDe zOU#0szEPid&x#tC?X%;}izwI>uOP3}_P?b2e#oCLsE$E96AiUC?K72U2Ysg8#mDv@ zi^`nsmSj%i3+qu{1SbUl^6LleICE1RI)SMB^-lO< zg!w~`5YIv(WX-FG29BEd)l|5$L?#pM-V{g(+75&sYI=|gcXE=atvE*4kRJLc`q!_r z6Z&P9g%55R={qvau6#T$pLm=lJMKc@O#dtEq6BB?Hv+~ZeM0JV;z2f7#gIb7J+WV9 z!u5hK_av?dr+irI=Hs!bM2Mq=CsV$S0QYQ|L1>J_87~N{LN}AIHNt9mLp*sU&ZVbC zpOmz2TU&g=N*7Np3$AQ&S{|*uEt>cZn-X6ZXEflei{ad-!JPx(3Ojt{u_%geqd7VW zfNn@Tf-&5^Itc0R$4>_#@QV4Fg$7~cGT&*|kfwa0z*wku)u0*H8eXw8v+!dD+TF<^ zv=W6_oW`;aMwn&n(Vh3Ae%3G<@YfB77&;0Zh)a@7x+DcC)2R(5cOVJZ&<#A-#%)7~_QFcnPFX#;&2f357g4L~OKBfE& z4!(8F3>rAM*FbaAf8x;Uzn#d1^^<;Y*Bgw`2O_9PB@OqcoANUqK7l%!c{+YZN`xIB zTnx6tcb1V(xKr41L+_!MN2Xq{C8lig<6D#Ro^J-45-6I^_ zFtcvpsQbXShb(*3{!MZlb3^SsD(g>7hk{FJDmZ3{G+=M6d9e6oeF)nBEql<=k)_S{ zFD8BwT=sF3V7?pY&+oX-1Y($h<4&`9P3HW#`8COC*^_wcj;yA_llhdZ{`_@9A@UVo zx^C_sR(g(FP^V;V$tw*ab=rhZlqv)1%-!Mf3S#z4+*O^^^+LA)WEa9bm?uU32!{o2 z=l=nSSnq`$7vO6MfYE;maZFPRJ^<%ZSnrY%Ra^h$(Cruq7RjKme%6k13YR%4%@^3n| zo@Hs67ilSRc8T$PdX}9M=BO|qy8il!=eI4^lcvZ)OaF_NXT1$J(l$Y6CGM#Q(;IbX zadZE6{G0n9ZvAN}8An+c4m6X_KHNU>SB5nA;>0Tim`IoOX(xJ-y?r#ILJm1yQ@ZoS z&O~!x0&ng!h#CKO@;`2s$PT8oI3QvsFv|+mV*iCC6N>OcZj&_Nx9zQwJ`)ll<01KX zTPeK*nrh8FW(W&2rLS9ZeN|e*TMdrXG%sGvu@NO-M--`ByUrxh(dT0(S;dS`Z5U+G z)Z7?vg{d2l10)ma-W8A~KD_)vEvN_|;w}HGw<1nYGho(MbH+xnhG~i+il{ypll-1C zJ2s!Xw<5o_R{E6m};Ts!zSV)}4G+aF& zlaj}fXpqFDo_)Y~60eIE5)$WCjY`WUb3h6$A<5`_Fhk_U2pOC@-FAF!a?K>G`E>T? zVjXkcIRyiOijE9R%**mO3GI<^|D$3=Q$BBM0;JRdT0*MZK|9jMWwFvnGY>^-Grv~h zCN_y}5qK{em@DlHpJWeN9Q+}!V%kZg+MC{lcMCGA96h&!;1*z!s#I3j_;c#g;qK)M zO-o(ra|$J8Vg;DdGIbA=MP(rM1RiceM=f&WX*hm!wF_OY=ZVe{QK9Tsn-~ zx&bLo#u=@>G%4aO?Tk(WQ_U(}W_0iR%=Z-D97b()d>&a!!t8&7TAd~MycON}Rjga0 zK|9*}#J&6twTM8#&beQk*ee?}Gts}iv`%#GB&$pTgjRU>`Pyp_qA_3)NV=^a9L8(( zm#%v6-|bD98D)NCNdZP53w~}ck2mn`5^-@CZbBZurOR9jbNblgmM4))+@41^`SHt^ zqnn{Ucj;;bQGYk?wur!72`{pJ#_>bRm5wD%3v$#K`8bE|gRlhhEudj>Fnlh?h_-*n zQs4<~Hr*K+-YKHT^U`dQaW^)3hxP$dYMbI<8;R^(1ySnsi%Ix}Yp}}61s#h()Q(Uk zKe$<U1E;sOT9JQG7XFGZ4D(|#9ZzQyZWAprxX#?Tg2}c386n)Vt zEvy`v*d}+}wPQ1-cdCX(YR;Br*M;)HUzWEe%&r|RBd`8G8ecvou0i24-Cy6a9cbEuv`^L@|EabQrwmj}?~3#> z;JS3-MOW0$wcAGJZ7*6?H-obt zH6B6>0Jk%dj#-yhs5IO6TW9wl{Nu#Q-5JN{sNQS-l0_Z{dwsv;E$o0wuZS7jI+33O z#L~GSrXXC>lws+KOXBGjo{MRT-vsacLhbazhF;L@t;vqMCD(bA!15*+G;yQ&SEPSs z;0)z6?U_JD)>_bxLcI55(}p;e-t;QdsI6QK)6Xy|gAHeW)D59ONQ`7ePx_b;eSp)W z!nN(Uc)vWaiu*hVOIhC*uU?31PK(haXoCLki4Qf{eUaF!9Qs`&BI0cLkhvS^Ny<~3 zwo*>cuBwK@;IZj?`Vyhq0Pc2`0EGsvej#OA+Saz(aK!DjrOf;&o7u9wx@hG7W9O<; z_FkgXJF0{wf0wq!aP*tsoKli_g!SxQ7uqJV*YF%KCV^KcwC}_He-$Huvt2^eqyHc( z0lz@apM}IkjI>d#RKOyQc^BO-(zT}q;SALXD=MHA}fJWCJ;x7%D74_@d?Puj}9iwk3?DJrero2|ldo5S&OTgpkjvQ*o zh(9ZZr(cVZ+HCq4#mikFZA7+^OJvzN*&i>VWb_@`SsHD)UK{L4;R8W~s6UgWk= zLuvYb#Z&ai=#mahAmAoks*x^vWK&dRkf45?x2Q;9Hm|MX@totYwvS1Bk+4X+;YDJU zrh;>K`abGyvsk6g1uW7frR+-`8oAG`kjT@3DvqrrarKK33+q8wj;gcPT*cC1DX>l0 zGPbA|syw;BS8)HZ^o>JG57L}hkcTgD+ISADU*V&UWeJFMLv?U^D1IY<@h*NLVbVRd z8z=ImyGG5lhVboA#~m`%hmdKZ5UX6K)M(9tJvhU6&czaZYo!Hv*VVZ1U(35RFzLKe z4DBUK_#pU0jH2kO3&^NC*|9Nf_G?$=MujUw^(hu_StQq`OI50NS(TL_T$gxzaK3i- z{z|63sR>+-X?al&+E%70S&5&^NV0)h2gQo5sHU-;YAdKni4gD3S>sp$XUL)nDmf2W z;n}++orgl}56!}&ikH~aq+Qx1p;b{YVEu;0QIEHc|Zxr8^6vM{N|tq`H7M_ck- z&bF$C8MxI7(KpWH)#*V|l=&gZVtl{U!$^R*liKcCe(d`=exL|-E@dm{>)Uu0}tO$x#v;9IRbfpY5*m&$bq%Kf?4 z{yBV!ktbh*Bg7%&y<2!)G|{(%+Z~o%C~U7PF;gcl(azFe3n(`!I`F$b^D=w;$!MFS zA#)NBFm3#!hA&H&t+f%rPNqIkA~n|X7wblT+RQ!#*^Qa?sg|j@&`JCjZH+~g*1HNb zZ)#WB2(ifNp{#c-#$o{v{Ut-h{@Qg6ugY~92OEyQ!T(IgdZB}aHNH;=d*!D^@3k8A z(IgcRCGP1|bTJGt`{jY{8+d z^o_#=1AL^SZ$}px1KtVFFrB|hj$g25pE~&WMcDXvjn=vyK7&{^bG%o%QC#2J*v3^= zSU|EQ-7k|y%AfVD*ip#q5p-OI3V70EiXV>P(ldswy2Yl{l8m`(Bt{AUilWyyADJ{H~X^#v13Mti=P=4%D^^MpIdgXuu^JLL188pqz|x{d6u&Hbh)`Y4Y!A)Tr*< zRo$vJz;{59ty0)W?w zLwQ>lzIFd6FPveVw*#!<;3pe+{I@G7k#2V48173*rhVronwxCB)ebqy zQd-iTdz13X3$vU0_OWsmCH+)h8p zBTEKwjn(+=?i%D#?lGg1RIvtaF}hzJ#7KuEwEJT> zuzOfbJin|zN66aOO>r&LAHhc4+nYZwm?-zXy)aF}#*&EWt*f130;<*bjzu;MS{{`*ho0VTzCE{lM)wYUw$Afc_Qhd=(Y#cWkfZiIV*C3 zHV5tGRfjKfdn{KO&FSvFrCbU zh(POhyu&F#^ClK|VbfFs-iJIKWsq_s>Y^;q(huoK&~ykGetXyjOvKb1a!FbX-@jV4lb$sz*C? z_#B8swWx}JT=n7%W^ZimZ)_^=*RL-q&fFcTI;tQgd^>GdIO~_nk;NvkrD-mPIuN1ap z+O@?)1~2>-O(li=B9Hgd@rRjpt|YrflMB8mSwH6^SftzZq8{pl-zFM7PP&!W*^=X} z%G=UL6&Ryu1;yud+Z{&U^n@ny{QdV8=y&6=pzc1hYaebxiRv)IvnIysyoglkUlav7 z{|!)py7G>|Dfc}TGo*!${S{2*{rcgc*@NmZ#IsiY_JWU8t=G`p&f!gN#InJYX|3B` zMoECItmgL`&(cxWHn?*-7tUtodP@272d?HJF2&1WMmqhKd2*@nvjdBTsYQpd5-#!W z-+-cD$CY`T4Pw|}pQz!?_50V5lv6BY>Z6_uJRMD~(4m_g}@L zAWF0MBfU@!6F%IlfXr5J=rPA3llZJ*`EX zi*7&hrFFehD#EYWlR!%(O`Lp1Qupq^Jv)+ZlcEoLFvo?Eeit;`hkkO1#_)q?mpJG znrDb_apRMik-uPeuIe197XpH2mT)x~al2%#!V3SN3($iz$`uOC;7vCqIk9ow7=dqT z(*FGF?hIX47!-9k*_0n=q==axqrU0PH1Ad_;8)0SEf4y zJ4haYt-Wbr4zwHH4(c@(#-D{bGy}LE)TmqWWfhnQH@x&=h5}wQNC5c2Gt=H+13=fE z9h*?Nlo{j$b?e@hz@S&B`)SN-tNfB|TxWVB3q}IDtr=Sqo>kb2n@gc|fVp&y+0or4&#VwcA{3wnpne%|0!<)GTWuaxxxC){OKj z$YZ2*r}N6kAnt$ytf40|WkkWD^EJ$Vas)IrdLe$?A&cgo;rg^ZRF|qXIN+iNDY&NN z_E;|tkt;L?G+6jb{e|m>4kP8RV}|2AxK;Y07HZdtbT${HqxobuR&{qm{$=$aCfA|K zeL!K!Edd~_uf4(;x~!B?7F}l{x6O(o=o#WBmufHMv4Lt@sfO5Fi!mchKaWT_ zOZ}j{Igf(h!X}?cXZsn7pd9Wk&uH?C%X>%@(j+a|qhDc5G zU9K&gI&uFiuP=S`6xd<>brFAg#&nj!;#ehY7yi2FSEAthQI==k^$7H&MnLl;u@Oyt zG_ossm3)(#TH=JA$oy&jZ4al}u<4I;Wd64f`DB+6W)uwOe`}@V==kcs8HLO)Hkey;wy)@hP;!Crgm|WNBlZRmf99fPQxwUAszhVkgv2ijBI)Iu z%M(W{QP6Sq(OsaBSj3x1P2;q8V%PB%PdHX#02Seu7z0YZ zHvKTkDAFe4ndB;(weI582z2Z79qmQq?pLc zKlgE#s4L~yXb9)BC^QG9?PQ-}ere!1QK4b1VuVjTOKJCDHu@+uT@?X)uH48rFADu} zUz@aaDDVq~Mynq1Be~r(LgN93YzjM3s`9T&TTyy5Myqg~BG#XL+4qL4cNaG$frN1K zT@K|OC8&bEK;uRjD5TGKy&CRFZ-{a%1bLL3 z5wwIvw*vvX8KuvlsC*%i3cF&P;#+oHEN3!#f1{-mT6Xw^j!Wy?e!%bsUh<|lDqSeL zaVGbLGSt@Xr;I@_*t-2A{uRn%|1y0vDd7z#9|DENK|y5pNSjcBZ5pgNjdSq{>Q~{% z2tjeL{BUDXWOTN`N51tM7?|=G{1$^JOXzm^jkXoo4#Mp9k%#9hDttY-nFok|9omAe zsDvq5it_yPtNvVP*H0I(U7RamdGm}ZY|Bv78U3R){;Z(PFuBuwF_uz@fsA1NlTFrHzP33WJ`Nhmi=h z?n|r0W_Sw}n~c96aM>x(?)2=I_Tqj;I$TxHMYODYc;KG>HG)1^Y^+m2d1^4Dmx5X` zr%3soVDNIVzv(*pQ1r zCzRD79+7`AzsL~RWVFB*Ym(Y_y5R|kXf_zaW=_XxW6&p~EHHG>2!zw%DI?Yq`qFgL z-33KJ|LI|{SFW7SHu1JKu-&k^>$`IYM|J|T7&|W%I;^|bt?aldkHR8$_R6U|V@3vf z@X-hh=Y$qx`fJ5uUI`lQEUW4-h(~EYtql$M|`BokkjG?wJS0_ zwV7@4Xs6&HokJG|&zA@_%E+A>!(n_<3C~Wo3}ohGqKlcy-9>G?Ho!)jA3Kyl)?Su9 z8@0-e>2Et@8v2eccr6+b^5m)4r;4Z14x=p4Ldwb@;f-Tky1_&qRyBD%{TA|5lPc8Xs0( zWLps6WU#RrkSqxx4z}LNR!Y-N;9YWZIt9P$AiKlCmr2&+$jFX-q6v_K0+^*=<HPB;hg|aMUZJh)Yjk5IGht?$ZzPGEEz&P=t(AU@rU3A~w4m}%z6ju2KZvmxN z#3CLkCFK)+`rYPlVpSpPLl=*x1LcQzuOeGm?fmDpi!C4%=FARpb&qs5vS>uvGNAXnRjDpE-|QwTYr!v zC)eCi2004KM0ldt)>SvG7ON$#FdEoA-ihntjeKa4uJQ{A-Xfw8&;RFHr zfpyf@X)#)`BT3bW%2pM3nQDxJ!?8u%>QeQ1+| zW?mNP(dn9s#=HA0L$CjK%<@l?<>V9Hs?gY;k1t=k`VT3pb3m}AT7Tcf;MaWfEpg%+ z1_P@f7frrh?e9&8s?hs<2LvU2{7Me0IKP3DpnZ^#Ptmh)1d*g@Mg9Vl#oA)J#6^>C-%_HDOH8VjF?< zBJY5v9y%L6OtxO?q^Da!{rX}<5tyWi{EX@nBIw;#Y$#RP{8z9&W}hl$Hm@~E*v&rF zGYuOl^{+#qMHXJ5&^O1lNmsZoE$*jjBKxpQn)Ghm9w&|v*Ez!Y^cZsd0@r-)JR%Ar zQ?xz5S)V~p%S`AA-Xj989@NX&&s2e&i*1Cu=|nVJA(2lKX79T- zmI!~Hq!E~U$$u7S_-8GF;^k-5YN&8+;C$FcpfQdH%;A-={v;Q(O|trYE8UFPV-n{X zrsOIfUZVr}LqrPci8t8``p!Fc^O#1JDh~y@j6q+sUcmk550uUpz7;iW(@#>M@ z@02jExQC~NjTN(srI^ovXjLplvQEwoJ*{hPP9s0mGFr_IRl?G8oqD}pDgoDb%NU)y zn0)XQpQNcNZ@Y*zEIv*6S!fE%6jt?pQH-NxX%4U{3jK

P#ne__0#CbNTXSUV#D&*PCR*pkgoN%MW-aPo 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�(Mj`%cHeei$TgwgU`%H{no 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 diff --git a/frontend/src/app/components/OmniscopeSidebar.tsx b/frontend/src/app/components/OmniscopeSidebar.tsx index 99e50c49..a1bfcf8e 100644 --- a/frontend/src/app/components/OmniscopeSidebar.tsx +++ b/frontend/src/app/components/OmniscopeSidebar.tsx @@ -1,16 +1,22 @@ -import React from 'react'; -import { usePathname } from "next/navigation"; -import { useSession } from "next-auth/react"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; import { Sidebar, - SidebarBody, - SidebarHeading, - SidebarItem, - SidebarLabel, - SidebarSection, + SidebarContent, SidebarFooter, - SidebarSpacer, -} from "@/components/catalyst/sidebar"; + SidebarGroup, + SidebarGroupLabel, + SidebarHeader, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + SidebarMenuSubItem, +} from "@/components/ui/sidebar"; + import { CalendarCheckIcon, ColumnsIcon, @@ -26,35 +32,17 @@ import { CalendarIcon, LogOutIcon, HomeIcon, - TargetIcon + TargetIcon, + ChevronUp, + User2, + ChevronsUpDown, } from "lucide-react"; +import { useSession } from "next-auth/react"; +import { useQuery, gql } from "@apollo/client"; +import Link from "next/link"; +import { Avatar } from "@/components/ui/avatar"; +import { AvatarImage } from "@radix-ui/react-avatar"; import Logo from "./logo"; -import { Avatar } from '@/components/catalyst/avatar'; -import { - Dropdown, - DropdownButton, - DropdownItem, - DropdownLabel, - DropdownMenu, -} from '@/components/catalyst/dropdown'; -import { useQuery, gql } from '@apollo/client'; -import Link from 'next/link'; - -interface OmniSidebarItemProps { - href: string; - caption: string; - icon: React.ReactNode; -} - -function OmniSidebarItem({ href, caption, icon }: OmniSidebarItemProps) { - const pathname = usePathname(); - return ( - - {icon} - {caption} - - ); -} const GET_USER_PHOTO = gql` query GetUserPhoto($email: String!) { @@ -70,78 +58,171 @@ export function OmniscopeSidebar() { variables: { email: session?.user?.email }, skip: !session?.user?.email, }); - const analyticsSidebarItems: OmniSidebarItemProps[] = [ - { href: "/", caption: "Home", icon: }, - { href: "/analytics/week-review", caption: "Week Review", icon: }, - { href: "/analytics/side-by-side", caption: "Side-by-side", icon: }, - { href: "/analytics/datasets", caption: "Datasets", icon: }, - { href: "/analytics/approved-vs-actual", caption: "Approved vs Actual", icon: }, + + const analyticsSidebarItems = [ + { + title: "Week Review", + url: "/analytics/week-review", + icon: CalendarCheckIcon, + }, + { + title: "Side-by-side", + url: "/analytics/side-by-side", + icon: ColumnsIcon, + }, + { + title: "Datasets", + url: "/analytics/datasets", + icon: DatabaseIcon, + }, + { + title: "Approved vs Actual", + url: "/analytics/approved-vs-actual", + icon: TargetIcon, + }, ]; - const aboutUsSidebarItems: OmniSidebarItemProps[] = [ - { href: "/about-us/consultants-and-engineers", caption: "Consultants & Engineers", icon: }, - { href: "/about-us/account-managers", caption: "Account Managers", icon: }, - { href: "/about-us/clients", caption: "Clients", icon: }, - { href: "/about-us/sponsors", caption: "Sponsors", icon: }, - { href: "/about-us/products-or-services", caption: "Products and Services", icon: }, - { href: "/about-us/cases", caption: "Cases", icon: }, - { href: "/about-us/projects", caption: "Projects", icon: }, + const aboutUsSidebarItems = [ + { + title: "Consultants & Engineers", + url: "/about-us/consultants-and-engineers", + icon: UserIcon, + }, + { + title: "Account Managers", + url: "/about-us/account-managers", + icon: BriefcaseIcon, + }, + { + title: "Clients", + url: "/about-us/clients", + icon: UsersIcon, + }, + { + title: "Sponsors", + url: "/about-us/sponsors", + icon: HandshakeIcon, + }, + { + title: "Products and Services", + url: "/about-us/products-or-services", + icon: BoxIcon, + }, + { + title: "Cases", + url: "/about-us/cases", + icon: TrophyIcon, + }, + { + title: "Projects", + url: "/about-us/projects", + icon: CalendarIcon, + }, ]; - const administrativeSidebarItems: OmniSidebarItemProps[] = [ - { href: "/management/hit-refresh", caption: "Refresh data", icon: }, + const administrativeSidebarItems = [ + { + title: "Refresh data", + url: "/management/hit-refresh", + icon: RefreshCwIcon, + }, ]; return ( - - -

- - - -
- - {analyticsSidebarItems.map((item) => ( - - ))} - - - About Us - {aboutUsSidebarItems.map((item) => ( - - ))} - - - - {administrativeSidebarItems.map((item) => ( - - ))} - - - - - - - - - - {session?.user?.name || "Not recognized"} - - - {session?.user?.email || ""} - - - - - - - - - Sign out - - - + + + + + + +
+ +
+
+ Omniscope + Visual Management +
+ +
+
+
+
+ + + + + + + + + + + + + + +
+ + {session?.user?.name} + + + {session?.user?.email} + +
+ +
+
+ + + + Sign out + + + +
+
+
); } + +function OmniSidebarGroup({ + title, + items, +}: { + title: string | null; + items: { title: string; url: string; icon: any }[]; +}) { + return ( + + {title && {title}} + + {items.map((item) => ( + + + + + {item.title} + + + + ))} + + + ); +} diff --git a/frontend/src/app/components/logo.tsx b/frontend/src/app/components/logo.tsx index 49350bc9..d75a1681 100644 --- a/frontend/src/app/components/logo.tsx +++ b/frontend/src/app/components/logo.tsx @@ -2,19 +2,25 @@ import React from 'react'; import Image from 'next/image'; interface LogoProps { + alt?: string; + className?: string; width?: number; height?: number; - alt?: string; } -const Logo: React.FC = ({ width = 200, height = 50, alt = 'Omniscope Logo' }) => { +const Logo: React.FC = ({ + alt = 'Omniscope Logo', + className, + width = 72, + height = 72 +}) => { return ( {alt} ); }; diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index 89b55f84..67a17284 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -28,7 +28,15 @@ --chart-4: 43 74% 66%; --chart-5: 27 87% 67%; --radius: 0.5rem - } + ; + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%} .dark { --background: 240 10% 3.9%; --foreground: 0 0% 98%; @@ -54,7 +62,15 @@ --chart-3: 30 80% 55%; --chart-4: 280 65% 60%; --chart-5: 340 75% 55% - } + ; + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%} } @layer base { * { diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 377b8cd5..fd5fa46b 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,22 +1,33 @@ "use client"; import "./globals.css"; - -import { SidebarLayout } from "@/components/catalyst/sidebar-layout"; -import { Navbar } from "@/components/catalyst/navbar"; -import { ApolloProvider, ApolloClient, InMemoryCache, createHttpLink, from } from "@apollo/client"; +import { + ApolloProvider, + ApolloClient, + InMemoryCache, + createHttpLink, + from, +} from "@apollo/client"; import { setContext } from "@apollo/client/link/context"; import { onError } from "@apollo/client/link/error"; -import { OmniscopeSidebar } from "@/app/components/OmniscopeSidebar"; -import { InconsistencyAlerts } from "@/app/components/InconsistencyAlerts"; -import { useSession, signIn, signOut, SessionProvider } from "next-auth/react"; -import { useEffect } from "react"; +import { SessionProvider } from "next-auth/react"; +import { signOut } from "next-auth/react"; +import { + SidebarInset, + SidebarProvider, + SidebarTrigger, +} from "@/components/ui/sidebar"; +import { OmniscopeSidebar } from "./components/OmniscopeSidebar"; +import { Separator } from "@/components/ui/separator"; +import { OmniBreadcrumb } from "./components/OmniBreadcrumb"; +import { SessionComponent } from "./components/SessionComponent"; function createApolloClient(session: any) { const httpLink = createHttpLink({ - uri: typeof window !== 'undefined' && window.location.hostname === 'localhost' - ? "http://127.0.0.1:5001/graphql" - : "https://omniscope.eximia.co/graphql", + uri: + typeof window !== "undefined" && window.location.hostname === "localhost" + ? "http://127.0.0.1:5001/graphql" + : "https://omniscope.eximia.co/graphql", }); const authLink = setContext((_, prevContext) => { @@ -30,7 +41,11 @@ function createApolloClient(session: any) { }); const errorLink = onError(({ networkError }) => { - if (networkError && 'statusCode' in networkError && networkError.statusCode === 401) { + if ( + networkError && + "statusCode" in networkError && + networkError.statusCode === 401 + ) { console.log("Token expirado ou inválido. Fazendo logout..."); signOut(); } @@ -60,49 +75,33 @@ export default function RootLayout({ - {(session) => ( + {(session) => session ? ( - } - navbar={} - > - -
{children}
-
+ + + +
+
+ + + +
+
+
+ {children} +
+
+
) : null - )} + }
); } - -function SessionComponent({ children }: { children: (session: any) => React.ReactNode }) { - const { data: session, status } = useSession(); - const isLoading = status === "loading"; - - useEffect(() => { - if (status === "unauthenticated") { - console.log("Redirecionando para login..."); - signIn("google"); - } - if (session) { - const expirationTime = new Date(session.expires).getTime() / 1000; - const currentTime = Date.now() / 1000; - - if (expirationTime < currentTime) { - console.log("Sessão expirada. Fazendo logout..."); - signOut(); - } - } - }, [session, status]); - - if (isLoading) { - return null; - } - - return children(session); -} diff --git a/frontend/src/components/ui/avatar.tsx b/frontend/src/components/ui/avatar.tsx new file mode 100644 index 00000000..51e507ba --- /dev/null +++ b/frontend/src/components/ui/avatar.tsx @@ -0,0 +1,50 @@ +"use client" + +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +const Avatar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Avatar.displayName = AvatarPrimitive.Root.displayName + +const AvatarImage = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AvatarImage.displayName = AvatarPrimitive.Image.displayName + +const AvatarFallback = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx index 0270f644..65d4fcd9 100644 --- a/frontend/src/components/ui/button.tsx +++ b/frontend/src/components/ui/button.tsx @@ -5,7 +5,7 @@ import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" const buttonVariants = cva( - "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", { variants: { variant: { diff --git a/frontend/src/components/ui/tooltip.tsx b/frontend/src/components/ui/tooltip.tsx index 9e748210..a66b3f22 100644 --- a/frontend/src/components/ui/tooltip.tsx +++ b/frontend/src/components/ui/tooltip.tsx @@ -15,15 +15,17 @@ const TooltipContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, sideOffset = 4, ...props }, ref) => ( - + + + )) TooltipContent.displayName = TooltipPrimitive.Content.displayName diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts index e0198a43..167d8df9 100644 --- a/frontend/tailwind.config.ts +++ b/frontend/tailwind.config.ts @@ -59,6 +59,16 @@ const config: Config = { '3': 'hsl(var(--chart-3))', '4': 'hsl(var(--chart-4))', '5': 'hsl(var(--chart-5))' + }, + sidebar: { + DEFAULT: 'hsl(var(--sidebar-background))', + foreground: 'hsl(var(--sidebar-foreground))', + primary: 'hsl(var(--sidebar-primary))', + 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', + accent: 'hsl(var(--sidebar-accent))', + 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', + border: 'hsl(var(--sidebar-border))', + ring: 'hsl(var(--sidebar-ring))' } } } From 8797a06f27d0c6e66c1d95e57214e4e5d7d7fa49 Mon Sep 17 00:00:00 2001 From: Elemar Rodrigues Severo Junior Date: Mon, 28 Oct 2024 07:10:34 -0300 Subject: [PATCH 2/6] Add new UI components for breadcrumb, dropdown, input, and more Added new `breadcrumb`, `dropdown-menu`, `input`, `OmniBreadcrumb`, `separator`, `SessionComponent`, `sheet`, and `sidebar` components to enhance the UI element library. These components include various functionalities like navigation aids, dropdowns, input fields, user session management, and responsive sidebars. --- .../src/app/components/OmniBreadcrumb.tsx | 28 + .../src/app/components/SessionComponent.tsx | 33 + frontend/src/components/ui/breadcrumb.tsx | 115 +++ frontend/src/components/ui/dropdown-menu.tsx | 205 +++++ frontend/src/components/ui/input.tsx | 25 + frontend/src/components/ui/separator.tsx | 31 + frontend/src/components/ui/sheet.tsx | 140 ++++ frontend/src/components/ui/sidebar.tsx | 764 ++++++++++++++++++ frontend/src/components/ui/skeleton.tsx | 15 + frontend/src/hooks/use-mobile.tsx | 19 + 10 files changed, 1375 insertions(+) create mode 100644 frontend/src/app/components/OmniBreadcrumb.tsx create mode 100644 frontend/src/app/components/SessionComponent.tsx create mode 100644 frontend/src/components/ui/breadcrumb.tsx create mode 100644 frontend/src/components/ui/dropdown-menu.tsx create mode 100644 frontend/src/components/ui/input.tsx create mode 100644 frontend/src/components/ui/separator.tsx create mode 100644 frontend/src/components/ui/sheet.tsx create mode 100644 frontend/src/components/ui/sidebar.tsx create mode 100644 frontend/src/components/ui/skeleton.tsx create mode 100644 frontend/src/hooks/use-mobile.tsx diff --git a/frontend/src/app/components/OmniBreadcrumb.tsx b/frontend/src/app/components/OmniBreadcrumb.tsx new file mode 100644 index 00000000..b65b4ed2 --- /dev/null +++ b/frontend/src/app/components/OmniBreadcrumb.tsx @@ -0,0 +1,28 @@ +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; + +interface OmniBreadcrumbProps { + currentPage: string; +} + +export function OmniBreadcrumb({ currentPage }: OmniBreadcrumbProps) { + return ( + + + + Home + + + + {currentPage} + + + + ); +} diff --git a/frontend/src/app/components/SessionComponent.tsx b/frontend/src/app/components/SessionComponent.tsx new file mode 100644 index 00000000..d4327dad --- /dev/null +++ b/frontend/src/app/components/SessionComponent.tsx @@ -0,0 +1,33 @@ +import { useSession, signIn, signOut } from "next-auth/react"; +import { useEffect } from "react"; + +interface SessionComponentProps { + children: (session: any) => React.ReactNode; +} + +export function SessionComponent({ children }: SessionComponentProps) { + const { data: session, status } = useSession(); + const isLoading = status === "loading"; + + useEffect(() => { + if (status === "unauthenticated") { + console.log("Redirecionando para login..."); + signIn("google"); + } + if (session) { + const expirationTime = new Date(session.expires).getTime() / 1000; + const currentTime = Date.now() / 1000; + + if (expirationTime < currentTime) { + console.log("Sessão expirada. Fazendo logout..."); + signOut(); + } + } + }, [session, status]); + + if (isLoading) { + return null; + } + + return children(session); +} diff --git a/frontend/src/components/ui/breadcrumb.tsx b/frontend/src/components/ui/breadcrumb.tsx new file mode 100644 index 00000000..cfdc9ac2 --- /dev/null +++ b/frontend/src/components/ui/breadcrumb.tsx @@ -0,0 +1,115 @@ +import * as React from "react" +import { ChevronRightIcon, DotsHorizontalIcon } from "@radix-ui/react-icons" +import { Slot } from "@radix-ui/react-slot" + +import { cn } from "@/lib/utils" + +const Breadcrumb = React.forwardRef< + HTMLElement, + React.ComponentPropsWithoutRef<"nav"> & { + separator?: React.ReactNode + } +>(({ ...props }, ref) =>