From 81991a22b68cd8b82d63627f43caa01b9134e724 Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Mon, 11 Apr 2022 19:45:08 +0100 Subject: [PATCH 1/2] Onboarding screen (not working) added --- backend/server/api.py | 25 ++++---- frontend/package.json | 1 + frontend/src/App.tsx | 9 ++- frontend/src/assets/images/love-tv.jpg | Bin 0 -> 112194 bytes frontend/src/components/epg.component.tsx | 1 - frontend/src/components/header.component.tsx | 2 +- .../sidebar/sidebar-content.component.tsx | 10 +-- frontend/src/components/widgets/index.ts | 3 +- .../components/widgets/label.component.tsx | 36 +++++++++++ frontend/src/constants/theme.ts | 2 +- frontend/src/pages/channel.page.tsx | 35 +++++----- frontend/src/pages/index.ts | 3 +- frontend/src/pages/onboarding.page.tsx | 60 ++++++++++++++++++ frontend/src/services/api.service.ts | 28 ++++++++ frontend/src/services/http.service.ts | 16 +++++ frontend/src/services/index.ts | 3 + frontend/yarn.lock | 9 ++- 17 files changed, 199 insertions(+), 44 deletions(-) create mode 100644 frontend/src/assets/images/love-tv.jpg create mode 100644 frontend/src/components/widgets/label.component.tsx create mode 100644 frontend/src/pages/onboarding.page.tsx create mode 100644 frontend/src/services/api.service.ts create mode 100644 frontend/src/services/http.service.ts create mode 100644 frontend/src/services/index.ts diff --git a/backend/server/api.py b/backend/server/api.py index d1a2c88..f0479ee 100644 --- a/backend/server/api.py +++ b/backend/server/api.py @@ -1,14 +1,11 @@ import logging -from logging.config import dictConfig import uvicorn -from fastapi import FastAPI +from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import StreamingResponse from server import config -from server.config import log_config -from server.lib.epg.epg import EPGParser from server.lib.streamer import Streamer from server.lib.xtream import XTream @@ -42,34 +39,38 @@ app.add_middleware( # listings = epg.get_listings(channel_id) # return listings -def __get_provider(request): +def __get_provider(request: Request): return XTream( - config.provider['server'], - config.provider['username'], - config.provider['password'] + request.headers.get("x-xtream-server"), + request.headers.get("x-xtream-username"), + request.headers.get("x-xtream-password"), ) @app.get("/channels") -async def channels(): +async def channels(request: Request): + provider = __get_provider(request) categories = provider.get_categories() return categories.json() @app.get("/streams/{category_id}") -async def read_item(category_id): +async def read_item(category_id, request: Request): + provider = __get_provider(request) streams = provider.get_streams_for_category(category_id) return streams.json() @app.get("/live/stream/{stream_id}") -async def get_live_stream(stream_id: str): +async def get_live_stream(stream_id: str, request: Request): + provider = __get_provider(request) url = provider.get_live_stream_url(stream_id) return StreamingResponse(Streamer.receive_stream(url), media_type="video/mp2t") @app.get("/live/stream/url/{stream_id}") -async def get_live_stream(stream_id: str): +async def get_live_stream(stream_id: str, request: Request): + provider = __get_provider(request) url = provider.get_live_stream_url(stream_id) return { "url": url diff --git a/frontend/package.json b/frontend/package.json index 7c2e183..b72d0cd 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,6 +8,7 @@ "@testing-library/react": "^12.0.0", "@testing-library/user-event": "^13.2.1", "autoprefixer": "^10.4.4", + "axios": "^0.26.1", "classnames": "^2.3.1", "hls.js": "^1.1.5", "postcss": "^8.4.12", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index badbdb5..70bc1f3 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,14 +1,17 @@ import React from "react"; import { BrowserRouter, Route, Routes } from "react-router-dom"; -import { ToastContainer } from "react-toastify"; import { Layout } from "./containers"; +import { OnboardingPage } from "./pages"; function App() { return ( - - } /> + {localStorage.getItem("server") ? ( + } /> + ) : ( + } /> + )} ); diff --git a/frontend/src/assets/images/love-tv.jpg b/frontend/src/assets/images/love-tv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd8ac595a6c61413b4fffbae9b59b22dabe3cc9c GIT binary patch literal 112194 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

3n4gd*cFp# zMz;B1#9xlS81P1pM#kprwJpF6aM%y`u6|yl93NfiUt{{OQp#K77v-N9e$#$4>-vcq zqmkM;38uBKpOWrezpy+J35%!zCfy*g!PNK>-O6BSCd(=pliw7CkK#>C4Po-{d}Q}yvOkye3(e{<)qbn?XRe&wIPcy0=fyff zw8>l>T(8u9GnapLSY2VicD-|geJxjS*WQ+WQ?gM3v!i+N=PzBR9IFjl<2gS zn9@=;v89IEtZ=l%t?2=gS{l^Qt9ChM6F2B_A z!d!8$&>s!{6Y9F|p^h;5IylJlCU~L$0GatMvBT>8@78|Md_CiZ-cQrr8^irO!@W7W z9+?1ZLqK$ddY|?7A0@W5_zq5NxpKMZcTUPZJY_**MoI??R9Bg4NEdx!2LW_}x0DGs zUQ-*HyT7uV;lv28||Zdx#>EE{q1@5L%&$IWM^ z+f9X`18KamxWW%WO#5jLQ&l5{uYT5@rz=ZR2>L5ZfRk%gxc!1VA$|hktHP7lOgs9Ju*6rfTO}&8fgk*VMXQOh>m;Lsu2yy!W6AERoy62bcPir?sipx-NW#{LOrUSNpp{f1sp?%nMr%{8 zf+NK_;{O087bzWFeJ?L3oH4Yo^#1@wlhV$or*ZbOKTwx+ZTbgMkDG-v6tT?R(8$RL zyBrE^vcoKVWi&HKU^0eP@XwC_02y?C66mt@o}W8isCX@Y!N(~U-S@v_ zKFjCU^3GmK;rM5+_=Bi;gR04{*Usm;#@gG%N3dTr)O9&>-yYB2x;~eWrQ`T~QOm!Y z=F_japyf6$WY8%znK~UWt7`gIwYr@wg`^Q+cUtjs-aGjhFBTm5_Gcfi{sVkc9eYaO z4|N&Alm7tS+~bh$cAt^`SJ3pGM9N6~NA2I)kAaoy_-Bus^b8XRGKtFcWAdR|0e96f zau$lD;4s$vD@d)3gJdBVv;~3?K|V4vjVe|e%PDFdx_s;77ls?vye8hM3_;TAeG*W~ zjof}m^<3Rg9`W1gzRmUj00XG_cKFNu-;O*})3*7naKR^)|}vRMT`)o8f1jDl@UoLL?xifABvqPNw?&lhL#$R)6-0h zmjPU@G2^y-2{rEP=z1QfRWn!t&#+ybJX)Syyxm?LTYV$LUIsTCq=?x#6=bfQaeTL^ z`p1i^{S)x};R&6wYx>M?)9FPPLIplg@E9C}?O z41x&7GByeW{r%RF@_FZSyQi^fvjR{}fTFd;gsidiQC3OBMpHkdEc6d%wbaeWMyETQRpz|iDT5^?}JrkKA zw;cN|CEFag477kMl|~nS;|gnRVNyNoE|UVXou@Hvj}8Of5~ky!jBFuk+RwViT^mbi zsmm2i$;|^>z*%LBd^4q|4H43er-uA~X&1aTV{3gm`l;}8qSZKhiGgtiXKJI1JQB$* zv|CgvR!lVBD5)DQG;cq2S`0S%o9MeEvIC`~e8JWURGR5T=_KaWz^Q)ev|nIN=0{0G z3IVucbZxh1=Bg$1Zwj5>64IUB-~G2QW2ODnc>P!JZ~XZ<8h$g%^RbU}CreEIqlK)l zeo41NA#GYmE?(j|os^wt3QFrAH8s(MBQV_Mm33kV@ohqrV}q~?2Gt~EVfRyE%1Dyg zC~&0B#V4Z*qHGzCoE1zcLCj2*k$1K5emr4*BIpF&ql;8Yj|4rcys(q zN@^Rn$O|mvqmJ#!)V|5e!z%B>YB{o#b{0)amm5GH0zSWB&3OQRb|XjDcSxP;!%5{ve3Kcv?C5=jt+kZ@=ODCDCzBSmqCmJ}hjTj-!uf z6%*8dCYk-3=&z2~f297<{wnFOX*BBYPVd!pVd_)n@_MhaogXjc^;3S9r8d=>1^WHCbJ~ z7bdT3i`9BedcK=1GM^{(AH!Wtb)JEu>Ww0&h&b10aDSTmUOc<8mHf5peJ|*}R(wB7 z^pUpC7On#=9A!8S!`WPAk%dTUtqH{1%z#z`DdS5!(kv)zJ%g7|7Q06_lT^*{Ov4PjuTkd*SsU}=TooLGf&g>CP#l1gi~AdwZ1%Wi1klh$BtW`U*P=(;V*|BC&TeG zQ>tqEz_Gy$8+65F+0la`R5V%%qb4dy- zR})!fq_skv#}@!jZDyx4S1XwENhwo~e4b;S<^oAmOi0}!qx@dThg}^rb-f1d+ry-6tSF0~uSFYB}q|<5(SmId5 zwBR&gpYC2aSJeFN@cr}bSJ{p}pN?mo^YeUm4~3r-y2n6^#5!*Xbs2OzfxaoEd~v!~ z{{UI6d&A35V^n)u^E2S;IkE5U@cQm=wEmaD&3bFiJEw~#?4Oq8*Y$W=1LKwP%E!ke z99s50rLJihAcMgk%Z|->uUFzsr*=1RB2`JId1S$IrgtVBZ8*a$nY8qUf|8|Op<7+0 zqnR`ulSz|c(i%!*O(BkU$kRon6{iP`rEQJe)qg;K0_$DXz7lDiUAV;hzo`EJ$gimB zuJC_1eYolV52@w(zNbb$0_c2rtPXR50RZeE3M*L4A=777zPLiPm+pd5jim?NjBQ~B zYvx}Xd>{Qe;ZfD}(eBh}nnbiRV)y?5qJNP-%a5z!@5gcUzh*s8^iHO6<$ms8=KNFQ zZkFh$m91qw6S_VFzGLRRJ9S^Z`e#)#k@NZD*&~3u9^#1lt9?c{x@-d6q@1x}wG8ZJ zwFtPYY7^S6pClJ*#7=Rb3HmFTT2~z%)AWs0?!;xI+^uIEW1lt{d%Yh`@T&`&WCiX$ zfVHMGPcx|X4No2)O7N${?RQYr#~z!fxz2H>jii(G3w&_7K1bC(cZ-Hz?4O|gCGbs} zXyc#65Awzc)3S@t*Ry|_`7WGz^!)3u`$wNOvxmp#`i_&OXnJm)x=jw2Jv<}$SUEoA z_bQ(`mU(A;vb(0+3ws15qBew5i;R+KD0T?vQe`H=k>SmyHF6g90&=B9ri?g{RDv>T zy?v=oi;iBWMEP|T(S8*rrq_hHjFB}W`qd@kJ;xm(!;B=WQ9DYiH zsN4k`P6uN~;P%qr7cVm!$6$b#Ra`O4bmgw4jjov&9L;osktng&)9M37g0{yuCnp~2 zrqwu`Jo_T%cyUMpnccgo+i8ST+~+rhiy5MmMhL#@GL2)KD@bv|%Ege>IJ8(QPej^7 zUu6ItNq@Ev3TcD6!IVWQ4sNDW*>g!yHj`4~GH{%s)QeCn2GxXdamdO=MTPHkPT@!( z~l5R(o&$+n24=PuWM0)nD4z6@Y?Q3)-~9a5zqTGrmEVeXgKV zwNo92HAjufcQ3VKVqJEtW!ndAjjW?=?lewL6H5}jwYx%9Sk3t+_ns75)-ouJsWpax zY#<29GeuOTqYZFBRdTbicw_+48CNST@pZKFdRExv;N-+-N(*Uea@#3^ElsLJ;G0vT2VDc7{Iqq6h$)Gq%|VI#WtpTj`*!_L z@?5<}eYn22?1w`-zPlaI5%?3V^(`+_@ryMbSIv_`*_hdx9$aDsZUg2;{%hv?ocGBk z_K)c-I5OesZX7-`)z|U)KH=6rG4$t&uR^By0v z{FrCw3%9~NU)D5TZ>+yx2nKf_T&)%6eSOc(d7Qb-^6rnh^zNTNpN?Udv&@pA*_B|F z*<6_=IL_8>H0>=3+R%GgDQR-F54ueyY!sTxXG+lROB#44mfbg=NgB(qFWq0V$C~ei zlLw48R=4Oz<@B8_`>(-2>NdYv`1(HUuoAko{QG0FFwvD#Gs=wC3Ra5M5%fVO(RWBK zuWl}pquRr4<0%^pln`HtS>=vRl3B{fJ^WXEIU-$gqoO-^SW8^b{ zBxwVCc|TRhjrmvW9Um^_?e=k8!Vh9S!qMpahFX$tD%zfr*d%&MW;DibRWU|d$KBG> z^bK636BCchim5c?bdfC{($2hpq zXvsf7Ep3Mtuaxy4w7h&W`F-2L{{R8wgUi%)SjL&0)SrC)8{6@v*N0ChyYt^t`&-M+ zym+5w>75Uxcz;FYbgdg9HAYIeyXx=m7+n%fW90ccxjFLgFn7bnp!cO zz|2x$8G}q`-{z+vPiuH}Qjk(Zwf>$h2L^^;a)Weq^6sJ8Q9D|BLm76p#&1Gv+?bHb6*=cM#5bHh86-uC$`j$v(fUXI zJH~#Imj188`mlc5_PYkpE9W`!?&Puk19Fx^vaq+CzV<4XcMCn-`GD*v9N7d_u&kaF zjJC;5on;BAfe{AK;Rh>8R*|NaHLf()j@_+^qmtqJt-5dCMwc(UYx)KIHRz6;;NX7R z^K~WPkpBS9eMe0`>-p>L=Qn?;S@e&xwTG3{r^H-_3-4wz~RGtCywa$D4}lDEv$DkKrd;@HVOXtxFE8qs;1qszS<+`!Z4f ziT?m!N$h(M7oVleitc%j-G0h_s^IJKm|NS)J@LOk&V6U~d~kH#TVe`_@#(by-KkFav3#$&F9DUyx*L|t#dW&Zti26@S={+Z+!XxRL zD0IT8xuev6uH|nekDcY^&zA2yvvSSsi&^7|b2YnZO5Lwb0emDI5xdzvQrNAC_X+l= zxtBv-k#Q3s-3@Z4;<=G`z;|IyhqM||cikPO+&p?`5$Xx{kBJm?^lOx~shN3n!j1x) zi%fDT@aA68g%zPUz3z5K5&%4#Bb5{eSO_P%NELi8-GN~T0ofx-!df>&Nbujjm~`8z z0kjSkY_ts1a%~oylc>~|N=R9T41z|7gP!P8KUC=1w)5_mz_4nbK-`UkvFdort%pJf zm$xeAO@g{jxFtJuS|g}oalUOuSx3X@x=}-wJ9bE1;Wsj~(1{rDeLxhO9B3tnh@IZpOEi0RzGNseuE6 zt)#>*$Rm{EGLDo*+i$wsIWuj}1-a!tqDMPY;0ak|>%w?^-{O}@9c#jG9$1sh<)^s+ z0CKsx@$bd;-(@=A(Ymc~-S}t5y%GI4u1pyn2A2MDR%Prxz^)Y z?v6fRo=)8SmyiN+!poCe`>t%U0mC$+Ir5Aq%EnI$nbuH>h!GHL1G)oag*B{LLrCg$ zI85DhOu#>kF0P7ilVh7M-Yl#7Pw-o%o|o`jqD1!7ri{*S{bP^h7u0Y~VIR!DYC4aN z>Rh=`mDlop4Y7s3pEq)B#uav_b)YCvPC{K_IuHX$ke7-<1o8rlT0(NlOQ;nVx5p5- z5K>;7Ee>ilo#?!gM);o$v9d_s(#Nsw4r{^W5O7Dxsa(p-xqQBB)qVkdE$W)tHF5MQ zx?Iv7&i;$lItcIFMV1esXbYb{n~yI#eJ4%!v(%(+bj#dMTuJ$-wpv(m z0X>rr-FHcCMdWj?sG#&6KXsIZhN5-2d#62xKEgJ9*0Il836c?;?3Rg_v=EY|W6K`N zcAd!s05?f%N3nyN?tdjr^+A=*78GRH2}sK&zvQ#7jBzJBuYvd|tso7D%sEn}KTIyE z76v}d&t$X%d=0E6VZ!DzEOt^fT3=5ef(^Lk^o*b+(t#cFl@4Qwd$Y;xlA4K|9cn`} z#^<{S2nRIrlNbbLI1RD_9tvUC(?mpfOIZJbAwS*86Vx@Wh zpu*xuWsMIxsf3Aep++>iQG;1dK9gKN&) z+nDH-vttEkmRnSgMz!)f>1SF(ErrAzzjT1nIL3AWfa~dOfoh^%D3~2VYa%Vs$4=fx zeyY1s-W;LKZB-?FE?tn3? zb9*Z7XER2|OEY*>E?!RQ@XPF~Ik`NV55@|;u}>0Sz(QY>?U$xdB^(LJvms-DG7!&}yoo_@}Ra)2pZu57VX zl5GTHRbg@UVOiK`!VX6=Z-Sh=hrpS%;rg9%rv}xcIDfb$@kma1*2}|w3zF; zm4M0zWuGQk-!X<*fI@~AGDmex>|}&9u}BC8P$XysE=H8DMu1Azl0C1(o|68j;`m}? zcM*Y(=L7X#pFxL>yzg7;Cr{F4m48k8KTdB;=(;|e5COVq83+UYR)Bw+`dl&8)A?(u z<-EL^a$lXb)o7-xajcpdRonyfGmaA4yIWzrl;uc((z$e&9_kjR)ks!Z2GT8MYiw~O z;%>(aD_h1~<8~6+wAm}VeZ{3n>lV~nWyFQA^2F}9%1~VxCdyVWRtr>`+R)w*4a9dhA!y4X#VTjC-RUBbN^VY32HJS1 z;VN^?^26vh`>CphobWhPwz2^E0U0?_Yg};v(FAu=zaaTV&!Co%W5)p$N^&OTxgjSY zBEgPD-5v5WqfItiW;v#*DsqNc(%N#H6z6K18tibUf?J-)5-yahMWvoi{FDY`E|K(* zI>^mrWgub=Gl>M{Jp-|6_P>R41M%tFdu3e3Hl2nt1snyYF^*Y8mLbY^4038FQw@Z) zEg`Fp?`T=&8)ICFU=9R0EUZ(JsL+1!kT9c12Gi-QmZnFei_|P9pz3K!WdI7-63f}> zbZujp3$VJdk3W{#>~z0qqxda$=Iz;eB(Q9(vaPYlL?)ax($3db7`mN0pVK38?|-RX z+&_XidXF5H;f#m33(0%B0q=d0*-5bA(u06GoriQ7k!kI~lm|`*P~kY5=;^>)V#hJa zubQ?}?5yr2S75Www#GT~4pwbgZz(`4T}_~v8WJ~IC`C6DfOsoRS>I#8hXu5A`Pyv& zQVF)2Wds$13)yz5A2uBDc`0pL4bH+zG^nwLh{fT-A!C2A;Be0GIC1Z!~&** z-f7)~gn|7u#)8sR*G?&^qd8Y9Y}oCXoZ79UwQipoDA?_VWSkdOgtn~)*?nB2WpQ|) zi9Qp9t#qgL2&3KU+o)g}Bl_d!JFL05`=jc9&3e7*xhD=+_T{^VV{7L`Rf4?T+2Xz3Fy`94aoy7#u?g)UqRn`&e6e7) zHd$i9A0+n9#cfY%?N}H=$h9l&XbhopHrCm~mbl}$=|9j&FL-$bpOQdUmlyhnC4v zLyZh9>|V*w0FZE}MpQ)ByKBZ29@u`C65?nlqhM(o*KcS_z;+Ej0V65M55uRju4ALc(${dOvxhqU@W0qsk0aHDO;CExPRZ_AYRvm>kR&Us}g|B@D7PXU5oRESJ z(Q7uFE%qll#==@XsObw&-A}Y^XmqY|$e^5sw@wW+TSSGd#fE%`LxgojX*@8qe&R_n zk)DzjT(+EW)dA8PqN3Kb80BlF*<>v3bYVO@{RzfSfdh%MOTV;Ne+B)Vd7VxDrFi1j zj1auHx(k3fDQE&(LH9^C97MXvLG0{NwyPKOPeo|$Z*D${qD5oNP8CX4Y)?7FWmj=b zBn8gCN{p(Cyc;T1&e|4$8Fo^oeS~C`5eUq4ag}hi>1p4&ysdGpGnz00wj)Ov{w`C~ zJhJ);RNAE3%jB_*{$>Ue)ov$4}I%F0}RN>vHYNED`4UIJHi3CgQm%w9bAY9Ajy1)jD#@8;ZE}%0?vxpb4hl~~#!H2#2Fx_> zVGaO-D1*UNQ^%P3Z^TcBdVZmxmr(>E(7OayS$&VmW6Q%co*#AgckK>bc}z3Ed;H&! zyk+2RZ$sD4<}|sCCczX!@p_J)<$b)rYxLh#!>Yo4UMSc+WG*X}m-CNS;v2@|mRa|C zta8LM)V9jv$!dE=#gf!*J*l-DF4lulwf3w8myRd;W{O>RQin?uNqmkC04=(HKK$cM zvYc34@5%iP{hhoR&ky(w{Y~)(KT-rR*#7`V&QId&{{X5N*K~YZ$94SI_UqMeSJwO~ zd}HSS02}`RhuKaSQ{owO+rdiHkh`mP6jrf^nh9-EE6hF7vD(D4w_=-BAqge~kUOYo z5F`&|128gFu_?HDiyjx*UkGr2SvNHh~Ig(Hg&RNA~|(XumX zB;_rOjoB?s_DBV1m2ZwZCdm%#wF@~Dckpsm$+TOek?B1)LegT#E?+(vewc6JF4LT& zGfdX2m?JJhn-f4++REiiqRw2~Vzi-|vTv>8W$4VmC zQS7#kO!jKWI99_|wuZP>j4KRVTj7xnC#voA9qs)buiIw2`}D z9JRZg&-G8Z_B{TIIe4aXZ@c?B_Ma{s=NBdO{%^;AHSjM|@b_1dl0aP(iF+lCTUYP1q9J2X%m&RJ^A$Zwiak{Tk;K6PZXK`m}_D^W-QD#%wb}MQ& zU5na{oW-`YDOH2R<)Aao#10aGi6B<2$rS*8pjyjL!j(%*pxiaO?-rbDnP*G|z0Glf| zig2VH0p%*v1tY7vnzHgdI2tNyh)F9$sFZ>-X1fQJ1G;c_e2@nqg+M0?7NiC#?#V!F z$s28`0k||Uf^+jgEF-HUgs2h_;Ou^B16goX7%m~y5OJ{j7Em;@=EyLENZYmODrgX# zK+!uYc=MLQKo`Y7JS$vEQtI91_I9--=*wgb_wvvEnZPHs*#SE%-j!*Mx@@=5 zK>&k-4s9}*=N~cniSWBi;vSVW-8W9s`Yv{x-21cGta-S*=ZD&Tp8HXsN69hfzCOS1 z{A=THhr0fct(3zP-x~?I+z$BHhtzca-YfUdN%f8{uL-;7`d7~+fU(7{6jza!Hw&uw zvg6oWK1pqr!CO<=Tott&iR@U6+BSIcx*ap8%dP4WX`zh0?{EMG(bHkwcUot0;=<>b z$@|;(dhi5Z74U%TT9}*m&0BV{#AG+QA1>dT`ksrAw;t>Be>Z>B4_&=~Rr)>`?&JP% zw+U=7Mpx%OjF*Cu$f|EB6^FPIm0mEcuV~?Ca%+qx_ii<6789#s&QKiLo$D$?40sL{ za)GB~Nas1ZRVX;-k}$5MGB87uP(m?wI8p_w3V;(dUDA*i!gvX4o|e(JPm)GH`@mFM zQ-^RkL4aR)OJQ-iH02V51?_RR(q*I$DB0*}-ghdMor1n>Q7P>+5XPpB0+(|8Tl1~A zXzovGX+`1&>T4JRlE3 zzK9J88rbL@r?6f}l9B1Cg$o>@$MY=GTP-r@5y1r^8;BSD)j@8I4XgthREy;uJ8p?Z zrP?bc1Xv+Cl5Qi#Fb=ayw$D5$rdIvr`;jo9J^P)=QqvrCUPn_(mbk|{SLZ7$TCgNz zK_KNJpo^WjxFxk|Y}J;!uPMq}IUcd(iz?c-l%cMTVtQZYxBI~sc~f$H$?oyWfK z?G@?t{{Xv>BdVXZuO}(pAt8D7?l1>sCkBcua6OesEjvIlUYYEiyqgi#Syz^kB_}h01T3<2@y9Dt#D+#3*fV4B|!<`ZIS|;1DP=FkY1XDvwWu@bz*&h0=Sb6ZsLGEa9gqy(N{_cn%0X7 zT@KPP-g_&d~k7P;qBrK_^Z;%}wn^ee^cdT!qtNAAC8zSnSd zxK7-^jIWGq`c9)mF=Ww@J36pemC3_#^B;M|mK@V~QYI?wu)Y;|w8&yxsrW)N66XO* zu$L>Ppj8_5T0|?MVEnVPp_S*y4?$jAM9fMgR-mo;{z=SzDf0EUxVtl9f`kut6Zca<6Ia zXv^uKQ@Iqx7rcRjv$dpzrE`m`vX+oGl3asan|9JKup_955n`=K0vNw~Nd*Df(z&2g zxSD(cO4+dH2O3L9v=M=XXl+|BvO{WgV1%@Cgc#70gO!1x(i9U2$^zXdr7eI%OPomI zKag9RM>eD_mOh9BHNyb_K;RVsW|)pjR0Jdr;UFw;HCdzv_Ko%&ctODBYj&T1l9kUT z2;GkASFl{oruZGynDDSsa(V)}q0GP^f~yJ@kd|2Ppu!FuAx#?WfTI14=jxRWHbC~^ zAntH0SDM?$VKg=Q_Kop_V^$#^h{1 ziO?+gcTPw8-`XqH>Hh$C9zRw4+VVi_vg(*M7%2Y8EUv~6BdO2FwCRQ{x2JY~l%R&j9YN=GE zsA49%MNt>Sqo#~Dk9DptUQ4%DCs4J#aAz8G?5Al-qVoV+qPD{5jLdG#tg>}se35+) zR9f5z5o#*Hke6K`6Ph;>NmvT~j`LYdL6>Pfw%9<}ZFy;+oGV>jC6*6$Q7()z=KHFV zG}}dGS_fmu6iTLfVs0udR~Y5)ve9Xl*m(iDN~$@tN*Lk+S?#nbtBXn0G%wNXw9#sG z@B7ip-N63x0M&Q+ z{%g+X=sUdezen^R`iITaS%+6QKC}I2`#&@I!{K*`JTa|&TF#$56mT6G&&(Uj@p<}u zu)4}WXY`M?9Ve(^FCKFL0E@y)rhGCO<&Dj7>_sk1$K~|+XO2^N*V29wd^YO7H}Mbo zCXfgra5Cy-9*7(6?_=yaJ-yeX(e$^H_>YYHVfLe^^nMLxm)^e8d*AuO8Nbl<(@a(>mj|s<*Y=1I(m#A}khdy0LHS>R@`bTZK3rC*Wun-g< z^G3sA=iNC=O*z85CLl5v+LLEyEFoJ4L$|h201?RdW~nU}+wwpdv}kP3nmwHIsugq@ z!nReg)}N}aCe`c#q?ClA?Dk01`fE_APDc@tqO=ISo_I(G`4|lX613oChaOTh5H#>p zkPi5TRVvbZi#eN3Dbks+9FSRY-U;D7g**vgV}yd60TO(W2iZe}^ci#O0Zm+iKHPap zQs_OqU1?}+Cpo4~q*_XX0vqYYe2{2lXeT|83Qr?!lgf}u^ZKgPs95I&(t8VYi;hwT zH1QL{a%>uGL^|{MD$-49z~AdmMCa|`NyJ1NqE%RoHs@+08*BxRShs{-A&lUtwMFLD zG@rectqj98kXn>D>}eifS<2d7qMtu>QqnSO%4?aLwDg|sQnSR?aH6%w?a0*=M33aM z$)lAcfqg8`OqXqGC^tJ*D}lV%$t|C-G4%-}Eo_8RQj?_?zS;MJxR#%-HU-_IV8ksm z07g>>W6`vWa8E?1=~xB_(Ha|jUk-viH>L;uf9;j&^z-&{+uKcu zfoK~N$YJ>)7JPuZ%9~UZjpaxI`AWcD&2f|fkTSuxkOmZfNt97NlQuT`te`e)vI3A6 z0V4nZ7169Ix zp(ALeaTyr?A7x0j2PjU4WYvJH8jFs^^A0Gg+IvgtWg)gy+Pq_$`*E_RY7PLPsg^yV zg1Jv*x9N2H=nk7*rGr%ixr%t(BTwMqLM}5e7Bu7Lap)HOp> ztMD&Nk>T5@85-OF0AxH0`Bg0MN5gLWW8C8VVe5Q2_Hp%D$^2*e>u*V<=>0RH^q9J5 zMd{jJouPzOdTk_4iZ*>3JN)@tcFcT9r-{$h^7T31UVQFZUwdxrOl?0YMn~fVU@GD( zPZ-B!2wmgZBV;+iAoRpd8S4aY_Sn}85-!+C)xok<59T-~IO!DoHLk0YI6I_PjxD%)n1P;OI{ofusA z7XGTk)AaJe5aQKh9TBu$oE{dkBG$Z+TW29X7T%wtw`W6zzQy0#E79Tn5$1J2yslS} zDyeaHy)TFik!`ctD;i^#$<1N7;X_gqpHZb0<1KO9l#QLjvVf-1HdK)9Xd=}U4zTPX z;uitlk+WpH6e$}20GbOzwzLcL{7A(iW5SRSKMW8*$k*!ZOH1jdG<@ zt~uN&S_+(Njae$C0=3|bQa7}S$0rkEhEWRSXOm6=qlHP{!g1^r)yPtD%FeaKsECrK zds)&K@)FT^Hx`^TuvH-L9)m^`NH24or%Hrpaot5Kpo4=ABnOO_xOYL*BNV8b?SOz? z<;^Dj)UGtaV);^QHW33Z7TfNfOukAxd3m9Q4QH}$8*}{9rVNhs{L&6?sfF$IsmS3W zr*nmO`KdQYNvGNd`c6%X=|>P0S{2N6ow}N4or1Yq;~4T*=G+B2Jc|u{i?+$G%3E5u zhO}^k#_Sm-0jAX2xZ`VFO_BI4b6dxCNgCM=@>W$%^r_8*n(T;rdQB{j4g?i)rp-Gs z%3jfxtW6)xcy8NIbcT(_M$zF6^6*z#4<&(3i^DC#LLvrR$GVLymbKxmA*oRF8uz{L z+SQ$k3JoKqWyldBZKmiXY?cN+lhHalT`?74{waq^gvLh2K;W2?GgPWny1HZL#sON- zWZw@@(*S2niM&<*rFuL+f;_%|-cmZa_HoMO%fqXOF6SzFOL;c3wcU&%Bb-4BS{5~u zd0B=WKo*4-k;J~+!a=55Gz>A+GL57{ZM~DH3BEzTl&ULnt50Ur90{bsrW+v%GZTPy z6;h`o@w%D-TE>v57N(w?jp4kUqhQNqac?*&f#W8yoJp2oQlwGiC0u8dPjxjr zOBfB?sY3OoO4=gS*mAPQw)jMcM8FD=!`S1(6)NL|xTT?T(=#(*G>WWp+nqdMo2;zs zLT+d8Eb;7-=))Wb-M~OH!U(r2By-LBcv2P{y|+kGho=b}4suG;j#^M!DEDk}-D)c5 zv3XudBqU{g`}DZ}N^Lzgv^-%ib6a2l;94{eMHsE8m1R%D#&L^R5s}!O)^^Ia8B0K& z&vCGdye5Kcn%tZzU7G@F?BJ-{@tO!7!#pIXH(cGeYYRM=9z&^VUo54-6`hM`MHGy9 z85EQ)yV_0d|RDj!Ja5+^XU3~Ft$2UD3k>lU3P&gsoSXFaHU%nkpS)4RGp5~oD=~A zooV<<{X5A5)|jIsw^Ty5T3MQqU4eO|y3*SFQPPmy6s;2y?~^|@DpOwj&QKO|Z2%$( zKO_VIZrVSR14mBh3#_N2+aF^k+#^NYBXotX7Mz8%F~mcaNSl$Nr^WKCOzvnP^&>;L zDOl!|9`+MUfyXEV0bv5PXb+mEIafPW{FON?A7?vpFU8uG=-hT&>QqLw?XyS@q-+6! zTxU!$(zbaFN!#*50&zm44mLT$RbV;Qg*#DsqyQU8;Ta|lJ3?DE1Mk9MX2wXg1>=B# z9_p}wz$M2h3`pv53P904#p5_s9TpNB%_@lzh1;@%rs8nhO66sgY3;wFDMmJcaFMC` z=ad{^Hjrv_j{ygvVKynqPF@DByeiWmr5BYorX(h4JOvfJCnSEQI#$u34#?3C4Yvsf zY}Ix_#>2}+c0sks!dfug(^itD2h48Va-_>ncMD3WtKGGfcLGu8{FNVpo>$hw?9zu+pDD(w#FB|!A{gWHiqOT zMKz5QT`0cljx72z?2w|XWX_*#hJmo8Y}TFIa7C2hh6IGa)52!y>7^i1SB*|k@tke; zD)!H`FFo#d3R^uvVm@KWuc~7BV^gLTgs8_Nr%Km0+6}4Fw!zalc0|PX&zD0X8XF1B zCjlbbHij{1BT&TI0?-{PgJTp8o);UXKUhk1w8m`twE3Je9!q0G#d3 zrB#U;W~7u&5sYy>AQ)t40RYPe!9iR_yB(5{Gs>w;Nat=gQ|=5G4$4C&P#fCNdM{+Y&|@}M zSIr4*5JjLUk-C$BRz;oEo{_UrH`Pl>jJ<{tw{m)C-9#}o4iTjH)NE}7=A4DGSlhy> z8Rc6sfH*~kGNiQyq12+fFe+#Qp`?tqUsWoVHa6$t!h2`hLsA`No)T0i=?4foRVLZmZLAG#m3n2rEbpY1+6=F(skKrRmr@#eOKZ?B)B-S6?90eq zCmbW(7dmIyEwq8CqS)V9wB!SV0ItcUmw+-mpx{+}@}$EoAmb{6-4%`y1c8~)C@OX< z9H$6t;DpjFPRgRl&>*o?^BCW7+{b2;(zeArx=PzyC?JD-S^+1OD~v}V1vqvajpfa? zaiIxNL}fIBT3T_!18f1+-93Q|XdpAP z-V&hfP`71(u0+~9U;>SP3iOMTK0j6x(Ax$w9BV0P)a(i<1m>4xsi|9~z{KOZOJcMn z1Xw600VZDQ%2fLre6X5on#1PWaBSp4{VPa|eq-(0n?3EezJ;MSHRfJzQFgS)f}Bm7 zFw?bEXH_K4+I`Vz#}6)a$8(8T*H$x7yYbHnEU+#!3gHD#1|7DqOp9s;;6g@6$a#0A zrQbk}Y+STrJvPyAcn8>ItC%v&mVAxJD>m=d%TO1!tcpN@Sa$IGMcjUj^{{U3}XqZ9YlST0nTYs86VDHHoVq>t=_>^|R-&+%~e+TnVL%OszEdbL; z=8YEW#;^_=KQwq7qBp1(@W6?5n=NblMb-Bk`ITEP)qhA4osCHJhp8I>05;#|fiVgC z;QSVW_@lz5ur}%%)AxUxT0ZOZ6}?T(6e9_u&8+o8;a*U$#R5wMI;K08e>A&d=2=Av zm~t9_G`nE$qc&KaEAIVK+I{WqZp#@TB`TL~M$0yVXy!JSfK$^x>#*dH)9K+&i^ngk zErr`|lF|14%2QHMn?f|8su{7FEuELVqn#^Ri%ary-`ptSo0tyG$EwFJIHS4wQ#LG0?IMU)nszbi0XT{~Atc(Un~|8|H()A}mRZ3IEGp6^V6gB)O73OO z4Z;;B*kFy z(|^Jy>tt>T(Lp54$3C#yKZUEAMShFTe9T-)K0bUscrTAzt0U#2k;n8;yA!<+QGP|8 z@$>@YrsrsZjp_`a(ZakB^F{qxBc*{M!Ej-V5RIIiIQi8ejha z=^q~zex>R^FXqqw@c#f0nk>uJaqXo40L?FtK8N~`sQka0zxRsxdw=ITsTWo>qQA6{ zi$00Ijn6)Dq5DMqJ=nfAD`#-+PBaitw{{Y0Nv-zR@qdp%4_jIs2=79kNe2@^XOlxdH%5*`$c#O!rIQPaewAp{{V?Ek3NSz6Q2Cz zWA=scImm~qela)y01{uMPolq3bNy%YQ2n924qaYHRR*syGavSm`b7E{>OOz0XnxS% z25Xt-GpR-#?Yo}FhL5S;fRB$pl{e9Or<;^y{?R@My7D@yuKrsn{{Y%g^ojIb^e%ht zV-EeJyb8w#yHC}DaIie4{{Z4g$Dcuc51xDF8gK0t;Ab?u?EO-|{B6(EDSnYYhdm3P z{{U(&zqCJtBqMK6>h1(z+>ieN5?`cGqQClosQSR)`$u>pIatSNdc%vj*%J+YeM$Uz z^hfG0Z*9Su`$G6V!pBYP6`bsh1Mfk^Z6Q`oK@^72yWYv-&TtxSx3AAbw6q z$Dcy|N6+ydaiNAc>4OVm+2Gef2eu?0KF9d0NNA64BL7Rqyw(3$NvC{ zKacq)`X?;+%70c*?G51o=C}GksuJ!1^8WzwVLQ)0f_g74{?z`h$NNC|UCu2XAFB_W zod_S>N9hyjKT>mldVf{B_JQ!L5B%5Ej(_@){{Z4oj-_Pud`_r{2mhBxm}!lX}~sAMFp}_+#@mJs((M1Y4OrCDrZ#ay~3n^samC`X7Wm zb4DG(jT-C*8ki7cT}}Id4bSUzs)dEQb-wH!4 z)R>)Qqk0x>%sQRU^&BggX|PAi@y{OVq`ReYut`GX0|D3irL%N2fNil!qMZef$8d&s zakt3UfT=SbyIKo(PK>vV{-t;D{s{B=r{AwFDBSBjFFwby3(msk8c5uU*gzz9QqZGh zXnhi-7-Lv{O$Y-vI~G-FDbjgw7{Zzi$Ea@vr?SxPkUQBi>|!?CZBbe?8*~%WT@5~% znC_M7&&kWHqfB6rl~YlUSGY&Hq;YA~<0)x&29kMETH&`kcLT=?a&+SeOyXK{vuOy( z2+9-(n%5H2l@vx0z&(>m$e!8+CkXbL+nxbeif^;I3{5eN0=C9&!=75EOcfp#+*tfi zC0xSSlA*lI!w%xgRZzR5H)%AP2+D6E1w{lAg-rdJ+Dp)>ROs%)4rEVRsMB=)4BFjx zrY$y_7MII3uG-c&+?6_9{GXM+E_`#=^{r;N!`>X$ohLyc!ueqh66;&sxVtT3?9s^k z-pK5=>2#c2bMJC_uZK&l(Kxi2^)DwRmopzkyDWPj8x44c{LKs7yJoAu^$+*u9kk~* zA2_DBK_s4t^)7FE*bnNLmCJ@+(U)nML2GonfbQh&KglhtvV5a|V0d6Hj(qY%TaT@! zT6{b5if)QP^6i?!(tR}8@Q&q9EWUz{oo*%CEn|rlhA=3%Yn)#@iVX&)i5fj?M+KlX ziu{tfPpe7Cm&+Dq(E#A)#j6j#Ha5rNpK;}dpCoTh)KiGl>xlxz#tL2VPCW0)q0_ay zz>i6({;9YdWgXEshd=JM{S~cjfxly)V}*m|wt=*F@C+dqOk@%o>^CPM!%!AwM@|J&2#&Du?4Xmvzb{uY1-zbNjXQk-0$ zK^dUey{_`QT;;@2pb7m_xlgLT9)CthPS=1OIz!1Ek1SA2zaOfn7JocjcTDO|17}E_ zP&MfS{{Wu~d-3|T?Bv&sRNj--9O6HswT>bz!i-w~VBx`>eO=(?(I9NVf>-;dR#%Q^j({{Thx4a5$Os~m7g_$S|w)i=7` z_O%yF>K<7Kq-!0plWukZ_eXU4oVoo5kEL}G^Zx)6YIEu4uld@2`29+49n3|oU`Pca;%<{s}4K*R-vvU#(7V1pKV(@WUrXCblpY;8%EDb{S@-Y2lU-RBLI_t zjjK!kj+2M<>6&WjzKwn;FCQ@9qtox*_DPAV`{N%)Q*5tfyA9Fkn)(`9c7u;zev12R zJI{ndI%ou)9KhfI08kWm)O>z9@(}7YEqi>J|~t2O=_pQ~uKZUAr7>RQtvqIn;EQiz}}&>txgy3MlSlF_5&RY&pu6M?QM2 zaTfFTC6!Vf~n7U7FPVral^cR+A8?J>V`;YC{Xnu-H9ka`UqyTHypmCLl) za9R09@JF=SADXEVmP5IWtEB8qw6vIa z7*kr}sNBPXEg@U0$ifOz(g!sBlB+KA21rw-5}D*Qkfw(&O;{4`aZ749q|^tVN^v#O zY`eu1g{R20saZ_4ge|f6XR-|5np{=nB2?Jl+79alJ(ij}g5Uv0%THC&+)qV>pY^}A zSE0lBBg^V?*ClYaG>ooCtX6U9G^WFjW~G3z`>fhWA@CjK(pDLW8s^YF(V%n?*5xo- zcQlR?pqr#4Ehz)~7rc*AC=Sdn6av*0^eq+*TBy%E;nveO+8S24&A54Pg?^m#O0EpC z<{{Yf@cS`7YdRewXX0ujX z{E;huKNfBHVt)(xg58ZlH{2YpC6V2ZueEdaJ|FA)c*CD8-qpN>w(7!J?~zAz&aMC; z$zJR?_$NG$Or(LwqU+*XkIvif9fb85@$+RbiqX(@_cX@oB)_}&($sbQe(C0i{TeT#x_?$EN=W@wd@O#A=UvJD>aYGF*l$-UaTvGoKDLjCjQJnwcKNv}hs6Ga7P3I_ zZO6^zerUL3eoCEf{_ut`5x537T{Rron-%`$Ps5GBOV26eCjS8Vqx{#~C9IsvZ`&D1 zWQz+C|{)I_5Q5Ld{p!5>RNzF2XWLK{uZa<c-}sN8b7iu2Jyu`YRr@Uo`&!;zH-wR*;7P zE6*2SOTs=DKSRB2zcFK*#EhpNtv=Z70@?POzp7skAEADkKCQ*6@hok4{*stg5Z|;| zKI5OC)gKQZq5hlsqqQC-Xb}#hE5HOex^u_gFWAq=TeFZI4{KV-tbYPREmroErLPCX@JOIr0AUZ=0;v(W;w~cRktU9)ARUKgeFAAF7)t zRBS*$Qz+aH@88v*mQmUH73whhv*-0sQ=O}G4-_XBf1hN0Hh-mIK54sH=Klc8nhAFw zXc)(1YP$wqR~?@0fvyArtYHJOn0-CfOc?%=$Mr$|A$I*tXVr_4bH}7kQ2p5&4pyP(- z4253l0&oTzm8t|fyJbi~rxuwn+}xa`t!akB;`<0y&PZ*nEo~KgVQ#>A0mPLz z-L55`?4M;ew2(JRwYS1sI{`YP4en24NZn!G=y372)Z75Q@vANS!@R~9?YKLO1Xq@B)_Q8T@Zo@^`Lo|Zg7e@BOD-bAu` zTI&{0Xrg2@;QPCdZ%xq&;W9o+Hxl3jT|k9-Rvjlrd2#Q`n`c9T(X z@Mb-P{jN|!+g6vvFV$1~)enXCx{j_}&M(`PUSG)Pq}%v({pK6t#*ke3o0~qGZ zCf9qTy;sw9^HJyxYlt$)MHB3o#7FAuzjmYW@FM)_FLhEcBIl=mXnGq%fNYY{06!lrOH?vIFnt1s2I^Z@B8v%HSPt_- z>fiJQA55r^=Z8Yo@F{`HMRWF@lky?%kC@uHpt%A z4NmZA?rudCd{I3%-Y zZ1{QcZF6Qlh#*>D7AN&)Q|4D&3-tYJEi;}RWDRh570S~bw>IVF;mePfVO^N?%x0C* z$1|AHZklVl&gHkMk4q$UG(8hdsC#_`$-4QgA5^xB)5-IHN&XCLdZeEMd?wzie7RZE z*$Y_5n)297BP3bLV_R!GUPmS}Tc^Hw-rQvyWiFW-Vg=Sws(tXR&^Ws)Ye|t;LKyxM zR@xD777#YJ$Fbg^mWK8ye$hcP)1RykebG@`M<>ar9sF9$N{l)%U&at_mXap4aIYT) zT_|MRf^e-C3hA!_7M7TjW9880Eu4gAYn|_Ebf(~WWdczJ@@#6_O*rG-R^l%kVqpIO zx^Rt-&}4BA^n{fms2jDQs>Pl|?gtnOnUvL#8R=14;N;I4b8Wn+v9zx}tZT!Z916;w z+^4a^L%W4K8#ASLLt0Z2-_aWZUNlqtjbT|b<~X#QQ=zgGJr>wj#oPlNYy+Rm`?@VBztA2 zZ=|5vb4KiC0b!g30a)Fk0K^$^3h@s1kcPIqtub=)$3`|9+_jO%o>SQ!D}m(}oWfRL zFc8`0PSuVZu5{Ahs@8V8vByN7;NX4K-z}g+oTZ}`t=;JXR+DIrf~yI3rqS6LwNfV5 z{Gol5(q=(z+a_?5l_sEoTYrKr5*BWzNw!n&*DFgTT3(9j zAYLlXV+-r>QVipL!g8P zh@mIZBfvP7~wH|zg5=qbs1Zg@$`H{#vT&u{{Rj=TlO7Hl1A*mPpXKP z30e>GAmEPQFhZ*(_j2K$Tz9(*s`Y*o@eBIbOqsfX#_Hf`5)pv#cy)W;56->UCodmu z+^cT{pG+0xDZ9-g^SpkY&j0c&?cSR^3U=?ZJ|w(t}hwMAom|c zE>J0>Q0H5+Xnebb7T}EA=Q!^4xxAivO0~oi=EpU<%W8->MCTu(c(UZnS3x+mLJxb% z+Nqvb!s8*fTy4$(@xl)cX_2+T_rP`k0O*9-w)p@s}&6Jx?YbKNeiM zdq=aBJ>*PvQ+WAb6>rqDr;h|l+gy1sD`F?wY9q{GB^ZNHRgdz z8>^;pGznD-nGPY?$W1h8$quqVG!i+x&JY%2AW;^B*)2o7yW7H5P_t*Ol2q+lqQ|Ni zK%!(cei_(#bAW0-FvWnA_ zJRXxml;~&(ppZxnlxRrw8X-(q1v$7h_QDBHnWq+l(OG~w&@3>v<*W|U#h*+6PGImhULWHeTJMvrZVf-kx?qcH>{lqT0-OhagpwZ+fL9VWaO#VuuV+2oAU ze*XXm3p-s{WA}WQn^8k)DlKV_4t$e5znmo2MnnD5+%<3Ye2@%6@aND~6JwypU3;pL zjmfI)IZY`>&E;2f zAB7_P!12ltw@aW#LI^1$#esw>Qc~#5j#H&=8>ZVrxJHj+h6eUd6XRdCV*>L*n7Orrd!cvC;amC9V7Oy`1{eck!a!ggQ?Z&VrXE~ z^&KXkR^6ab7bIlY(5{EfK5OF78u+Kj9cTJe#eHv8)b%;q>4*)E@xctC51^ZkUICOPgPg3df)Dy}v@n-h8a~*ZRJM(pvJyl5N*kxnEZ*-YKB9pwS)5 zQF%~oHYS-K8g~}iG%%4%^A|^;>K#W=Vd=UJX0_X}-6Ri~LAUf@K;sYM3?Fs*atuT!WUjXjn(Bp2EUDw=V$h}(>T0d zUHF@a2{?*&k z{>hzK>V#U48pJk=CJvly{?wl(bJ4gY-dvaYPxo_W_S31qgMxpJzwGI0e`Kv0na$LA zyQ#T=gXq#k(s9N~?zH_=(ocM{zsvoYU$#D>e-9or`Tqd9?I-M+;lrmcm#%f!jNzsx z-fQ}bzgBcp>wm}p01U6%&sDzNv;P3={{WMW{gXT#Au`F-I{Tm5qf;0F`=8yT^?yb5 zzs)o4H>&&ZAO1i2T;H-sgQL>4o}uCwNaIGeYyfBf0LF>w{TBVN^E>vV)xW)u{{R@y zqxMYjaBFsT9=>FG4&3SEp;@ot2d@dF88#&LqQ`0&t_5OeOAN^VCljV>903ZCh`k&c1rv0R8blxoL(clfzX`*+3 zl_h;6q_cA@znuR7W|;l5^%-@S9vA#C`?*to%9`Upm89``J1(6*fPdY87*l-{g3lb6 z`Zvez$5)SxxH0~B{{SvT-?JBt8!Vq?>)j_&u$uFsmLf1Zy$2uc^8Wx&{JOCF zdHw#L{{V(x?;dtfq{r8+iLc5ua1xPNwMNX(jM6vbQFI^f;bz!spM?I?R2s-|(`%E+4iYmC1GS zb^K+Y=<~B^^?EJN*J*V+Vhcy_;e3D1zy-z0(RCbukB-mqdfh*(bbUqF7dAKiU~Y6W zx#lt)8{MY+SX|S?y5E{OwCTubw*hBAM9WSui{#Zq;aPPWcNpIc@X2lEv~Yg|OI{zw z^1XK(dONSIbo4*9zwHB~)15q@5NGNTmX_@5S}iuL@y_WZF2BWgz8Uhb5%{OXJ}&D{ z>fR;m8osBjaIZH~{l%j0nmA~(Z~zDoLGb*(7`nXsh>Swf^)^rGYoDn3N6`8V%45x+ z%1Qk8>&+|V>l!H!G${TmC$oM`yScEg;gs!d01e`@r%zv#EuHDsC*0wee~NB+swZTFg%!Rv#??D$Dl10^RXf45aI*|St7vdG zg*#eZP&92lhhiC+_U9_4+9{Te&HyUW8Du+$q;Q^@+?t(&Hhu`B3%cU!z$1m8P2-qY z`!sN(txap%>qsBdNs(b*C0#a1+T~k27?Mm`I6;)2Mv9`9s*tOvH&&-=WYfiwX%I5N z*NUWQY&i6GXapF|W1#1R7rLM3INAn^x>qpeD@Kgz-X1+!36SSb9qJ8L+BOTKH^IV@ zx4ZD@Bg0x?f7kxmUY`a1oOs<;{jL81pC_2|vt@DV>}{gL))Rk%G$kP~Ckkn;k7!}O zQLt87c@5!BQxW>P?vOnTS{ap61-N>!o`Y;@w87{Aq)3}hv(jiPMS^+mYpb$$qq0z@ zcp}oZc+ENT$$iwUxp7i9t@)%VMuP4T4M56p##Km+tFHr1Sr}SJE_dXP1AT<(p214& z5E84$-OrV^%9h1vEo&^Ou=YUe17FHUGbP`UP*l?{lT8wy1%p8{jl(myQBPvWN+)h; zvz2j`jrXNQ-A~E{Biga zM!BzXb1|DA`7Nw^Sa=d4v^;NUBo^m4gM|*8_-mh{V_ni%$ynF5?QktU#gIqQUjA-= znoGs2`Mgh9@NT*dOQh*+I;}Z2)-?Lr@*}_0E%D@+-Qe{;m&t{GxjV^>`LN^k?xT|GVQ2C1`d>rnvGfj>?KB&vneJ(lP~6Dw0B9Mk z&>rXJu#-M~<`_-e?H^CmaPfL~1Vd-Ph2%H^J`%^sgpO z2Zj1X1&#-Q*;@A;cQ3Pcx5t-{kH;P|e+eFECVfv)`|ez_{x<&ryV_~G2AfX886TEN zup{)g{{Rdr%c{!!(T_=t`5uR)>0@)6$cHvT9N1XiT&rAoarzl%h65JS2y1G#*EFK% zeywL59BJA%yv7d(h~m_D)l49UJ+5!2+-zTQ{`g06=|(qsyFj}GBb2r@+aq@HHlA-C z{{Y_z+3C2Vkb>7$Ho)88z5c0Om8P8$cIT0|6}Pv`ACg-d1@Ova-sW4V9le3BKQ&t} z(Bz51t$Rjpz(1$zpK@*?z85v^kgz+De;!kmyIC+680ouP`E-1&64yf;|*Kj8kY6SVrT5A^rTf9JfA$AEk9 zZ4gC!s>_p)m&YzL{{R@i9!{sGyWr)x{{RbLDDg+YC}4n(4(l}Rm09pIn&!elPQ%>iC~n=(?Q-w^h-4-h{<5ZrNjT zu=bH#n(pK0+r1U?{cl6f(C6F9{ukw6rFvhhbe^-*+sFJaH{O5Gm3*_T_yeryr*xe< z7wh!AwbABAk7qZV`HU&UsK)!eKC{p|o*cKuJF)z|{{Y0EgTY=S*GvKF(&=No%c=%8 zkIyIY3bNfE;J^ydanH(2!w z2~=kOmV7IDi{S5sy;cWD(%ygjVP*4p9FumwgABpq!B-r)Vs;mS$+e`ee6dO74mc@g zMi|&%b}H1?(jj=;MM&-PR$xi6RJF&!DM6~GHZ^d%gD4O=S=Q0#^$gwUBP%sIzFB1Z zKq+iGS}!n4Ea4D69*~*_)#6p#(?#h7n_98YCqM?W5N%hp4epfGPS-TFg%-8L7a~wg z&G4ns0}<|ZQk@$TLr&ufTu*hlqX1bLPGVNK>f{wciDf%L2~b$>aLR*`pDxNYVzHnN zp{lf1u@$3GhGcDMyGEfFmAju~vRW{=HmM`n6KTY>LI`*v+du_U2VYGSe5xT+EQ8cQ z8a*Q@61^`&1auey$KL+YUHm_SJl?1GmBHEo%H(>iNCwg=0EDgNrBp(9mYf9&FXjUM zs0L%8;DBR&93}*4E-96#BWPp&r) zts98%`Xg?c1j}060id2fevc3*VCN z?eiRbQb$rKTEZGDd#oSBy29PJlSX4>3-$`y(?t8IwQ>m-`e7dT6x1R>nTy!S}mTdJWYp$hv5451Or}z}y6q z7n&>?74+p&Lu*6ke2=i!xR5?rPi3Z9&sUu*YMe*|IJ9hNDBHAolYQdj=^u>+Y109| zTqbE*ZXn^k&0!LdZf3|GE5*FD(|^{bQl`R>U~Zk#%0GFw!$)^3mq^ilL_S;=>*rw_6Ry&qJ_j@J zI`a1X!Du7!9?O2GhIO4bd|6LA@%(;GeIKsR(|Z0sd~UJcujenj^S~^2-KWw(A;aju zHvTW@ZyNB#j$tD6iU|3mFJh03KNZTj=F5+7E!B$|;+;Hg^ne?57f&CU`Ody;ss2u; znw=OfaIi->9P)==K4YVx+BJdy06U?THY1bS{U!K*$HDNk!w|Sro6>ZEkN*Hgt0#$< zy?aPxb6bL*+1PSDU(Gp_JH{}Syx31@?b9!Fns*YG&IIj1yrpYNfG*U4Y?QWrus66k zZV4_&Ggi&aBq+)>js)@4hQiLQsDM6FNJ#c_2zJN-2q$MvO{-TEr(P*Gj&Q10c5Sy$ zZ6ffUr7$ZjqKcN1XcisL$_CI!PC&I%#7C;_2NoM_sz3rq7F`@6MIR_>w-C^Um*2eVN~F-h!b(`5m)nFz=JNDUdbUs-(11xw@!wafGbXY;xO=s?(CvS`=8YH1R!-vxOniWPz>E3ih3YB>B5j zLr~7r0;nAr-MP3|3XB@?F3?*QtvsGkjf+GzJrGi5q$F|i&)Pl_FYMjo65@Y%CYDCm zxYRIz-b){L{2z`#p0WYwI1tl$&KB=e6o8j%ng9oJpg8=Ju8HOl&^Ud7wb*cTv+qt# zJtX~~^K_ZE-AB|1-BVpl!`i`sd!O%0MAz#t*{4Lvz88&Ddv|Iz+Jnb5;L-h>Uun^O z-iMF#-Tt-tFWL*=>fE>Ksr@7L6BsAn>Cn9wr-M&vjol?~YVeHo;H^Zli!t zvP*-D+{^$uC;ODD7-yZg6$QB@j^#0NRe1;AZ@zq&>!x5Gf>p6XTdM+Szo)9E=b z`Fo%wme&uKYq{-647}~s0gAvC^G`*#nDAycZp~NA-75}Nu>SGD-r{*3hhmZKQNMFZ z9MapH0 z#5%1bx_496^y8DIo=rWD;g2l`@&SAosPOzAtCNm=t$z9FologrpTW(2?lXVJc%hI^ zO5l3BQQNln0DD>*cFk_QcT+BZjA6*XM;v4>&OgHWA5rtwI_w5FJ|krA2FECLW8ykm zFHv;?$?aB^_D){U>7Rrm5%>q7f;j1#P(S|w0~Svf`@3Y2;YSHl5;vXnl1{f!$m+;d zDlR)_eQRGCqL$AbH0MdEBQ~dN(Q~W;)JmPjjLk@Jt4>hU>Fl5rzClT}JKMsGh%U~Z zPB_Y*)iiYGGmwpF_M<6g0709FQtvOErzuekqzg=gGqjp@6t@+jVsLSw6Dnglncuj*HS58#dtY4_{S5oW^T)6_{m>7?n$H&VwRnw3H>ht=~^Y>0Nb zDq>YqMjV9g!U#6VS=|B}ifc5O7|KYXQL|({*GAF}hh5pd09PE@d$;7;uGDvz)Wp!k zYAkKXopGm#ZsQ9#Or+ll2Ef8b%bG(93r=pMQL)sfQxi)lu;Q9)xut&Ws+6y@pu@QH zg-ET8Cn7`#85WvDk|OMmJ&|F|pC$dGqOaMf#RiTWrZ@ip_c0|s+wkANAI@1o^PXrD zZ|JppxVNTjU8!xlhdZ0w>Y}=__H(ojAJNU*_k@qXrK?9x`@iOPBl30!&nj!GL1SwK zt$4FQ_Q1k$Twk<*XU!PW{1EW*EzI%1P~tfS?|ZNEA$_+VJ)JieKlab-=lx%d`j02Y z^&Wix0Perj$NE0e8QZE295f18WSH2Mf)~BSG}beYcvE5QQ1*s3whdjW(xn&9Y1E2$ z-LJr3Y!>TdgGlLSJ6pEN_9Wx+PeZvKs%%;(J?_RDD>P4U zsyj;L%k^T7G?*eBXu(IuU}NNv%3s0RLt_Kx7?)W!@@Zrdb}rj7ymeG}~~ zQe8x4u|!?#bFXOb2lpaDxW=Yv-Q`2LZ+1(6tOxfeB5ea#Gag}xxDxD^{{UDI?pGph zEvlK0Fv1)h`t`?jNdEu@QYO;6`67IgMruM@OPUT&e?_E>@^HLH_~z4y1DfzzZ(uxt ze@k6FJ}aA>%zildji7Fi;_qK$8qnEgk5UH%_mQ-cKM>{e-)Q*zdd~0fNq^J*AFh3Z z=J>vqjyL-`Wk1*bUT0%&&CncHO7LH5#L$@~;!9jJw9M#QXc%4 z0Bb>%zV5zLsr%h#tG3Aew~%=z@|>>RvDdNf2&koK2a;;@$7EJH&kyP+M$)@U;a-!c zb#8}2rj6Cbh*%HkvD3oX(vmaTA+<*++zCCAvkq-llSLsRXKJ>zl5mme7iz=s5-=Yn zyBwr&SlsrJoFLszDK0rTl;T}zp%3kaax%*;2<;<9yZ{klPDjupwaS>>a<0~l3lj`v(`YpLe4 zv#y*yiGUsTNnpz!RIUdEBulsi3tjyfB8t-&Hzgi-0m)A)j3b>hLx{r3uFyo<8$xhw zVG|BORSJk{t*T6!Y@126Z1f=1iZ}`PBd`f%G8`2cK(qQzuNxM zUXKUvcCY`y@7k0u7!} zHY;HxDd=ogwbltsN3m_S^Gvq3kWD5wY5+r%NxTDqnFk=Tf`i#%yLktNA)v$NV}$fu zGa1@y=`dr>^wBBp8b-?9+#_PmnvP05;b|)zvDvNWux(b@c7*o1=E+L=X^qiIV7oN4 zv9>vqmJrO5YFbRTMsg^GtUbAJ(>d~47)wK9#iuQB#Ues=w9G9Qt`&462C!*1V~Veu za;AvDFDa&(0kubuWp$S8jR9mr3|tAonyDhL(Yhsdlbcc`=vn18WICl2JM3 zr|vI>k-tIk@1TI{Y#lNP_7Pdw-2S0{h0l*}Gasa%6l^Z6q~YIMcEWB0rFg{M5USHILFLug$1{5=Dyrn!8`;8B73IUF>nuTgaCN55L;oJ-XolX z*&DbwxZHF8Dd@JNA#+=(9;b$uv^eM7kJUXE%F0|`HBBz_8wq0zzlicdAIV&a*;4n| z)`Hm|d2;LP&L#jUzr{x+ z0qnQqo?{MAXXVd{jU(bdqHtXCsnS6qCm99IHS+YYo%>OSxp?#X&3`NZ0GH|i0QBFV zeIGX$(drD^{F=tYnE4Ou)IsiNF2kR>53 zG5||dRcxUS0NvV}a*~|9WE7MPGC9twqyvJ3GBSYEWNG9eI(iopN3w9M(COYQG_;O< z;iohh_yY>7DSWxQh&K|muAFjmH4ySCXJ*@Mi`lmEl?DSv$&pAswXp8SQ_(s)MsB93 z4!stRn#v(-9DKf0QuA0vr^g(ro7{z!bi$#u>uQy4Mk3?&K-+P{+k_`);UTTcyjkQV zr*KaBDd4$gROwQ;8+RJ^R8(;otOZ&|(aZ!@AWF%D9B`Gy`-#jppSq&Pkx`cZJ&;*8 zPvlUSr0DqQ(EVNgqP-p;!5kdlj<_?ANu|wRlyi)vKh&jSwm@4*B->+(L4f$J*g#;j zu?cBgV8`mJNHilHQUKmb4CC-rTMV8M!=0O;FQ3vv=M;wv;eA9=y>MZ+^UtHSnNj4XO#C5 zaBRJVB%azwP%Mz5w#0+9&U^U6OWbL?AVwO2u?CH!6_jYU)0!h~dnybW%TFmlW+}s~ z-89%~lC(6HOzZ{PqDcUwXEA)!j&TK=0Vw&FO&hEECBH3r=iZOzyx;PN za(V5Lw$sz&ti~K?$pzT&iu$DOz@JYSrY4BFA7p>Dl}}6f9Rf?_A~0yxl9REC?a@h* zdrNWeOHM3%vy=0VUZ**a9$9@Q{{ScN-v;Slr|{O3NKJ^KYhGM9qgDKu-}QIzSo}Ao z^EUO3H7S>A8$-ie{cms0aMx@wz*yqP9nN#weuBCD)YDVPn+C?+wSdwAokPb^TXaja~jsUv@?!E2^{_I`#}e5UL4Rrt6j&s15J>|`1LaY z=7|k~nrY+b?1POo`F>ooi+O9A={KIrO>QoUfWC~9N9Esb-(G%b4NA`;j`Gb(D+PN3 zIVr##fXBWu_oNMQbGuhOcT6L|jpiuaTIW5k&tc#3K~UU0sXoro5AQ>b^R)c^&`NRG z4xS=fTPFA8_)lP{s2i%Zp`zI-5+C(XABv>VjI9l3mNP|_LTnkf+!au)YVAFz zRb~B%{86!{+5D3#J6r>9@~ddEwvi#>J*M~{$@JNvnmgS6OduPqEbMQMB;o_R0;OU! zU?DF{(#3R`N7wZ$(%`>xJnnzTTv?-_xogtK?aQ7&UK*vOY8^YA;7 zR(m9S0qqxoNE=X!*=Lj*M+v(q1MJ10$pAkubGSfTp~V460J;xd(pno$yH5$g(URjp zE?VO294XSa-p#BoOF$zluarRCZ^e|$V)??wDkBV?fLSOiDAcjsQV2ln%A(RVIKIXZ zFR_3L2ty8GE);_D~Or=oXub@2MTL^T&Z5`$x^Qa z!7&XN*#vCQOrhOUONWr+>p*xfjWTcjpFC$DH`3pa`fNh5{89Yhp4+Q=tO9P<&r1(> zU~n@5Lp5%^f9jQY@e%3a@#&o4?D?{B*zQGT(|E+|2`$0R*`SlDxLLbj6J18;iKer5 z@F*_6j(2n6KRNzyJJho6>A7$HxBQ>bzYYe+pdjPVcijW-*|YqY+I3fX*W+Cz`;q8G zMbBh7z`fry!sNBsByu#p`idmCh8{=?RK31j7l#=suG`p?lk`hrw=}fJ3v$ADpL}o> zo|U)En_+gq!RT=APd|cY+jmJT-ta6MYkSb+^Gjh-KlevbRWK#Rhq*ih@(BhS$490< zQE8A3x&HuLmsjS1r@g*Ie7oB47;JskkMTfmXL^{>0fe2>5O0nf_>=~TF4RXJ>x=^_ z2NvVU;4*`YHgyc%&|-{RbIClPz$Hzm0CgvGsgbv1N%``BM1o1V^1sd-V`&Uw8KJ=^ z@lF8axiu0xQ?TEb(d-8wiA<-val3Y<@=o2Q&)V8N0l+}DP`l0FG=w$f#oJDBI0NuN z1%=Kp)JoIl5@Zb@#Cs3PR6rVIP?@ARDJDk`bM5#HDo7DG%ZTbF7dd&A-|Lb%A0Viy zIK3ds_m@f>=}S%vkGJ84qdMn-_GsU#m4wO0KWM z?<0@H3tWBKIe)>>$=8c_gEJG_8O~KFBaxe6AmIqU?Ynl% z?t%&A?X;?)H#P2g!c7WDOI@B)sul)$osug}vrI#-vW;ywCreD$j1fg^BMj@H*&5c@ zWpcT$Hu*0z+ngw^u$9hu1;mA(ofE^KGYEP4sA&rro?Ul@D`z2T4G2vcxhcX^o*9&E z7c!Fj;VrAQXy>ubC%T&(4|CiFl;tZO4KWriUMw>-`79M|raE)=PXHUr&nn*sB4^x| z7Hy%8DRYRtrxBCX^z&UhG4=gQ^tdP7k29O`*DiJ!D+o7>QC)$~rNn$OrN^EV8TQ25;auls?1B3xi&@dHfm}?82@=HgvEr4y|Ju|s1 z>FvBDw7bBP9k=e5noPD;@l&`-K@d09VF9wyTxA8YUJlw)WlIkHCABX0jj4c~_X3v7 zN)o)91wD-$)41MpsWsD&(mqHb+ao@Tww+O$=F)K%Q79Uu+3t@NBrD13zvJVWmT#aaL8(Cj>ULMX2q4+?>yyny$mnOdSZUl7o-nZKPx3gdK`3~h9bx$6|@aR zqW%3zT3s~zpW{a!V?&ELCqMZiwLj1!^ZZ@X;VrQ)yH6QBV9M3s>9c)T6#oFaJa1Xc zx1s01_Sf_q!(#eNr6fCf+|O_cs$W~w-Q@h6rJr%=3oXoUTHp(>+yc2>VnzYfI_S6V zk$s3th^U2WNxjzF;uxR8DO6oNPrq;v21Hv``6aqNJ%v@!qys(V1k z7JWb<3g&-@CYEt?H4_%L!(^dD73{8iB%>XAnVcO&N<&)jY+!tq zr(g#c>m?p$uCeZH%nKU^>Q$IN7N zaL`BstK_~J`wu2wT#Z}Vx>k}!8b4okay2&eCQr6X*BR$nQc|Q$*Qke;4P5%I8zo1yWD8!_e z*~(Q@+_j`?Ed){J0Y)+#!dg8Aw1@nZn_%8(C!rZ}&Us43Hx}m*J0@CnG|YG4n>?C>7oFJ@SKUtyD-AtoGoN><&!cvM(hej zIW`~KH+@vvuE5^sKb0zzOjYBAC^;bnC1Ry6VIa{MQKjtw4K#u=9CqExq)oads&Q#5 za$Y1~JscG)78g10!6i6V)P^D{%H(5}GxtS>NY>exQdu2xRNREc&XRj1lBKMLY&rNg zrCL1(96n0pJMQ%w0lTM0N6+;u)8M~yJkD>&NwaH(@UfBCmg8WvZa_}y7kgl3_t`CZ zSIEf?+4JnFkDZa8GrG!*qpJ*wNZ(chhVhE4DAB2}vq^09Wt2XNv%bSNMuTd+GqY{I z!ObKZ2uzk;QtuYqO0|@!0Nto)3)%t?V7^VL8V7#o8%WwLw%w!)yn4`kWXHW48&{A= z2#|(~<2Gv51JTYL(9`)KsGG-R6HS-ZR)BIRl6h4bWe>wRYiV4%a_5JgonzWt?6i(- zv9g1xk+;Z7)|`0P6IyR^2G&*GkF$w0Jy=m=MKDnIL2SU2(YF5p6-FGET9r%6{6^EU z{{RMjT*(>;JsVZe$|n*0z)E|oAH^TdO-pN1{{U6G@$6Su$=}EBjE%xZSTu9^sN2xS z7SUrtDLj3uS~bp6v0X3j{{Y5})-;z8NI3zwgY!d5>v&uL0H3-W1zWn7o0Inb zEB^p_#r$3;um1r2cR&9Ct$#o~JT`QL5O8^q8@R2deP2J~epS|NH zg64FH)BDFb*e?w=^-?2j6demrZNT4Z{^Y8el1qiJB-3c`8RXTX1d@xRaG(h+Iphrf zNYJc@hD_O?ezuoU??(xi*3e^-&BdCk92XACO_BDc=<&tnJtpQ9PWNp)dV253N zu~dN5KYOEaH%)H$1I_;cxIk=@`1b%D*r7GJSREKW$>e=jkrW95(`w`-ZY7q%*prNW)oBGaPHvA=D+`O98XmxVk|@{A zD#bO))&Zo|%F*k2V0!=__#}M7+ZK5~1@W>rY30yGWzQO-;fxUIjgk0_{tJig2cC!j z0PR23^uJ*(o~?EL%)im{$=ZI()7rxLDE*g~eb<}n?lBER+DP?`t+9C>Rk+Js&XFen z03PYL`h%aF@9A4*HG|LLyXv;|FfrRCw{07L6`Rx6qqWdu^E$SZG}lcVYyOy2&i zzo~kH2C7=)as5_rpCVnXb?&i)+Bx# zl&CWVKpLclu8d`@ZdEeAQbWD80tE2o>Kx{prJHO^l1pe{l(exRk7=@V^GK~Z83ERs zYoQFFwykL^pDb53Ih+ecEJ(cMg$?JjGF`l-vazo@incYTT_7W}R-S{FKv*+MDaoRa zlHG$zFGix&e(!CkwA_4>)=9d+05(-bWnD2lLw2g$9?;*Z8OQ*%fOa+O_*|zN>|x<5|yLbXI(g!An>7}ZlG-ju|6u$G^WmX z(Ktb9z|;`kwyU{4tU7!pv(a}=l#Pc-HeL{VCoQ?yOKQ@9AZL`un%s8PpqOh*o!v+> z$ZXejMYf#|!C)Y4Co+Z*YH8YSErATw%%)mqJwPtWK{^ml963U4Ji<$C6--3?L1@}t zO17TKOG~WvR^+ZtCK3{tPzfUKOsmx<=HIC^)eN4)l_jP`ZaK6K2;MzGJrmD-K>_~& z2>ez(`Zlls0NA-2JbmBH-AhQ;liU)zeose=d1fN#&eOX$mbVK#9)=!D=&i8I!}osG zFC*qVAavd(pPd!Ktu8Jg8=zB-GOq7~b`OX?9+lvb-l?Vhyw>o&4@v(3-f@2yjrNBh z{@2uB`+wQ{*Tdd(I&<4051LQn2bJ}mN8<4OpQrpT+jhyOY%!liZUOCgHo0r0-Ly>E z-V0k^itpJ%ml%5=AaD+m_zwPe{L)h54f0C+42Rdzv*rX`O@s2Gi|*tssrK^)8X`1@ES`oDz8-k^>Nu z*FSiBCz1PX3e9qz4Qbj;Qb8Mr_mbjxE&2X6{L%u%TlQZifX4IdaN>tFM;S>-8egF> zGimb2t)O;10e>Qw%rPirnnuSS_A)WC%>u)_aD9~}C1bUEK+#e{+F=8~Z{&kX+a91b zz?L%&0CA2;AISu%i>HZ`dS3`2hV#a5kQFP0&WlrTWM?gD;BD_m>Va6*7e7%RrcI^~ zyw;ONv@m}hs)a(;7{ra$%pArvZUXSy6exV{QfW<4cbg8XU8Sw{w0B_wvH7csr8RXP zrY&skENBJ5SKa>rRDEq;EbJq#4u*DXHBV`1X>}3mVd96#ts-le)R@>cvGpBXPGf^f zwj0`b+CN)b;>Rbz{x)f!9=oP$3~-c+6n&vpx@^oP4*Jc*4qC7 zw=eX3%(1dY8cqdwUjqHFJa-;Xtwuh{sBi|%zytEi+Yfh#)=lGoi;>XSPmZ+F`#%2w z?3K2Eh353%`@X)@op~o7S?)&<}rw=FKuj$63aNR_} zn4B9rWn$zj*41Os{ zn@xEFKT%br?_f(IY2A4CQ)=W~T9M7Av12navigE4%c9#hJCDsJZ4{e6f2y*U!MG%F z8&F(~@X83Xm4KgUzF6w`vP( zJf*NJ93C<+=$Q!JIB@ntZbL=`0SGJQmq}gE;(;MKobA{tQ!VFiJ4xXsXjn?ybnj?wnh4rEU+Pz*!#?DBy#D}>xrCld=Xwx47w5WLU&z!%w<@Cy z=EfS93=kD1IDNDhvcLtt8aO?6|K#xC%hEZ7rj!^s1b9LG+4 zk~|V@p-cy!NkD1tC73FxRA7^2AP=^N5LPI+2t&{K;ywQW3j9(JAJF>G{{Ue09QTjr zX05;Fjse1kS44U|e(b{67c_zi<0h-jKjl6zE*%Je-a{{VZ%zpKmpMgIWteDZ&H{hz%$6o>2r zM}ZuVw%blHb6-XEob&HLBI)nlcOqkpT>uSmB$5Xv#scN8sRsqFjigEFhzhAlP7J1_~{+kPY%U{`4uQMr4h! zkQ~=OBNG>@BpgcL` z7Sp(K><6`XK+>25FLaF;B#jjB>rmu;xj{C-V)GcsWfN+Eo^0*cxUhI3}VyeXlQ-`tHj4gsX@E#=tYstp!8O&{5q;P!%ATgAG+ zxkwDe*`W}CYMuoe+~HaL6&8dMiR1Fx;P{#gLu&@Vi7ky6m9gts&o(bZK`pN2AHV(z zqG(yvFh9&Mk6Vt7D~^fX3FgK!2#wo!?Tl#gTtGd{ah}F8a#O(<3X-*HU7z4W%yoKOEuMbdZtEN@Z;RH z0(*THc)eb473e%O8E=TRF+5lKY(lvI07w-$dAwnh`a!5C?Q+@w07&oDsIQ(|9gHG_ zkT{kCPEr~;$G2xWRF;c|!b$uR*d;3qpNmkYSjxddx3lnVYj3isjHcB*yM+RaMmXq< zm&Ym^K!9+~VIvwjD+L9ld25oUSi7HG4DC$pMp?#WdVY3PTkQY)#Zcw;l&YmbImO}iRG)1zS@ zKh=6XKY}Z0&67_n)d+I%SC1z ztwpUN2jGxON{H42!VSN;X#hD5w9-^LvX^i9D5?+5r&XXf*?rU48Y8{fOdgL3#Iqm{ zI7kM_yDpT0NmQE-837cY+3Q8*U@x?kLr~BhLQ8}sgzvDT`-X!kAlhU0I?zMA zSaxmYP|!nBZn6{D(51k($V`EFJoZ3p6MUxuwl$+6FxJw9sN_-uiQ@)t_;2D!z&3hL zuu$*&hoDb)^CMI*RO-jd?w3S&;aP#DuW50>HUf;Emk+T$IV5VB)`42NPd7l(2#omh z^JnH_CW7-J1B~YiYoZ?L_B>nDq+^=bH(RIMySejQU#jo)yZ->I;{Gw^diS4B=a>7n z``@6ne?@7UHxE&92a|mN05$dGmTB@k)l^+Sk01O|yZ; z6oVUFdUUOzTwAicS_0g`_A6uighX2<0+OJ+^rs@F}k@pnrsqf98r6q`0P$&;I~M=XyY@X`}xDngd!; zV&3Tqb6Izu2iLer1EXuA)405cIh&enZ5;lY6saJ<&$H;B=labS8^AVyMNuUnXoEuL zy0=k{&Nu{|0)9(LQA%l=H2po>&gyTHOTEcI$zIb+!oe3#dqagehC4Z;dzEn&$|2D7 zrw00WL}Mkw=%0Uewk&dfc=*E+kEirt*3deq@^3AP-}sjw+8eHeU-wV-eJ|Kdd%a%e z^usUoe95FXO}_R){a3)hY=!!m+~`Kyr9G_ML=~e*^hY23stxP9zHQh~%lo+EMvWWrsqs9uP+GVYv z6Nzj%gLzH|qv@nOrbJKA^()cfzj8e8dH3s?2(^Q|GtoJrwpGV2SlzKBcbssQ^1LpJ zNfy&eY;TTRWHN$UJ?uBO>?El|eE>pLaEy%Hk4?-fWe+g_%Hex!f=m!RYMe=By#Fe_*k_%4X<;N* zcpQBec|9IKVlc+{yIDko_Q^QaSpE4S0Gx~?n#0CfKVHt_D|nvm3Sf?U8qbn5`~RonR_sTyN;>D?oZw2k8MNjL-W zM$b%!AG4N93mnt6xAX7+0FpKrBOGImlsA*G50J?z23=AX5J-@X#h$=+{{YQBr%QE- znpoR&8|FEq`6Fh@1+$YIi=5Ig+i~uK(_j{AOWEoTA%(--@=>#5Hn;6xxsV2K@^Uz# zl0K*^&YhPn#u_4VEd+K01X5(U7{@l-eq60Cr*pJ+OKQ@gbM3^ld`<=UIj?V`X$n28 z-M;p^Gd9!7`Fw(+&`$Fs50Tqt0iI=dB;8-gCljKMXw$;&?k8+}!%6$jBfrsF3wdS; z=H5fb!6R8&E+e0vE0l=L)2Gt7x+fO3tu0{nddSb!X+7Ck=4yb0O7j%LK+$ou|?j+gV3?a;6SpG>Cw|jD?F5wW1$PTn&C82W^bac6hd@bZ9>D`<0W1YW3ixw6L<(F z97Ba5z;i=#0u?JUn|&Hmb*Hpd(hf3Q8yF;HsSL>Q=88edr#n$?WIz%rZ-2dt;V9LnCp>M5>IIfQqR=c&-AP(-Lys zkfODLZ6AtSFx=n@X99TKEKpKmHI8$rAQ|#Oim3&+H&dcHJ(8*@$acSNBxm7a0Xggq z0o*2$m}!|pYC9s(8f1sM0K!qVJ*TuM8_lGkpCGDFKnD`xK{XeACBuXGAT63=GM0;D zHYSGA35|%@+S6w!Amui2fKl%|=USkHrXaYb9OV~LbW{-#Z zlRvGaoxhw;37mg0^$l>Bjo24UdF=1w_hF!k0IS9ivWoOL%4y!wH&APZ5vg`gO_nzw zs!HPb%lM5LAO`OFk-|=iS0sRG#GJZ1lFxcK_;9!BvhC)>EAq4a+`V=m6Q|_HeDS~J z{p;Zg9XCyrP+H~(4a{r*0Eis7^96nHS>r1FKcwGmdnnlE>DW!%&)y$3=UVh;CcKjU zQyV~i7YeqpF4|1nx zrgnh~zxme(*%irhq=!ywVMa zM#%L>7PZX)HpgHy!fBz9PN&KaYr|`G^F)4@noFI(Y;vrjQ=Z?TcIN7p}+@_y81t{yCZJN{Aj-}L7V^&Lik zl>Y!a@C>sbcJ3tE?7lJj%pN%3Gy^8aO^$6Zn9mtw$M{{l{9Q3|uiZ+2?3LG*`;U_8 zruv)yFKY;MD1TX?xOqn#-+y3nx1!+nJ+(U{04&{x>QTt-5Ybu_Y{FFdM6GVI6BP(|J`R;1t` z#Yi(O!v&x*Bh6s}Oc&mee$6?S2q{wtu*ON{O+Bg800}jI$r(9j+-lObaxlrWT%%)4 zb3^$>H8V;Nt7KG#+wcu&_T(y;RgY8_6(F6ai}H4Zo+bfwZ=>YY^&LH zJN|%z{{Yth(O#DY{hWEc{{W7;(eM{DzKqdysT9m$ngI-Qqj`TNO#6YAg{HmKw8t%$ zdrx$<+ZqGee^i=ES@Dr-G`ZxgfQKZda^IQ&u*YQq&}N*NujHwX&(4WzV*#W9rnJWG z&U8RN=`A!GFex&kY#?q*(q8aJ(aHkAC+L}0oI(r}AqSJn2DU3s_SeY?&~Jo;S*1p% zHn~BW5rP4%AuWgna1dKz(AmNU%g76CAj`h#2cnYjq-jwLm+gA7VXhJl`~xSOCC3QPN05a7~NS>pPX!d z?)YmwdY=e%iCJzE=ydWO!pR<3HorjX?(W}*bn~|>kJ8uBp#Zte%?8#!tIe-N6VSAn zx4O4k$XV8sE#NhP3bFvN?nElF9@zsvWTs8FJ;PxZ8s2$4skHPX8eU6@{w`0oB~-A= z4Uleb58_d=q!DZd<2D9sH|~(q2*WNhfad{T$QozL9+=C0E^z|5Bj%pQkTJo6E5Au~ z6o!$^!30qN8yNumgy_>Ho5QpBNEz*vZ8}dc%sY#AknNz3-z4^WK;JZp8h?tZ-z~@G$@f(gVR-?M*JlhE zJx8uHC{GQLs{{R=AyW)8bHY3q9csbj-?lt)Uyic_` zZt&sxTm4_5f76aD@cNEVu2O#~f8F9(W4OZ!a3Oq?^x>ib+Ia)ccI1zuUo_|VYsmOp z9w(HN?8P9*YYVSG!yhNof9@~%y|hDf3yXy{)r?*+qC5E>=i$U|KM?v08sIneEjK^@ zR+LvKH;z1?yY*7B(>#IvNA*zgByu%FbBIQj3I-ONQhmayjMU7?JY10!;cSr=CBi!n&d!XbV5Nj5KG}l<76O<^29JHnoe8O7=bsL3`bip#x z)06``Vp{7V2(NF^Tn|Hl{{Xf9qP;#3JaOmqemdhZ>z8j!C~haxY;uO8kOC}nuWU2N zW4cfkTFPNSdw~V#Ds5|w`2y#(wI;J03pv2KOHiaBkd<78-oW92rmJDLDsq|*>EX8w zDv_RfI%X}gU14dbEYEez)y7F#pUm1Oh;k1l4!t!oFN1kkP)J}XjbXSYN-)(5JgQ*HzYBN;2?Js)HDD< z3R+6$y!xt&8V2aYo5oOEWs%d6M_WQPCi{Z)r^rjl`u>PF^Lt!K z*2vKD+m8{0N6}{>`LSsk7CCTlr~c~u?C*aM9$#5M$@r%>9}BDH z!|9d(05{m7up@hGY?#OJ+TqF3iS}84k$7kh2aG7OrrV5pgME-$V>rs1aA4i8^PTrx zMOvMxR>oNBBQGR^K8kj6p&2bPkG)ha8v+&r02mE6;1ulit)=Cz0>eSDjh?pAX6bid zqOtWx&qyN;l)2SJ&?DI!9jGG=k;VL+kC3FcH5qF*w1P74boN@)42-rCzgqL z!HTrz80g6nP^ zYZyN3=U;cB2EnI$i*Iuc`&b1n`A&a^yoZE|e~6|$A0|U}eV1N-(ej-RJLj)!9_MOf zZP*xbJuYUY`n3zXre&fF82J=Q+j_(w-SJDuD4yFw9}jb zK#cCOT%f~}M=)?yfJDTbCn`^2z2fkJu=ef<8xTb1w$jk|Z_6|f2+3k=+^qz0^-B1{(dws*p5lCkBeUPeP8-yb1`> zY*xfu**zC?PKed_Pf6Hr)9&OWR091NBFMC8_uw6+j;*NDUdN&T0L(Cd(*Dt2pHKU^ z;O6{w#%~La>5jv~l$^;w(Y{;HEr+ z`5TdHRUs*)7nG|_InKK(=7uqxd)k{F*j*H3f6DrRVYBv@U}FX*JGP8xA&yqy+Dv|$R`zcgxue$zh^$Jr=Q{5G*ZuUX(pC83&^<%7xfPd?fOf3Ivy;i z%4_*oxaVjthx%Y$nBl(wxj##5e0KGcnkGaPjjz!uU< zHZ;(TeULYix4&eiR+jc3A-{pN4J6Uq*~T4?$SpEjJoaLaQ`u@O%Krc=-TYfC2-xjm zkyOvDTWLLwC`GmN7Bn5k=^IXigiw*qunVu~sH6@!wrSp4&{|wgdv{M|rUZUolGqIn zN8`e+r$9a;-30ndXS?x!uUPJ*)Mo0Ek>=|s zexdjLA?CpR1rNb|7pe6Vsp`2oXSKdRgz+D~`UgRJA5P)v@4TLWjq`u43C5b!cTE5} z!`X00upww>hF1qTH_Lwp?*t`0(&V3ZyjO#yBgC4Q6OST6$H{hQ?H?!5{`)WCUd9*6 zw*)uk^rbGlEqyEC`;4C$yfW7_Zr-B^qwl)#jGX;W{uWQ%8hD8S)u_|L8TwLMaEct= zL`9Yb4UW;qC_3r5!$Yy6gf|5?AUV59>bKaUO4KKlReb6fdgiWlT+LVEdxcLoF}CM zM$_(*#w3&h^Gjpcu%FjiM#$t(4iucA{4&r2sZwk-B*qF6sIe&>)ofVbnoDZYwDyMa zZM)@3mXy{%nhq7(Ph=X$?($FqeBhEe2o8MnI5^S|MV%?Tvg_G-8o0}-iChnE9DluUJ)O7`79Jco99TAr>%a)C^-iMF+=s;CH-Gl(zml4) zKNS~nXxtd=^GAW~n@byMYe@%jJ*)fBJ6-P#c&n{=L$5cgbUjm8UqWp(x8+XIYzKkI zdT_}3j4w~qy;GBv~h# z&>9SXXo%*?-oaz>0ejf>-4{{qmu>$5yT|qRd@n!Q{{T|yKe69Fxc>mRyX(CV;`f63 z&Xt;tABg%??{lceH7#qJP6f1(N945q7U$=V%Rei(4qVysU2@@Zznrn|wEbg4A&r6H z`Hc<-{apHH4XY;A{Ch4HsS9d?ppTG<MPxvEaLAEWVn(bdwQL&{MXt)kY+A;Z* z_MI?d6y}U>JbZ$CCIo(+q-OUK$I(5Opk7l%U|ojUchx=A=qIv2CigdM2HQUV>Za3l zN_Xko7U#&;F`zRgZH_nFOtP{P)$8<7>HNtg06T0!z0b;)nDJ$m@fl^ygr4sy;?EoO zFAj9ZYr4j}Po!k8^2ePZZvgxD!t3Md?EBgHpIhQNuPx-gyi(oqQEVAKKkSsPA#zjqqG0HR9r{ZrO>xVZ06(%t2JTRo)wzP0w>W&X%> z=g*H@>KOLpkDPJ7_WZ4%DEV}PZMldLEd6;;6qL)UQW_@JF4` z`0LKT$-?4#s4>a_f<~idro*ve3D7dlXE;-8vBaFOvv!7%q_UBL%0?46IOL=a#>WP# z1|w;_gcUH?mWm3Krb~~#AZcO7xk0e-Nfea~78>Ot0dOFv6cf9YtpLdC1ouegCo7LB z3qxi~2981v-Qfgrq}W%oqq0+Ucu#52+kh64DWHs!fHm%IT4^sNWINp|a58rC5e&T9 z2Pusan!!PomBzi)nP%CNsRd0k6IO^uba8Ii!YKa$oNpgcs6U&&Bmtf;>Xt$O04$t; z{KqbgeVx32CnJLAR?-RK71fA(ARpFxgKucr3I71H-f06QF`V&SQ_j9Y_%bBG@P-qek!NFsY&(96il93y2gS%IbdrHzjy3oil0 zUp(-f%Fkw*am=Q&n{+yNRqFjJUEL?D^(`E%^t0^xxg*(haYnmvy7>J|s^k1Tm-+Af z-e)(V^c>zZ;m7%F{GPj|d}a8X(qtwd7i)D7c=fki6mx_B09m*E*H%8a)c*i$SNPBN z)6V4kA?ewE36?kVzwfuJ>A$p>#9bdx@-;eskF9CDbdbI$kDayk{FbxVCH#C-{4JmE zH6t4cr)Ms0IfAA$M1$;XN}Q#+oJlMHv>ITKTw?E z!v6qne>jY>>ZJY7U;J^Hu&G6xrC5jH6n&Dlza>)zH|A{_Z_`e_TkI_ z0FD0uV5Io>@XTw&PmVe#mKkNmBWTlJedCgIH}Y1*7)Gh{{W33KWQI^QOi4@;)tEG#4s~WJBx?P zn3cUW{{Zsi{MuvCdX`tmPnYs@PwhGI@*O;~Kd5Wue&+@Vx_r*D+av&$<>=?XEdIaj z(t0UAZb!=-B*e=_HaQ+m#Ze{cF$*nOMzjKBPH ze;lKMto^DWe@Jv19}4w1%<;F(n^6>P80MR}sJ^MuOSv+?;r{@aP9I~vQ$HDHhCkzP z`A44WzqIFxHCj`o>HZnfX#pd2v+Exz{{X7ixAjqdZ-XB=aa;Usb@6?K>T><>Q6&7O z{{UL^J!9j?#Ez=gK;2hL(8SkntuB?`$L@l-yEOEcm1A+7uXJ#e*2p& zzlNv#*OTg>5WIWW7-H&vE$XvG)47qt@dE+>0QAFun&;&8&aXch<=gxuk4vWeA?aK< zcZ<9K0NUIAJ-?&Qm|Z@o>SU5hW$yW0T;u-$NZBjQ=jwTR?)h@Le;c>bbe$JX(#>#j z%zuQDBn~hJwwiC{%I9`k!{YL$yA21Pc(qX(Mwt;fEgPCoep96*I{4hqfvlOh9#ibs z`lUR76lc%l03Jc%zK<*UK6~KcUDju4ueo3Lg6+@5e6K_2mdCu?x%)B(KpfR99>tRQ zeQ)-EY;OIbJTDWry0sG>iG&bo4u_JqS(B%oSnIaEw%@!P?h)5N}m2Na!SwI#hfGj5yk+!j= zwnDaciq

q~a~N!xC+-5>_OqX5nFHlx>A`W+AOBJK?l*q?WAqQeic~n?OOA;3c4D zHaRjo8%`}aM%m9~%8V$CszVQs$H^@mq~?Sl5!pBnuz+bWI2gilD%)8` z!oVp6I0}ORlgdG=NChKorL);t1z1SSyc$3*`W%ED40>I{4BS>lAt$44v;{;cWgGrU zZ8foJlXp!^VHi!O1t%O@q?eX3;Bb_xB`XV4QAum@NE4NqM!+l{zANULI#I+O7(pHB z@By!b{{YI|{{Yenhx0SVUY{9tfB^(+wIBY~%Y1#EI9)i;GJ#HTYe3F8PP%c)G%nfK z^%~h?k=kkWvBqB)?FI6nx8&@yZk04`agt!bYRnH6^}>xkEy@|z zbbY~&cBO{$U8i_$S3DzCo>@<3W7qU~9N_8Z1Q%F3X)|1Z3N=$JP3k=t3_6)Zy}r*U zxBDq})lBjE)?3xOB-6d3c^DdKZqvvEtME^@tKwp&b&il`^8~t&x-PVm^Zx)c~0TG|u^alk7i#num*eL5NeeRtIPwobmNjc-4-6J=s1j=>RwbtK3ND7bD@- zcTcNQc(0;2YnuH|?nw|i6B<`u`$OXXis_!>?OD3N+>zgu?i6=VeXsr&bX|Zr>a3o8 zmtjw3T*`e{{{Rd+8zXy5wOMh`lI-Ch4<$^b_o*k0dMJ-*ZmHDa#7-FeQSj)zur~O| zqC7mm?M&nWgx@sC3`44Q^IxiK7`RD3J$+HzxOxN&&1qJl}9Yq9=> zi=RKIKjxi~m&2_$KA<EV-5*=2yW zo1<_JHSb8Ac4aMR&78}NEOGbK&UiaU__dn1$|!k2`o5x;{FzL>pF7d=8-hX&6icM#4Yo?k)?KsE zo6C?|kwhNo5`iGXnz-a@S!9KcZybr3?e$7dswVArP$8By-s(Z0hyoLdqXF0>KxT|t zRSJsHX0oXktee7RBQB433T!>;kFx{WF4OJ>+F;icN_2B2#}K-tab4442HMOK;Pp22)PVH#A(86(FTQDXM%bm|>4Fh{@YSAP%SjvjBvTqhe`FI8S& zbhKNFaiB$nXu*3)H)zqoq_8NYs8#OGQhGK^3%eztjA3ee1G5wo23r2eNSBL1MD!UT zlxVieZ5l{zV(TayQ-QQlQbrK$q_Xmw2?ss$e)73O{f3RD#R)SIr*MKi&%1P~G+;p% zkZrBD-*jlI%LgfwBL>g~W<`|ZYYzh@8aPK$mti$WIzU)SOGaJq6=?uk?b1~sI+}NG z0lmVcy1FKhwZs1aP}N zoy7NR&Oed`&n5krrUsWstAr3JmdZ!{+@Ss?&`i?kTHswfH)N7#KbXR%S3HDfhd>RD zOl>3hjJf>j2k|OL4v%Y^{du95?bQ*V$wh0&$zZ--oG>|^P22Kp>u>wg)O37&ppmpS ztu5-30x~OASnPRAP=1k`yv;+N9^SL4bsm1#XZ21FrS_ zuH|i?pDAea=Ez2CI;9A|;SRJgireO}{{S#>mBKF$qbc$g-9xQ?ozSzyQ~783iC`do zeUj{(+1{%^mY8P0t43|UCe;Q5R3wa>MZ+8NDb?pL#T`?uS#x|tsv_@(3i%30!^N!Y zGQRRPKUM0^XmIOVmp<&f_iY#XANMIvJX4=lm&ySBR<>Qc`tGxEf+AC@}g&1vS_5eMazyD>k~a^JCb{iAz{>YADW(Q6~W zrh6x%$EmyCOui|e<`dL4C9V~?y@Kw!X!b&{KK?^T7OjEJXI#_gX3&WcnXW?J;w^Gxy z?NaqQqHPLkk9GX`O5?MgMl$zU12qGwYD>#NT?F z3~yxMFv0u0gwoqa68VAHFsU`S3QV>EcdG$Oip;i^LafS0+U}hYgooBbN`+VJeraE7Vz9G}OyImhs)Ubj(iJxnu z4`)sl=N%UC3pU|XLQ=^1db3(}9!qvL(!XZl#@=0B>9%X+rn)$A?w^~1)%wSZW(?XD26P&*vEQE`(o+Nj>~W|Js}Fm5u%mxIj@c8 z7hPLLQV+6KxUlLR_c5($&6bS&rM8&OGFsP3=_ZaqtR#0B+e=*bhcE^?-GUBd1#4Pd z;u_G~v17d@wzCk0l4PJy%qGglt9u>{LXQ~lXgwz1LvAod(Z&+BQZyRhv;bRMjf(t| z*pWQA!<^F4eOJe_4^2=SaKVO?x`zOqarl0SKG?u$X?2E!Ut9Pc& z_Np|KNh3Q$oJ**Vayd#W1mU-H-T-N;b^!d-lYYf=lg)AZpNhOapq1^^^*tk=4qF?1 z=YCDc=2qBn<$g~$sP%4>hsIgW{$78{<@%SzPMa%(G`d48LCd7mHMTxpvR6huKh@#& z9>2k#j4{8`I^GiM-B-nO^#RlRMuIITPSZPAtJX~k+Z%Xe00%F7%UaQSB%T3BCK%y2 zQ_}VGs?Kroz4ziV*@uOqPXAIe*BdXMfe_&;iI2Y?Z`&uBNy7!uj&FFxJQ5PG9V@biQdZy<4$ z9Aq5YTQe*?6xq`ZeKze;SdNz*rLiDI!19%<(+(gUDKOqfJ<{5wX|DyjM$ffIYT%S? zX+lfxmd2B4amojOM!}>T4t*4@INKyOf~r!m$Trl`qVnCI z$yLW!K*|rZFZuV$CT*_UnhuP4>IUEhg|^TO?X@>xK2 zd^;ARZxLz6o<}k5cJf;7wg+qZsL$}b{Wp&1&m_9npXB`^)4VIx`i76FPodOwi6qhK z2Bu(j>|=Jjvp0R`f2uMU6Y4KDn*RW2!aPgYI`)smGCD4+tbwjJ*jXtJWp=M+)yItO z_ISRl%gw>dE*zIuZ}<_9#{MUZAJUJIUDT{&{{T?0;p6miW9pq&KimF#bQ$q0#37-w z$Dx>itq$Mpkf-3{=*QOjiSMia4!=tHi>TK1T`rGVq0>UiUL!L`U+KI9R&OdZ;hNlb zbpE-XdEeo`=>?nmhN>Wl0Acl#Im2tFqC zDsz6v)S3?mYYG0+J_Y)!dhZSX&Hj##gW?}S>N@ze5XG*I^1L;^WKFNkIQuEfhbcDc z;q|T#Or{fZ*Qbr*SDz`e0@1tF#}3>Ka!L^BRwc9vsl?=F>?1Tb{yL=SK)F z+&zxvtl`Sdy#7yF>G-p_Wp3xv1b!rVVcf~D!R@CX_>uZPW%~Q3{Qm%wJK{%$-dtRD z#?Ai#m>>9)ojyhS`=$K<0Fe4WAM_5PJbD-(t89)wlPo|C3+Bq4xH6M%dVg2o=gx6q zz2C{{V%2Gm=?uk;0>ieNKOnKQPfH$M_>Up4_>s~&e^Qf5Ge~oS@ooVn!_Z`R{{WLx20sR>{TJ(8xqYU``#gWw{{RFg_^;F) z2!o^O+kAPCd+YgyU!vpnVVBxoU+m#0^LD%$;{LVbZo4LieFm7d!rEc|*lUU4mlMdf z9K0CgHyys6>pcBNS$E?#K96tWE|=D{Uk-I%B_SKc+Gx% z_+u_oSERt?o6$} zoiAy#b$mJD&adLX5@~uDL()4{uGGJ5af|`(=N=l+ERt{lQ< zdLK#nckurJNATmNOf_2XHM;(_tY9O~n!k3>eXY9<>;p;5it{-+J|M*G4x zG>?AN9)U8R#Z6SjpEiw?lpd5{c}Ub`qsmk$I`WmF1FX?RpjJ45p32RQxuj)1r%SJH z5KK9l!VX<~tM23}SGy0EvT%;!rUb$G%3C(K2X`1%F4OaAxx!&Zq@V6U-j>MCrwZMe zYe-cSO+-%GPfY9%LvFx9z#JT(Qc|i+GY_(lZ>)7UN(vnxrh5(iDj>kJfY^q|32e3rgtgX26B`wcqnse0fPOB-=zchOt+F>Gt7=UiXvj$Y zLf;Q&xZe*AuoHo9D%wI)9oomXvKZg*QIpc?e*@C^AH=eFU&W2p$UMyq?eaB|5n#r9 z*Lvo=a`{tf2Z&{{RhZ-(W?NqmkJR{{Ug!wEiB~)4|Q% zJ977YuUpdmJKv1(_{!;d?uSH?@pbJpnD;Z+Ma|~Bsms~udR4!rVJFV({2y*$F7WfD z9be$okp)f!KzBSN)Lqj2VWQNs0W^j{$n!<6Bmm~0aHBc6?ezTSJn~t+`2HJy zg6cjs@mEgpw^)-}*UzWc#Qy-d9YBIj;{^J)*!!Zk)_)bpHEy3(@U9cPIjKDV04L^M zM2(kIB#eo%HO?*!Zw&QOP%p()6xec>0Om^YQ%Or8Isi>+xvydc7u#NfDn- z4SWr+NO=BkIYk#y7R8K`wl(~vyw^d{KM8Y!>M)6PPwp%TPy5FI|{GvUY0Xb zN5pmAN9i2-a!IZK0RI38s&XO&)p!xwpZG(vIi_p`e)W-%3;ntFzIUhkms<)1E7 zyI9HP^lugE*{Jw`tCK~k*GDr&n{cOrk`ElNEdITl~G}_{YQ7 zr2O3PNa;OCuJx@qNa;FBHG17k#BjqHvf_V1?t28X%40WGh8H{AkGu83KXNvlRHa>c=4?7$G0NQ6K`o^!Y9$z;#<-R?iQ|X?aH?QYj15+gWjYQK;Bj%b% z7rpN`=eV0BpPj7Z>hZ>7H4153Kc{sS+BUkD`2H82)Oh4|m@jLcbz4ECA@<+dsy094 zDBRP!9-FFgb@w5yiIsWbyzPjro~*{CbeX zhy#mOR9%C$rxM#*2Pn}s!qO8(-pP<|eIKfec6vdPXbSF)6JvzufW(d55l&q@T{j&v zDmfZ2 zuwpM6%42OePC(%Ww)Xp_praTffJ_4;0AaJ5Kz<1L;L7;@;;?8B=_v{PKwTVu&2jd8 z=1bgmiur|lSz=opBDZG^&bW5Bso9end$9u5$eAmMob3cd}2Q6tM>&N%4v%1C8=y-Q^J>T7y z{{W-w{X99dO$(zt9~YKQE;{<0vfJeTFVcONuMtF8to)DoQtRWpkDdEL$F5vCKfOQ6 z=hlw_5FJkrL}l?#g`izZ9rzVlg-_( z3F7Vc{{Rx@J2LjZKbzsw#^`2zPy5VqY5Idp(tdfK7Ywd9<>7=S5DxU6G1hgxE}E=9 zL1W}He~>9iujL1{Tw&%Fu06o{GZoJp#IAe0MPj~EphMx|4C&AwZN#Z{dY@4r79ZMr=#yiM@ zFQ4_D-{=>a&&_!*r?crg4u;FyKNb1BpI+;|L&TkaUZbtMb9P4%`>`{S(f&Qk#r3^E z1mefH7cemSZlOkwPa_G(RK%`{{{Zpcpf#-^!yRIl`2H7_)c*Ca+Tppp9?4Nf;h|JUM-yfnuxw=tBdP_~rk>o{j>eTMBj*tOl_2aB8W})!bkE#r zXqtVzaGYgP!qX%QqL73J3oPBBEH;H8s`i8vU!nqycR+SDBJ>gS-?z-J{u}orhnju* z;5yv6p04!MA{AtyyM|~0k7VK~!axrpIa&6zAukD7tb7-9G4n~JrA>luOI2>ZN%|l& zWV+G=vE`zQHk$=wfhnTFFWpft#Zm$m=F-_L5Ho3PSdM?B_dt-Wk0m{{#sx>&O<#oW zk!_bW9s&SfT{`P2?Ad+>5O4x$+99k>+S3gZHrPO5JZ|Mk9gnbt2u+Hl;VG=#cuWo> zuaW}56;u<@WW{FEEyf%JMmazssC8Nm_&?*TOFlk$q1+R$Cq3O3{^2gDv7sAHS$ zx-pNlY8*%dxNEr|OplV!JSFnaE*x_Y$4>Zn*1S14i8>!Z9V^95o*?L=X^pcmym^F% z`X56#K&OUTPrH4Q)AX~8mgOhB&@prm5SOwc(jtDP`f;e)7N$2-2(V2YACbx}SH{MB z*TTGaCaPZ)zwHnhc8#=s`~Luf?BV<`7uT+LlMT7pNFS|P2!CV+M+}anW97N(}Vh{%5G`X(eivg zY;yeHdV{BFTdEQn7)K?+_ABbRvVDIZTCa)t+fyE+#yY0M{%R*|ZY$=0RoBHn>%#T^ zqvLfmAMVLN*1Yo3;vxgR;O$I$Zxz60BWuB6z6s=hi#}h%^?e_fVbp5;=AUuXP1EIJ zm9_!?8aIByaN7EeZQh?5_<=NYc-B(Gdsx=EdmQ8PrP;ywcKQDRU$gX?kJ3k%!r9_9 zHrf?5`rpCd3u}7zs#eFMd`Hl{ zVc{t>KMAzmWn(xAV-1n2j_I&q6>DL?gX7AO)@lT1ho+#@- zYSa@Ro-wyirUt}qzE8W4a=G7G()76TW2x@qG@Z^MhYx$C_U)MIL^wsb-f=^MsvRq! zE(mz(@@kzDfb0L1+jH@|t@fFk=AlfNBfBl4+*7O`4qTttNs;3Ti8Dnn_W` z)jO3osyUK4?&V6Mts!x61qAMCZKA@`CnM~T?Z{3uvtrm)vTdx~n72)a=8hF3Y`vd~ zRZ_AUX$`hxHF;H{+KvSjtRPP*MLRkSbol=OAJne?8TTWHoAK8Xqc*snofC>dG)UQl zl=tA7BiSPnuA!9TYz^-2lB6c@Q@bdwL#pE_J*ZyWNFaVWr1TnWw0TFdS+RWM?v0mg zZIj%mDR%5ZFe8*FwN?-$QE;wMdZ4`D2`({oYxyH*t+qL|ip7y)&_K#*3M%P6R(L=! zBg2h^C?e+!s@QFkZWL136|5xMKxPAYOpLXJgotLe4izSeK!r&R{p(Y(qVNq`01_Lt zDbAb{a)A6v`$Iw-@z<@mi{0cn{xC+jj9OeerN-{hK}KAo3N9Y!*1D)D_& z(=Q(``2KTteH=|!!XJscHxWOAI?ew8_TVxP&9=3i*k7B;y(cXG%a=caJZ+{wzwnP; zkL#hA{{RYq6CbKCPs=~EL(uqRt2?aew7o~BbqypkO4dE{X`bDnobnNtb6)MbZl2}K zjyX+A{S72u3DfmmCYz@8o};MI2pb%-Ya}h*Ck5?m4bbcfTo)(T@$luX+vW2A02BN= z>m6^d^%=Yy(E68HZkAx#U!>EQkk;6tsc3Xw0_*gDt)z2* zT2t}3{{XzH((_;JyWJDvkBdAi_jS(}cw1ed)5i8PIki#K1DsDZam9Ws9&TxTV_xr~ zbb92=K1t?#KF`yBA;qHWdTmylqV#4#90N|~Y$tnbHhCobu3GnJOFMPt=707Jt@xKa z{9FAn&WEPdJ;E3rq;!sZ0W|UI7$lG{*=xto@aJxxPpkBp^K(sKX(cru?5ELmgg>iz z_GZV)*`#D&&Ce;`vi%-rKAA1|r{MTC@F$`Ty-%(64y!2ThgZ+x6MwyDdc6Kl-Y-SD zdt*rT{Re}3d-U=614}N0OA`!pX{L$pYu#jrhdssDk_bM*WqB@Fb@V+KN0$a44=E&` z-dvI#!4Z4+vNBvF+5=0Ef0~On^*H|IznPt0vsbUyyH&5AO-7;bw@WLDbH5U+OtHda zHH$4Iw3e_Fc%-avj-YT>;v8y))zU0ElAh-X$ru2TMREcDNP{cj4I6>#+Lt#3wTq)4 zXOGlx;@asm%C`E;TH}lEKB}2M{{Z_gLTC7q)@O0sv!$J_9l@G0f5}VE^&7l#{x8*D zO`MO#OUN0p0ysejE|`yCfKFCXs#2)LZ1rIVZH=x-KoqsF6o6gu5O9Sw$f%?Y#TXof zdxc8Y)&fAa5_n8D(Vvn)RzC1T0PLciO5YuvT0mIE01yS-JE0-TAQzMZGs;{|6fR9U zI+M6iqI2S`d|7BAQto zAR+)Vxhkj&sI?`){)$as!a@Kp4jc{@C_TsB0UGxgRg|_2we^F_NfEBFi9mtGHBxlJ zc0g0Ji=qXfZJPCE3fjfmq}GW5Ad1gpg(@QC zrNnnWU-$sE<86nt<4@bOBWd@(R?CxRoOJQ(;(nso!qc3aH+{HR@;zTqlX|G#c8Xbi zs98J7?Hn$4KLE3zo7T&V!I)%%N0ye%Gg*nl>De2Mz7AhOi?r~>*U#rf&+9%Hf%+wE zRN>3$%zECPJkD%#JcgPy)A}k#bGGWXHJWiKciFXHba55`0D3}L!}X9C7x@#kgF@NL zJ89ipwSBHOwa#XrQg1)z)9oGDz~brt4Q%XAtqhX}J6lHpTJMuPuGm<1q3J;O-8Mf9OW^)&=ShwF{{SXk@vo|z+tBo5+S?(|{barm=5wRN z^ZrgJSoojU`tF8(1kKaKq?x8UVAJVA+&h9?Tz^Gh39lap9Cy1_<>Q^v8;3`zX+7H! zAEG-yH%;cA+N^&_YGE5&E~+3;0q$u1Rd&y)zkAPZ{z3l$NHb9_%IS3kVw~;9{{R&? z8TD2@*x$i_lV59Q-}6!p+#D(RbL#1w*?<1K{DvBtwGBQ_i%}y*i(uXQBjL}fWz_cj z;Z-BGZfPf{YH7G9%QQZ!yC>BjrCa@q5S!QKNeiPPz@IRN(Ek8(mR-2b?XMK(=E`G^ z7yL{!CZ3Xmw~!=b()y~$=XJHg|0VI=jZpbwb=4rBcZgl!_+;K?q`=BkI=ue zgm>fL5InFpx>H4W{{TN4H@B7QGR$$`)%v$(*Xx~+X-{%glHOq5)a8#nk~8!Q!28WY1sWu zwMY=4E0hJ%KxwYVc}`T=qU45<8|0ujy8|k=S_W4E^-^xfOwUV*oE-k8dK^E3IC;Mv zaf3Zpxb*al#~qF^szhay+|8%tf|)Q!vK6%fO+kBsBTAan5J)4CrKDi})TxB-Q53=A zlL0tUQgKcBBzqZ+B-u?Pv}1&%OICf;9u$^F5^U` zvhR=_A#gA^9N-|<`VGe@Ex#82(}QovZBw@Mq0)U%?$($(c&71uR%R0ss{`rE)+)~g z;g{^J)K93>vs1n^3t2lum^WaWJ^hbj0$I(krO&rH+&-V6^`_4EdGW@=0o%BO++AM_ zmpdni({S8#_A@Sr#0-qqwT)v%lJ^#q?cGi`Uz4WXabxWMB9dG4;gOrErOq{fntH{Z z%HLq$(|YThxy;iXosOp*{%G#S9hTj;-8WR;Nz3YpXg@A;m7^QK22RmX`}3ntR3!rWt!yau-;n7`oCOZ9mU(_dXMSfKWlXC+}93Y&O2o- z&zpQ^I@Z+_d`MjRWYTW#OEW|9JSB3+Ljm`4y&fEbMMT3A2e>+pXyKu(~<1G9cihmLvd!Ys1 zX}U4GLIbNdZ#g45Q*}|v@Z|fq{D*H-@hqB$>2J)4w|?;*x~n6e{{Td_BTey1@8lSC z-BsFWI&O?3o*_%J&*7-N)MOaa^ai zvf+*Koj0n|_>=lc+Ra9S2A2|BBTxC<*>kPuHhc3*ZP?@ZQc2x^=lD8@MdH)Z;n1_E z#LZMMH!Ly`U4f6kTYdTZ_D0y{j|X+jy7~VApGTYV2Tk!7zA-+ztTP5WSGFC`05E!- zNpYpN8F_Mb99T?k!nk?}rHJYynh&$d8Ei$4u|yBmbiA2>0QtQ!qaHcn2o?y)uJW0J9m60AOz(tG(!3mkYjb>B{neJ@|=m= z2b8p9!cAo~I~pJR?B7rkao>`3QO!upIvYQdHG;5u~l4Zs9o#W?`%0Jr$yW z0m6N$?l&8b+^3);o&cnRHRFJugH}=t0@Be2@>)|hu#!=&rKepZv;y<$L=N{%&r6H( z{YvyWC)|!6Z^vBLwQ{@d(T3L5QJrMu&{85cI~hUR!2g3{VaatzBGi%&?a zDA5M-i%n95KvJMx3rXPy&yWy%4e-#y2Euei3n48Ht~UCDXS0nU1oVo~b(Di_c2JuH z+$kF^7nsl_DvF-Ooa4JGRj59@qh!mT(9-uiYg#SNJ%Hq(pNGCQ^<&~cjQvYq!V5OX z9AGe=jAH-*(CtRg7izKa?BM(lnn|&(X_%I^*!47v`Ykrn(c#eQ-P5JkL#3R<7~JV= zZ3DpxrPH&S7po{GCJ5ELJG0h`4X6}Ql<$$rV>vZ|$jy@|v=Xa`UV1HO^KbBgTX4g85KfV*S-9BA8W9I6> z4nN94AC3{*V7YPU@0jPQbg~-fYC6Coz^zkp{{Uq!+?vi#JZ7e7HN8F5+4bFN%p6p# z=ieb6wHK2Me;aMo^x^7*Q`JMeT#=A*?xx1r&O0|V5V{u@`I@e*9KbTi#D63G$sNXD z?Jg(jWp9(H>YZtf2ButsajAf9gO=eT@$~!DV{hd#& zHO|4d#&7WDDycq|K+Iz;o2qqC*0+|#*Ah7AYD$~=(Hz!&osKMKGf5e9IUMcgiRCLV z&J>tsd|2M2U8XZ`ldg5`#0Hj)BU;<9;>Lf)DTZG~Wu7?rwk|HEp)D~t#2s|V;9ZR~ zK_}Rqyx>)3J2Lsg-Z@_uDD^!%^j=&1LDyYdNN?F1+>&hBZ#g`BqGMIOX8giusWLf9 zkF53A9lJ};orb_5kKwNByEdFTB=^uGs>|nzM!&>PcihWk8>pJIw?9lJc-u~FC(sA= zjaKJN_Ky+DUhTB@#v0&HyYNr`aPCT;Tf#23Tr`h!WMz6#Kwy;b=%p({8Q2e_h z;JcR``hQkp>iuxc^E{n;eXb%RHB4z}Eh2%ctb%cxq)s+@^6>nu{zGZ?y+O<{$*A!O z1>Wo{8`-CuSK>)1Uzp8oKn&diTWWhw=f`jM zf0Ly?r>9HPC2yJ6U#)pQXw*p8G+@`=G)K;dvLtioJ@>6V^zV~b*0s8}{h~(dCi9%_ zLz-lB$Qy|xAA0`)1=GDeJY=3A;ux8#Y*K0&=Fs%C@)FxitbO00zh=Im&Y#zMtWFK` zHNI2<`|P#gxy>Yd8!h<~72@#yPcH3O>6cB9ntFLC*-3I%Xd8w7tx`<_4Fm=30RT6O zI6y5cXj&Bumm5;K88VUHkYPG{Q)pyLN?Q#z#?b+W8|7GO%)r7$vEgOWq?2i|(OjUK z0||oqhU4a^MYldseUYP-0>@p_VE}M8LI8{xpXPuoNe3t`4AOB*kp%O$;R;(GTz*MV zJZIe!fj~UcVW8jw5)6*q>r$j+xCzA3TybGC*fL$(RNd~G{{S_`e?Qc&{vW{{9N&() z?JJeuy~PEkgGTKHA$Y5*Dw7}&b(Jk7XLb;&7$WkeLAY8DT?SZ%cQRregtRt+zQ~5y zkGg5KHdau3QVEASEhromj=`GR0R%X3s#MOQApwGNg)_Gnr1urJ&}$4S=(fKk5!o6} z!F+v)NnjRjLBQPdJC#b)QOrxI)g@D4f@X(OS|*I*>eJC^IVBrSCaE?}?z2f~*d-wG zKNP%6FNeGZBXoovcDermWz)9kl15L^V*XaE6zg|S$UY&{=%MNiX_w5Ajq>D|HzTge z_clpYt-Cnwjze|u!x+=K#qs2AIUh?X(_eGCiTZx0!um!}E}A&l=M$!EUZa+YH(DxONAA52<%+2X?PD?a!w1Jv#3RXQFWGrLpVcSlgJmejT$S-Z8Ih{7Rg{1N+ z2bT{Y&5ZBy4xF}k-@FgFpJ5t?w0ED=s0h*Yz-4jgQ06^{Y4^W zQkC_(>^bBeL03~3f?f9Uv>G1k6>H2t(53{#vHTP_U^gbNkwAej2YlAe51Po&z zRF!yf`9UC)rnRJvobnIzPr9?q zqW)j9fZzGj*K00dl3L#@Mzp(Bm|05rR*XQ$tl zRP%U8PWUEwOX@DthnC74s&IDN!D%NX8ppCGRiyOGXTO&UZAV6bRhlSX`5=wN89diK zQ1;@&wtT%NI8EDLp|NzfYCgptm!(7IMjz)#rx)s@$u8pS{{S^N9k_cYKF*g+(&=>C z53#X=M$F+S`L-9a!}_kfoE>MNX!@?5``M_7KEUt8zn!bED$QL}Vf25!Ng9p#!A=8g znv(;GcLh5NF0hS&C3W^r0G#3r*dG5N{sIRbs{Za*~t@KuQNF3AZ0K1s0$w ztrmdT9gr90|sgDQb_Wpp&1)aAw8}GWE73P))hpdb!7#n9U)6H%D~3iI@u-;x~U2zVb@$lKZ*xY4t#~xv~OzXgE~Ai$0+pKTtb} zy}hib;h%Nh_ORVxjI_oHJW`!D$C(SYZ6f1w^!`e8(q@~r0!AH{;x8wL-)`0IHtW zzaJdFYaVk>UH6<_wYVIh@yj2p1J04oyb^3#BF}svTZpWda7i)-?j)9sglSUY^G40A zup7HLG=Cx!(<_|chD6%)_l%Bc$rbn`N}0_G9;;IFBXi^&G&no%{PLEQa*7(gW3Ha# z&g>D7((EHmxbny5*wkvA1ZGFrZC>+3>0=zJc42t$xQ;Tk8=C39r&$^I$3IVHDzlG! zj2ZQ1ggRzeuifN>j_0y8b1WjAB-gQ$#&83`4$d$6r!gzbjEoIdq0r}0N!)gc4Yi`Z zyOmwBHQKp#k@#PWcTGl=o+$jClfJeU{nl#TYd5^J}dTggl z=e3k7-HIUm)#H5W!`5p3|^2U1cQNIgA{jn`D0^$-S3^#)M!XQU;OI zR|pJ|yjlzw#7N@QmY5OOI6*JUB%t)Yl!6XMipEfID)}HKRzN|t*Bd|(e32j&M}+j2 z>u8`;ErjPFk~ba52AWHPG!evsNYOi;H~wpj@%>8f;h%Cid9UBD2))=`uT*vp5|I_U z_X+6>yix)YV4&bm8B(@(;Q?TvCgM;V4F{AJx)3mJ;Zir{ngJ~Z*aL*XE(G1FX(%oj zO0F|jQWc=XY3Q~iTk=(;+SrVvMYfvCHjPr)g0}FDBC-ZiqZ9^_RiAXr<`aP&p>QX@ zl$-(i1eGSxX^^rDtB|h$Rhw>B$ zvdZM;_xE$PUIFk-?=F|ZeJG#xA}sz*Asy9nYuU`yd@}GH&m{PA81J-G%E9>uBfiB? z;#mAJ@Emcyjpz+K#@)`;O6ND`(p`d=eN?ZX_0NJ5`Hz#K^;l(Lve-3k^4>mM#kBos zE1ZocZw;^bcjBI!_Z?S7)$L)-kvGn7;9Gc4zBb1>^>Ad+zfAJU;&g82p3>9!+I!mj z>3hsB}&k|!T9fJin=LNs3zxAs`w8FQFD{_aYhH^VktrHpU3(Ck3T zDsb?u-G^Ek)!y#4C#d(u5c&Z@%ScpkZAM`dj+^(9P)#eudup_+q-sXRT7P}yt?tU zW{tmhb4F@_7f7OWPpPdphqcbYC}*N9Yrj0OIP5OBxKsF5BBK7~ z^6UMVR$HBR>izQbH0#x9EzMh=4a`yQNluT7zPP-~29ntEr4zsS)3cwg?0yfwSxrvw zmfa%1y`0fArBm>)#EGMSuO)r9nNB|BqkHrEkHZfOkAaJ#E&*`vi{(s5a?ITM$aBdJ?+njhX3&44?^-sF^lYmS z>JRsw?u!q~*)`Z2HKIl9ir<0d5U$2iiihc)`WoUVJSF;7;3_1@E8Wbprq|dXF*E5G|Zw#-LWuKpzzy1CA z$-K{grxmvI`(9lBb=H<>_CTZLZ|MrduqIQdx%PYND>+Jo1Lbs@bF+GXael$sFm0Lh zY6`0fa@VCPSD)NG)X9s?T2~;}D72XSyI8o=t(f_*#a_B22uH~*skoAfF<$(ES#hFj zK=9@s+syk10SN1zeV{(ttOC)HS(b5bC1cTQTHQY5gHh?9SLtzu^>p#T$oi?Y@?6Hx ziRQd#<8;=&nbzKEupWXwAaTyw)pVn6YkRt$u>4bFjx+DCs;Yg#bn34qBfU>&fV0A@ zz9sGYx|v#f_H8XIq0+IXp9-~tyC8Gvhs=U(tJ#`pLXz-Ct*zIQWitD4a^vk0e2$+I zL(^^FWGu!e>1TQ}>rRnuvgh0_?RuJ9p-)BTLC##sE+Dd;=yRZ%KAn)!8+ger_SV5# zk|m6MPEz&pwfrr^n=OLtM^`$3r;c=n=7p%>h?up|c+J}@_Jxzf zN1Xv=H_wRNNTvM`XxOvt=`c>2$D~ZucA?QXRmm#+j*y$K1ladYeNE->@rR;Px7ONk zX}Vo+(Nuo$ejjV|VupruR;CZl6JK=(l%EKB{N?87t?Fy;wpjJ$ zlK9nE&$S5jw?h-%ACkrSPZGO%CqP17|zmWz6PFJ{$_~^Q$@i=iRQ$ zf1gl){pASWdDMT1Fm-^WUo@3nr4gX|<4Ehj5_a}(C+Z8IMf~XHDH(3+N4L&`vWQ`W z+uAlGPsQ-Tcxep0KLN{sKXeQHRrfJa3SjB4cz65udw=Rwj-~M9?91UjcDu(jCpyO5 ziIZpFs8zTYRlu|FF>fDzi{p7}sl%QEmT^hH(xu zdv?L4BJnKKb)bWJ=Mk57 zyVL@*Qe~$BuJwe)<;sg-&f@9;)g9-=NtVp7b`sTh`KyiRQriLz9Sk$R?IOm1!qr{( zn5x;G47rf#kv<=m`maQ<*1r;u!n+o%uQ)m{zpF8Sd%G@NTm8>`)AbFO;w8@wZuti7 zQ%A|x-*%5*4s((PdD&8b4rTPxU+(l7mRm`C_aQG^+2UUbEtTcb{p(w;4_Z`YtxF3Y zR(^a}SzfboerQ?uO$0ycN5H+?lb#!G2TKh;_q@NmlfE&}D9PQi0zBD2?>bX;5x?2x z9|-ZM22>9A)X>#zcZK~X+4Y%Sjcq|Yzd8c2USZAUFKbS_Va0_u9Hr2`4D9}{#0O?2 zmepr-dUZ5r1ApyUvx(7tBwOsJ_|#{7xNlNn{7^#7@%KKI8%wlZO$YkE?Gz_BsUIn< zxN!NPrgu#ETWfI~;JeoC{_g+BW8BXviMQX{r!MgJ7M*EYbXa=FE`vugA7kb_FD;wi z^78Y4%=`SRWIFTfcuw`N_{4^<*JS;=@oye3@NohTTlB(p#DD@*fEKz|SYpBJGM-_f zDumP>J1^=P0gqNHu!H(z3}n&|9B_*N&id&OVazMLfqr;^wy61aq{BeKddf#1=t5J zRKpCvyD%ioa!UPfPzp(}Go2@+xKG)#&3G$47rE02jCca4lsigo?SEv_)>t{Fdx9#^ zph{LuR{1TZySoqUua1h>r;YeF%O6esPv=Ug?X&{1OCYD8&5 z4vq4yDfob{j4aW3+ov=#`|y1hQT#A=)L z)KNXSNWtD5A_o1^I;UoGBXH5EHt2*;f7a4m)g%DQ^Q>Y}!mi#f0lDjm*71;&+$q>n_Mr>+CNEmEf0<}BeybFU5o0?%&zm1#E1Pb5cXG|E z(c<(OrS7Eh#O#;OIYot6f;2;QN0}ra3x22qeAkf{ctr|7dUcFA=m4fDg3q&38+@bL z4QN9+_^A^PrXr{NI(3kIcA?JxVrb|Nz&0&FLWBM2)Fx>X`KaBF)19|!5ANU^`5F{d z%U|yzaKgI)r#$OYo8TI;Cx55g)+2HoOiMC zU33Ghk#_OWaHv6{U4(-*c}QkL+*~~%c$(oI&ZRr~npil3-^cr45xXR?UUJBn&wUnN z8JHv0S-^;iYxXJhfMZq2{pH7&Yc$>_us!JL;So!c@ z2?Tj;DP2W0nar*mN@PdbM*o)I)G41lBb)w9SZSS=)MmAGGYL7e4z_fDXgjE3&D_~z z^7ZtV`Wud1(2`f@f#>f%2}yHruO_A)GWv8|bi>X=u$uJOD_eAkZkBgjLX zG!r_P#uLT(A6fB?z5g^4U0n1|QO!N1MOyw*X?EOuAH@W>;_Z6!=@YGF8o@BLZ$9Ay zwEpO){%)houYVc2m436W`Ef4u&^0%P=8q3&Lo#NYe;a(fTm7PU_A>OF<KUb7@VnOY^;73Zn4XTkci!TY2u+Tjx#Xt^^l7wBjGN{`&Sc zeJ1RD?0!0ZdiS;PrLvsLd`A)TZz(A)j8)60;w;Sq?;gCOun_DUW>vT&vmhtsPizc& z3`JjH?GGFljhB4H^QQBnZ(eCvJ%iCdUK+O4yy65mAA~C205_lF6O~* zx!`RZk?JfSma=q%95JGlKkn>++OHK6h^%rGZ#T z-kM-l;d=RVQsRO8`jMk1%uZoIdBHyTiezla1pJ$4 zPTqF^uv7l?q3Uk$&6<(JkDcBw{`GR8>znmto!MH__8M(DJK-ehiw3S3-yMM$(O>;2 zRlQGf=y=z5|6NEye{o|{`zgU1G^oSP)%e1+R7*@O?|UKxbL7KNEH!zs(qS_2tp?!i zurJO?$V*Sr{4~^Y`%jPM)}34XH}xtuYG271s{%2@1q747UmP~w1*CWX%%9+|17>`w zfc8}A?hj=vLmR$3eb3y@kqh;}K-(~e- z+NZdA9gPr25HDMArp#?KUbEo{cw;DF3&J8lS8t^O8JWg6AL*?;?PqYLQDInk$&TT z;b&}HtRB{tR8M6|^;w~{NeFw^75glmO8a{I^g=}1cOjUuC%Tv!71iP=KPJm7u50f( z>uk%&_&Gd+%wYM@(!+0gk6e?GcXYe#S%)0*8`N=yoIoYYHt-lBvZTmUp}Z!ymsi@# zPbC5QbK}o8Lb3~A`n~z_>=52@{Tv5ruq~Xl^A-JXUJ9~ z)5iZAl9_6vqB&+Qcq@6+8;)x&6L8hgr>LZUH?dK8|+g+V5x}M^nZ>q{d8Ybt~LC=yul~#QF+#U5(Gw<}1 zcd{+I77fN0i;uU<{*m7(@D81Q@mFHp{M)6!9O&^o2yMP)g_G%^q{7!mvzwBgrc#NF zVTlX&S)UFBpZ;NE=@9p3_P`d?U=h#D=^lYErnOJVyDzg>&BoZtK1M?xDH$6!mcfg8 ztp~PJ+-VabF0VeMQT)Ya@UP@(zt}GK=Zhj@GE=`f>ZI{MbIZ?-pNcKXeXo-3_CJ>aDK6v~ zoUZ;f^gQ82y&J}<7@-}J+;Chd{vCV$WBkdNjc0CgK3C=Lii4LO^`BJxqd1QeaX%_? z+1;Zy+NRTAuNt_N9+F{;N`I1B|qd*!qieX5eDoKK4XOeU%im~aN)J9zAvjLd;ELDy_qVG&9 zWCo39)k=dYT6B)i$B;!f_=MvUh%G`(ecZ#is!pSZ|yzAo4<5XyF%~vSSKwab5kCO ziiZLrv{frf+FyY*s@UIYqSaf5HGdwf8nPMNeVQ0#qd+vPnm#(X0Du&aI|tbt>$I+^@MO`pAzD`K zrg^0?v2b~@qNj`WtY_<=g$L8Q^*}nj*YJhAb#uq=6b)Ot5$-vTDx)1?PxpRAEVdus z{7Cq+p}lr-xjXezK;<`?gmv%F{y7RP+U{c9hpUbt&@)D%-}w;zN~7Z|H|{odaLx)* z%t9{g0g(n#nuwtNEJCsB*-)UEI4n&8_Jj{z;uZG~)OHSI$TEIy&^9?oV7u{QC^Zs; zs5|fwg6SPtVTlGR(6zw>KZm``fm8rV1+>V=;~AoeW(`-BwGFdFb!FVqVMJ=o;oG$Z zfS<#pOUtsNEtM%R5;dOgv)Xyu*)76l@W(GdKeg?9uda1ni=X;q(M}76W=TexlRQ8q z({3{$AK}gQ`OV6({VUH(!n^h)HI$PqzxpfGFWoGU=cY2=W9tJu9E<4e?i*lv5{S$~ z5mYQ}3JaKACt@TR$!m<1AsJ)^$nb^Hp3-{y=@jrCt270M^VD~HVFO=b3C%Mp;Klg0 zfcy^VH^DGbTB@w}!CaFf{)E2;U%8dkL1F|jtdNZjW;r0S8JqTK!iDb3@?qDKS=hZS zX5$@(vmjD%v!>MzJ?6tNvf$;#YV=$>HJq+O-(@f4pj(Q2iCFk3n5LjKv7_m^l>meC zIhDdkZ!WPK<>_;;a}<$Je6(#NnI!wCA_4abNkEsPHHP0oJmMS3EHUq~m?Qp@HcUQj z(E#1RN11vsLf98{#4;2MXZs4;rD2J~vod8p8q@^(L#)}J3bsJ~fuqd}_u$ld7nq}+ zK~Hi^fKDnKa`!w$HQf=eYM+buWiHSUL(1C&yh|7zTRdqseS}rb!Rj*r+Pu#Qz}dmT zL^$6PSF(jq1XS&#`3xD_G^E)PF4G+gJ-WaYK#1_vep#GOEA60)!vhAt&sqWUlWOYO zLkwH*LipGt7UXvnr0oquC{W?LOr7Ui5^zeUvkmTsop}##Nbr2CZd`8=TS1YvJG$RPZWoSDH+l>&>RmE~z=pH$RGXvP7TKS!!Y+67~j+5`jximaz7{4Q>c(b&}YWOUfK z_ygBYulYq@WEI^Ptt0p;gq4!!@vuyhv&NjrxlJpe5fmQ=YU+EwOKNzZhxVR*WFRH$wD*y;(RL>hzQU%r^H#CDh(oYXud|i3zd9{Qk1i^30_CTmZRsOC zh9&QoI#7H?JM1Sg5pOc4b0fdK^%>YbD*KwRA(kA6jKMg{ZMcBY=>s0Sh+&}SXy!GV zbRCf>g;OO%h#sV;4A?y`z|H&bhta;TgNeWP*2Z5an{3r~!%{vyd8912^!`8sv>lT~(wuyEYP%{fB9-?&mJ7 znF?EJ^cY3pa#Mc?u+5pLC(m336x@GoaPIW^qI14RqfAPA{gg>tb(NPt$@pvNh~$yy zL)T#gdb~H0d?n~9piGZa8OxKPqJ@zL5AtfFIj7Ci@K8ZTS^8KspEeu1gP*8aQA)4g ztd~Lz`Xcpp*dQcq%-LmpGO^MlA#^!MZMjFSn(rJfs4&hu2ftda1l8e9c<=_Dw5)Hq zlH?}Fb?iV67H;W(Y0Ra_!}&%W3<$*6iDTBtz?~-RT5o20!Qj2 zP2Vh)rC!qGFJ_!g(`&~~)l?omyX3(evuZ>$@M~>><@$J<$pQ}tiA#SXOu%Kp2U}xv zV8nH*|(1$xk+-!^iFS3DX| zjD$etPkO@`c%>0?k-uuKDwj4PX>QL^q_q8&(4+Repf*fuu$3TN zA=wGwjnf~unsTjs)o$L-;vkP&{)ObR1KNJW_q^&v7Eq$cUEYVm8U-G$6Rsq)k`swK zyyDxZvl4*gVnit<2L~O6|v9^1F!PCz`r8NA#|;|2mi6nM=dj-0YHOQ zd(7Bj7WU)#P3@3y@pWF;Gq}t`@sMik4?8bKx*BB@JJcnS`~G&OU3rkcj5p?CG>Rb5 z*@;;AxQ91RAUP^0CLM+E@V#LF!Z`|O)?@A_942X>5%~wQq!TezwcSXA!a>65kVGmQ z%7s}FP{4H7y+o-Hm@hbz@0XcrycOotznLfu5-*_us~>qnq#bi6Uf4dVU#X1*nK4Ec zZCn(Dag?cacYUv`ihxJJJLO>+3JU}b^iE(EGKumT5So70feU=W4fattdFUN|*1J$* zPq2O(gD=3q?m4A(Oyeb9=|esB9?)ZbR2`8AxF83dZm;LMbBLsV!S*Z&_Zu#a!#Drr zpIYr+@qPE|N8s^u7oHu|`%uM{O#Ax_8Tz44gsMwPb@bYUT~kq@(uz}ET?i#)h~sXs z56>{1pxn$|4eayILB#c`zn&Yh-_~~M;L{2o4OWU*(A5oPbBH!*N2mTAqv^Hho(jMO z%yuj-So2I!e~!sfj(K5RV;j6+Uo=_q>biaUI5yYQYC%sLGAn(0)vHYhYt(vTPMQzV zWq}o-c||qNBip+ECleZY*YQ@On8gC=9S7L3<1eN`w*+1(jPRf!DAiL13xQ(y$}QbA z(7xz$gBWV=3+F@6yhJIPfF)QgFq-*l0CY_OMtn(C_C=v~@CYiWvxzqEiZ46LL?D)m zUxc)z`0&H*q^1Z>ziDp8H{ovR9px_8n|mbn^bM#}{ioaM+Tvb!oO2>o^$fV8?cNfL z7M%l?TgrhdRSMQBL^;S&wFwJn+emXi(1D;kaCG^3S}LtX{G^375flcQxCl4E>CXX1 zbF>iL!|x-D3q$jlnCINA`zAJi*Wb-ses<(sY~80Oz9&k?TPYeP*=fTq@lamMfzfpc z;0m$GEK}7^H&bSzww|%M!e&&Ub|olgBaZSNaXftxe4Xf{00Dt`mOMNzAkcsy*It_xN%AE%7F%Gqn&hhfG=VIWdR|1FK-;AxC%Q1gkHn^xs#j7!AK#Zu1z zkAvf|@=2_j$ddhmEa5lc!Kf3GRd1kpUye-UQ$XcCE=K=KC_n_zKrYNlk6r6CYm9|t z6KSU7q%&rKPva4`k#-R7+L)eeFg(bJwJJh;dK+aDY0v3NigcrybVpp$3lD%3<1$BxQuEXZ)7XA6 z77G~I@_8b`kVwUy-YCa?K?hJ73gp?5tNr#&F*uZG;t(n^2`*LWVbl)Io+{+5HFzc< zp0wmZtYa~+I)i~ElEK9zP6c0%%&CTVDJYHDFXLg&NUqYK$kk<*n9`;o)lt=kHiQglVRrTP5E+eT zR3F~knPbEW2FObOB*i|P0ih#hy{rUKgFO$IbJzw9T*l|(flKVQ05=rHO`nyeqOA|* z?S-r=l~DALD#1M8rg|3(3zy(!LhWGhGGRS>0~5^4uu`TjV_;DILw8CNjCed|PP7-3QI>sI5vwUBEMNCnNqTGtAF1onN^w3_nalz|ClWdS(eR-=w{oV+^|!FNY|?_syD-D+Sh|3MKlx(ZgHfQ+ z$infA@>+nSE^`dDV}h^rhJ;6Z2E&Dtd%~RR8YStZ{cXSRNLP_EK;)`$UTBy$rGFFr}PCdNtXhJ0YX(7dhGef7r+Xr8TF6uf}(qSyPi?4i|oGI=b7lzcJs%RI| zcF5(TP=Yvn7Rr3x+14lMRG}5YeI`Xk8w9I3P^44s%#d`%q)_jh^AWxn(A|OrL$V|S zCge3w`kNJJ5ImYk4dIjxxQx^;KKe5Y;Z`T@ii(he>%@E0ShW|3S4E#V;XE%S$Z^cy zOwO&Bv|EfVTqU~bDmrP5I4v;bF%+Ws4!*!guelQuiK`5uJF$ttkrUcMNS!d!0Bnn9 zN+1=Y_=PK$K@5Y8T4L`kTK~M&o%gx@*?94ZnPQ{#1~DfS&g|I&-q6hP!LB{3>>!Gj zeoyCSI?-@^m4{_>roJDTX|)zUK3BJS4FmQW)@chXvM41Jt0bJG_!e)t7;`FH@R*N9{lmMrN9ClrQfK^qz z{nL@a=Hgco4MWnS+2?*E6zZ_l$Nx&~dHT7XkEcpy5hLhJib}%_HJy9yPaGM%;U)G& zdtC~D)#+poZ*QD^s#5_KkkAo&D~@(S3IlSyOc7c5L(#85y~MIM=! zWWauM%t~XfGh(kZXgY7Haa#QdlpM%>77x`X836i}VW0lSaZsmDG?avvCZ5D0NEn0= zTnMirdFMd*G_5uJJPI~$_Q;@$1HFaxN$4-lrvVzevC2=;aggC41s`n006%@`R-iGO zvz+zyuN~}IcLPirp8(75fO&(y3?P2+%>m!FFc!Y5frAxdIiQr3PvBsA`yI?4JnXTf zsL1CyASauVBYG8U;ms*+>Ei=z0iIItPVTfzNm{gm4iOx4Fee8wlm$=HCAOMR{5q*- z&(jK(T!b%5^Ku|~5MJrc{mukcH@R{_y_#Nm8!88#cUYlUS0pkuTXYqxlZYL!>qi>y+2-lU&Pm@5tqoLN<7<2jeAMr&M<@S6i^RTo6CXWZ zg(YvT8Re4y4p*b#&|=TJ+Zny@*Stb|a}IiK&4qH04Q1}*!dj?uAS;fdy~y7^6e5vd z_FU&pOloE-`B7hT)(Izl3!Cj~<&!2%{v(!d0vWk)hD9Ns;$YwiM}(sckql|z8Hkh} zrFl#)GYzz#CIcKAbuPnIDI^`9&M~5oW+WCD27)Vcp&BSzASqrCPQkrn@w3QL&;BAKNt2SV_n{xGf^6(HA0 zm=y%jU1XX5U^@^V59KQ!b0@{-GYmg5xhZXHB!j100*r<+vwWQzftNT-({&huag#Xm z4}{>ySBOkW?$gy)M;*pe{-Wj2M}=^E6uN`I8W4E&Ii*LygX)yG$&FQqW2COvQG2_V+Zk=c)l>6v{wPmQKnhpA(@Dadq3RQutaB9#jnWDMO*}31w@dV$qMRh5AwgO#-qi5nFV$ zoDG?lGDt>DL)cgy2__(1o^0v0Ug4$>=9`BF`WTT#qy70;V@)EKBT5 z4G6r%L4W&BB!!ew3HLRwV;<@Y^pS48Y{Y zWTRs4jm3*P3Txa%T?4<6ttzM35`Qp=1}xo^1Sob82I!+SscI^XnF%jr=_-K>#Ge1_ zK9;N|PLy_hbBx4*yW7%x9DRlm-tIVaKER?~*g6qK2P9!7LIKm<-2)2TARhbeC|$S2 ztm_A(+(196G4p1h7A0xKS%`=ajr$9GAn?^;?62aT-80Oa60Dy3q4$X1sk&=1uHtW+s8O8;SA<#Kixo z0(|P(#5>{8C4LD8?&Id(R&V+dWFSw3uj)v7BvKy#ud&X4Fh~B=|GH3)=ns%S z9A=z)e~#Hjv|$#T6aD@GgM$(wk63;WTy}#+iqB%9?}CaDPEXiC6LG*?b^y%KUANPb zWup&c2E%UMfmUG$L4b-vkCBBs%~#moz}Is0{|1;4NS25DQ1W5fDo8KbZ$rfB-9Pe}~lKL*D8bX*YsQeLP3tLpFK4!BnF2 zy*Oap7lAu)5VR*a2~MiQ8gVGEKBU_IAd;y?rJg7@WUHn*bBs*9sf%u9rDl_~lxl(% zF`0Z!3`^YNS)DmXvF}6CvgA;^gB2k}JAx5M@vTUS$%isg0mn#&I8$Ce2pUK9gChWe fONIbl_~ literal 0 HcmV?d00001 diff --git a/frontend/src/components/epg.component.tsx b/frontend/src/components/epg.component.tsx index 3249bb0..02316df 100644 --- a/frontend/src/components/epg.component.tsx +++ b/frontend/src/components/epg.component.tsx @@ -1,5 +1,4 @@ import React from "react"; - interface IEPGComponentProps { channelId: string; } diff --git a/frontend/src/components/header.component.tsx b/frontend/src/components/header.component.tsx index 011398d..6923c98 100644 --- a/frontend/src/components/header.component.tsx +++ b/frontend/src/components/header.component.tsx @@ -50,7 +50,7 @@ const Header = () => {

+ ); +}; + +export default OnboardingPage; diff --git a/frontend/src/services/api.service.ts b/frontend/src/services/api.service.ts new file mode 100644 index 0000000..e42ef68 --- /dev/null +++ b/frontend/src/services/api.service.ts @@ -0,0 +1,28 @@ +import http from "./http.service"; +import { Channel } from "../models/channel"; +import { Stream } from "../models/stream"; + +class ApiService { + public getChannels = async (): Promise => { + const response = await http.get("/channels"); + return response.data; + }; + + public getStreams = async (channelId: string): Promise => { + const response = await http.get(`/streams/${channelId}`); + return response.data; + }; + + public getStreamUrl = async ( + streamId: number + ): Promise => { + const res = await http.get(`/live/stream/url/${streamId}`); + if (res.status !== 200) { + alert("Failed to get stream url"); + return; + } + return res?.data.url; + }; +} + +export default new ApiService(); diff --git a/frontend/src/services/http.service.ts b/frontend/src/services/http.service.ts new file mode 100644 index 0000000..fb3b8cc --- /dev/null +++ b/frontend/src/services/http.service.ts @@ -0,0 +1,16 @@ +import axios from "axios"; +export default axios.create({ + baseURL: process.env.REACT_APP_API_URL, + headers: { + "Content-type": "application/json", + "x-xtream-server": JSON.parse(localStorage.getItem("server") || "{}")[ + "server" + ], + "x-xtream-username": JSON.parse(localStorage.getItem("server") || "{}")[ + "username" + ], + "x-xtream-password": JSON.parse(localStorage.getItem("server") || "{}")[ + "password" + ], + }, +}); diff --git a/frontend/src/services/index.ts b/frontend/src/services/index.ts new file mode 100644 index 0000000..d5546d8 --- /dev/null +++ b/frontend/src/services/index.ts @@ -0,0 +1,3 @@ +import ApiService from "./api.service"; +export { ApiService }; + diff --git a/frontend/yarn.lock b/frontend/yarn.lock index c5f7aa9..dbca9d6 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2495,6 +2495,13 @@ axe-core@^4.3.5: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== +axios@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== + dependencies: + follow-redirects "^1.14.8" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -4300,7 +4307,7 @@ focus-lock@^0.10.2: dependencies: tslib "^2.0.3" -follow-redirects@^1.0.0: +follow-redirects@^1.0.0, follow-redirects@^1.14.8: version "1.14.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== From 195b48082ca4959e9bb8894539430e5100ee1bf4 Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Mon, 11 Apr 2022 23:03:11 +0100 Subject: [PATCH 2/2] Creds sending done --- backend/server/api.py | 21 ++- backend/server/lib/xtream.py | 3 + frontend/package.json | 1 + frontend/public/images/unknown-stream.svg | 115 +++++++++++++++ frontend/src/App.tsx | 7 +- frontend/src/assets/images/tv.png | Bin 0 -> 19938 bytes frontend/src/components/index.ts | 10 +- .../components/server-details.component.tsx | 107 ++++++++++++++ .../sidebar/mobile-sidebar.component.tsx | 21 ++- .../sidebar/sidebar-content.component.tsx | 121 ++++++++-------- .../components/widgets/button.component.tsx | 12 +- .../widgets/helper-text.component.tsx | 41 ++++++ .../widgets/image-fallback.component.tsx | 18 +++ frontend/src/components/widgets/index.ts | 14 +- .../components/widgets/input.component.tsx | 12 +- frontend/src/containers/layout.container.tsx | 3 +- frontend/src/containers/main.container.tsx | 2 +- frontend/src/index.css | 47 ++++++ frontend/src/pages/channel.page.tsx | 137 +++++++----------- frontend/src/pages/onboarding.page.tsx | 33 +---- frontend/src/services/api.service.ts | 23 +++ frontend/yarn.lock | 5 + 22 files changed, 559 insertions(+), 194 deletions(-) create mode 100644 frontend/public/images/unknown-stream.svg create mode 100644 frontend/src/assets/images/tv.png create mode 100644 frontend/src/components/server-details.component.tsx create mode 100644 frontend/src/components/widgets/helper-text.component.tsx create mode 100644 frontend/src/components/widgets/image-fallback.component.tsx diff --git a/backend/server/api.py b/backend/server/api.py index f0479ee..5e2a880 100644 --- a/backend/server/api.py +++ b/backend/server/api.py @@ -1,11 +1,10 @@ import logging import uvicorn -from fastapi import FastAPI, Request +from fastapi import FastAPI, Request, Response from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import StreamingResponse -from server import config from server.lib.streamer import Streamer from server.lib.xtream import XTream @@ -21,8 +20,6 @@ origins = [ "https://streams.fergl.ie", "http://127.0.0.1:35729", "http://localhost:35729", - "https://bitmovin.com", - "https://players.akamai.com", ] app.add_middleware( @@ -47,6 +44,22 @@ def __get_provider(request: Request): ) +@app.get("/validate") +async def validate_crendentials(request: Request, response: Response): + try: + provider = __get_provider(request) + categories = provider.get_categories().json() + if type(categories) is list: + return {"status": "accepted"} + except ValueError as e: + logger.error(e) + except Exception as e: + logger.error(e) + + response.status_code = 401 + return {"status": "denied"} + + @app.get("/channels") async def channels(request: Request): provider = __get_provider(request) diff --git a/backend/server/lib/xtream.py b/backend/server/lib/xtream.py index aaeaced..1b18ab5 100644 --- a/backend/server/lib/xtream.py +++ b/backend/server/lib/xtream.py @@ -18,6 +18,9 @@ class XTream: _cache = Cache() def __init__(self, server, username, password): + if not (server and username and password): + raise ValueError("XTream: must specify server, username and password") + self._server = server self._username = username self._password = password diff --git a/frontend/package.json b/frontend/package.json index b72d0cd..0a9b8a5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,6 +16,7 @@ "react-dom": "^17.0.2", "react-focus-lock": "^2.8.1", "react-helmet": "^6.1.0", + "react-hook-form": "^7.29.0", "react-icons": "^4.3.1", "react-router-dom": "6", "react-scripts": "5.0.0", diff --git a/frontend/public/images/unknown-stream.svg b/frontend/public/images/unknown-stream.svg new file mode 100644 index 0000000..1adf606 --- /dev/null +++ b/frontend/public/images/unknown-stream.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 70bc1f3..746801e 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -8,9 +8,12 @@ function App() { {localStorage.getItem("server") ? ( - } /> + <> + } /> + } /> + ) : ( - } /> + } /> )} diff --git a/frontend/src/assets/images/tv.png b/frontend/src/assets/images/tv.png new file mode 100644 index 0000000000000000000000000000000000000000..4a75dc85a1b263b90b142442fbb076ff0c6ae451 GIT binary patch literal 19938 zcmeIahgVbS);N4Z5xppgjv&&;%AJv>s0bLaj4(6KfC?m$8bM{0E(9dBSka+b0j24n z0!bi2gwTmfQE4)I0O^7h4^6;B3GKH}xc9E_A9&Y#-*4T_nk77C@BQrl?EQorM=i`( z{bR#F5CmEE%g;X@M-VAK{BOQ|8I1JgJ@ABomN_3W{|Q+n{(D%Gb_YSeM}GO~fc1sM zq4vPL9svjX=Dm8)Y+12-^_ESmZw4x^mO60y=>F`(r;n-}`)PlON5X;fykV-UZJ|f2 z|HCIq`;UHi>gZi%g z+ricB|Bz`ko6-3(4M_R#=YO076n9rY5<>a%C#qykC6D)?MQ@-P<_i-sR1M?XQP=6CJQn?wkfJhrc0#`=5&L=|PP(g0nUCyM3}+`$ z1RPJR_OCx@oxi&nrorxTEXibs;14#3g$~6hNa)EJqj>9F+w^VB3|+<6-S>8}EGBoR zU~CeLLQ`zQ8v6QIAPB!A%W1v{D?r0JvYK_8Y$|0jqtJuV_HFS`WGGdat8PEL=$@<1TTDA_BEed%oFuu(T2aQ)T2_f)LZ(LR)?$1`u1E# zt=K${Mf|wa1_arAL6b6->G=0_M9h)5t(>ao1xF?5+$7A?!@@S?*_i2O9i9H?hW8n@ zH`FB&q>Gj4IDa%jX(m;7mw!TxbxghV3gL3iJVOsWY{TLNT`=<#-s&;Zvm8ORUVlMj zC>npvU9D*7E5@j;#k~rwvq`iNCp@b%Y|*sE{wTSqaK^-R4}u6yjI)^ZY9pWAgpGs! zob5wBJyOEMBb0eYPg&<^|4sZZRx=-b6G2$>K1F*pj7>x@PqK^CM2#Uq&yjpb{O`)J zu#_J)veZwgweVzC!l{^P&kJr0&qS5c_Fms-I#ngHSFuVkv#TX$*Fuo!z~@zH=49_J zI8gN4%$8tg=Rm~e%XN#HBLevt4PjmZ1;;AGG)xB)spP+E)3!?>h|Itvv`QuHnBGpy z3=49j%o_TUwxZKv`BkBxD^N5VzbJ(uI<3E;cT~a@^y21DcN|~teb%2{MG03~BnQa_ z2EYJ<+%d`#L^(ABqc8nU6`0pB|u{dlqKLZjWy^$A5+eXrIUB#Sha;lSith zQGrH9&nmuO)9VY2=Yb!N?dt$y@KQe0wa4k5E}-trZjw=>zsRzg59uje)Y%>GdkH9+ z{CpRyS6Orp{bFbzGNrB&#M)YT1`mi@EG_yL{8!-wjDS}DYK)HVS~xssdp=*3OeRYr z)y~B&oyBFfcGDz;b!1Fq!(w-cN5MnpSI1;2*44cnqoT1+*QVGqu0;o)175(cFVCZ+ zR8Mquc7t!esH5F<9g-7}**0DA2e?pF9ZP&wh67|jJFcYa^}Mu4kt$EV6HN+!)gBGz$OIozPVuD6PBQra{m=N<r(ia|!F1;X6+o$Eu zYYN(boW9~(vZpG@uXlM%WX(p?Fuc{jB%+5-J?-ad%i7K zbPE5o;V=s=IBDUi-SCTt=jVmShQmngYnHTLSU^UptKW*~w+@^b3QyfZiWZgdT$z`( zr*OG>?Jdb%!6#J~@xDK@qY$b3oW@z)TPVfC<^sgVG-6mfXyf3VT74cP+ z#nXN(=;?M8-8UCoJDYioQ8}<_<)?px9(>#&y&h{o!&Dq3;>$D7znb(2IG(Ft zC?&kT9xxA1!}N#@yDCbDG{kAO2}>M1*E(z+4yb5r2;@lyg-FiVLuh>@EQqk9>ZWJu z6)u0}a5TyE-!Q6K6>0l^+^ne8p4nRL@s7+(7ft_%t-wwpci)c&{^3swLlOk5Ht?qJ z#zYZ(1#!+W7Y8J2>QXt2CZJuK0-htyA=FRdOm7M3o>mlbybgW9|LryA3PSYnl~d;B zU+5>aLA-suJNC%<^~CZ^1+&j0srEa;0ZbD5?Gy%zlr#An3wu8EPk*{&DYrIlRkBIp z@*F(iKadwnMV|-O)U>?fIK90t?dx3ZY|yc%5E1?@=F42-%kF0(0r-_jnx0JMcK^ZQ ze{byQ*jtE1eC5MLi<-V;wy~0R7#VmW-Z#8ERhGYAp0hwT(^~&28l4~(gjt20@>{W_ z2CXSEI>Nv9Js0&x(!6hu+`U5`igL0bsY(<2S&}7c9$2IG_7JUt$%6;oefpLnfyFYLKQq z4hMD12o6jLax@IAa4g9-0;6Yb9sf&_zL0DThrk_B-QM9V{FIRgf>r0gC4;Pm#|ecT zU9{$DI9#e=(s0hqefil>)tr9oI2DI070ebww7nHt!krghRA*oC#<$ND$X9i9*h+oL zRMir}5;KkmZj|M(wB+clcer#o$b005wD};XHL=(T>{)Tx0D?8`*&*O4f4c_T)27{< z7^R@QTiU3@FJCy&e<&>!%|}vI6D+OexeIVQ){}8N8msrh%K-`Q%K%DQY!kv)v2e_G zNmvnR!GX4XTeoE}wL%A^2G z7Z=i*9|qPSZr~Pac?LF3JWq%V9N!$w%){i?@YgOKerIVO(+rN#Dbt!bG#dwD1)+Od za5@^N1xH>RO+*$a-DJ$P6nh+f`sULf%~>R#Ww}v`RvKe1|A+5^WwXO3sFl8Rwp?d( zpY@|V)Zae2wgwY-P46E@TKfcLsbP}ZgEji>wU>HDPqDR8i$z-oYh?AmN&fbh%tsn~ zYT+`HWTtfTo@eluksB3jLacCO<&*a-?KnYsGv4cvZO%Y=T$~M+=eZjQKUMC0W8}`* zpI_z{ zk$GcNQn&EF6Ux%@f>~;c`&{R`6RsUj?T|%u#V0lQy}xNz_BsylE1213(D$WOnRlvi z&X+L=S$T-BGd>#?maRKjJF(MwhwfDMg{|)^E!|}~sLqXwLIEkL7b^W=yii=zW zGp(nSwdhRLqHP?bk|0LkCtWmL>9plFbK+$r?YADgosMt(#5ii!XP?5>XE%GvvvvNM zYs%y5_frhu78aj$2(?lPYxsV!HiB(+$pujVFp(Tdg;ThNvpWILWdct$8gK@PaxRuY zSXcGn#DP9A7(Mpu)0!Z*3gksvm5(q3m9QNf2cr}sN|@fj4ISbDw0~}n{Vgeunzk&i z_QF=HzC;2v{||x-x;zV6osR*hiNjhjQi01A#@6H~V@k@;I@V|BZy^{e2BA!VFs;2_ z;mZ7(fIFI%r2;^V!r7Vz3x6GIRN1VUGJX^D?kU@LIw_DU-jjO>_1d-2eW)>kdaAs| zUmlRZ?{z?xfJxjAALZ;*EyaHsk@IfB2_na!T#^^5aO7#Ug4^sqt)6?oDfO&_ggc{$ zt+{*Qub%+MnerAzv4Cp`HrsimF%S0WTAV7`;hfnSK!|I+4l^Rbj8~fINu|@{*G!jk zTV6OZL+}hSxeVazIPB`G2mAgSbD}=$D9$PLhqOQCbebq7s_c(jc;)q6bpnMe_zAdb zT@`Q8ch+v-tg^`1GFbajnFlO#5HsI{VWvfpUb8evZq9&YIzst`S0t@^BE2%K{Wa6q zpFsimL8r=ZXH2wUzh+CBzMJMLo$%_oMVxof!n8FrN6Su^wT?;c{ZXT!-TrRy?>P^!T8-c)^ z3WE>9_TConCd8n39pFSN40i3y8><&^4G8hl^HV@GZvkEDCc00*HCLL}gU%5A`3U^E zJ5wD=vzp1SG%W)@=Njq5xbjRrT$OJVTwWBL<83jGKY(f}Z*E+e8LKo+`8SB!H*431zzX=oS*l9X|U+g_(e>I3#97uloDx2wg((z~nt%=~=2ksv^OJ zK)Y5$=V5Eprs*oDMiqjSd`2W~=jl9;a_|Zt0z<_6kId71bl(CvI|kke$~#kO+VL-( znXcvF3nm-M&L9k|xU>+eiO9DB(C#ggDoG1{ZDxc4m+R5cRN zmvgr%05h2{Q~Px6Krl)lJ}ZBoXj;C-|uT+}q0Es)rN8D0s4EhpR@c%(_gRDgi1yGzm?5(n~ER1*DG`mi` zm;|lRc$5&DnAijAw?RRwi`avEN)DlS zWaehyOn$cHya!t8@!{4=yA~vlHQo;}7`_hvGDFPO_!WTpeufzrJouTfqnb-*M?X`# zouJ5=g4C@7n z1@>it0Pa=$u#9VSp&19D}YCzF|oD7MM?c5|O9GU+epTs&)pUXwa(6zCD zuxyA89dp0qd6>#hs7*{>+SAD?_E^oT&?hF8vsnc}p$T`0C_{O{l19v{u1nY4Q^}L$ z8!gjV=-{u|8BpFCIgp{w{8<5E+JD^Oa=RPVp z0}y2|oLq&>j%s_DJo>6Kk)s$-93%4?+_n&Ib5mYmQ2j3ei!&YxSCAP3>H)aK3ZF;P zgrPefN&I_2kX{Mz?1aLUnN}BV&J*|2hvBOPoqDh+TMvFiiQl|OPRu)+Y0GuHrZ}8Dw@8MQP zSKX}W?UPI)KP;sCDIoE(l8Q(qV+xzncP6Qnz3=;c50usLvickE23zrsg0OU(TaK((s@0 z6p9mZ^;4jC&f5au=Czu9x}!yUR`3?8=y{k)fzj~mu>SMtFXjs~#pfeNNEx znFU0v(~d*6R*KeB(7`>#A6^yf}YKcxgVsnbCutL2F|^Uqew} zTd?xRzC}tHbsoJ{{N?8k<7eM-;o==#`vdC1ZlwzT(5JM2?}Zb^!T?XDs1sqwO4y?C zM^W?_D`|X#6sPvQLI!>sRcmcaA>8w`M5~f4=IMk3gS$OOUP#+7lT@@Xe9tMOOmRn! zI|R6^fm1nb(st%G^V6+j4|lbAT}j2@tU+rhYCEUUN-3mU1A@Zcj$3pFne3+m@>j6L&8}5p+b?CZ_sk#liJ_+MlgdQ~P!|un>fGZ+bu8*^>BLGyotoR?=$P zYdIPjBgUZoi161Eo@ms=b9!Oyg+rIKGC!Wf5g68qSiwnfP}M5|0>k}Z6VR)05?8&I zdIoWv1&0K$2WetH@S_|Z$;G1ThQnP}0Jg${k+NsBthBL92k2=X@y0)34IU;XtFP^( z?~oB>gg&Z`YJnIL9}|`l`d96IcAZAsRqZoE=f_rTjm*%8M!N_OAaO&#qleh08V*;6 zL2P$<>7h@c@U{tNhTeX{n%L$x8p^QGw{1YeJ!w0o%)UfR93XD1QpwM2&vJR{Fx%r{ zr}}u-rk+>2FKrRF#$u5e2|awEjs+B8`cKY~TbBwECgp@i+sm)YJg zrD!$#H|QNzT-Ozr79GTg(R*yuES>ds;koDKwVs|2#+$Kws8UoW@JM*YpFPTRv}vb% zD^b8XJoRpe)>K*T&!A^~?b3(Lqj)KXUoPVBT&6YITEbR(uAB`Rn{_lPPECDV8f7__ z(V4Go_o}@L{g|O{MNTX17V|F>*GAnqDp5Kwji$dlIQi-xCyf$7gdc=;V&*8WhK{Zp zdGRt(c4HM5iyq;$f|CMbh7zsYc}7p5^x?QSPwoi#ysGY2wo?XF2#K8^Ap!{$L;vto zh^->?_iivoT{uK}0Te!<^eNMZQQL5srmo3v=B(v7WvWAU07#ASvq-S~F}QtTlU6t> zq9orLAHwQVBVdOA$D(bBFWv^5mKpfC3hK`J=1jKAjewAa<4H6y*8R8=935Gv<=+#F zR?23jYg> z6stHbx7E5S6G~nC@@4f;3A=B%71Y*#vshwEruPJP4fWmWJa!`Z9~+hW9Z`Mu9im@= z&QLamr#wJY#TBr zrkZbFWmD!5@&)F!09s%$?gdp`5PYiNuXqr8;&PBTYbC9}uWY{89L|NKzAcu$oUL78@zRT6k_=ZclI!2nzQ z_Mbo8O8EC%0BnO;ibAQ8qa`yx(|+*Mv=by@O`HU=dLnB-W+cbEb=v6DGh0(Rvrupb zOlyrZnf{EcAf9Up`MjnijuI8>?F4l)pA9`s%77A}9(CH_M2I+dZg$iJ&Lr)GRza2B@}}NO zP>&@gU|r1myRULYm)LMpXd82ftz_M_o-h~WOqV~{;G%xv@~S%6)RV@xgYrB~=x1Az zvukCNvb{aKOXZx7&HF6-1%{{H>$6JFLLVebuv(|{7ifM^AtN9F4Va+`YyotU8ho8y zXF{LXI+?+6SND89==RpVObfbpYb~eq^#oyXaed#gKT%(ErB4I-GL7fes3p$|=a=M* zC{Y63eC5w7R@yC(8&nVOUu8fdit&zJPkEWs2}G4 zX2}_WialV^dRNsNyuRh*(`0xg`jL~_~vG-!GR+UW{B?PKtuz~OG zbfP5KZ-sx=3hwEdXyRUr@HIkprj|LawES=$THhUFwPm^Z=3?#WAkhBI@M5m2seO{6 z7%=y>B_$5Z$<=*QjXM)hkaLYriseYV^`1R(UYGmPSHews!G%%KuoXbluc{vd`&glq zw3apzP>cP7jxFicKa%X#vK);Hm&ett;Lgn6!X7WJuP7}m#0J(7<^R56F4i=@55y$A zYvJzuy1xRHdyG)-SbKp@MeMz}+q9G7;Nb^%Bc$0mCd=O} zu4~gWZXg7K9b%5T7pPF+PI4(?J-@Ga1dW2`2Yi^&R zRy}%cg#&wVNxOri!y|QABsZP8)3A*dD0%>9eZ<{Zvhf0yI|6+U81>GUvyor#;M}Ur zubjR1FEOx=_$@X_=OvNciov#F6=Kh}vo_e^;G6)TzgI7Nw(OSdW-5A1N zyL2p__h20S+Lbhyz}fF%pVq5YgwM#%geo{a!r_VNZNpaDRVZ1DU50)@#W`qWD2|2_ zt-9=}xn8yYN2o4voa=D32%H?gc9=tYS6nOI%+gC8F;UHrN~<8 zEu|kiX#E2}05KJ3(aRizT?@>Em3@XUVyC}UE?&K}BhU+vFXlnDEOy8ft=b<}s1s~IBxe$^iZZexYB6G)Ox!DYyrK{7_QrvH z?0|=fcJMbmT-82wo7@Lz&hpRqi}V zpRQKSQ*~fTjzwY=^oTfe$(75nN7GBkUYq848f0Y|6_)SW0n3a5+G7)2xQ035VbH3F z>O{w=jexu0?x(OV_s-y~7oLg ze&Bs+5rgq|U`^{w7K1PD9FJ`EFbU~CB=#0L_y@?OOW>Y3iQe#l0y&E`*p*1c$~8kA zs$k~IEzlmY*P4#^92uK%$O4=KRX&m6c!_p4RiI6!fmV!qY_k|x#8?8FY8FR#g6Jwi z;Pdu`w)kvc3OlHm$P0uW^Y(ZIG?ctNO$vp1dUQ2arw@Z)-+(FJje`bsNObp*+PnSzgh}&h=1IJ9X|hM@OZDfLFz035FEg7QpE`*hWAm@NnG1k=atNqwtYhsi zaf2>&a*2RBBBqv7$Y+A$41LTsQ=)-q`v#hg1Wndpb4x(+=MB=$IaciV=5aKAVtSu= z8Xl@3tjx(t?01l~Yu2LXDdB?-a7x1D;CyDU7;<9}JQEnYKe)I8&f$8|Ar@XJs1jkJ znF)>>UOCL0LZy3`}qC@n&Ub5SBN2m*PA5b zcE~yb)in55&kc%Z@HtZpr7}Rrg_bpZ;&($m2tGMygar5KjZl7qPtAk>ZvLNOSZ)u| z#fNs6n+;rjtU@|&CF(u<4)Lz3<8_2>aiw~hjQ30T{7B-aK(}?#KCLi-(T`c6>na;b zh}`RN4wVvid_EMPeB^;p;L(P+y9G!6C^^5d7Oud;^=Z_peYY2FOR|~AaTT;Ik|WJm zAGs*)?UzNH?}sdNEmR>9rGmq_uZN@N+|(X{0@Ae}YJ`)0)0hICDhvP~KAnxY0lGa?qu@K_& z=?l6$ZEtE7QVae>*f>3oQNcgQ>%;31S5YI@83Xq14n%emFL>-h?{&`O*ciNPKhh>?F7v^;NQ@`97oAhAKFL%EMzUx&_!09#2@kNp&jc5J0K9N|J5%7Z8sFq@a&e z;Li|%SL%Dol6E()njov8g zh$8tb<9Jy+fh~V5)1uos=$F+>A+euq0fKnhz0OncaOD$2mX8CbJa{q#HBE={Lg{8E zu|5fWJR;PAOClm%Z0abHabhZcQw!@i`~EM510-#Ig@T`d`2HB_mk(<;ZrlIeYnE+- z?dsh3&NfdQ&#GlU|4aKjJ5H+2L#afH&iP}TzF(!d>(L(C&4f$#Yc}1Kk|>CG&njv) zt^2#}PRU%|OlZ9!uc=1=$as_MwTafDz|pC|t70&;4cmFRP&fRP- zkI=V{IFh};Ek~L+Rz<2q{U4%L>!)dKZK^rAdDWHwe|7gP55_zMJ-BukHb^37YxyjX zT(@r!uIE43YYQ8R-x)JY3;z7~0>-DM0jpFQBodg|ibbIJ2tKu4RpHb}s+06UGu(5g zVxUmutz=@~uE&IQM?#Tb+o8{d^u^(8|2h^V5=HZ02tWa!5&`m=?*Y)z5LVa#<;)Rb zGUfpgYxYCt^w9=2HjjbKNwVK2j({#nq;x!0c+%1(muSdDgjxWswIo~AJpjcS!7~o@ zBovUG)j)fI2d*Nf>}@r>8i2%KWl0|`vvnXdAsaMlqUtJ>CFt8E6!$yWmRtbovqC~M z3qcK7_aWxX>egv|M`DecIL#A~a}@Z9qQ6aj=47|#Rxy}Oi_L~+=`TrT8F zX|Y;GevI=Gg0&Ke*86*C1~h!+N%8mLzA zVreA4GmWj`roihkz91`XfuqXReblyaA(t@Ca|4D{5&BMewM!-Ei-yllH5(#>!>>WS zjm;z2@3UDwY}dTyww(_;ok;Z7Ay1!|*zf4zxS|V7tyfl2SeO5hIaWHDjP`KMZ8~Wo zhZrd#P3_BuB@zG1Rp^u1tO-upxiQ*BU(R-!5s79{DPdg^n>kww2`1~%XXXF(3FiO( zs9Bxs`VH>IC&Bc=-v1mO9&{NUASKkuzdR3S4(+gX5H^B%_6{^iHhVQisq^1RaeE6x zVbk?RJ($TUXdNI88HCefe-_&6kladwD+nim2+s3}9Z+q##mcppXk-@D|7(1d7?)^V zvw~LL`>M!s!~lE+aV=? zAV;>)wVN1*S93kp2_FXIF&Y5kJb18#--Na%(*7lhaDD{YkLLz9d?-}l6X!G0=)%XZ zh_SHmn8|ms421+y<1+{^u7|?|=R?%o(jwJ`BwyC)8^Ecx{Ko1}s1@Pwki3>-K>a{O zs*L+ilH1I8&G-bDfCbgP$5=%VWK zYj;Y+`GnEj&_BS#L7h|0F3E%`B{OuXL2^$LD>t|wmLHh8gkCR^a$GxmOh+|SfXpZMltMuov48RjrF@G zAnw4dfXt)t)da>8YS=yp+jnX5V`2L$jn6n9F=Ghwj~$J~PQu!EI_t^w_cP9=8zdS< zMkZccKnAhk5oFB)&G4Hf>Jd$PW~EcKx^Uyn6KuPfPkS2cZJdnZM8kIiC-J{m&^Ti+ z8YK5_nc_I^B4o(FrG8@m1E9SvAF0k?CB;Qo^BX&TId_(Jzinshb5fU$cD#mzWSH~qf{M=Q=>ni#4!ZTg!xz!h z?*>S%LZva(=drhb;_(u?_|Tc;^a?fg(mT8|2XN~#&C5b*6mwyVs;OPl4l#MLrEDV( z^u;y~U6;2BGJ_QojaaeQH^jf@B)ppd#Q`LZZ^>)}8+kSI6}5?l2FbjutXw0F3>`J{ zB{g3^ybo)IfB~ys9s_@>=KMaRqKffhQ|y315;?JC245!H@X2 zO_b4^310)$Pn!rR2n`wV;=5%r$pO1!tp0*CRvM1O*=JF@cwwdG~1Sk$x zC7?&KeS9p1R#TRyKfU`E zRAH*_T+@I8wDnHN58J6WrSH2F#pO1g?;q;N_{1 z<>@{bAlno_xb{Wt1@E4)F8dx{J+>A@zKUO5#qJtBn5 zd^e!*ThAfX&8|56v##yjQ@|JLn}U7DzF{9Qb(em&MGTtJ*p={ zo{Anc90G^Lnjb%eazH`Nq7Oy;x!QX%dc#)Dmh8m2GV5#3DIt5IWg#~0-{E0hP8=g(p?`qw7wiL zdl*AT-i2w9>8(J`aE7DUXb|rros5os%<{ao{JyWx&P@@iA0qT9epYz$+jS33dhMt8 zs791J2pDO*R`hh+_w?GHC*nAO2)<@P$IKi?K69}gB1c1z#gtdu?yTnb`M5;Po`X%S zF&$pVUZ#|+M5BGEvAi$Hn5CR}Vt51j($&r2$rW{Y3y%0#F##9@@Hg4ZrVsnn+hnpD=dj4`?QB&etZnIl59(AfJTId9QT^d#zudie67< z8T+{~Lh#Q^1jz<-MVc#URz~jMkdY7VwyIA1Jip2j==@BNmM{Tb%37LltAm48(jLMm zAnts5YCQ)M+n2-e$|2M|_rm5+l457TTE$@E*8sDN1-;hGl5rZ^PJ}MdCE;0K28{b! z&@;m~+p4+-4-mGB@K0KB>VQqg0n-rZ-NnccU4p;Q&XtLG&}8c&;9tYuPK1+e6h8C269kOGk(r z%CyLWTp7OOs`wK3bHRr~$_T#B_SckiazDcu!-wIHPcN-rWp7K?miKfz;2AI8wp%A;g+YaV;_}iGabgMhUaMxtX?y+;31y{Z2lbpzW__i9s9=%5# zcqSJYqyF**a9SVUeTkzo692Bu-Dmpp?mlH&LJz#l>0Pvf)zh~HHkNg%0gcIa%MGeD zIXtd9{ja&wJz@vh8r&>p z!e=APM0hzTs$218?Zk{?)n>47@#u6lb^?t`4d?qxaclh?;Z5J6B~GtvLA&=?xthtJ zbcHkM4`zR5Rcdbp7JTq9_PIs|2e(Q#2`F zXMOC5rQB2l>w4~Fr25Nq7p~7v&YZ%(U_nc2efev@cIkUZ2#K7{bdR*M^yr#H?Qja3 zZa=lt#sSQNvz6|_3!uoe)eSFz`6ELyy3emuQ$X|3wfwx+1dcgXeu;-8<@eA4s>XWq zl^w-by^Gq9COMXPd|M5B@+F&|U+6=F;25f28y{owiVA~Ek(!lIP|9TDu?>gTSFg}w z``e`DUbq8M45^_9FwDBwt)R7i{u3g=D>0||_$0-YQsVz@b>H`NAKy5N<*((0v=iG= zUk;&6`}RpjwEFU}Ow>huK00S8E7_{#9BkM`_c4#oT;Lm>6qA(q5=W<~UaI6PGs|gh z_g&Zqx%rs{t+A)65rS2vA+QCmQf>EjOOlSx!}lHOC$iElEQ-4=RCh3u_pJ^kkBqXI zADZEn2;v@JPw9l#Fmt)@T7I)ekZs$qG(4#Q{|>z6p{YmMV=Of_T+fsgAvsouUBceX z48bPvuN}vdj)!=DTitlsmG1M<@kElXgNazN+`g>SE~SEpUp{z9*iE1Ffq3?wxYhAZ zCn>t=$yV)p7i8Tkb0YVC2Y>eDeRlyd=WV`_$MnZV4Tor!$u8xO@(V>t*Z_7#>KIIV z4)Qp6I02B$h}Nh!|Ild%@528S+jD$n0!M$mc)Q#!S9-QpXc_Z2oGRwEUfYObeG${P zd!4axg_eIywsyxq$G(a8tna>!$#4QdpZdHdB9ikGVXdTAxq5 zr}_N)33;&vu+*{zB1^Okz7Pl-;mt4S`~kd^?ZWo@eIGQJXs#N(WSeG?`IOX&SJo@`YXVP7C^u zmd&<_mCPZrZM9`_*eRKzB`x|FWbNL*Q8Jsg$H%cd@RVgr)tHEZA(NCcDmfGG++o)? zCJLRmIZ@{QaDB90hTuW-nbC~UXUwUAjYlOEeVP05m+*Fwh!%M@uIwB#HaNBsZuE55;d4GMSR5xp#_OW-7J9ah z9M6Kc;DEm)(nh4Q9Y^n@vh4ckB#D6Eh0g84Kb$JzGrx9e!{lJ!H4H_|GU_ynr6&_u z6@^B{%wO>w)J05Ye0wK__s3WwM;0JUg1lB(a6_LSem8y})II-A1^hV;s1fbCAgj8| zY4YP1`K)B>{LhRSFu#d^^vmj%M(%W3WrJa*k5K0gjB5Cs`TmAxI_bm?;H zREnizEriZ0i|9Bmt|$Z_YJa`Aq>3PkZ&ZR*gA4#$Dj;5d?hjM?bbwb z6?Ly{4F6B zLaxp9B2HO)9lOK6M9^aFr|_GZ@KTZg1x7G@_kIQ1VaZT-HH%7&~ z!+M4!S-Cn%&RRRE%(a~GUg9qw<%dvhMtOB-6*3o|7X}Y(qUo1QWf-<+a`_5aO88ZQ#80HE!}$#bbY^q#@}adE$^xDT%Dpu4Vf=>TC`w%PCp5( z+gQLg3hQJXz{eC{V3!Nlt&Tk?ytE^l4JqpxHEMfVg>SBB2(aefAw>y9=wFa0dRd!Q zPmSvsO3@v9`p4GeFa8AR>d_u!dNZ3jx}8&_(HYU|c@WGR-}h>Fd<}rTrC|X!j92`_ kAdCNg{zo~W)xIcsX!6pGqD?RnMUY<(Tl|!Dkbdd^0S)xQp8x;= literal 0 HcmV?d00001 diff --git a/frontend/src/components/index.ts b/frontend/src/components/index.ts index 056bd5a..841ac6e 100644 --- a/frontend/src/components/index.ts +++ b/frontend/src/components/index.ts @@ -3,5 +3,13 @@ import Navbar from "./navbar.component"; import Sidebar from "./sidebar/sidebar-content.component"; import EPGComponent from "./epg.component"; import ThemedSuspence from "./themed-suspence.component"; +import ServerDetails from "./server-details.component"; -export { Navbar, Sidebar, HLSPlayer, EPGComponent, ThemedSuspence }; +export { + Navbar, + Sidebar, + HLSPlayer, + EPGComponent, + ThemedSuspence, + ServerDetails, +}; diff --git a/frontend/src/components/server-details.component.tsx b/frontend/src/components/server-details.component.tsx new file mode 100644 index 0000000..0d3114e --- /dev/null +++ b/frontend/src/components/server-details.component.tsx @@ -0,0 +1,107 @@ +import React from "react"; +import { Input, Label, Button, HelperText } from "./widgets"; +import { useForm } from "react-hook-form"; +import { BiRocket } from "react-icons/bi"; +import { ApiService } from "../services"; +import { toast } from "react-toastify"; + +const ServerDetails = () => { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); + const onSubmit = async (data: any) => { + console.log("server-details.component", "onSubmit", errors); + const validated = await ApiService.validateCredentials( + data.server, + data.username, + data.password + ); + if (validated) { + localStorage.setItem("server", JSON.stringify(data)); + window.location.reload(); + } else { + toast.error("FUCK YOU INVALID CREDENTIALS"); + } + }; + return ( +
+

+ XTream Codes Details +

+
+ + + + + + + +
+
+
+ ); +}; + +export default ServerDetails; diff --git a/frontend/src/components/sidebar/mobile-sidebar.component.tsx b/frontend/src/components/sidebar/mobile-sidebar.component.tsx index 5bacf8e..f06629a 100644 --- a/frontend/src/components/sidebar/mobile-sidebar.component.tsx +++ b/frontend/src/components/sidebar/mobile-sidebar.component.tsx @@ -1,14 +1,25 @@ +import { Transition } from "@headlessui/react"; import React from "react"; import { SidebarContext } from "../../context"; import SidebarContent from "./sidebar-content.component"; const MobileSidebar = () => { const { isSidebarOpen } = React.useContext(SidebarContext); - return isSidebarOpen ? ( - - ) : null; + return ( + + + + ); }; export default MobileSidebar; diff --git a/frontend/src/components/sidebar/sidebar-content.component.tsx b/frontend/src/components/sidebar/sidebar-content.component.tsx index 1f05483..eca672b 100644 --- a/frontend/src/components/sidebar/sidebar-content.component.tsx +++ b/frontend/src/components/sidebar/sidebar-content.component.tsx @@ -1,79 +1,80 @@ import React from "react"; -import { NavLink, Route } from "react-router-dom"; +import { NavLink } from "react-router-dom"; import { Channel } from "../../models/channel"; import { ApiService } from "../../services"; const SidebarContent = () => { const [channels, setChannels] = React.useState([]); - const [filteredChannels, setFilteredChannels] = React.useState([]); + // const [filteredChannels, setFilteredChannels] = React.useState([]); React.useEffect(() => { const fetchChannels = async () => { const res = await ApiService.getChannels(); if (res) { setChannels(res); - setFilteredChannels(res); } }; - fetchChannels().catch(console.error); + fetchChannels(); }, []); - const _searchChannels = ($event: React.ChangeEvent) => { - const searchString = $event.target.value; - if (searchString) { - const filteredChannels = channels.filter((c) => { - const result = c.category_name - .toLowerCase() - .includes(searchString.toLowerCase()); - console.log( - "sidebar.component", - `Category Name: ${c.category_name}`, - `Search String: ${searchString}` - ); - console.log("sidebar.component", "Result", result); - return result; - }); - setFilteredChannels(filteredChannels); - } else { - setFilteredChannels(channels); - } - }; + // const _searchChannels = ($event: React.ChangeEvent) => { + // const searchString = $event.target.value; + // if (searchString) { + // const filteredChannels = channels.filter((c) => { + // const result = c.category_name + // .toLowerCase() + // .includes(searchString.toLowerCase()); + // console.log( + // "sidebar.component", + // `Category Name: ${c.category_name}`, + // `Search String: ${searchString}` + // ); + // console.log("sidebar.component", "Result", result); + // return result; + // }); + // setFilteredChannels(filteredChannels); + // } else { + // setFilteredChannels(channels); + // } + // }; return ( -
- - Xtreamium - -
    - {filteredChannels.map((channel: Channel) => ( -
  • - - `inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 ${ - isActive && "text-gray-800 dark:text-gray-100" - }` - } - children={({ isActive }) => { - return ( - <> - {isActive && ( - - )} - {/*
  • - ))} -
-
+ channels && ( +
+ + Xtreamium + +
    + {channels.map((channel: Channel) => ( +
  • + + `inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 ${ + isActive && "text-gray-800 dark:text-gray-100" + }` + } + children={({ isActive }) => { + return ( + <> + {isActive && ( + + )} + {/*
  • + ))} +
+
+ ) ); }; diff --git a/frontend/src/components/widgets/button.component.tsx b/frontend/src/components/widgets/button.component.tsx index b5a6177..38a382f 100644 --- a/frontend/src/components/widgets/button.component.tsx +++ b/frontend/src/components/widgets/button.component.tsx @@ -65,12 +65,12 @@ const Button = React.forwardRef(function Button(props, ref) { return !!icon || !!iconLeft || !!iconRight; } - console.warn( - hasIcon() && !other["aria-label"] && !children, - "Button", - 'You are using an icon button, but no "aria-label" attribute was found. Add an "aria-label" attribute to work as a label for screen readers.' - ); - + if (hasIcon() && !other["aria-label"] && !children) { + console.warn( + "Button", + 'You are using an icon button, but no "aria-label" attribute was found. Add an "aria-label" attribute to work as a label for screen readers.' + ); + } const IconLeft = iconLeft || icon; const IconRight = iconRight; diff --git a/frontend/src/components/widgets/helper-text.component.tsx b/frontend/src/components/widgets/helper-text.component.tsx new file mode 100644 index 0000000..ad225af --- /dev/null +++ b/frontend/src/components/widgets/helper-text.component.tsx @@ -0,0 +1,41 @@ +import React from "react"; +import classNames from "classnames"; +import { defaultTheme } from "../../constants"; + +export interface HelperTextProps extends React.HTMLAttributes { + /** + * Defines the color of the helper text (the same as with Input, Select, etc.) + */ + valid?: boolean; +} + +const HelperText = React.forwardRef( + function HelperText(props, ref) { + const { children, valid, className, ...other } = props; + const { helperText } = defaultTheme; + const baseStyle = helperText.base; + const validStyle = helperText.valid; + const invalidStyle = helperText.invalid; + + const validationStyle = (valid: boolean | undefined): string => { + switch (valid) { + case true: + return validStyle; + case false: + return invalidStyle; + default: + return ""; + } + }; + + const cls = classNames(baseStyle, validationStyle(valid), className); + + return ( + + {children} + + ); + } +); + +export default HelperText; diff --git a/frontend/src/components/widgets/image-fallback.component.tsx b/frontend/src/components/widgets/image-fallback.component.tsx new file mode 100644 index 0000000..32efd95 --- /dev/null +++ b/frontend/src/components/widgets/image-fallback.component.tsx @@ -0,0 +1,18 @@ +import React, { SyntheticEvent } from "react"; + +interface ImageWithFallbackProps + extends React.ImgHTMLAttributes { + src: string; + fallback: string; +} +const ImageWithFallback = ({ + fallback, + src, + ...props +}: ImageWithFallbackProps) => { + return ( + (e.target.src = fallback)} /> + ); +}; + +export default ImageWithFallback; diff --git a/frontend/src/components/widgets/index.ts b/frontend/src/components/widgets/index.ts index dd974bf..fd6ec66 100644 --- a/frontend/src/components/widgets/index.ts +++ b/frontend/src/components/widgets/index.ts @@ -2,7 +2,19 @@ import Avatar from "./avatar.component"; import Badge from "./badge.component"; import Button from "./button.component"; import { Dropdown, DropdownItem } from "./dropdown.component"; +import HelperText from "./helper-text.component"; +import ImageWithFallback from "./image-fallback.component"; import Input from "./input.component"; import Label from "./label.component"; -export { Avatar, Badge, Button, Input, Dropdown, DropdownItem, Label }; +export { + Avatar, + Badge, + Button, + Input, + Dropdown, + DropdownItem, + Label, + HelperText, + ImageWithFallback, +}; diff --git a/frontend/src/components/widgets/input.component.tsx b/frontend/src/components/widgets/input.component.tsx index 9d6aff4..3c02a9d 100644 --- a/frontend/src/components/widgets/input.component.tsx +++ b/frontend/src/components/widgets/input.component.tsx @@ -6,13 +6,23 @@ export interface InputProps extends React.ComponentPropsWithRef<"input"> { valid?: boolean; disabled?: boolean; type?: string; + formControlName?: string; + register?: any; } const Input = React.forwardRef(function Input( props, ref ) { - const { valid, disabled, className, type = "text", ...other } = props; + const { + valid, + disabled, + className, + type = "text", + formControlName, + register, + ...other + } = props; const { input } = defaultTheme; const baseStyle = input.base; diff --git a/frontend/src/containers/layout.container.tsx b/frontend/src/containers/layout.container.tsx index a09bfec..40a44db 100644 --- a/frontend/src/containers/layout.container.tsx +++ b/frontend/src/containers/layout.container.tsx @@ -2,7 +2,7 @@ import React, { Suspense } from "react"; import { useLocation, Routes, Route } from "react-router-dom"; import Header from "../components/header.component"; import Main from "./main.container"; -import { ChannelPage, PlayerPage } from "../pages"; +import { ChannelPage, HomePage, PlayerPage } from "../pages"; import ThemedSuspence from "../components/themed-suspence.component"; import { SidebarContext } from "../context"; import Sidebar from "../components/sidebar"; @@ -28,6 +28,7 @@ const Layout = () => { } /> } /> + } /> diff --git a/frontend/src/containers/main.container.tsx b/frontend/src/containers/main.container.tsx index 2e35f2d..04f386c 100644 --- a/frontend/src/containers/main.container.tsx +++ b/frontend/src/containers/main.container.tsx @@ -5,7 +5,7 @@ interface IMainProps { } const Main = ({ children }: IMainProps) => { return ( -
+
{children}
); diff --git a/frontend/src/index.css b/frontend/src/index.css index 9a1a29d..5ed3df8 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -3,3 +3,50 @@ @tailwind base; @tailwind components; @tailwind utilities; + +html { + scrollbar-width: thin; +} + +.scroller:hover::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +.scroller:hover::-webkit-scrollbar-thumb, +#aside.scroller:hover::-webkit-scrollbar-thumb { + @apply rounded; +} + +html { + @apply overflow-auto; + scrollbar-color: #9ca3af #e5e7eb; +} + +.scroller:hover::-webkit-scrollbar-track { + @apply bg-gray-200; +} + +.scroller:hover::-webkit-scrollbar-thumb { + @apply bg-gray-400; +} + +.scroller:hover::-webkit-scrollbar-thumb:hover { + @apply bg-gray-500; +} + +html.dark { + scrollbar-color: #374151 #111827; +} + +html.dark.scroller:hover::-webkit-scrollbar-track { + @apply bg-gray-900; +} + +html.dark.scroller:hover::-webkit-scrollbar-thumb { + @apply bg-gray-700; +} + +html.dark.scroller:hover::-webkit-scrollbar-thumb:hover { + @apply bg-gray-600; +} diff --git a/frontend/src/pages/channel.page.tsx b/frontend/src/pages/channel.page.tsx index 8d2fac7..6624a35 100644 --- a/frontend/src/pages/channel.page.tsx +++ b/frontend/src/pages/channel.page.tsx @@ -4,12 +4,7 @@ import { AiOutlinePlayCircle } from "react-icons/ai"; import { Stream } from "../models/stream"; import { convertEpochToSpecificTimezone } from "../utils/date-utils"; import { EPGComponent } from "../components"; -import { - CastButton, - CastProvider, - useCast, - useMedia, -} from "../utils/chromecast"; + import { toast } from "react-toastify"; import { Table, @@ -19,16 +14,13 @@ import { TableHeader, TableRow, } from "../components/widgets/table"; -import { Avatar, Badge, Button } from "../components/widgets"; +import { Badge, Button, ImageWithFallback } from "../components/widgets"; import { ApiService } from "../services"; const ChannelPage = () => { let params = useParams(); - const cast = useCast(); - const media = useMedia(); const [streams, setStreams] = React.useState([]); - const [currentVideoUrl, setCurrentVideoUrl] = React.useState(""); React.useEffect(() => { const fetchChannels = async () => { @@ -41,21 +33,6 @@ const ChannelPage = () => { fetchChannels().catch(console.error); }, [params.channelId]); - - - const _cast = React.useCallback( - async (streamId: number) => { - const streamUrl = await ApiService.getStreamUrl(streamId); - if (streamUrl) { - await media.playMedia(streamUrl); - } - }, - [media] - ); - - const handleXHR = (...args: any[]) => { - console.log("channel.page", "handleXHR", args); - }; const playStream = async (streamId: number) => { const url = await ApiService.getStreamUrl(streamId); if (url) { @@ -125,63 +102,61 @@ const ChannelPage = () => { } }; return ( - - - - - - Channel - Type - - - - - {streams.map((stream: Stream) => [ - - -
- -
-

{stream.name}

-

- Added: {convertEpochToSpecificTimezone(stream.added)} -

-
+ +
+ + + Channel + Type + + + + + {streams.map((stream: Stream) => [ + + +
+ +
+

{stream.name}

+

+ Added: {convertEpochToSpecificTimezone(stream.added)} +

- - - {stream.stream_type} - - -
- - -
-
- , -
- {false && ( - - )} - , - ])} - -
- Loading epg}> - - -
-
-
+ + + + {stream.stream_type} + + +
+ +
+
+ , + + {false && ( + + Loading epg}> + + + + )} + , + ])} + + + ); }; diff --git a/frontend/src/pages/onboarding.page.tsx b/frontend/src/pages/onboarding.page.tsx index 50ddb63..0d03144 100644 --- a/frontend/src/pages/onboarding.page.tsx +++ b/frontend/src/pages/onboarding.page.tsx @@ -1,8 +1,6 @@ -import React from "react"; import ImageLight from "../assets/images/love-tv.jpg"; -import { Button, Input, Label } from "../components/widgets"; +import ServerDetails from "../components/server-details.component"; const OnboardingPage = () => { - const _setupOnboarding = () => {}; return (
@@ -22,34 +20,7 @@ const OnboardingPage = () => { />
-
-

- Login -

- - - - - - -
-
+
diff --git a/frontend/src/services/api.service.ts b/frontend/src/services/api.service.ts index e42ef68..3fbc4ab 100644 --- a/frontend/src/services/api.service.ts +++ b/frontend/src/services/api.service.ts @@ -1,8 +1,31 @@ import http from "./http.service"; import { Channel } from "../models/channel"; import { Stream } from "../models/stream"; +import axios from "axios"; class ApiService { + public validateCredentials = async ( + server: string, + username: string, + password: string + ): Promise => { + const client = axios.create({ + baseURL: process.env.REACT_APP_API_URL, + headers: { + "Content-type": "application/json", + "x-xtream-server": server, + "x-xtream-username": username, + "x-xtream-password": password, + }, + }); + try { + const res = await client.get("/validate"); + return res.status === 200; + } catch { + return false; + } + }; + public getChannels = async (): Promise => { const response = await http.get("/channels"); return response.data; diff --git a/frontend/yarn.lock b/frontend/yarn.lock index dbca9d6..ac64163 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -7149,6 +7149,11 @@ react-helmet@^6.1.0: react-fast-compare "^3.1.1" react-side-effect "^2.1.0" +react-hook-form@^7.29.0: + version "7.29.0" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.29.0.tgz#5e7e41a483b70731720966ed8be52163ea1fecf1" + integrity sha512-NcJqWRF6el5HMW30fqZRt27s+lorvlCCDbTpAyHoodQeYWXgQCvZJJQLC1kRMKdrJknVH0NIg3At6TUzlZJFOQ== + react-icons@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.3.1.tgz#2fa92aebbbc71f43d2db2ed1aed07361124e91ca"