From d847c97bec3320846e6036c1c6de304f6409dafb Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 18 Nov 2024 17:12:58 +0800 Subject: [PATCH] upd: webpush Deskripsi: - database push notification - update package - memasang webpush NO Issues --- package.json | 4 +- prisma/schema.prisma | 15 +- public/icon-192x192.webp | Bin 0 -> 89535 bytes public/icon-512x512.webp | Bin 0 -> 89535 bytes public/wibu-push-worker.js | 121 ++++ public/wibu_worker.js | 77 --- src/app/(application)/layout.tsx | 2 + src/app/api/get-subscribe/route.ts | 6 - src/app/api/push-notification/route.ts | 44 ++ src/app/api/send-notification/route.ts | 70 --- src/app/api/set-subscribe/route.ts | 25 - src/app/api/unsubscribe/route.ts | 11 - src/app/icon.tsx | 39 ++ src/app/layout.tsx | 24 +- src/app/makuro/_lib/ButtonKirim.tsx | 28 + src/app/makuro/_lib/ButtonSubscribe.tsx | 32 + src/app/makuro/_lib/MakuroProvider.tsx | 5 + src/app/makuro/_lib/UserSub.ts | 7 + src/app/makuro/_lib/state.ts | 3 + src/app/makuro/api/kirim/route.ts | 25 + src/app/makuro/api/sub/route.ts | 21 + src/app/makuro/kirim/page.tsx | 22 + src/app/makuro/layout.tsx | 17 + src/app/makuro/terima/page.tsx | 24 + src/app/manifest.ts | 18 +- src/app/test/_ui/RealtimePage.tsx | 37 -- src/app/test/page.tsx | 11 - src/lib/PushProvider.tsx | 28 + src/opengraph-image.tsx | 32 + yarn.lock | 801 +++++++++++++++++++++++- 30 files changed, 1267 insertions(+), 282 deletions(-) create mode 100644 public/icon-192x192.webp create mode 100644 public/icon-512x512.webp create mode 100644 public/wibu-push-worker.js delete mode 100644 public/wibu_worker.js delete mode 100644 src/app/api/get-subscribe/route.ts create mode 100644 src/app/api/push-notification/route.ts delete mode 100644 src/app/api/send-notification/route.ts delete mode 100644 src/app/api/set-subscribe/route.ts delete mode 100644 src/app/api/unsubscribe/route.ts create mode 100644 src/app/icon.tsx create mode 100644 src/app/makuro/_lib/ButtonKirim.tsx create mode 100644 src/app/makuro/_lib/ButtonSubscribe.tsx create mode 100644 src/app/makuro/_lib/MakuroProvider.tsx create mode 100644 src/app/makuro/_lib/UserSub.ts create mode 100644 src/app/makuro/_lib/state.ts create mode 100644 src/app/makuro/api/kirim/route.ts create mode 100644 src/app/makuro/api/sub/route.ts create mode 100644 src/app/makuro/kirim/page.tsx create mode 100644 src/app/makuro/layout.tsx create mode 100644 src/app/makuro/terima/page.tsx delete mode 100644 src/app/test/_ui/RealtimePage.tsx delete mode 100644 src/app/test/page.tsx create mode 100644 src/lib/PushProvider.tsx create mode 100644 src/opengraph-image.tsx diff --git a/package.json b/package.json index 095601e..35dedb1 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,8 @@ "rrule": "^2.8.1", "supabase": "^1.192.5", "web-push": "^3.6.7", + "wibu-cli": "^1.0.91", + "wibu-pkg": "^1.0.63", "wibu-realtime": "bipproduction/wibu-realtime", "yargs": "^17.7.2" }, @@ -77,4 +79,4 @@ "keywords": [], "author": "", "license": "ISC" -} \ No newline at end of file +} diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 9a702b6..aa9eed7 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -124,6 +124,7 @@ model User { DivisionCalendarMember DivisionCalendarMember[] Notifications Notifications[] @relation("UserToUser") Notifications2 Notifications[] @relation("UserFromUser") + Subscribe Subscribe[] } model UserLog { @@ -494,11 +495,6 @@ model BannerImage { updatedAt DateTime @updatedAt } -model Subscription { - id String @id @default(cuid()) - data Json -} - model Notifications { id String @id @default(cuid()) User1 User @relation("UserToUser", fields: [idUserTo], references: [id], map: "UserToUserMap") @@ -514,3 +510,12 @@ model Notifications { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } + +model Subscribe { + id String @id @default(cuid()) + User User @relation(fields: [idUser], references: [id]) + idUser String @unique + subscription String @db.Text + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt +} \ No newline at end of file diff --git a/public/icon-192x192.webp b/public/icon-192x192.webp new file mode 100644 index 0000000000000000000000000000000000000000..de7639def229078c0ff8cf3d90be83dc3ac48cd4 GIT binary patch literal 89535 zcmd44^_OMUxh`Dp?(XjH?(XhhyWG8Y6&6U46M}~TK@tdu5FiNl*)ANZbUy|dOXnltXWKYn98ugrJJob$D{x@y<%j{2IK|9azp0A^;r)fH_$ zZFzkTW@ct?AQ;Vsl{dB3VH9d+W-cc$i6}nz3X}~{B*-RNtR8Xy{KfsE3b)yDs9zPe z$2`FcTA;cC)QRM-4ok>)p7+{;hz0@aBETKC!SZCtrCN!4nvY^oT~$@u;|}H0Z64j; z@z%+Maz;;r$W91@sNj{LzBw@GT(B9CJqX}lx;?>~Km}W1*(ZZ(C_wMqBr z3y-;)7*H=r#kVvZy5A6(V5c}s*F~{|;K_sPinF(2kk4DwZ9Znz+_EFc!^{sH$hr2q zDCREPnU2hkv`jJdr$RDoTWz6AGCppFJ$r?b%vhDzJqp0xf`CPp*?g zKI$$Q#gsCrQy?EX2F`^7r6pk9)@AJsjZDW3F3l?gpE>^v@^UbG{djxO$*c>Cz+vpY zhv|4Ar5-FFwA|M$7I3v6wG11vpZLNWLqA>x3>VJF`im-j$gHZ7p0VKW1-lU3fWZ3w z2VPA=ik zPux&9$=d?8#dVh+iQi@$y7H2kz|Y-1q3ckVS=96|@b+D1hPk5#j_NmJzPwAU-~~(u z9o&s|=5l$7QB2$qkOyMZx(=f@ZcB?+x>3vJOzy}Yl#}B*2NC(!O>zQTDa%DghoOs{ zE5G_$eAuPm$0e{+oGWbPaH_V=f?>Ugk8z=H63hZ-#R9W~bPd zA+8iCZ)d^)ftw=14=1$Q*aC}r$MdhY2AOMK@L{K9GVA#4$Ev^1W{b@Xg7Y#GiS>>w z(l8M4;jJQ*)hc2hh@7z_Pr) zcn(4(>7_@DF;H%{soLlBA&5&fwHpjtIt<|5tX1IRql|PQXw-gSKPeu{YyoS@4kV~# zqIo$oGYSJMcdowTCw3anJqBhS`1a4lMl6II@@Qs1y}A47=>omz0&T*U{_C0f*L;aZ{o2S?pq?V{_i61E5WX) z)1aE-t%5W*xd3xa)>bvdu)1{XC>W!pU{0C{8mi#hfubOh!j0`Lsqju!>RT9ax)`P> z?`nC>%4N=Y*TwrCWiD_<%nI*rFslt7SuuHx4jkG6o3RWU|MJNOXe=39zwsIF*je>7 z%?lU<>`ivfU_39k&z3DM`*?%Z>bwR9Y=wilb0ZO;P*D9WH*>hI62#6&ZCcf?4G#Y0 zwY$N+7zY*^XBY%AQX7%lE|kY-YSvt|F^(jv8d=T5Kzn2U?-Dc)2i1fbEX_txglbeO zBWA2C|M~PwunU5s=ugK!8RgrHOfdOv8d1 z7J$)1g1JS=$woti7k#z(=FMWZVl9k;dfB#FR07{NZ7>+8 z?uuqXE%`5Ac$6nsIMSnWX7OMDf;au^!!LsaOgSJ(ZH1@OWq*0SGb(X^yZv^x<3=VF!^Mqqg=rv9 z(5x>lD%IKaJ2@Ns((cK=O8)Yrr`mZvFfkx^FotSl#V||Pb+>W}bRPH0V&L$zm-ni8RpF*`D|Gj_ zp5H!#90Aqx;J-b6H#?P%(p*PQp|bVz%Um}vaJQ9HTudz}vb98PTtcy^8_aE0Or8aF zGN5k8BmsOu`=BjQFi5~ciieN*7ONnj^Wo8l$yW^(Fett&UlM#+WO4pk+_o24y6wTvll&ER!D zhhuRJ(%6O#__Fd`NvXxjKL%9;P*sa_bkspp1-m51NsHv^arsvXcdlwnjx|P`L0Q?A zQB-mV1M33{cc>8??-!UadN71($}Vf=X*n1L;d$~-ABREtnw=ckj#a*1*Oq_gNzQp1 z2N)PY+;XPbG5G9098kuS8$JG4Hr@b%4FREL4Uj9_GDhZ z;YTk6ZXzrfM24P!vKkssVX`pU8x1OjQ+uo0Hx0>suyMgUI_sdS36dfk#}AoM7Ti0) zy8$C6HI=yoEQbcvv^%X%1ER~{I9WH^ZHGmM z@0FW*G(E(1iHjKi{CnW6IC8!m#m&?}RmBf4KP%FbYk;M_&Q3+n?05&tc|Q%mI->leJHhkf_^9AsbVOEOcv?AWYGz@? zqTIooi*9ksUr^0KPIXP@DjB&jF@UQ+%zX#~n8975GeOuJq8LCvAOKFXmSAO1r&l#L ztUA)rP5*ASfTgB_>EP2+pvq-lMhkQK=^}#DKhs$|% zmvR%dk8kV_>vxAT&6WUs^ti~0*nQq$mXYas=lgTZyN%?d=+%< z-|ckGZW?{i9aR0{cOiY_z-&O7(O^Igm$p$1#;sc#z;w(+z5QBhR<1s_XYmZO6uAY# z*=HbAxkep%rYj~&2O73&!Mbl!F z;#J=>RHglZYKQv|Z_NN_HZW+>Ab`na2Rf)@7X=#BGM%_Rfj`797uLfDF{FA)XYeNN8QtJK8_-r{efgJA@oELm8Qp7gz^_9ZCj}Z<2Ra6s zM{O$HP!Ee3kZDIBqkak$X8e$S4p$kW+c{fAp9&1!1B7t{4ks^54j7Cu8U+i=qtM$y z*I_`$;l;jZz6W*D{;1)@?`%Np0p$f|yQ=o*pt2vdEd!)`Y>V@rh|YO5msIPy#H2)8bfD>6eZ7c8Iu)>!w>-L9@x~j3xz(;Q;wBG zhWCFX3b;zsRz^&~n*t1NwCY{s{)~H4r0Fhe81GJM52uqid{}_NxuFc+%k}*S#)`Sp zJhAKi&EI5Z4a$h_SzQLB9|Y|iMNk&yp_Y@Q+ijo?u^fS^M)g>gArApQB7CCf(*fqk6%e{hCajvu(f{CIL@zJ$FBN*gy*PL}sGk zunF?B`wqYQKBTIR8ad={axe^^Kcr3wqz~A=>Dnf3ZHoab&~{UF36Bh5i<;QP7;#Zd-h5Wb9)T}gWHLiw6wa&T6N z!#QSwT>#h|h-;?fvs6t%Ra)qj+7?Wuk(=Po=l*3Pw;*$!_g!jWj7Gh{fzF*cdeC4f@__FD&J!xgj6zRm z5O{%Fmgy-4V>M_}Et59^zWffDd%&@i_UpQ$fXw-?ehQ023B5_*1L4}c;s`CI>bYz# zmny(e*G&A^Po7Z@UllWW!$5-}$no6wCb*vX>=8L&^8AL!;T%H@c(I%vB4e{jrs|n{9{o!eJ;8zkPBe9SxXUHHxy#c%4Q$2H|~c1!D7EN)YAE zhvT1_q3IYVV9IP%YlSnLY&k=GIEOMAcr}W*DFIxB2qcq(j#WKV+5g{Y6K?KmpwX zBt+Yak~K3k%KNDExB`Ha&=2`;LmxaWCUCkFVD2!b(m`kL1@mtM)8VYI3nmpd&jME_ z5um)rEXe-oHtUIog3G^xWF}g~ zfBiEx9bF!HD96F|7r*QghdPW^rp~b&13?DWv7y(w@(EQy&o6mxfCF4g;8*`D1D(4q zuynaBpt(V0=!8hs<~(Jj^Du4@NT?ENx2?iv#k|(x0?p~-&9h9aW!;(y&0qUDEfoEA z)YN#VvrSK3Kz=6mW-uyl0kC z3=TDPL>*lwIIRASjZS8++w#q!0JNQ;{}7ES4kU(avEasw zXtJFB==*Y{&e5k}C5F$g>tKnodXm!J=N|-PLle|ELWY7ezGk@#n6CETyh!;Bn&*LP zb_JfC1pj zB;1^pf$&P+6yPd1zxiX?diD>sHl{R_1K`edbguA(Y8hv;tF4WgR^q@N27~HB>T+ld z(58*{n;;KXJvXhx#Wt*)Y1Ls5mY3MuW6Z8g{5n zCYa{OQB|SL{Sc4?h(S;(&3@#>@TE4D7$C;Y+N!!CYrC}{!K+I9?DtjL58-hDP>Hai z94E%9K9R>Q1&h$QqmFLg2^j3wG)|MrQmZW2?zRh6rDS{BJaaX4MkSRoHz<1shCPrs zcfjZfwu^Y3F?9{RUnNH^^i3C2nW=iVW_qZi=c3tDr<#BF1P(2?TiTkZw635@hxu1)T`BTX43KF=E_}+Qh|lGDaM2p zk?by|m27pKr$~${yo?vXat3m|)TQ1S@C;U(bsaAQ=yx5nTmo}W2M-5wJr>-(fSav% z+x+mgP=-CUPprkJ6WB%@!@we0Du7BJXmP{585bW6iq!_z%o)J%a9=GMgS}Ii+LpnP zj2}-zWHRD$e|zjE2q07h@1vgksr0?mndibGB0zk+?SKGY4|IUkig;b~$ww@DS25bk z17m6qgG%0dkXrScN(-igy%moDp4v?Gb*~TIltRA<_?o9JddX4M5Q|o=0vfvqaQ<~L zZl3#d^-`g*#9*c3;{6bUBN3l*%SonR=J#T_dGb4o?Bg>}$!VYd6tbQj6xi`)>@U8M z8K6ANL^)vAq=EqEu@1+WOAqq|HViEp&tS6 zGMhO+nwX(|cC)(1)Aw-8zm7q;aw{0XPRtGS8WoXTsQztJ;6M)h?+nNjr2QtOejl38 z;dVVl5ibRtYQRXR5|d4*J~PCoI>mbyDqTN6;#AIz8NKvy#vfm}jR|4xSlYC5=8;xa zNUm``bnwMnnD@gBC!l(A&DqyHy|`ZH6maMdW?tRnUCK<@{N(p4-;MggXW7Ko077Vq`!JhAa#LZ+!8o_KYLOttpXZt8%c&9Qu%0Ca1K~qKqo1 zirjJRP)43y6XOK1*BV9D`CuE=A<%49Rx!lMC$xI~IxqhSV=hnoM}YQwr{H}Ift?DG zy=*Pr0~>#Qf(+7&VKckxSV4dHu;J4j)2_rZj_PmN*)_@VLn@Os!lOy`RzeTi&G(k z9zT#}&s76UBEb9k0Au>+va&YT4CSuei4k=9$#9m{L0;J3p1*_sR4vI=EZ#6$7lQ#o zAeZF*l0W|ZUYbXS=p~?8#Q8^$M=ZH|z?-FXAiD6p|M`>iwxO$W%=V%(MmwVEynT)FT+cDSy>STOr! zgOkdPlOMD4$qS5UaV>EPG79zM3S0YRWXTw$`KSw3Q5X0ea!NNj1)P2VWwc-cX&B;iTE)^0kzBqUbxrHQ%u`?iR0>ihYYi2F57LnU>^why4BTOA;RgTPLRbkLLc?qKr zuwBK8n#%QY8r}{lXO;-~bg;O16ZvA!pTGC8rRym4diG`=7DHb?wrk*dHdltByG7OA;3m^aEv*=8h>c2#{?r664Cq(k;+?z11a3~h zSTn#>@^iodI%)jsT`~xRa0oc;<{g30jR)`7Qg1t+SQO=&L>7)sl1%C@W@VUAzYmaife4Febtvg8na= z1f!yZRjASun%W{XriCE1zstOg@dt8KkHLdoTrKo4i2-S zJqIlPs@>tjSvhFrypGkp8&l*us9?dWv=#k?S{9EEpTlc6#_}NDO@{&zAfN7dzao{z z7^=vO7Redc@r%FH{(3>It*VQE{1V2g>Ap6;$xwXSyU)I^nojC&_YN6U)q47r z(jXc2sGgp7(EiCyC5!O`>q@x?9kr( zug$7kCo^tpYF{~rWzZ4NRJ!^kOG!tvYBNmp-dk^^RDtK-Zv z^8_;sGm9dNY?VmbUq;F)?Eh>asb+M!imX?#QI3X+V9=E+2JquGT@^)jYSkjIJ9yo2 z9AhTr$41nk1SUq7RdRUznOUE%YAp7PW!qKt|N zz0RzbciP%{dI0_UQ&KOy0qZD;?V?m2KGG5e2JI7(kb-FlOML|8JTC@V6ic8`8Gb_( z6Yu_iK?sf=sTzk$2XRe;QV|PB$53WLxu9<(0gde-hAR~Wm^x*o7_Q^I=@Hlbjn0Mf z=oc@{A0?@fMC(^^ZeLI+Nb?!bI9B-qmG?Uho(J%ea-uD_FmA8+HMn-3n3{Lj%fr+VS-PM{2#CBz!hJW$f%t#q6R?Q^0bbp)2>c%^|cucBar4{N-wc|{?J#y5Y4|qB(nkd=bb;HTZ@xIcvE1#5Uj~< z)lX%IRaaekc>DRAwu7S*7}Q868E^mj%U}S*kkR_??=Ropo<0ISq7f`^77Qq5#_xGE z_5zERPAIjElz_25;5{1Iodzs+-0e2$F(wt=?<=5o_T0Y3(DsZ-O@nR%fD z1z|(_p$c9lC|DjE_6^f+$SLzzBd<-_N| zzK!D?)+ft*ZF@OshYA~e=7m>!w1gYTcUrgM8_v1g!1}}J!JI5Gi}a47L`Z-I{ME}n ztWLi49QCl1PX{G)dq9T>#;a6RKXZ}u%yaIk>g12U!i!3I-V}%xY-=nl4^XpU$P5!W zRdRR0A8-3L_;^atculj)m3{`M*DA5HkXKsHmTu)&LkR={|NiXH!8s}L$?IShW%Sn9 zKN8ad1U;N4LuRv|sN4>-tPynfhsCTodLHQUWzHoJfQ5?%+*HG#^PIfG{h4XLuL3!_ zCx7b~*)5hhHQj~Rm`--;w4_N}Xq?1>_Xb$4X_p`Q@KI*z;zo~Hg>Sh#DGy-GkTXm` z)jHTz#_TAB1Gk!b=`L`9bET#E$4o+Qa%;dYQwHFP0Po`kDoO&2V0#G$0luu!9Z+}Y z$M-SgS=1#yNrmeHPO94a^=tT7xy?X4E7gDO>39qrtZMHh2hhxS`BjAB4W&n+f^z&R3< zInc3eoYJiWJ~4gMbT<1pFfC%;HprTV77QvE6Zqao|H_ozwhu_T_Bhv2$1Bx?_CVDy zozr}nlad>&+FeeL_93u5*a1#$7zeZ9^W`+u-i|9_eCxhua4V1}9S_jaK&x^RRGuL? z@k-`fH^9Iqbm2ud0UeiLfm#>`HpdmSQLtQ&*O>(a_O1tsa~{jMr)*SMuro z`e7()i(=xf2ke(xX#DU2^MZlpt%w{s1fBx={O4eH*-Qcf+vL8ewIAK8{VBPAOjjmE z;{!*aW>uYs4W+X#Wkf}i?ods>oVu;rC{(5yP!J?C>cbz3BD}*k)GHV2#%UvTp1pJV zsnv)@IbZ{kQo*(WY)6>+x@EI01o27No`)6!a?Vg~wU;@mV`khax}lb3q{Cx)tTbj$ zxke?o>fShKNIwsXy>b8@?j#48zk;`Z>BrJ$`X5eN@=TRLwyI6QQsi~@C0q88IgpNG zXnrzs=h8pB6YMJEJc}HXD!PU|qoao3O%u#DVP#oyc2?O)_;7#pY0HEzB zf&olNz()jlMX&AZr{_-RD2~keetZ+eaCiC+r?qD(IfH;@=CglfpD8Ob9;;`@ zv2b~M0!RlJ+{zWVXbm`YEQLwBvQ-FfWV#3z=qe@}y8=)pLS>SBB^wDVC|w2zxJp4c1pNTi7lW;fZa;0e zncxV0jeBv|TFtl|(s`a}Z@$V6^{DlTt*N#-G)L5a5p>12$J=*7WUrQ_xddq6`@|Ul zK23mcI9go?GcN_KKoPE@gRg?vDuY3XAk|}_0k!pZYIVmUTsC{2sU`V%sI7#gTi`%4 z=^BYtKw+pSyu7ID*h0kN&DuW7oJe>xBJum5#Pm!Rd5nk6cv22h(5j zp85Z;ip4p^4AwxfrvVvs$Y`$eF+J>`$;@E6xO)cn1vD`jJB+y@+~kidzbSwvAUXrQ z+JVI>a8>SSnXz%zfy{Z=4M(@V4kkuMBiQ&7n9ng7penQSANTy$AQo`uUsioAc+zA| zE^o&PfqYP~sHG6GeYL%nvsUFyf^<(XW)`6O(Dqo=)6hScA_iaztJr& z$Fdcs7SN`CNY#vbhE>r|`|6qg(ft^d>t{llKRpPqn{(UXa+spPu84R}r4<_F z+JYFBuy>N7@Ms1B;F8ZiC3=?M2$abTK1%3`oxE{YA+r<6?(b$OcsIW5ZH2bvHb(ET zTvV`nBR_i{BOoH2*RUfplY^MN>0~~jgl;F6J+KDi?q}2Nj6Hi$F5CpBL#2E+47Igl z^<^~KLRLU_=kD;(9G2P5N1PyxM*;1dL6TJDhOXWW6C2X992Gv)E^?jEtkY0o%w*xw zO?+Ai+(qoI86ys>>M&60H699`d+D0B=T7__`B)P$y?_*kCQChVx}4*?#S9*@>&INP zu3e6@IvRk+2PTV&yR7mCD**{u9eiH=<=1bRPntt%)V^4$%k!%TFepqZF4ex5V4A*V z(aopuBmuR#Qm%k;0GM0@hvUA(!DE4Q(COu*8k?yix(fK@ev#nJd0<$?Q4{mxkVPM7 z2UhJY_S3w2mK%1dP-~xMS2&0b;3A?wdrZ#c3VG+)=B5PhlO6;PiX7DnExBKS&ML3c zdb8znnx(OlxdmK$0c;$^S+oc4WSC5(2ij3&zZdwFYCf zbPUu*K#!vLRF9~>_LEvRB7lBprvn%*V6`tHXw6{dxi`$p=^iWPyX<&8G z)g=adx@};sS4KK-fL5PXWrPSMUK>fNM3U~eCZ^10J_uJ4sm04UCBQc=;H5n9v zsz(g!xgB<$ub%*m$o0B(D`exJeyw_&tEZ33nU8;o1H91O>nLOy64f#C8ynVaT}rVgk$P?eBmwZoXk)ouD>QP8wKVDwu`)s$ss~oYyn8 zXgT*(vS@p3QvoSpA!PJrNsOAI(4AKUwjc%oP&EPVtsBq06w%Q?%sd5DjG?)JF5bzN z=7XF-Y}xPJWHX(evl8d(r+rY!GZMA~k4x;jb(vhe&(}|>1jZo3ekN{Q#Zr6cnJ^@2 zf6m#Mv@}0__6D4?x&tN%Ux|TIECVKMkEq}?h1I>oG8%z!TD4>2$n)lw${GD^_K=D7 z;J^i@cRGmc7u5BwCi;%%L}3&c*rb+&0mGFor!c)(SO6ac(FNo0-^Ll35d!*OC({kwlkW*(pWenmzW*rL4)^8*0vIiTxvBlt zJ~w0(oA3#Up)0R^Bd1_uoK(8?#>$zMyotbV%sH)^;inUrFk@_B%#{jIqZu2|Af(?I^#aH1Q2&x#pQDl%8J*)7BC7@ougvFk?kb{RGu{e4jh2e zgG8^Wau#J1f=d8wKnxTRN{8*$Hm0lE**#0E;FAX->qFF<=>?!fL|r%J$zKV?u}vj7 zOoHovm(y6KKyNXaR`WJ_A!2HT(7sgxvQ12@pTDHC({1akd)RUf+80DjIftjHCh1~-(hAb5EJtnP$xn&6T`bVD35qEQ3MSTgZe1TDdOq_82#aq z->`;&au5rSPAF;ui|nO;H(kw!YP2sNOrp<&L4Z+2o1aMg)E=L7-{|7z<>A$#4%nI_ z!s^}l2mo4D7)$sd8ckahYY{|EpXkD`J`On=4(14QFG`DJ#N!%|S!Ac-{obt@vU=h+ z!@wD*9?&X?JE#~2qieL+fzIhH+EtjK0xS)H7utiyHsZ3Qm~cR18QA+zfaNXBh-qC! z0h6L>hAcPOih&sS0dw%+Oha!!1D;7g$FP?O82(ZfZm3+} z$%j2F`;WSuHyB^{s%~~~rlMduavX{oFFu?wg}8aVj@}SVrg@t#Q2U|>0hT7fZcw6q zY1ot)bgpt2W4BqbH0$>sU4&FG4Ekx;o`#yqfCw12G_|)m=-O|RxQJa4!?6X*>r0P2 zd9O@qI9QI(;Whvx^D(x74g&Z%U|Du|T7WOS_Xc{DWIH@``1~v?5 z4r_)h5{$Gq^@K-jWgHI6022?G2C=A`Wk|2Oi#j_)yN)AhU%UXe8L1|+{`hX~1sXQj z2{}*uX>4l;1`XP$BcU`hUVpy%J~?3%g2C2715-!9N)uQxh5+{qD5vE!C4qvmuWy6s zYBhI)nAme!hG+qe7PUvDCqprSfR!1Q%Q6&RYs37FK6e+mBNqTf&=D@8YahWA6`Voz z0$scXY!&q1q7K$zIWjZ%jdH1spS;=^{KWARFPoFhS&87rcg4Wu-WdP1>qJw}`5#SMt@mWbS^5lU~=FSYK zWqV;`1~Nn}iRj@eTtzQvld00HJ@AGYxJ^{ofHU%meF$O^3z*GzL*`EXLs0Ttlja*%`abxH9MisT$GG>^ zFaGoXpQxuyMMXzJF^;m!1I;Nto*rCa9pk*wX6OoBR}5Vo@bi`%&eR{#FcvrWV4d{&He zSE>Z$^a6j43W>?X`AX0}tL>ITpS^!2;<%*D!R zPq&NG@5QCJF)_A479eZ7X|^i2f%=15O357N>6qvh7fS|n>nJh(t*HM)=@>a3hL*#V#GcV1o64H#hdgc zC=(qv12Teo-M}ut4t5%I7{sVoZm0~7sshfSa$|82dJSl4+igz8o6Bh3KQbIv?y%sZ zK|pEFKfnJh+X{=Xu^BAPz^w`VZFLn2pAn2hxgXL*)$ExVjYFMfVuv|_l2vY7pq#fvJ18d4Vlo5DnuBdLR$n*oOs#s7P z=W_M|W9kDf-W#I0LS$Liu)Cz%FeddN7Czt`2{sfXgFij|10%E^53rQNG*15U_ktq1 zN`tESzD7rkxTEO&4{vPVgd#{4(f7|E-^7FtV^ujNnsF_hKdcKZi=Oi56aZTQ%NO7Y zSMTy|lo18bQQf?F9D3C*BQyeH-02&JqaqQEn*k=7a7+TrX0UBGgvh3^pJ9IU5+JMl z>+gtm`GG@~1}(E<;o+jFKi_^vg7G(@8Y(IQqA-P0z~98L3GqA zD=W#LH`|&Z+w1MlIe%Mf?$L)g>!(Itd`NVjw%f?tC>L>;945{By#LS&6dm+|4)3*Y zwG=UJo%sQj63|9bvUAdv=bCJ@D=`{o&rwMP4e-kdZ&3yoO>mx=gDo4NsH7HCkn!Z} z>a)dQgg5{(sAq17pEzVjmV?q4wQomrjS5M7`?nZxH?L=8cSb`4oEp1D0q1H|wu-Gx zKLn*f2A6+X=@Po!j=|gxSdJIB6>aV8u6?OnY7IsfprC9vORLxq?&QjK)YIuD!}^$s zCV2Z-kSVPL;7#3~;OFj`h=j;4HD|E{DKVS8Co8-uIm6mstb7g#Y#1HZ@oLprvlGi( zIgCm9_Kyp}frGz4c#mj~DySGGf;cn4>snRaFa$sV$VJraco4>4yx2i6D>piga1}tz zr_Y5}KpuhIK^LEGs5oM633w&l>-ruGE2c%P!ZTtk$~}3TY;KPJ)xp|{?+SH2I9nT&bS~*S=M^g{{5UH-Mo!G=eSVn$zuE8Q@{w3_dv_BjGVe z^OIk*o0;OmWvQkMjeRP$l?hR}1qQtTlQ4tY0Y*HsI4?(ziuVSJp{k)6!OcPKF*1DT zE|GmAz+>x7L9!NW2tz0+g7D}vYgmHhtlVM<=pR4*Y3dQ=+HOujF57{?i)EpsxKwTZ z&%e{Y(3A-aFx3EhL;GiXkBq^cK;hY7y-m&GWx=Kc2Ith3wjJKB*Nm5|&H>F#okT~k zuY&=sR?bzL0G0}}*1lvi;p89ohcM-_asahLXq$x_L9JW?u-%bZH^oV8Qai_ZN=3qF zx19fu9P~_!VV<#`1*0n>+acCju>&$5@^Xd33_gvpwKxo!pxW0($sz4~&humS^CAj) zymb*g85A|<>)fhBSj7xtzHk=R3ZMZ)XMQ7!ht|53pL1YK-eoB&}rPj1duVjI={}R*mtQv~t zuKeV>01-u_?>}UUDQv}{nq>AK?G4%tN(X1_2hq&{*IHZ3L}ro#2GBYmI~n~JVgc9w ziNPuXR3v6(6kO*eitx?TgK}=qFGZcn`_FhW=CO8M3D5!hx5#VaMF03@*qdUU% zLr{i&;&^}_W7VyLbo7Rc>YAqdEr#m8%oUXi(0JvQH^4&Dz}|ZtjBU6K^xqW1Z zB2DdS7KZpC-W5=fM`-{1uHQd&mD|~sBY*hSjiP`n_b(@Anp;<3>^ytGDDIFn;nU%2!_P-T&(?KZhx`P!7HIS{9TR z+mptKfqSbQQj5$w_HcoL1wJnan%OR#x8r35UOnO&8abp7Lxx!J(OgH}0T?fD1F@Ov zNPt$%f=Jd)do3(aK>KcCW};!P&Bc_v#d36rUJx)x1YBP5I2Q)Ei&&jaP+O5PcrZx& zCBHf_jWN@WYh^Y>T7U^c*@p$C47106BIblMW{RTdP=z3?f* z^y@Iv@vJ+*V@>I^fg?;g^`a&R!Q<(HiB3A3_p=Xg1|RTg2N!HXs8t@UEn;9W12esl zu=CPQY`3mT8d(v7swofNYeq)VS-YjsVtBG(Pej+1Cq;2lZHXn$ThmVfmoDHg2aDDH zpfim-k1hhkYD#kVMCY&w0)=ZFF`c*nA+_T7vHg_%4or+igy|V zO-7cud4-pmoM)K^YcL4-{HHTPEPDD_2j_Pj1!I)@KoOv5ko$C0G6b+H!jQJTTo#x( zh>`Zs%%;A+Ksh2j0$6bgqOyQ>OwrfsfVy>eBuxFF zb@$MneaQ4po&;DMRf;#sm^+KpK1!zcIL^%&cs;O?5G+cG17xkS6}%aA?z>zJH(+TO z5Cs9Of=q2MNQ`C>VVOKxjcXx|EYq@@3Na07Uzfar!H3@gn+0VsjQ~~d|Lc|KUhohL zco>Mg?T7+$Rq7yG+TiD^bRniUo6k?5&I5=dVhdcYVS|ya32B| zV~7`6fNp|vea-p}%TcDat*FDtwv!A58#Z95OPoIYG&@?87$%sIz%J{BDWM}j5UPtA z+om8DqADlGX?ih73}617sRQgM^Nwoy+J}R9Zjl^h$^i8ugeR-M!gSGLSFq1M(?$<5 zvjt-lADT`PQ@4l+h-pxyce}?DE}#y?q+>Y<+`hP@!C1rq7K))) zbvIQduF49rl(_WnPh_ZlE*$E*t0VWuaHUppcHZ2@R8ssXf2SKYRpY|SUfA9AgCpCZtgQh?!Ad8T; zzuxdbvK!Q5&?ZxNoc9n!L#)vWI=KBFd!B0vVh%TgeCfmhTIr>Iwtm45H!cYBEmZwO z?R>1ph$DN8GYN8n&xA;>F%dM7$(cK-u5M0Qa^Herh&)Ty)pfXhi*A@y1qws>4wGw+ ziSXr9U}YfSz!}V+o$xxSbfqhFs5&vG!*bMaoz+_nWf+uTGgYIX#f;w>$hD~a_lKTp zgU+f5`RqA4UQj7ALxgZ{4*2{9k*y-Y9ZagV7@6#xu|kHz8AI-LONQGb8tYhTzM!}6 z_~e(94P%kp^eyw<8&m=kj59+4HVz#T;kqgcQyJiH0M$;?SFG6^WBtT>ECSq+s=A2k z9idDV<|gyGsVO2qtI!UbAY($66^8qBd`JLB5QD_Lt^xtd|1tnqr8L_Q{j0m^(yTO3 zIoeY)1m*o3!AvQl)()G~!6A4tD1_++a2o(ap{7ZXgw8a~2Lbz_kMHrXm634gAZC@0 zc1Nhqv&uQpCpN+SHo*970MxypY2S(=Mh1+D=Ed2$ZtY{2^BvFx45Gk(QmYpX*znoP z02LY;*sU4qYaK-@bC%Zre&dVG(s)Kz`_7SsmSLz&Vzvq3C=jfl$9YS)9lCCt3j*k5 zH6JuqYcwbb#3YZ6nFnw2Eoop_nNVJgX>GV2JqVb5FXMT(2Tt$GwwoI1Q7U#`mDsf& zS4nqQeDF(NuKk770+e`=Ks`4x2xY`ovgMdT@6EK3O>j;k4qUTkM#Mu52Y&Z$6#mnWrxfKBa}R%@Gv)#5QK`RW(>v0Z1LglgqDr-~Q@u7efW zT)r4>X{@Ub9me1^D&D%crZk6+T$&5@VmP^cpgePlY0FhsfG#}_#;ufa!!{s*g;4PE zecvd#S=i_zuZ=M9PhK8B$T30zx9RNOs0OK__IUU2IsnyA#q;5PH8dDdT2Q`O{#Jb5)_yuN!lj!gBtb#Hbe4Dd~ z1lkXO%S9h~>-!-pp?vaT+P?g2IdBLOp4Ipb2f@U1TopmoM@FqN+NV*e59oz7BN&TP z`VqpTaDRB0B76*gKOs-=#0izfMRl^$8xUI!uRe0We1u!t-fdkN?$CtN{46A{d z!Owk{X(O1ko6!CovTik+&A_c6?DO9xS#p1@apq+M2=E$=VQUMy`g120$ca^UKp>NA zE=yhvtAZ>xs;xCAcv@QcaBbBCe0cKF%mse(7#P4*kNdY*?=yIYO?5(NRWz$4N>F78 z(+A)G__euD?u4d8`_|N93|$Rkqn-_#n*dX3Qp}Fv2?92GTW53CB%wRCGGY7jLCZsvzr0i6VYDyUhzwrFo*PzAcx3U}T z<$+Dg5%5ek+Ub08i)SAqXq>z94QjqR|a}4-^Xm zP67%w1=Iv8SB2dO9WYB=1wY^&w@?1wCZ)bBm4yskzNJl+YR=Al<`%hdRx@J}r_O|$ z?N`P)ad+F9>=JXEVBw(CFtvg4^*S8L1Nmi?6hm}<{4?-4P?GW}RG@8!cLVbM+QI*L z2OSG&pOz4ng#~=@N~9>@C93@$)D~gX$~*cf&+F$D&dv6-RJb!iz7f*Pt*UZ*Hwqe4 zc36%GA5}9=)ymiz!WTr}vJ!v{Gu4Y!fH$=7-jZYB3!o$q7G9~?_D7D!nIM3Zh{Ev} zW{bs!W2yl%A5>8ZmXZU;09JO}Gob%`=&2nZ6vWs;_Sl255C#4|g{&0r+mvn#Uf=LT zmYm9dw6Qa%Ruag7JAevYwa?lnbTYTJzpsa6nlj_|I1@8SrR1s|OO~z)b-3^dgg`Zs zs9+gtADWkxS2b2WmLqW}ECt591@wEuLd z7b?&EHcGW#Gj-hot7sS)65#9agK?n|EnqgFWG2_uTN1JvkR}kYprR!s?X`>PZ_)IZ z=bwda4RMzv;HK1NdI5IYXT+h*t?e-3fqM20J^+BwW0BxY4tKh`Awsu>Li_l~`cSzy ztv+-jST{l$;Fdzk1mo<5@6bmL7hgH~Hly_DUO!lhA-)34fB=gaWQ9gxoLymH?NmK?OP;8mjP>D+5?-Z~S+c?3+s z5GEs=%W3#yz(++>xeIvBwcmpK<$}$mH6O8&oCa_1AO@EF3Y{0B{V%y<1ZQ4)aXD!q zZW+kx5GkBb(L@kq-Ju#xUKa+7QD8KRXriasHxFtG!P%q%=FwX>l-IQyRF|FUhQ;^F z<0bKOf^ZtSwWLVhI`7;sI?IZl;TE{*?-u3^8dx_z4`rU`-5OlWc`L>_p?f04{rvOzp*jow2BE2b|skn1XGf zQ5k|WXuRZ|N12N$Yzvhcd*C7LJUxT%?GOUfMR}QdP23?+`M+`#}kJG>x>E~1oAf{&qFskYbmgC&U^Z}TM139BC=qO`4(<_ClE}%La|N4Ww z-o9DR7#MKa^K-fSN-BoqVp`75EU)!Q;YKPrPc66Q$H=iDbj%k*O-PXOS_RW2%QUkp zg=JV*v$+63`%^$s!52e}tGTsHfnum%hh$((!8!k944GvuylqYpA1kIuO9V4s`3suh z(yNdYjRD@=PF2=^~o zgkUxRQ=j~vr@!~I3>#fzpd^pmBx=^jFvv-fuQd*4#nv5tum}51@h! zjj1Y_XIo{GEi0EXG&)oXXTsnZ0cK!GVnJLgK$iop^sM$X3(l+~l!0O?0E}S^D264z z;9SNa3@QIYr6)Inz!-pp5tYG%7!0|9`GCeMg8Ks?fi~`HagNKPrJYev+sx$-TvY-= z1^DK`lo8l|V|8?%nrA_dr!wn1Su@RS8#=fGz;7XfSqabsOnd>C0fd0KE0$o)5tqca z(sJl+579Ye&tjNk2xce2Y|R%P_8{Arz<_FyF~k1+cOh9JDjNA}#^f>BfQ$^VP40uf z1$do7RN-{uw#A=*^}|g*%+f#}BVd>A1OvK3tIeVx9&CsL{`qsFjvpoth^BVkV+xYk z+e9Qnc#G;cboyW$dKs(cvXtz`gnO%OY>-sn1nM$X%CF$GPy_#&=DnfO_z6qbTG)k z8Ty^;Fb5TR@Nvrx=kg||6yvgioiBa@K44hOm2vXrmpP`F0PSx8RPe-d46(Nh)@sL` zQ$?#zms4g%fPZikSl`%&_UDi-^k1faOqB7w5h(4@K0Bkw6V4HPTrw@At=a0-;v^oTg(__j>b75w3P6@>Bc9tXE%9PQ;WCFgpAI#0a zJj@9)U|x)S#hiyB1yl?0T$Evgdh@w>C&t76VpKPq=Q;K+Y*@*l3$I6cs?5ZQbx4Zf zGQW)unBM&tu-@g9-~XR@G)h0aSTvUSq=SpPcc1nX=>&C_|5vBJZUX1=CRLz*kXguo zz4SbDFq!!i4FV>)*KCk~C+`bzhl#Z|De$H(&6D&^~Sj2}F(8TGtG5BH;YZVAH`e0PiUSt4j6!$1@MtnO4Ah za~uQ<TP2?KbRSuHO^Hp&p3I|j;CY)WNlI5ux(?E*Vo zJu}HHf@|3X0nKUgNgj~tAeIZ;mVh_vZFQzEr&^kd}^U@T<10-=<6{2rw zKf7W>nX=4bQtZ-CU5o$m!0nK3Jz%H7nDRUBIYC%8@vTQBfH*4q5lWdk^>|Kn%;MgGV=gRI)?wWJQuFO1HHi!0(&ZyxwBv z*)yEav;YEGv4Wx15ayf?Lp;~brS7zdG174W%0Z^549#YGvgmYR3dF#xo-RhSRmeS> zgS7vnf|ms_tCpFnC-2cv0ao%sk^{4UNi5t@65EFkAI{EbGyQ?FN-#bx0eae-eHe)0 zL=3A1h*^H}QI1>-8(R#4tr)r-sAoy5P2_~tTCn(enfCo{L)mq#dZ3OGb@2jIey)ca z3#vNzI=E`%(0~k@K|S0#gQ}JVjqg7I_rW^LWW_|PgwYieIyW_=jbBK-htaff>bcnKZBnM_iEbu75_qR2f5 zk#s|m_9wIgXR!z$A1DyT65`Cgxx7Loh{Y@B(0PgRt6h)H`}0@Q0iSy-3~7^C+9 zYxQU!PzOQKS!zc!jKjv~Z*5r3uCfFHheFlvpr3s(NQ{<;EKb2XodeX1;Hbk1Y;V2U zA|}8bnkrtIPlGTO6`TjIgEm1Gyt#{aJ##W{h*n-J52W&-Wf6KG$8=)txA%cBapgUu z2_Y7cfXe=O9>FvMwD+l2Kq+9?>7@gB@%?Ih@RRWA?To(gkZ$2}W^x+9<4(O5E9UJ< zb|A(BP{nyL?4VrG4`UV=%)2urTr6NK;_9o+jeHp}#-YPt9x@hg>fG#WYz!tmaSWvH z#2H4b{4ei60g;>C+CJxb`F*Isp@`$(j|Hogwh^;y<=1yZYo?XU57-jB&edJHx|zMf zuU=yF&IWDhN1Rj^^nn93x)Wf=Sb_Sc!4j|hLbWsu>_B03d~on6c&PRVub#bX9}H5D zKj*v(1AiJoJy97f4()F_1w2v3a#STC`-#`6qb-||OQvNf#7X#OU}ULVm~XtVAdDe2 zpy}Y<$v%z z#4gATlnmm@EHYJwDoo0=@jR7B#!Y}Rk+pY_M?z645)BooDgwLy0~vsSac>o)F%NPO zW1+oCY*a8M#lv@;d>tIfx$2` z8ii!~0d!2s+*D%#WTTksnB;(=eZ_2nofz0(+HmXsgpRlgDrnu? zr9Pg_7NFFA8=MXiY^V&tsOk7mL5w$0EMkQY>HA(|RT&HW$R3zVX=sO_uOF^RfY8C+ z#V|B1;G4j8u*v|-MwPAlA-u|NIoJm;QyT#*D{6CEZ(V~1{Oy)oy}kAqWN`W?Y*VaN z9dx#s8?NL3|?hjt+0SEd-uo3v| zs08m;Ht26kL<`(K}~vWfP2GdhQo6Q@cR| zgKsGm)7`~rh!7KR@EuUGZKiVX5wou@ayMbNXuCL)`wYJLp2v~{lykR%>1Zu2)4pQ_ zhWy>nw6_{V{rKLB3(T_r72Jp;o6@&0gJpnN@mvs-p$w#>hW=i6itE2|SF0G^EVEgE zb07wp83@E3G4KqD;LwoIDEd}6v#{wT`jV|RY7#fWi-a%0P^*a%CRl5sVl-Ss$)J32rfPz2;lSND#=0$x87(>i9Gy?+E z!v|XV+L@n1uv*ucg*V<}y{aG`uC4jm<#+|rH6Eav^q7o1FKw4`pFc$pYhUaHS<%L7 zi0PUK2X5TrvVHLt(S=|AV;Yol8Tdo2h-zm7*)|;^Bj$*z>`1YI+jKR6dwh7$mG|hS ztm+b`9l*q6GA;x!#W1;pn7RKex?R-k0h#^mj;~)S9bhtCe@84kX5EaBa&-N*PQ+E`8|Kz*J!Z{`J1cnQwN+ zz+=R~3QCwTrlPmfcR=UBQKo38pM_ir;uZhzEk8K;*XM6%z?rwav=#HV7-Txe%o%9{ z+Xn&H?gnd%Ig}CjcW;RL*JtlZ7tKmUR6L_}6Y`Up^4v8mffWX9XurYUO@_J~V9oS9 z_4@c>vrOtd%^j+$6E4Wz=wIJ$>nK<}+QDc|pS1vIzz0Ac%wgso`;dJ!81TgdV4b21 z=bm-&(clTX@pPzKBnCTQJWTJ*eEYM#Jzf(C{^UMUbRMStSUZvngCnSRIGVRscVc*$ z49c0%TtR$@06bh!yII_?4{W&Sk*&p2u7~%(3HcaL856(Ik|E30{^f^GSprpp1l7wW zqYJb!aUFEC_L4zH<)NylVR-#Hv27hzpL$Hx<9{WZ&gIzy!7Q$Ikb7sT9KcjA@afHA zK6z$1M+7s0lRNFAmo4hAzXv_o8ElxD$p(J}5+sYTj4&___5E5H)CX(p{3hf_?d8 zF#1(c&U$Lzugp}{gb|me{drT4*!$)wQG_$|0F^Z3P$L;l9c*(EPBPr79`w~GbY(oq z#el(Bfmrr=1`s6TfJp!}Pl=3cNek*LVkiWDEvhy%+3hYoxYL^g$tC>l!Izky)!(}% zBLtW>c!`n-kt!-UQx;HZvRjwvsJ)*OCXXYPpP}4oa5=qLz1G1Q_JWX<)dcMy9H0x# z=cBxiN+bB70kXNs5FW0!H6!-2dPv^YE%x|rRt%rBN_rnTDjdSzXXD==dq&2AeUKgo z8O+=CreFIBbT$PSRutgaxMfX0bc2{p+W&|_GP?jKbc2c<)S&}MwL9hHLC&e0GfNX1 z!bYc(Y@h*cj?6fqU)2Rv<+yRb>?WC`e@d8*OP+CJnTKFG0YmlS+W!qlFf9S|51&&S z2ALi!VrA}!be(>Iw`~DgR)UdYFTS?wWz2x3J_}alL7%FpcnkpZwk%$hUb*~&nCu}6 zX^aLj7{D-_W3A|hDOTznPf4jM1LtN~S^~B=?Hi>a>1Xb!69h~%&Y_}@TSL~bM}W76 zC4rxLP9|o9A*~o+V_7Fz>{ovAqX9X<4dVE_f4+O4M(_WA^1bQ>Q->Tm;QFH??fC=) z%9Y>i_ZVz|d*7WJ1zz(unL=9|Hm7(jPW76_|aZ~ z2f(D7;_i!?44t-3yzm|fU~PZ?+?m%mwZD0_G3eTtReG5CczpB{M$Vvv!6WebhC=Xu z?bm(EI~YeAw%qB*MFuwrv_G)%*WWz%`TI~eK)_dzfibJMls6mfRHo8c2b$;g1qp?F zD&#{f+Yqs8{~KTd{llkNf$_`+L8}NxWh%4jsOPKKpwXMz4R$gG&Lm@Vtq)`>04fD| z96bwsax25Aed#wdfyZq{fq9ygfR7kbOSl}S$49K7e}3ZedI;b^D(W!e=7t_4^T}G+S&ip;aOzH?FlLkkWHW{)-w=h$-?rJfe&x7ygx3ZVkW$* zgG{L0LZ}O4JTR}WnB)<`@Rx#ggo#!zVl<;dX&BoT_43e)37IQshvW^;(Z7OEZu4G+ z#xfV!aDDp$ryqoy1!$jXGjHBG@a>}>7%E4|oNzaK9O$U!|Iw@3J83<6C9{2BaA4Y8 zWI*ZnA|podDY|T+11zCJ6^6;q>7SU?)^m65TwHPh7~rw5$_n~8yJ^n9{^=(n-OR^X z(6nJ~D2)SvnE_0CfgOP6uRqI+2ZID$6}`c`kGhC$m(ix-B*GXNmhV%7o~?9=U@;t$NxNX7+n}7k#br4ZvQQN$R5nLo1;jY6Z5&Qo(=&}r zxswpHZrZmid32}F zmF})t0Lu%lT5E)CW>%HgxL=SI*?HZEW1ltI~g(>fS|Vpxjs$oSIWEI zPDWOcXAKvZr!_eKVv5tkeGVy&SvqTtMYBwB&+# zRYCv!=zVs!GJWP2rN~hDIFI9!UD;2}LF%ahtpX$na19iN-Nh@tgEtJI9^yO??%l*) zW`hJZmbx0aBdTd!fcB-Rll?5eL$=Wc^dA1=|h9~(bQ^?(vGY%lPlXJD~OoCC9G*Lcz9+JM8XBzf{ zQ~{(h2UMm&v+w~Es3MaA_rxPl!dm;NyHS|9+hKpd3VoK{-&scA+c_(VxmE~T%i(Ry zRY^l_0UfS@0S-(>f#bm*6k8B4Rde|ny1J@vzb%eCr-K9sUKf9qVDB2$+s%FIa20Kw z38*#~IUT|@s#!8gfCvXgH`6Uc@n9REZu9j(2!Ul}oUUKdd^kB3rQ+K#!Lxy?6^7u( zJ)<%9*2;7U12cG3CFRxkJu&L&k3DpWh%{@19t;wwnrK>W;>ipT@X^a6!539l{_U5K zVw93+ed%qPs}W&ChXbSRhmoCN$G>0ftG{=ewjr8CfDdplf)t2L)XPCLAkTp$@a&_#UMP{g{T(D^yA9_Hr+NzA$?61E`FQkb9ypq=e3?eeP?N#j)>a;(NaA&=s z44LMZzkZcz#BB+}n)An?t#*z~FRrAqu?XsP4N3usr|gO`*^&>SlW^Qi#&AJQwh*Qn z`7+3#Q|`6z&a;|=EmIXsyUc@UM2gDgwI(jbe)2Aq>@1F&!AkjD5j61v0E1~_>~9#A z*Ri;|j(R$l{^`vZHX}I-1p$1(Sn-KqLRZxHFPIdoEKfh9Qj2Tl<;*{O5PXW&*^t!! zA1^!&MKH?P3s|<>+7E9`dx3IrMkBY<*5_Kd$p%pd8W@lxn0s||Gb#yK4&3hkQ0xJO zSFsg1zyZ)dB2wp>dpsH_&532%&;fvbY$o{joQza0VZg<%mwEDP0Zv;o3vR{7g1`X5 z3jtSO8h8GlFKb}T1$ECinnNVA``3e%*S2CZwEswAOB3utEVu`NGf`B07o(K_H_a#7 z-MhNvP~nM7A3X+blC2g<6hRAJ4{%3pSURFqi)LIq(wS^Wu3#mg_yO+F1=IlgM^uT4 z0RWic7vJS-w0~ZWGnqH%!cT&G*ZyX8(g>XmB9Ey8FyM5K4nByozq*rElA+>}MZXC8 zSvj%$5YB-0dxHTCwM*=Jeyu8(UHYPKB&l&> ze97IbeMyc2*WQBT*2||=?RUQfk5hMp>J9=niuZP-0cF$X=CJ6zl{#yf{GQ>&WKCU<(6!4m`>mLgL>xlNRrR9`6cOFYQQyNKc8N>n6_ zi=v;@@{LKgf9<(ki@)6S6y^ZcoEe%vkTG9vw_7o82yYFTRB^1uSfJvdkLj?_pSO!t zt>?x&GPA!A8Bo*A9Rb=m63u!ohqG}2Hf;$r%utqS?zLOQ2;Mru=y-q%xJkNOWxR4x zA)f_NIjwF6&S`(+hO{jM8{s0oK*#?iTVrK(w^wfQ+lWjQ$ah zFqvBDc8j@K(GRoeG97gPMBoJYXDmV>n;}sVOzB`NOFOR+s4p?r8)V^)Po_^;^ z^m0M1Z_w7M*Q(hfK4Zvs=@&tWy8FJBOR~51e?0p$F>?XDL}VQpGo`DtX$)e|9t`jU zg^B7k4cQI4dLI}U3*^N2ocIpbRWas?0Ou8f=9Lvu3?fvTVZaFFR`be1i(vFyYJT<{ zb7L0d$mY)bGwd1d+IO=+yLc~{a=!yqU=6e&>OnpiPXnNRGuURY41_OsCh^+i-~1jt z;^YkUnA|M2wXof#TJ@wmdCYDst8FS!Y!-=|xqO;zMeb?8(OPx;oSrpSh8%X1+Ye-q zM8go8ROucB$&SJZPFsV`q-5t*GLZq#5Vll-?f>(qM;~Qeb!2UZHZU1gP3F}mW5D9( zQ;j6};Yf&{+)ZNh}e8>(*kY zAFlx9?_|boe)c;VoOuB*qMZP!Y{ftspX_k2-3)`r%hm7jkJ z{HuHG!EHv}!FTD7IukIJde8vn)a9~ly8{e!#VWkru+KfR^ebU@HU z%(4d7)2>QMl>ntaumP;rMvEkLaxA8eR|o zS%#nN9%TTSj=*rX+I#^ALxVjKJW_`%y`aN}HCfrjg#$$_;fel0@WYvlw?fd{9ZpLb zEj)`I0~luA7LPMsy-Zkqxlwe6FNhm3VbPX=n2n(-dhEtriZ3TK=c?kOX2vsO7psJQYkU6Zq`~YFgBaQerF~Q zGn|y zz+5zs6xfNd_t!1q+<))!Z*#ffCG8uOvd!jSjpKU!|6=Vkz2l1u*dEwH97#x6hMKVNta^6F#pDkWT6F!b5?bASMN1Ex`2 zb|3i23Rv~ICo(ty+SYB{ue>8V_zr0NqX+y{eGFh|>q=KJot+KI;6N6r%%l7A?VtWe z3}#;2P+GUOKY>>>6vy8mWm{nkpJnjnyLbbD$!TI{X}7treeDQF1tlz6wiQ8k03_Ew zvt3k?z{@XAaRd@@Ey`hPlMz7gvN#=@ZvN;SC8Z&}zwvjJ(Ff#i`V!Te-$sBV;>O236}fT?Y|?@en9 zg(b_h47`D%D**`@Hh>SvgahW0f$7hTf;jDj9XaD3vke zKBr^4#aHxPKekJNg{hK943iMSATN-ADcGJvCD&$S6B-w^043Wd7kpoJ@c@T>!-fwG z4j!uiHCWP5C7X7kc!N2d$@TpY~Zfs{ME?M+o0ObW=b5-V0-n0kiJRUto9yY!Or#m6ZuG zSQ&PWc6(-}D)LH;H3LS11Bg(N8EC0n)r$5rGYm`{KrIm(9U4BtlmO^*0Z#^8L9;%y zHDCO&IuYvB_4mPjc-Ki!^<*5vfQJE$cI}0CWB?wr&+w$mSUp`5S2puu*kO=V#8aTE z&Z7OZForc(p9TjiLE0}(nR2zD{U|z%HCS3q5AoLNAmE$dfAKWE2yFKiRdQhl)2z7d zD=&+Yu?Cu=MG8NdtP{nzOE)hW0<&W2xT-DfpBx8s=l}KRe~f}*Pd`Q!*4|0DMX`Pa z>bhxdK_M0)Fqwb{*~Y-R9(h5vr>(N^a%Xsje)*l~$hQS-u$>X< zKK{6z>AY+VZCbaYxd`Q~i4E<^pTorg7a!XB$O*`#-R^4s|!M3mTA^QSiG(AG*;36TvCcb z=E3Rcomw8@4Dzi}3ujLeFy^cuztm+ru4Ibokio?Qm!5JgfUsuHo@H8Gyc>+oD6W8y z6l>L8JfPFK6a&r|R@L#JKBLO4hdJBFBZeV~8iDXRrSc{1PnY9J^P!?DMYZhRt z#GnCzTpMpZ52`!+6f2;E%}P}dv|P|hM9|r@ppZ`=c4IIZRvl`c7*DKlXSE-_0{+!& zVD!;OGX41`>HtyFg1WR5pEDcqJm%JV}<*(pv$H^zyP{EqfB%Lev73Dm}&ov%6x7W z12_{PlvxF+q^!H~Vt^Q$Ae6ehs4iHVB6B*QfHqd!3(nYWw&@d$c@)T)D`$SsT?3}t zKb!yU;omT%D=ejciyH2wj6MaTL1sW>Cy)>ri<}r zav*sBm(O(ZzF$2EHXfk8Zws1LK9dUI0+@tAf%f@cG;DHHxvF^g=MrR|_nV<3Rl1EH zK{tRp8JnRE)6#CYAnlihUEjP*m)LuExbO)BWOEHS!M=Nj)@0VB6}wEFWpRyu44alp zi0Cxvr7W@WIGHbHT2u@{(j(?+P$-P6^U_71o#10{_(9~6(D01z<@Si zkttb_)gbNPJ(UY+8(H<=he)O~1hXR|?Ne3maxbkQgV=2#27;N;b)a-H3QvUy1aVTp z4IAQD!8r%;;%lHn>x}8Z{slVi-=2A@k5%Nqv8{dj9?#Jc0S)YF^2`sP1=IeqnwJNd%42>5G6?Xtq3eMP(CA3EU!n}Xf&vCC2M<*rG2Mz_ z4s)Fin{!)o$Yezbl%+)#L+>l^iCz2VFO@N{aM^6lKt`~|D8v^pffb}>ijj-FbeHHQ zB3#l~BJ3WFvyN|Wfoi7@McGWtUl5JSPEvWq=M^u*hRkGLQG0=EZkbRUrG2pkm$QBR zNyC%5foEQXfypP}5Ne$UsD7YgP$x)7lCD8H z|BA~ee}e30@O79mV;jfx@h*d!xYt+RsGD?!p#Ur@!vFru+qnU|d9kcOsM4bs0PVYB z8;`h?cu?*XSPaP1nfDt49sdpBT*=Rg~!YNh-7B$T5-FqN;i^gfq6UBw3_osv2X2G~_zc}27< zzwv_N35o@6(8s(d*V_XEIcsekxeRNR-7nr?NrG11LR110`cXl!z!r9@YcOU@O4+?!% z+kwg4+8&&KjT$ZGO@J8lWIEY{cNhe5$@G?h(E#Y32oPfkWPx_8MAtbpGnWS)i0SWl z@=ylKJ1I5}A|h^;CknU_5|h-oHXy~A!D|tj)l(gEQ~+1AHxlsiA7;&sy;SDF8Cl?H zb4s=Eaf||d!M=PNjITSmszVU)FHbzPvYZ&GHdnEveTirpW1Rf)Q{apa+X0Z0#O5W4 zJ#!ytf`W&@+3w=mOqRZU2>c{CJ;78;pW?dcPj3)#v<0S$;`}4fIR`{VB#TlZ!dLA= zM&PGjtN*7rek8;19!}%Rjb0Db57QNgv%gN1f!fDt(iFx^pfmS@S*g^A%52W<3vJZocuWBFDZAB*l zytej%5i(@8gowHeu}nAZ+bs6gL4Nr|Q%+BWF~0@o%qM11)c_dV70^~;$|3?%Ku1L$ zEQGGzVKxY0Sp>LNygg8qqnTY9m!F~+m|f){LHa%)V=4(d-3=AYYetis2w&az^Bt$V z1lm8tGd39@3+>BaOpBqGUVTyy0Jmz1>avm1Y!RSV-CX-9aF!@g3F76LIQ4teDIrc!EHk-gPi8|l7g$V<@dDH>mi^q zmpAULf!JTpiBiX7#LACF#i}5+Vdw~A(hFt|MY3ln+3*6Z{fW$qNKkYcGg5ma{ifFd z)G+#H7IYG7!>zT(q?c(Xn4lx{;asX0FIWyOEEIW?j|O5?4s!1*-o5x@pOt+KZ#N{z zIB!6@fY_D}QW+J0k4WCK++^kJJKOe++h>9a`rR0GV}+;?3}(Y>`^^J8;c{3eM69pq z;Qki-XJ6`R(0ZHKjazzlx!X<7fBm{@7tj~!KEUq$litQUvZ{tDfEOHzWhNfq-}%FP znR1NuN}uu~bY8<81oWveaep^q4`ZXlaxo$aIxEIkp`Cr#fzKOHP?k)be3vUP!BdM87V>c*MqLUDrU7pny$YFrk-J! z@2GGJ884bs+ZmRFXMG^KLO~ZB2jC*YPef-(x+pr|6m5}<)8X;St+nb|Rx8FGZ(sU3 zr`WRd{Ex+yh>gM4cLa_?=B`2%3w{WM6xTLK%UydfPo-3d1S&kx?on!E7?Sf>*hi=ioS z?d)BUg89w^C|6$qJAVt9_A4Qo0{7$fyrwMv`Mrmr7@q~o%Xy7WLHe`X`N+KquG)wA?1fl+#8~Q6vCu5^ zk;;3kJ+8%cgo`a+F9m07oQVOWsVyt-#_Ny*uKvqkf>o(x{PWKr@%s4JDiOj=C*?4o z14wI7aA~&o?F>nd9QAul=1p`%ImdJ;SLIldYZIWo{5bOntQ%Zz)Xolgjm-e~KcaIX zS~n_xZ8?-JGjd-(VP4^G-|UpJjX{7MMF$EDM=I0WF}7a>ql0xc=o*xbiFFxTmTK=f z{(zy?QOX@VY3~RSn?+=k9e3tv%M2b6Blr}^RMity-m}g6Ft|v21%d&f{Q*!^a8s2k zbb!FPevDQ6EJ2;Hi0fL?-bC6Idx)`CV^@FE)ndFItZWmEdkG(GWz9S4`G*0JSicPZ z@f+0@5Qpv6+Ixqn_k(owWI#2GWV^fmCXPh(jm$~3roZBnHhc$dbcj~-Ev zKTe!^U~f#H=aUN1ew?fw;7Wi6`Y3o1tZ7^j_oDW`)grZ!@8*f=Gjafqqd;&#Yee{DDb>nBuf9-=8v#R5r zCd9s85vL!}yJ7I|V^5kf_bK;cBVbfpn128hU%*H4@f#+%@}jB^@N90fn;~FW8%@A~ z?0At;R@$2q*pq^J)y1R2D2RHH>DXsKh7h>(D(nNyRiHZythu;JwaT#ch>YGtSGIRS z;o&Bf8?StJt8S|08g6jkTnG?td*mBEG+3^^p}~qbID5yrS0NZDOAt`0qEovynBa}^ z%82DG1QV-@SzeqE79Ih%2l8EKK>>cF>Fo2<5V~V%24C1)*4}W0mVg@NV zC=$8L6XHNUDO)C4pT>E2p^z?OzF#EwxWf{a%BUqqXc!t2yPrO&jwT3sY(%sHIPcxT}CsD zH!cWHRc>a|0IJ}iC9{>$VOQ?~v!VNHt@6Nu=q!} z46c^IIO$N!Zx@5Dh${~_L0Kq__V9poChK7SXn%-g)>Ou(m8z>@RNcM`?gC;LQxW4n zD=xhcF39#1sWl3yDL(oX6lcb=MJy9swt%%-$cG;ck8ZmSl1e-{n0T-C&8gA9Vu z1o}m=F2Z3>`E)r+p9O9)xy9KdeCmuTXZi4k#ZB}VU zm+GvI8<=K6_Dwn~Q=**U2BAVO25{Be{2h!5EpsZX12NjP`tw6?h*kUS;K=dRb{VR$ zPGeLgmcdhxX`h~vYC5kr3p-Q8UFJg}SRCmWp962vKIMhQ&)ap4&~NVkk#ttdDwtyq zJ0f!p`0jZyy6rz-cuXu!+I#1covc52wSzgV?L9?b{9r_VBNDjAs4h4SE9M&GxDJ=FrVLB|6FTVqb5fop$1hiu4T z}@Qe)^d{ zf?7T}j1eEJt58oo?(NcV!B{KZhb?q>5*O2zbNpM+S&VqJdepGq)0=l_jRVoM<)CGD zrklX)ELL595kmX)^>q(u7MpSuV^%9F__}D7?&n|CZA@MI&Kg9|xvG6Z1?a{BQS(KB zvwy_J?QEK!f2&b9I!CtWr|js;JRaFQ zzRL_zj!$5qMr*)M{o0lSa1|l^)F0;BXQ6g2bBBSTdRMap2;RURBxqvF1eMBwu~aUm zPX#=^M;}r9r(fNj-3GY@Qkk*qQ2mwinlr50N6bM2Ga&jLh|bf#bq|`27{K>3$@HPF zq(k!pZSIK4lO+-P{dJ^ipJK)AXCTu+Yzp5z4c73zJf2E`sTt%80<;g5bqSO~2Rns; zrvt5^ZTdo$A$>tNE%mW$3~(m*Xrh66yJ6t|Y(ZScZXF%#QCkJRoHNZe#B2X?ykG(q zU>7nM6+ENdfo=riTe85lH>FyO1$7Xy3iW;$@0#v$X)@d1~#;tV_TYL`PZk zWK~GecGFClDT0(RNcv*m_*BZ(XVs%&0R{#w&m>Q#ibo>YUKT;cASRLycW7KZ>wMVD zL;H;MAm){G_}EB>+9HO6RZqy}Azo=)H`XpE&`EjgVENJW;4v~6%w%h8819AO%a8di zM;8d5na0clVnN!+^~i8~Z;PAFQ43$1*r<~UaNa|pW-mQ`h%sxKtpQkNC^D^&zZwsN z8Dl|W#1IJLAjUzgw5fVq6@hAu0zZD79m2tQqUu15ic>h4Cw&WeY$SirJ^MU`aWmVp z1J7qV1N++33<{e}0An*-1g6%)-tA(yU6W##$cs5-gE8v`0nCYmRWP5}W!-vG+0shR zzb(5%tPu|S>{!2Yi*DJa_eVi}j5xpz3+P3GF`d-&6=v-##UU%1+*?D*;JyuI;7Q-h zrKTK4%L@c#bssKhUk4^ba8^gKihJQ42D}10h-wGW=0XC%4K`ptIe-57Zy|wVdSsVJ z0>_!G!g7!|52K&VfinO+UEoryeQ;GqN3BbjyY_wx)fkvL0uNe-MK2kEWEFYVvL3Gg zTFkt?Rfy*ByHiEJHDCY-`Ko>CC z0N#_y&UB?)n>Tn!21v)bw{(@kIsQ5fh6rG$0p4?_qWHPeZ9yP6t0eGURmGDrTy*U} zJ$oM)2E>muMdn#hz)Cn*5j2-$Uh3%Pb@dJ2Nfn`kIz$c>P9FhAL@`#CX?g0cZj8c%9V|D8^ut79c!DiO zS6OT#BM*p;`axgi@{OAFKezLhDckTU?cWq4%x%BCqsy5I05HMp45ACy-lYN6!9m8x z;IdG)FEn*MWaQ?Xz?c>v{05BKUktJ=1#<_f7aVyi)}6Eg5p*v562Oz|=|CN}Eiuq} zXU{ovW<3K)uTHy+y2h~y(7-YT9AeE>F%A_6Vr&75Qd1Bra%o}#_Xep*WHsnkzjWRQ z;A(C{{)P8%vS8T4tqMw+xei)Rp*jEgT`D){rZ74Ld4^?CEKaN4oDE6J`06+{m&5{E~5nezwiC_AqZ~51vCTV>1>iV6JS7) zh**g2hz;JH4*-Em1Psc(RsAyX0u~=v&t_2|COQP54}gLUk*u(j$nS`cVvYjpqWbKG zHz&MpSje9~-7=c6#cTl7Wpm@cyA>mL0iZ?%o#P*rY8_+)C1)SZ6U2OAU#kEKN+7to z)4%sya^fX&QZ3dX%3>}*tX9uU)v2pNY74Y`;yn%+su|JT9A_q4dhOVdf|y~c%!s(kqQk1O1=X1n zOlDnS90C2W`0$xgJLTHVBRL|#X1Ed>*X>`JQ((rd`09`0;9uMeHe{9w-nqxBZNByz zIKT)se)fLUSI^nIS-A&d#PyrGg8^;3gJVZKT&8DCQsD9LAy2)(QFi{eL#wSsOvHiM z$yB021Drr#zr$2lZ3~(|>!Atfw8jic9|#yGKnWSRXZ1vhrfTQ(9T*;%mbF?m9zZjf$><5~%|LY% zGE`NJ!8b39CHDIt>Z+PiZwZSFSc)83&tQoQlvM`NBJBN-y!@eVvO57iotqiFd$0;S z4~uD67iPfd7QlrqG7U69rsMom%mr3lVnOESIOjrB26Jb|`5>6$Ly}I?{dvE7HE+R1Dv|E3(Xgn^B*dU6e7n$tte_tQ>3yLL|iG+LZZqKuZBl zDR)6F7TGr%wi21G20P#u7Y%+3Xz_`VX1F2Btcw#pQH?7pbqJ`EYWPwxnp7@R)PwYPPf zDD=skZkuNLp2S=r@373C^YPtan^%6uwOND4K}QU$4z*($fA@Px-)a|!S{^6})HPlp zGg5}D^uJ0Z9|rdyzQ2BsSPZ#X+vJBW(oA#TbFy`WpN=ABd z2;`sI27VK~Wb8k<3x#U{98#=Xy875--4p)jjrU)I5+O4uxu*>1p|BNwBBz?Qs-qLy zE(4yxtYmiVa1fB`(Z4YXEhZ2Qs4fIM2;t#&ptFClpJvo9-T%pByiY|Cm=4n>l^-e> zKYU1^(iKkzh&!h&IH=kUfc)fV+ON`}0ZqJ_fNK+!*Yx?vT)y9+8=&NPv5D*Gp{IZY zZS_=wV~iYUwa3N4YwZD9L?s%Q^&Xf=E%Ndn_59hFSD-QDH>cr zZ<>j!YLGp0y9calRqVpsF8}VcH(GQH!y@3V{t*T-jm6V1g2Nk+i;^kg%x@r7UCa!! z*tFk1K?bP4Ajj46fn>H;56;+S6?BQc8$zXEh)p^MaRvM4QQv$1!N~CXf`F`mEglx~ zDGSazWMTutbwK%I4TB0ki`w(S1j{0LiNK`4zVipja0`0SL?$f9s0@WW@v;D~0c?Vf zY@B6a%mR!@#b$Hq&i>j(`nd7*Q(`Jr890?P`0c|m%^f8q$P9fk=ckq;rmnd3ib+PB zX))+p!Xsn`e0`l|>{zeX2)zT8MArorf$_4;sljzH!Ndrp)eiH3dj&E3r@dk)@C-kJ@C8d*!W@ z)4-~;wXbC1Q!S)B72Mh}vTj@Z;J=yEw_^;b*ARS3Yr#xwZU*bM00V45DMl3<@0eWL z3w->UCk8D-1T?ZBE6}O(f$Ys%sDy7C%T9=f=25=cFtHp36!fKda zE;ixP0gt5s*UV4vfX1upsJQYb^eIp+Xi~XLrn}kdufGV^$LMLFeZHn%V8{`|Lo!bP z_P{Fb!*`4Y=WEb@1#e%&)VvAYTw3{3oXt^XJH3AZVqG)ZOqwMS@bQBpD>}GQHyNCL z0)eEHU=~vX#fWp&PY)|dcu~8 zEXXWV;ZrVV9~Afv7+Rsx9jQYs3cm=jU0cSj2c+%?jU~aQ#IhVWR>6X&_Kl?(SnbYZ zul@|I4+N~!wPT0bo9d_}k1iO(S&E~3cHlsq|8n0pEkIKbvsyU@8vVvf>naBO^j1xb=i+-}^-W>6i%-wNiv_d_i2cZ$tpy3Giti z%12}tyRa9B;hW^$8Q15OAES6{AcC1sznys;?DB7e=x|j;&`#eCMh{1Wcp)8o%wttWT>ZYx zsMz*nG!>uTEk@z)`rzO0p+`|Qi(Apn&zwKB30(PuCpGeGTfG`DdMgren(%4Pc~ z-)NjM+O8Ipy*s4#pHwn7 zwiAro#K!80$q`-qac!0bp}pg$QLOeN5=4OafE+H~VOudC$t2mNpH&rQKm|T~r;W=M z9Dg0m7w^eD#>XzsUDs)dKUN z4NwE`#_k|!Nel@}QeK{8HjiDoGxD=nxQIDhFmG;^=>Zh%fT@5_K@DUsn1iC3UwoJW zE+b&tCu9znUU@)lts?kb$_oHx;YYU5^w)_LfL+bx3HeSh!JuPcTze8~IBZM0Lu<;fCi7v>s4;dq^5SAoN_&o1L@0KAJyyxO4GM|X=AoXxqx2`qy}qJ4mmI%>!| z78V^0zRhlYK{Gnlf%$R#QONqyV}*9pI~YZZg{ugSJ_;PjWPe#$aR?VX`09eL zLSf9cPc4F6j4!Q{IfDq{X={+G60|RoXOgnlbc0xgi#^{wR|`4JM-_14_W=bEH1QC@ zN3SI7IuxdzU<_gal*vG`O&ou{k?PDg!>|Q@b>~48B*0@W<_36&o4~T)umoetL@*x# z?nq_n2k(hVT^Ivv&TWKt$bxPNM)-!`ue?2YZ(h?&;tG>AX`wjY6mtW1*aYy zt76u>GQ)wY7?EwZgF*H)bn*~y&>YEY0?g`EQJubg35qS#-!9Khxhq%Zz?0ZV*fj+$ zWsrf|R|c5qMn2F0rlt-XhfB2LHi;u~iVU?++O4rK3 zrSM|Om+vm}b)oN7=Ya$jP@n4x(mB z%xi{5<_=(W@fpUCStHQC`+!%h%M*j2Nm&&%Hf*{+cpJBT+(BL)oA)E zOD%95I+KjmDX3ya=-}&wV9=25u)Pn%VMhn}fCMfUkfEYG`1D_UMAXX*uB#)I zmP_|<&GHZj-ym>yIKYDm3pl$DgEQFMN9AK|l&9WPtEk67kXIx!Eew(&(~-i|0rGW= z%9$D%5;u*PSn6gD{UZiXnnJxDF#Olwy?fGFslCbWvexGo(#pSh=CtDso-&W2HWyK#o?3RSF_J1V){@Pzx z-MAvMC3`~m@mH25*ff%Vs2P~$S*_WvJUV9M}>IV~OL6Kl4p!sSr zz=0{7@4XDpbT+n^>}0DY7BJAW2zKcYjHV#BU-dLI`W2wty+Eq)EywNX0PQik$qX|C z(W9&rx_fnO4jkwN#a;ZPX9MJ}iZ|D?)m-GMA~J&^9S1P{yj&+w(@}4$yj_?88}|dy zM`dA_nX{9;(>SPZg#HAMe^A_$;c%Zw;R}qYXGQt|L@C33_SV@8PxJiN|G4J`2>Jr> z2eApTubg`ZOvmT9#M-U-t5~ThIAeC09g+R1D2xcgjf&1xtH1BblPJj2Z1u-vo=`QdzNr zc8GX=6eik6#*X%XHJLyIK!;3q zlWCXvHOMfoj2=*}qBO|2)5L|I|gAZ)5UAGAKqUJy%&_i6cGezukkv0 zR<(~~tZonQ;D(#~N0-=|1TlLlP~7&ud3mMEi+OIRUKey!Fu=gNYZZ4EzplnZ!K|X) z!d&nTC`LgB5SJXr zbpP^IFn}(pj|SV&cE!71dl&2^xZPYjT{)h2W-ajL0BgT+8cfF)qph_cc>lxKhk09o zPRua}TLP7W1d%1Yy5O(^a#nOMx~v|I!7I;Yw`uH(0te`{GEdQC4k1-EuRH?1FPK~6 z&Idrf%8fzL)62ksL{O-x!c&evW4}PRwuw~pkl*b&lLmLpA-q6vc)b0d~qLhB~1p5 zG%zoMS-L4|Iz+SqOzX=@bTe@LJ!>-R8||P|m^|5;cHkvkdq|rjuR*K2EHnWdx4;de znl8`KO^Jcoiz?o*^}W-j-wgSjGL)$lGk^i<4rMlrHWL$g1>Fk8 z!DN+%q$7GqJwL^gsQvZz>|OMAcPkhp<;>(@Jea#cacf=AIAl;kf*4ftVBq38*B&3Y z+~GFLf*-HX%*c0u!h2MH{wO%$RAHrZp7m-Ea_QCnnMPFMIc@#1n+W)@%&2om)1-jN@?qZ=07MLqW`UX`%`Sjjb2;l?PGy2^x? zEuWU(+!~$~NXLwP_han?8>+QGS)RJH!@IwaQZ47 zG<4yIH4uRy2Ob239^`5s2Oc zN~>$ZnTguJhd^$DbhNGxoWFw?;BL6(KIXNKP-x6puBtI=5uBIiEr5D+FsAx|jKMQi zTrx8;aATECtJSe5U%Ny5o;pviAQ9xs4GVZ{rjz!dWU7An1F)n%FlI_4NT3pec>r|h z@uZcIIT?m{j!ubY=PxqZZqJ8B8|0w2oyZgVLS}1@0!*~OlgM%AE|ARn>kqlrX6Es} z7BT~_?rDrz`i9+9g+9$I`v@Lu@C*Q@_oDqDmcF{}PyY*&6e`ljY0Zsd!)i z74*^`W+~9EtWf>4zy`$35Y2A?*Sqf|YX3Wi(U|rHk21@6bu*kX9ZY5}-VC(%rD_<= z1%ROyTw(Drj&-T?niPjCn8GXSrC=K#x=1PF0!7Vl+ zw}C-tF?{pOjxy2Iql(T~y~X?dk7SBAEKp=f=sVm`1p5B5B6ptUxe@g`o68^+LI6yZ1Dr2z$hQ^+!6K}E9L{Q=eWZ_dg*z)_ zsse0`-`%RBGa$B#29b@``zja<^h-9gfJ;38EZC^ZaHvcnE_tAgmE3Xt?bWgjuOp~B zRt=mviDecyFJ^364VB;ij6t><8nV6qm>e7lp^8lT==0yf#8%>|HkFF-m~0G$cWK(P#9)? zX`o!vxI(m?toRD`sT9UNFP|4~UjwoGfRSWS@X{M#7R~SrrKk>B1|G07%NpXgMYzKb zN41M_84t;4rR6|8AploRVWzjZ{~0!v-b@ff3=GBhM5@+>b>k8!3ex}hL_jdJ!dxfm zroaOBFn`!++8}nTvc*cH$*mzxZ1An)AWplM4=Lm4TN$+Gt^1j{j*KT4Ds?-cm8)<- zO|^l52yYo59aFgy6P(enrZiae_~X^j?(rpnAyT^oiW$-vJN?@gFOzdtF6?9Dw5ils zd0@~H#u{|$v%o;U48pk>W?19^cO(X~UrYlFlb;l%VQ66S3dZ+377 z_6mpcsfzmz@(a2Bp1hP<17zsM2GH+ZMGX5PtE!S)ptA!sO!+PFu%erj7c6Mn%SKJ*?!39O zPUVTuw?k}g(co7h5yk?r1H#W_LFmn^1@Qu)4`XKlv(tP-*v>}Q#}V;W_hMYTnkN?6 z!{v^x*gY5+Mxe$cR21Px46&k?j&N`AV<0z_-#O2u0j^O{u!k667N&;P_cPm9K7hGL zTxv&zQFrsIXU7N>?tB~Ns_#6;F&-%;3l`@A8JwK4prqNzg$oQm)&m_-yTlw0>h2ecm7$!e(J6S9*g znHRMV)v)%3fP-)@e?9=V&4jYR_OE<5FfyCSeBJ$#4Q(g{33xLrI%(e~8zW|i@H6Hu zpjL=88WaGTWEpEnaf({avVE1IQ4PU?lQ$(+FmZx<3@ly2R(3a=1K_&^6DqL0m#GIz zWB_w&OorppViN`?TEJuR8?3eGaq>B2Y6e=ucn?0@LgMF{l$*gsW^76U?U+LBf(8oY{0RND!afrLSPL94YK0&SdFJRdvv7Aj}_7 z>tx%yzpy{m_Ur<8Y(7$u6`*D==6$YeASh62L20K>9&Gp)JM&jxKI*ne96gpQD1C_RCLIo$x<9bulZUr-M6O6N94a zC#<0w2EbK}w(toKarm!YuF0u{J^|SQnOWv~1xu&rXZ$!tK+TFxQ3%NvFL>>HF4hvt zm~u9JtpNh8$DIokWZYe31v*kd-OQFM19k~F0u3}+lEAR$EO!6bW|7t2frXsx^H}de zcvDyv8vZ!fZ<(tugUt*ViGTUi!|mD~DvYq}A_u(#O^)&~=-dA1I$R9bPL>X!-b%|e zPh8*!?}2>z&^qyr4sC}L3Q2`zK=iCpA8yz`9|y%i1WMbfIYi;Zx*^g2pd05vDue5v zgpWJS^~(!Z?zIBG%kEnb-W3aCR5^d3W3rp8-m#m`1h zhPaG+#)U@%PZJFd(B^NS;`%fcXqu+%7A>|y#uw7v3SU&Ld&61ZgSJ$a>|yC_Ve>y& zB-@QFnr9z=&HYZd_SOLm2O(xvVjG#XdtVfTvu~cX@KqsPxPS$vPhC0V!LFL@DDenL SPmh}(=$tIbG-sIea{mR0`F2kL literal 0 HcmV?d00001 diff --git a/public/icon-512x512.webp b/public/icon-512x512.webp new file mode 100644 index 0000000000000000000000000000000000000000..de7639def229078c0ff8cf3d90be83dc3ac48cd4 GIT binary patch literal 89535 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 SPmh}(=$tIbG-sIea{mR0`F2kL literal 0 HcmV?d00001 diff --git a/public/wibu-push-worker.js b/public/wibu-push-worker.js new file mode 100644 index 0000000..035fe98 --- /dev/null +++ b/public/wibu-push-worker.js @@ -0,0 +1,121 @@ +const log = false; // Ganti ke true untuk debugging +function printLog(text) { + if (log) { + const stack = new Error().stack; + const lineInfo = stack.split('\n')[2]; + const match = lineInfo.match(/(\/.*:\d+:\d+)/); + const lineNumber = match ? match[1] : 'unknown line'; + console.log(`[${lineNumber}] ==>`, text); + } +} + +self.addEventListener('install', (event) => { + event.waitUntil(self.skipWaiting()); + printLog('Service Worker installing...'); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil(self.clients.claim()); + printLog('Service Worker activating...'); +}); + +self.addEventListener('push', async function (event) { + let title = "Default Title"; + let options = { + body: "Default notification body", + icon: '/icon-192x192.png', + badge: '/icon-192x192.png', + image: '/icon-192x192.png', + vibrate: [100, 50, 100], + data: { + dateOfArrival: Date.now(), + primaryKey: '2', + }, + }; + + if (event.data) { + try { + const data = event.data.json(); + title = data.title || title; + options.body = data.body || options.body; + options.data = { + ...options.data, + ...data, + }; + printLog(`Push event data: ${JSON.stringify(options, null, 2)}`); + } catch (e) { + console.error("Error parsing push event data:", e); + } + } else { + console.warn("Push event has no data."); + } + + event.waitUntil( + (async () => { + try { + const eventData = (options.data); + const clientList = await clients.matchAll({ type: 'window', includeUncontrolled: true }); + let isClientFocused = false; + + for (const client of clientList) { + client.postMessage({ + type: 'PUSH_RECEIVED', + title: eventData.title, + body: eventData.body, + variant: eventData.variant, + createdAt: eventData.createdAt, + acceptedAt: Date.now(), + }); + + if (client.focused) { + isClientFocused = true; + break; + } + } + + const subscription = await self.registration.pushManager.getSubscription(); + const myEndpoint = subscription ? subscription.endpoint : null; + + if (myEndpoint && eventData.endpoint === myEndpoint) { + printLog("Notification sent to self, skipping display."); + return; + } + + if (eventData.variant === 'data') { + printLog('Type is data, skipping display.'); + return; + } + + if (!isClientFocused) { + await self.registration.showNotification(title, options); + } else { + printLog('Client is focused, notification not shown.'); + } + } catch (err) { + console.error("Error displaying notification:", err); + } + })() + ); +}); + +self.addEventListener('notificationclick', function (event) { + const clickedLink = event.notification.data.link; + event.notification.close(); + + event.waitUntil( + clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => { + for (const client of clientList) { + if (client.url.includes(clickedLink) && 'focus' in client) { + return client.focus(); + } + } + if (clients.openWindow) { + return clients.openWindow(clickedLink); + } + }).catch(err => { + console.error("Error handling notification click:", err); + }) + ); +}); + +// wibu:1.0.87 \ No newline at end of file diff --git a/public/wibu_worker.js b/public/wibu_worker.js deleted file mode 100644 index f345a61..0000000 --- a/public/wibu_worker.js +++ /dev/null @@ -1,77 +0,0 @@ - -self.addEventListener('install', (event) => { - event.waitUntil(self.skipWaiting()); - console.log('Service worker installing...'); -}); - -self.addEventListener('activate', (event) => { - event.waitUntil(self.clients.claim()); - console.log('Service worker activating...'); -}); - -self.addEventListener('push', function (event) { - console.log('Push event received:', event); - - - let title = "Sistem Desa Mandiri"; - let options = { - body: "Default notification body", - icon: '/icon-192x192.png', - badge: '/icon-192x192.png', - image: '/icon-192x192.png', - vibrate: [100, 50, 100], - data: { - dateOfArrival: Date.now(), - primaryKey: '2', - }, - }; - - if (event.data) { - try { - const data = event.data.json(); - title = data.title || title; - options.body = data.body || options.body; - options.icon = data.icon || options.icon; - options.badge = data.badge || options.badge; - options.image = data.image || options.image; - options.data = { - ...options.data, - ...data.data, // Merging additional data from the event - }; - - } catch (e) { - console.error("Error parsing push event data:", e); - } - } else { - console.warn("Push event has no data."); - } - - event.waitUntil( - self.registration.showNotification(title, options) - .then(() => console.log('Notification shown.', JSON.stringify(options, null, 2))) - .catch(err => { - console.error("Error showing notification:", err); - }) - ); -}); - -self.addEventListener('notificationclick', function (event) { - console.log('Notification click received.'); - - event.notification.close(); // Close the notification - - event.waitUntil( - clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => { - for (const client of clientList) { - if (client.url.includes('http://localhost:3005') && 'focus' in client) { - return client.focus(); - } - } - if (clients.openWindow) { - return clients.openWindow('http://localhost:3005'); - } - }).catch(err => { - console.error("Error handling notification click:", err); - }) - ); -}); diff --git a/src/app/(application)/layout.tsx b/src/app/(application)/layout.tsx index 31dbc45..b4016a9 100644 --- a/src/app/(application)/layout.tsx +++ b/src/app/(application)/layout.tsx @@ -1,3 +1,4 @@ +import { PushProvider } from "@/lib/PushProvider" import { WrapLayout } from "@/module/_global" import { funDetectCookies, funGetUserByCookies } from "@/module/auth" import _ from "lodash" @@ -10,6 +11,7 @@ export default async function Layout({ children }: { children: React.ReactNode } const user = await funGetUserByCookies() return ( <> + {children} diff --git a/src/app/api/get-subscribe/route.ts b/src/app/api/get-subscribe/route.ts deleted file mode 100644 index ee53507..0000000 --- a/src/app/api/get-subscribe/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -import prisma from "@/lib/prisma"; - -export async function GET() { - const sub = await prisma.subscription.findMany(); - return new Response(JSON.stringify({ data: sub })); -} diff --git a/src/app/api/push-notification/route.ts b/src/app/api/push-notification/route.ts new file mode 100644 index 0000000..adab183 --- /dev/null +++ b/src/app/api/push-notification/route.ts @@ -0,0 +1,44 @@ +import { prisma } from "@/module/_global" +import { WibuServerPush } from 'wibu-pkg' + +WibuServerPush.init({ + NEXT_PUBLIC_VAPID_PUBLIC_KEY: process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!, + VAPID_PRIVATE_KEY: process.env.VAPID_PRIVATE_KEY!, +}) + +export async function POST(req: Request) { + const { user, subscription } = await req.json() + const upsert = await prisma.subscribe.upsert({ + where: { + idUser: user + }, + create: { + idUser: user, + subscription: JSON.stringify(subscription) + }, + update: { + subscription: JSON.stringify(subscription) + } + }) + + return new Response(JSON.stringify(upsert)) + +} + +export async function PUT(req: Request) { + const sub = await prisma.subscribe.findMany() + const subs: PushSubscription[] = sub.map((v) => JSON.parse(v.subscription)) as PushSubscription[] + + const kirim = await WibuServerPush.sendMany({ + subscriptions: subs as any, + data: { + body: "ini test ", + title: "test notif", + link: "/", + variant: "notification" + } + }) + + return new Response(JSON.stringify(kirim)) + +} \ No newline at end of file diff --git a/src/app/api/send-notification/route.ts b/src/app/api/send-notification/route.ts deleted file mode 100644 index 8e6bea9..0000000 --- a/src/app/api/send-notification/route.ts +++ /dev/null @@ -1,70 +0,0 @@ -import webpush from "web-push"; -import prisma from "@/lib/prisma"; - -// Set VAPID details for web-push -webpush.setVapidDetails( - "mailto:bip.production.js@gmail.com", - process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!, - process.env.VAPID_PRIVATE_KEY! -); - -export async function POST() { - try { - // Fetch all subscriptions from your database - const subscriptions = await prisma.subscription.findMany(); - - if (!subscriptions || subscriptions.length === 0) { - console.error("No subscriptions available to send notification"); - return new Response("No subscriptions available", { status: 400 }); - } - - // Notification payload - const notificationPayload = JSON.stringify({ - title: "Test Notification", - body: "This is a test notification | makuro", - icon: "/icon-192x192.png", - badge: "/icon-192x192.png", - image: "/icon-192x192.png", - }); - - let successCount = 0; - let failureCount = 0; - - // Loop through all subscriptions and send notifications - for (const sub of subscriptions) { - try { - const subscriptionData = sub.data as any; - - await webpush.sendNotification(subscriptionData, notificationPayload); - // console.log( - // `Notification sent successfully to ${subscriptionData.endpoint}` - // ); - successCount++; - } catch (error: any) { - console.error( - `Error sending push notification to subscription ${sub.id}:`, - error - ); - failureCount++; - } - } - - // Return a success or failure response - return new Response( - JSON.stringify({ - message: `Notifications sent: ${successCount}, Failed: ${failureCount}`, - success: failureCount === 0 - }), - { status: 200 } - ); - } catch (error: any) { - console.error("Error during notification process:", error); - return new Response( - JSON.stringify({ - success: false, - error: error.message || "Failed to process notifications" - }), - { status: 500 } - ); - } -} diff --git a/src/app/api/set-subscribe/route.ts b/src/app/api/set-subscribe/route.ts deleted file mode 100644 index 2557f87..0000000 --- a/src/app/api/set-subscribe/route.ts +++ /dev/null @@ -1,25 +0,0 @@ -import webpush from "web-push"; -import prisma from "@/lib/prisma"; -webpush.setVapidDetails( - "mailto:bip.production.js@gmail.com", - process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!, - process.env.VAPID_PRIVATE_KEY! -); - -export async function POST(req: Request) { - const { sub } = await req.json(); - console.log(sub); - if (!sub || !sub.endpoint) { - console.error("Invalid subscription object"); - return new Response("Invalid subscription object", { status: 400 }); - } - - const data = await prisma.subscription.create({ - data: { - id: sub.keys.auth, - data: sub - } - }); - - return new Response(JSON.stringify({ data })); -} diff --git a/src/app/api/unsubscribe/route.ts b/src/app/api/unsubscribe/route.ts deleted file mode 100644 index 7b166fb..0000000 --- a/src/app/api/unsubscribe/route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import prisma from "@/lib/prisma"; - -export async function POST(req: Request) { - const { sub } = await req.json(); - const data = await prisma.subscription.delete({ - where: { - id: sub.keys.auth - } - }); - return new Response(JSON.stringify({ data })); -} diff --git a/src/app/icon.tsx b/src/app/icon.tsx new file mode 100644 index 0000000..656bcfe --- /dev/null +++ b/src/app/icon.tsx @@ -0,0 +1,39 @@ +import { ImageResponse } from 'next/og' + +// Image metadata +export const size = { + width: 32, + height: 32, +} +export const contentType = 'image/png' + +// Image generation +export default function Icon(): ImageResponse { + const { width, height } = size + + return new ImageResponse( + ( + // Element JSX yang berfungsi sebagai ikon +
+ B +
+ ), + { + width, + height, + } + ) +} + +// wibu:1.0.87 \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 8751385..f54068e 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,19 +1,13 @@ -import "@mantine/core/styles.css"; -import { - Box, - ColorSchemeScript, - Container, - MantineProvider, - rem, -} from "@mantine/core"; -import { ScrollProvider, WARNA } from "@/module/_global"; -import { Lato } from "next/font/google"; -import '@mantine/carousel/styles.css'; -import { Toaster } from 'react-hot-toast'; -import '@mantine/dates/styles.css'; -import '@mantine/notifications/styles.css'; -import { Notifications } from '@mantine/notifications' +import { ScrollProvider } from "@/module/_global"; import LayoutBackground from "@/module/_global/layout/layout_background"; +import '@mantine/carousel/styles.css'; +import { Box, ColorSchemeScript, MantineProvider } from "@mantine/core"; +import "@mantine/core/styles.css"; +import '@mantine/dates/styles.css'; +import { Notifications } from '@mantine/notifications'; +import '@mantine/notifications/styles.css'; +import { Lato } from "next/font/google"; +import { Toaster } from 'react-hot-toast'; export const metadata = { title: "SISTEM DESA MANDIRI", diff --git a/src/app/makuro/_lib/ButtonKirim.tsx b/src/app/makuro/_lib/ButtonKirim.tsx new file mode 100644 index 0000000..0c3e208 --- /dev/null +++ b/src/app/makuro/_lib/ButtonKirim.tsx @@ -0,0 +1,28 @@ +import { Button } from "@mantine/core"; +import { useState } from "react"; + +export function ButtonKirim() { + const [loading, setLoading] = useState(false) + async function onKirim() { + setLoading(true) + try { + const res = await fetch('/makuro/api/kirim', { + method: 'POST', + }) + + const dataText = await res.text() + if (!res.ok) { + alert(dataText) + throw new Error(dataText) + } + const dataJson = JSON.parse(dataText) + console.log(dataJson) + alert("berhasil kirim") + } catch (error) { + console.error(error); + } finally { + setLoading(false) + } + } + return +} \ No newline at end of file diff --git a/src/app/makuro/_lib/ButtonSubscribe.tsx b/src/app/makuro/_lib/ButtonSubscribe.tsx new file mode 100644 index 0000000..3969b44 --- /dev/null +++ b/src/app/makuro/_lib/ButtonSubscribe.tsx @@ -0,0 +1,32 @@ +import { Button } from "@mantine/core"; +import { useState } from "react"; + +export function ButtonSubscribe({ user, subscription }: { user: string, subscription?: PushSubscription | null }) { + const [loading, setLoading] = useState(false) + async function subscribe() { + if(!subscription) return alert("no subscription") + try { + setLoading(true) + const res = await fetch('/makuro/api/sub', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ user, subscription }) + }) + + const dataText = await res.text() + if (!res.ok) { + alert(dataText) + throw new Error(dataText) + } + + console.log(dataText) + alert("berhasil subscribe") + } catch (error) { + console.error(error); + + } finally { + setLoading(false) + } + } + return +} \ No newline at end of file diff --git a/src/app/makuro/_lib/MakuroProvider.tsx b/src/app/makuro/_lib/MakuroProvider.tsx new file mode 100644 index 0000000..fbc3412 --- /dev/null +++ b/src/app/makuro/_lib/MakuroProvider.tsx @@ -0,0 +1,5 @@ +import { WibuPermissionProvider, WibuPushNotificationHandler } from "wibu-pkg"; + +export function MakuroProvider() { + return null +} \ No newline at end of file diff --git a/src/app/makuro/_lib/UserSub.ts b/src/app/makuro/_lib/UserSub.ts new file mode 100644 index 0000000..c24ce46 --- /dev/null +++ b/src/app/makuro/_lib/UserSub.ts @@ -0,0 +1,7 @@ +import { PushSubscription } from 'web-push'; +export class UserSub { + public static subscription: PushSubscription | null; + public static setSub(subscription: PushSubscription) { + this.subscription = subscription + } +} \ No newline at end of file diff --git a/src/app/makuro/_lib/state.ts b/src/app/makuro/_lib/state.ts new file mode 100644 index 0000000..cf1d3dc --- /dev/null +++ b/src/app/makuro/_lib/state.ts @@ -0,0 +1,3 @@ +import { hookstate } from "@hookstate/core"; + +export const subState = hookstate(null) \ No newline at end of file diff --git a/src/app/makuro/api/kirim/route.ts b/src/app/makuro/api/kirim/route.ts new file mode 100644 index 0000000..e5d3d18 --- /dev/null +++ b/src/app/makuro/api/kirim/route.ts @@ -0,0 +1,25 @@ +import { prisma } from "@/module/_global"; +import { WibuServerPush } from 'wibu-pkg' + +WibuServerPush.init({ + NEXT_PUBLIC_VAPID_PUBLIC_KEY: process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!, + VAPID_PRIVATE_KEY: process.env.VAPID_PRIVATE_KEY!, +}) + +export async function POST(req: Request) { + const sub = await prisma.subscribe.findMany() + const subs: PushSubscription[] = sub.map((v) => JSON.parse(v.subscription)) as PushSubscription[] + + const kirim = await WibuServerPush.sendMany({ + subscriptions: subs as any, + data: { + body: "ini test ", + title: "test notif", + link: "/", + variant: "notification" + } + }) + + return new Response(JSON.stringify(kirim)) + +} \ No newline at end of file diff --git a/src/app/makuro/api/sub/route.ts b/src/app/makuro/api/sub/route.ts new file mode 100644 index 0000000..2575405 --- /dev/null +++ b/src/app/makuro/api/sub/route.ts @@ -0,0 +1,21 @@ +import { prisma } from "@/module/_global" + +export async function POST(req: Request) { + const { user, subscription } = await req.json() + console.log(user, subscription) + const upsert = await prisma.subscribe.upsert({ + where: { + idUser: user + }, + create: { + idUser: user, + subscription: JSON.stringify(subscription) + }, + update: { + subscription: JSON.stringify(subscription) + } + }) + + return new Response(JSON.stringify(upsert)) + +} \ No newline at end of file diff --git a/src/app/makuro/kirim/page.tsx b/src/app/makuro/kirim/page.tsx new file mode 100644 index 0000000..a3ffebb --- /dev/null +++ b/src/app/makuro/kirim/page.tsx @@ -0,0 +1,22 @@ +'use client' +import { useHookstate } from "@hookstate/core"; +import { Card, Stack, Text, Title } from "@mantine/core"; +import { subState } from "../_lib/state"; +import { ButtonSubscribe } from "../_lib/ButtonSubscribe"; +import { useSearchParams } from "next/navigation"; + +export default function Page() { + const user = useSearchParams().get("user") + const { value: sub } = useHookstate(subState) + if (!sub) return loading ... + if (!user) return masukkan user + return + Kirim + + + {JSON.stringify(sub)} + + + + ; +} \ No newline at end of file diff --git a/src/app/makuro/layout.tsx b/src/app/makuro/layout.tsx new file mode 100644 index 0000000..28d500f --- /dev/null +++ b/src/app/makuro/layout.tsx @@ -0,0 +1,17 @@ +'use client' + +import { useHookstate } from "@hookstate/core" +import { WibuPermissionProvider, WibuPushNotificationHandler } from "wibu-pkg" +import { subState } from "./_lib/state" + +export default function Layout({ children }: { children: React.ReactNode }) { + const { set: setSubcribe } = useHookstate(subState) + return + { + setSubcribe(sub) + }} /> + {children} + +} \ No newline at end of file diff --git a/src/app/makuro/terima/page.tsx b/src/app/makuro/terima/page.tsx new file mode 100644 index 0000000..558fe5e --- /dev/null +++ b/src/app/makuro/terima/page.tsx @@ -0,0 +1,24 @@ +'use client' +import { useHookstate } from "@hookstate/core"; +import { Card, Stack, Text, Title } from "@mantine/core"; +import { subState } from "../_lib/state"; +import { ButtonSubscribe } from "../_lib/ButtonSubscribe"; +import { useSearchParams } from "next/navigation"; +import { ButtonKirim } from "../_lib/ButtonKirim"; + +export default function Page() { + const user = useSearchParams().get("user") + const { value: sub } = useHookstate(subState) + if (!sub) return loading ... + if (!user) return masukkan user + return + terima + + + {JSON.stringify(sub)} + + + + + ; +} \ No newline at end of file diff --git a/src/app/manifest.ts b/src/app/manifest.ts index 4024303..cf85d23 100644 --- a/src/app/manifest.ts +++ b/src/app/manifest.ts @@ -2,9 +2,9 @@ import type { MetadataRoute } from "next"; export default function manifest(): MetadataRoute.Manifest { return { - name: "Sistem Desa Mandiri", - short_name: "SDM", - description: "Sistem Desa Mandiri", + name: "Wibu Example", + short_name: "WibuExp", + description: "Contoh penggunaan PWA dan push", start_url: "/", display: "standalone", background_color: "#ffffff", @@ -13,17 +13,15 @@ export default function manifest(): MetadataRoute.Manifest { { src: "/icon-192x192.png", sizes: "192x192", - type: "image/png" + type: "image/png", }, { src: "/icon-512x512.png", sizes: "512x512", - type: "image/png" - } + type: "image/png", + }, ], - serviceworker: { - src: "/wibu_worker.js" - }, - }; } + +// wibu:1.0.87 \ No newline at end of file diff --git a/src/app/test/_ui/RealtimePage.tsx b/src/app/test/_ui/RealtimePage.tsx deleted file mode 100644 index 5cc8ab9..0000000 --- a/src/app/test/_ui/RealtimePage.tsx +++ /dev/null @@ -1,37 +0,0 @@ -'use client' -import { Button, Stack } from '@mantine/core' -import { useShallowEffect } from '@mantine/hooks' -import { useWibuRealtime } from 'wibu-realtime' -export function RealtimePage({ wibuKey }: { wibuKey: string }) { - const [data, setData] = useWibuRealtime({ - WIBU_REALTIME_TOKEN: wibuKey, - project: "sdm" - }) - useShallowEffect(() => { - if (data) { - console.log(data) - } - }, [data]) - - async function onTekan() { - setData([{ - idUserTo: 'supadminAmalia', - title: Math.random().toString(), - desc: 'Anda memiliki pengumuman baru. Silahkan periksa detailnya.', - category: 'announcement', - idContent:'cm1eg9fqh00019rhi3oqbej1i' - },{ - idUserTo: 'supadmieenAmalia', - title: Math.random().toString(), - desc: 'Anda memiliki pengumuman baru. Silahkan periksa detailnya.', - category: 'announcement', - idContent:'dfdf' - }]) - } - return ( - - {JSON.stringify(data)} - - - ) -} \ No newline at end of file diff --git a/src/app/test/page.tsx b/src/app/test/page.tsx deleted file mode 100644 index 859070f..0000000 --- a/src/app/test/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { Stack } from "@mantine/core"; -import { RealtimePage } from "./_ui/RealtimePage"; -const WIBU_REALTIME_KEY = process.env.WIBU_REALTIME_KEY! - -export default function Page() { - return ( - - - - ) -} \ No newline at end of file diff --git a/src/lib/PushProvider.tsx b/src/lib/PushProvider.tsx new file mode 100644 index 0000000..f2947ca --- /dev/null +++ b/src/lib/PushProvider.tsx @@ -0,0 +1,28 @@ +'use client' +import { WibuPermissionProvider, WibuPushNotificationHandler } from 'wibu-pkg' + +const NEXT_PUBLIC_VAPID_PUBLIC_KEY = process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY! +export function PushProvider({ user }: { user: string }) { + if (!user) { + return
tunggu user
+ } + return <> + + { + console.log(msg) + }} + onSubscribe={(subscription) => { + fetch("/api/push-notification/", { + method: "POST", + body: JSON.stringify({ + user, + subscription + }) + }) + }} + /> + + +} \ No newline at end of file diff --git a/src/opengraph-image.tsx b/src/opengraph-image.tsx new file mode 100644 index 0000000..e69689a --- /dev/null +++ b/src/opengraph-image.tsx @@ -0,0 +1,32 @@ +import { ImageResponse } from "next/og"; + +export default async function Image() { + return new ImageResponse( + ( +
+
WIBU APP
+

Comprehensive Dock for Wibu web app.

+
+ ), + { + width: 1200, + height: 630 + } + ); +} + +// wibu:1.0.87 \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index f38cb80..9177449 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,6 +21,13 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@emnapi/runtime@^1.2.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -75,6 +82,22 @@ dependencies: "@floating-ui/dom" "^1.0.0" +"@floating-ui/react-dom@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/react@^0.26.27": + version "0.26.27" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.27.tgz#402f7b4b2702650662705fe9cbe0f1d5607846a1" + integrity sha512-jLP72x0Kr2CgY6eTYi/ra3VA9LOkTo4C+DUTrbFgFOExKy3omYVmwMjNKqxAHdsnyLS96BIDLcO2SlnsNf8KUQ== + dependencies: + "@floating-ui/react-dom" "^2.1.2" + "@floating-ui/utils" "^0.2.8" + tabbable "^6.0.0" + "@floating-ui/react@^0.26.9": version "0.26.19" resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.19.tgz#e3c713bec8a7264caa6f8195e0865f9210f483a1" @@ -89,6 +112,11 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.4.tgz#1d459cee5031893a08a0e064c406ad2130cced7c" integrity sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA== +"@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== + "@hookstate/core@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@hookstate/core/-/core-4.0.1.tgz#6744380e96ce13fe3488c926c1cbae93bbea0ff6" @@ -99,6 +127,21 @@ resolved "https://registry.yarnpkg.com/@hookstate/localstored/-/localstored-4.0.2.tgz#6f0ef6b71baa4c28e5e8835431585500eb6a9532" integrity sha512-81dbUH6xnwbePby21NQN8zrmjvMA8tOYeOOLZXqRmRGKnhtcokjTJoRNMZugpC9P3/NnacllBZ5ZUt43nmrKkA== +"@huggingface/jinja@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.3.2.tgz#c1967f0685c69657c2d3b169459f72d5c6acbdec" + integrity sha512-F2FvuIc+w1blGsaqJI/OErRbWH6bVJDCBI8Rm5D86yZ2wlwrGERsfIaru7XUv9eYC3DMP3ixDRRtF0h6d8AZcQ== + +"@huggingface/transformers@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@huggingface/transformers/-/transformers-3.0.2.tgz#636685bffbd7c85399ffad5d7a9a58ccdbd45137" + integrity sha512-lTyS81eQazMea5UCehDGFMfdcNRZyei7XQLH5X6j4AhA/18Ka0+5qPgMxUxuZLU4xkv60aY2KNz9Yzthv6WVJg== + dependencies: + "@huggingface/jinja" "^0.3.0" + onnxruntime-node "1.19.2" + onnxruntime-web "1.21.0-dev.20241024-d9ca84ef96" + sharp "^0.33.5" + "@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" @@ -118,6 +161,119 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@img/sharp-darwin-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" + integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.4" + +"@img/sharp-darwin-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" + integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.4" + +"@img/sharp-libvips-darwin-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f" + integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== + +"@img/sharp-libvips-darwin-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" + integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== + +"@img/sharp-libvips-linux-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" + integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== + +"@img/sharp-libvips-linux-arm@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" + integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== + +"@img/sharp-libvips-linux-s390x@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" + integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== + +"@img/sharp-libvips-linux-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" + integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" + integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== + +"@img/sharp-libvips-linuxmusl-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" + integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== + +"@img/sharp-linux-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" + integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.4" + +"@img/sharp-linux-arm@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" + integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.5" + +"@img/sharp-linux-s390x@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" + integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.4" + +"@img/sharp-linux-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" + integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.4" + +"@img/sharp-linuxmusl-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" + integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + +"@img/sharp-linuxmusl-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" + integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + +"@img/sharp-wasm32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" + integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== + dependencies: + "@emnapi/runtime" "^1.2.0" + +"@img/sharp-win32-ia32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" + integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== + +"@img/sharp-win32-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" + integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -207,6 +363,18 @@ react-textarea-autosize "8.5.3" type-fest "^4.12.0" +"@mantine/core@^7.13.5": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@mantine/core/-/core-7.14.0.tgz#91176d84ba7e4b1fd0dce46bc0157ef16dbc5ae0" + integrity sha512-Osj3nwCXFhOVHIoDtpEpciP7huPhGmG/0w+Zol5tKJ9SG5trV4NDfdFwFcNoxx5al8L6eCLS/fJhloFXaqhOnA== + dependencies: + "@floating-ui/react" "^0.26.27" + clsx "^2.1.1" + react-number-format "^5.4.2" + react-remove-scroll "^2.6.0" + react-textarea-autosize "8.5.4" + type-fest "^4.26.1" + "@mantine/dates@^7.11.1": version "7.11.1" resolved "https://registry.yarnpkg.com/@mantine/dates/-/dates-7.11.1.tgz#87a8969bc99ac30a81869f5447aaa8d4198b8ec5" @@ -234,6 +402,11 @@ resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-7.11.1.tgz#d681118776ec8ec5087842bb5d6e5fd36648a63a" integrity sha512-28WS/U6QL4jaIHf1uFpny5Tglu9MoyyM4bWLmIcAQHtOD3YHpuNvs9OTWLqKAQs6VN+kydlxvjvT+w1LBWEpQg== +"@mantine/hooks@^7.13.5": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-7.14.0.tgz#fe835fc789f0a517d17b563ec964d6ccfc6568ef" + integrity sha512-BJ577AoQ5KnvbuaG174TYAmL2UqcX9qh9aL0aOx+gqyMM6GWeBXUXWx1kcMCzaDbYZwfQptU476fpSjHdcLjMw== + "@mantine/modals@^7.11.0": version "7.11.1" resolved "https://registry.yarnpkg.com/@mantine/modals/-/modals-7.11.1.tgz#6759e8422f84acf63d4e32a3376bb06050efa870" @@ -291,6 +464,11 @@ semver "^7.3.5" tar "^6.1.11" +"@msgpack/msgpack@^2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-2.8.0.tgz#4210deb771ee3912964f14a15ddfb5ff877e70b9" + integrity sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ== + "@next/env@14.2.4": version "14.2.4" resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.4.tgz#5546813dc4f809884a37d257b254a5ce1b0248d7" @@ -420,6 +598,59 @@ dependencies: "@prisma/debug" "5.16.1" +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + "@rushstack/eslint-patch@^1.3.3": version "1.10.3" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz#391d528054f758f81e53210f1a1eebcf1a8b1d20" @@ -432,6 +663,13 @@ dependencies: "@supabase/node-fetch" "^2.6.14" +"@supabase/auth-js@2.65.1": + version "2.65.1" + resolved "https://registry.yarnpkg.com/@supabase/auth-js/-/auth-js-2.65.1.tgz#4f6ab9ece2e6613d2648ecf5482800f3766479ea" + integrity sha512-IA7i2Xq2SWNCNMKxwmPlHafBQda0qtnFr8QnyyBr+KaSxoXXqEzFCnQ1dGTy6bsZjVBgXu++o3qrDypTspaAPw== + dependencies: + "@supabase/node-fetch" "^2.6.14" + "@supabase/functions-js@2.4.1": version "2.4.1" resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.4.1.tgz#373e75f8d3453bacd71fb64f88d7a341d7b53ad7" @@ -439,6 +677,13 @@ dependencies: "@supabase/node-fetch" "^2.6.14" +"@supabase/functions-js@2.4.3": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.4.3.tgz#ac1c696d3a1ebe00f60d5cea69b208078678ef8b" + integrity sha512-sOLXy+mWRyu4LLv1onYydq+10mNRQ4rzqQxNhbrKLTLTcdcmS9hbWif0bGz/NavmiQfPs4ZcmQJp4WqOXlR4AQ== + dependencies: + "@supabase/node-fetch" "^2.6.14" + "@supabase/node-fetch@2.6.15", "@supabase/node-fetch@^2.6.14": version "2.6.15" resolved "https://registry.yarnpkg.com/@supabase/node-fetch/-/node-fetch-2.6.15.tgz#731271430e276983191930816303c44159e7226c" @@ -453,6 +698,13 @@ dependencies: "@supabase/node-fetch" "^2.6.14" +"@supabase/postgrest-js@1.16.3": + version "1.16.3" + resolved "https://registry.yarnpkg.com/@supabase/postgrest-js/-/postgrest-js-1.16.3.tgz#d8e009e63b9152e46715982a6d706f1450c0af0d" + integrity sha512-HI6dsbW68AKlOPofUjDTaosiDBCtW4XAm0D18pPwxoW3zKOE2Ru13Z69Wuys9fd6iTpfDViNco5sgrtnP0666A== + dependencies: + "@supabase/node-fetch" "^2.6.14" + "@supabase/realtime-js@2.10.2": version "2.10.2" resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.10.2.tgz#c2b42d17d723d2d2a9146cfad61dc3df1ce3127e" @@ -463,6 +715,16 @@ "@types/ws" "^8.5.10" ws "^8.14.2" +"@supabase/realtime-js@2.10.7": + version "2.10.7" + resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.10.7.tgz#9e0cbecdffbfda3ae94639dbe0e55b06c6f79290" + integrity sha512-OLI0hiSAqQSqRpGMTUwoIWo51eUivSYlaNBgxsXZE7PSoWh12wPRdVt0psUMaUzEonSB85K21wGc7W5jHnT6uA== + dependencies: + "@supabase/node-fetch" "^2.6.14" + "@types/phoenix" "^1.5.4" + "@types/ws" "^8.5.10" + ws "^8.14.2" + "@supabase/storage-js@2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.7.0.tgz#9ff322d2c3b141087aa34115cf14205e4980ce75" @@ -470,6 +732,13 @@ dependencies: "@supabase/node-fetch" "^2.6.14" +"@supabase/storage-js@2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.7.1.tgz#761482f237deec98a59e5af1ace18c7a5e0a69af" + integrity sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA== + dependencies: + "@supabase/node-fetch" "^2.6.14" + "@supabase/supabase-js@^2.45.4": version "2.45.4" resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.45.4.tgz#0bcf8722f1732dfe3e4c5190d23e3938dcc689c3" @@ -482,6 +751,18 @@ "@supabase/realtime-js" "2.10.2" "@supabase/storage-js" "2.7.0" +"@supabase/supabase-js@^2.46.1": + version "2.46.1" + resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.46.1.tgz#4d23cdf7b6aab45686dfe87577ca7d1371afd341" + integrity sha512-HiBpd8stf7M6+tlr+/82L8b2QmCjAD8ex9YdSAKU+whB/SHXXJdus1dGlqiH9Umy9ePUuxaYmVkGd9BcvBnNvg== + dependencies: + "@supabase/auth-js" "2.65.1" + "@supabase/functions-js" "2.4.3" + "@supabase/node-fetch" "2.6.15" + "@supabase/postgrest-js" "1.16.3" + "@supabase/realtime-js" "2.10.7" + "@supabase/storage-js" "2.7.1" + "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" @@ -732,6 +1013,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/lodash@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" + integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== + "@types/lodash@^4.17.6": version "4.17.6" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.6.tgz#193ced6a40c8006cfc1ca3f4553444fb38f0e543" @@ -744,6 +1030,13 @@ dependencies: undici-types "~6.19.2" +"@types/node@>=13.7.0": + version "22.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" + integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== + dependencies: + undici-types "~6.19.8" + "@types/node@^20.14.9": version "20.14.10" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" @@ -776,6 +1069,11 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/uuid@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" + integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== + "@types/web-push@^3.6.3": version "3.6.3" resolved "https://registry.yarnpkg.com/@types/web-push/-/web-push-3.6.3.tgz#7698cdeeabd70d1129a6e02bd58af1e985cdfa03" @@ -783,6 +1081,13 @@ dependencies: "@types/node" "*" +"@types/web-push@^3.6.4": + version "3.6.4" + resolved "https://registry.yarnpkg.com/@types/web-push/-/web-push-3.6.4.tgz#4c6e10d3963ba51e7b4b8fff185f43612c0d1346" + integrity sha512-GnJmSr40H3RAnj0s34FNTcJi1hmWFV5KXugE0mYWnYhgTAHLJ/dJKAwDmvPJYMke0RplY2XE9LnM4hqSqKIjhQ== + dependencies: + "@types/node" "*" + "@types/ws@^8.5.10": version "8.5.12" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" @@ -922,6 +1227,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + "aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -965,7 +1275,7 @@ array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: +array-includes@^3.0.2, array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -1026,6 +1336,19 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + array.prototype.toreversed@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" @@ -1154,7 +1477,7 @@ busboy@1.6.0: dependencies: streamsearch "^1.1.0" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -1253,16 +1576,47 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color-support@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colors-cli@^1.0.26: + version "1.0.33" + resolved "https://registry.yarnpkg.com/colors-cli/-/colors-cli-1.0.33.tgz#22810216e3aaf726b821f6dd3a431a9340ae99cf" + integrity sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -1453,6 +1807,11 @@ decompress-response@^4.2.0: dependencies: mimic-response "^2.0.0" +dedent@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + deep-equal@^2.0.5: version "2.2.3" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" @@ -1505,7 +1864,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -detect-libc@^2.0.0: +detect-libc@^2.0.0, detect-libc@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== @@ -1532,6 +1891,11 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +directory-import@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/directory-import/-/directory-import-3.3.1.tgz#9981192615c0d69bfb758d249157acef79cf13f5" + integrity sha512-d9paCbverdqmuwR+B40phSqiHhgPKiP8dpsMz5WT9U6ug2VVQ3tqXNCedpa6iGHg6mgv9lHaoq5DJUu2IXMjsQ== + dlv@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" @@ -1559,6 +1923,11 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" +dotenv@^16.4.5: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -1622,6 +1991,58 @@ enhanced-resolve@^5.12.0: graceful-fs "^4.2.4" tapable "^2.2.0" +es-abstract@^1.17.0-next.1: + version "1.23.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.4.tgz#f006871f484d6a78229d2343557f2597f8333ed4" + integrity sha512-HR1gxH5OaiN7XH7uiWH0RLw0RcFySiSoW1ctxmD1ahTw3uGBtkmm/ng0tDU1OtYx5OK6EOL5Y6O21cDflG3Jcg== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" @@ -1674,6 +2095,11 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 unbox-primitive "^1.0.2" which-typed-array "^1.1.15" +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -1753,6 +2179,21 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es7-shim@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/es7-shim/-/es7-shim-6.0.0.tgz#0c430b40b8505ad15570721a8d8dd4eb0c553155" + integrity sha512-aiQ/QyJBVJbabtsSediM1S4qI+P3p8F5J5YR5o/bH003BCnnclzxK9pi5Qd2Hg01ktAtZCaQBdejHrkOBGwf5Q== + dependencies: + array-includes "^3.0.2" + object.entries "^1.0.3" + object.getownpropertydescriptors "^2.0.2" + object.values "^1.0.3" + string-at "^1.0.1" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" + escalade@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" @@ -1971,7 +2412,7 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter3@^4.0.1: +eventemitter3@^4.0.1, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -2053,6 +2494,11 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" +flatbuffers@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" + integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== + flatted@^3.2.9: version "3.3.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" @@ -2237,7 +2683,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: +globalthis@^1.0.3, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -2279,6 +2725,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +guid-typescript@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" + integrity sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -2318,6 +2769,14 @@ has-unicode@^2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== +hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -2433,6 +2892,11 @@ is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: call-bind "^1.0.2" get-intrinsic "^1.2.1" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-async-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" @@ -2683,6 +3147,15 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-to-ts@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json-to-ts/-/json-to-ts-2.1.0.tgz#c68c0b210a811e8dccbe2752e68efbc0ca62bfc5" + integrity sha512-JeScjtIGYAxQVxEYgQUKROU0329eS+rsTSviGtuKiwKuXpcIU7DxhDYm2tey0vcBetwc9kD0+YHDI5KvEexMew== + dependencies: + es7-shim "^6.0.0" + hash.js "^1.0.3" + pluralize "^3.1.0" + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -2769,6 +3242,18 @@ linkifyjs@^4.1.0: resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.1.3.tgz#0edbc346428a7390a23ea2e5939f76112c9ae07f" integrity sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg== +loading-cli@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/loading-cli/-/loading-cli-1.1.2.tgz#626b22f664ca6a12364a78d023760909d7b096d0" + integrity sha512-M1ntfXHpdGoQxfaqKBOQPwSrTr9EIoTgj664Q9UVSbSnJvAFdribo+Ij//1jvACgrGHaTvfKoD9PG3NOxGj44g== + dependencies: + colors-cli "^1.0.26" + +loadsh@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/loadsh/-/loadsh-0.0.4.tgz#5314babd12bb13315dde024a4ca70758c5489d2d" + integrity sha512-U+wLL8InpfRalWrr+0SuhWgGt10M4OyAk6G8xCYo2rwpiHtxZkWiFpjei0vO463ghW8LPCdhqQxXlMy2qicAEw== + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -2786,6 +3271,11 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +long@^5.0.0, long@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -2828,7 +3318,7 @@ mimic-response@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== @@ -2941,6 +3431,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +net@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/net/-/net-1.0.2.tgz#d1757ec9a7fb2371d83cf4755ce3e27e10829388" + integrity sha512-kbhcj2SVVR4caaVnGLJKmlk2+f+oLkjqdKeQlmUtz6nGzOpbcobwVIeSURNgraV/v3tlmGIX82OcPCl0K6RbHQ== + next@14.2.4: version "14.2.4" resolved "https://registry.yarnpkg.com/next/-/next-14.2.4.tgz#ef66c39c71e2d8ad0a3caa0383c8933f4663e4d1" @@ -3027,6 +3522,11 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + object-is@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" @@ -3050,7 +3550,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.8: +object.entries@^1.0.3, object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -3069,6 +3569,19 @@ object.fromentries@^2.0.7, object.fromentries@^2.0.8: es-abstract "^1.23.2" es-object-atoms "^1.0.0" +object.getownpropertydescriptors@^2.0.2: + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + object.groupby@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" @@ -3087,7 +3600,7 @@ object.hasown@^1.1.4: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: +object.values@^1.0.3, object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -3103,6 +3616,36 @@ once@^1.3.0, once@^1.3.1: dependencies: wrappy "1" +onnxruntime-common@1.19.2: + version "1.19.2" + resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.19.2.tgz#39447d703aef6499f71487cb8970f58752234523" + integrity sha512-a4R7wYEVFbZBlp0BfhpbFWqe4opCor3KM+5Wm22Az3NGDcQMiU2hfG/0MfnBs+1ZrlSGmlgWeMcXQkDk1UFb8Q== + +onnxruntime-common@1.20.0-dev.20241016-2b8fc5529b: + version "1.20.0-dev.20241016-2b8fc5529b" + resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.20.0-dev.20241016-2b8fc5529b.tgz#7c7c438012aefbde2a45eef6d2c4e3957244eb44" + integrity sha512-KZK8b6zCYGZFjd4ANze0pqBnqnFTS3GIVeclQpa2qseDpXrCQJfkWBixRcrZShNhm3LpFOZ8qJYFC5/qsJK9WQ== + +onnxruntime-node@1.19.2: + version "1.19.2" + resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.19.2.tgz#2f2e1c9286c97291030770c085fb403647538ad7" + integrity sha512-9eHMP/HKbbeUcqte1JYzaaRC8JPn7ojWeCeoyShO86TOR97OCyIyAIOGX3V95ErjslVhJRXY8Em/caIUc0hm1Q== + dependencies: + onnxruntime-common "1.19.2" + tar "^7.0.1" + +onnxruntime-web@1.21.0-dev.20241024-d9ca84ef96: + version "1.21.0-dev.20241024-d9ca84ef96" + resolved "https://registry.yarnpkg.com/onnxruntime-web/-/onnxruntime-web-1.21.0-dev.20241024-d9ca84ef96.tgz#76bf67b715c50a8a71d58e910c00320e430628fa" + integrity sha512-ANSQfMALvCviN3Y4tvTViKofKToV1WUb2r2VjZVCi3uUBPaK15oNJyIxhsNyEckBr/Num3JmSXlkHOD8HfVzSQ== + dependencies: + flatbuffers "^1.12.0" + guid-typescript "^1.0.9" + long "^5.2.3" + onnxruntime-common "1.20.0-dev.20241016-2b8fc5529b" + platform "^1.3.6" + protobufjs "^7.2.4" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -3187,6 +3730,21 @@ pdfjs-dist@^4.6.82: canvas "^2.11.2" path2d "^0.2.1" +peerjs-js-binarypack@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/peerjs-js-binarypack/-/peerjs-js-binarypack-2.1.0.tgz#f0fc822d3cb54ab1022f4bd580308475e8f77b70" + integrity sha512-YIwCC+pTzp3Bi8jPI9UFKO0t0SLo6xALnHkiNt/iUFmUUZG0fEEmEyFKvjsDKweiFitzHRyhuh6NvyJZ4nNxMg== + +peerjs@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/peerjs/-/peerjs-1.5.4.tgz#bcf933406d07fad9b2a34ae2e8215ba3f1878672" + integrity sha512-yFsoLMnurJKlQbx6kVSBpOp+AlNldY1JQS2BrSsHLKCZnq6t7saHleuHM5svuLNbQkUJXHLF3sKOJB1K0xulOw== + dependencies: + "@msgpack/msgpack" "^2.8.0" + eventemitter3 "^4.0.7" + peerjs-js-binarypack "^2.1.0" + webrtc-adapter "^9.0.0" + picocolors@^1.0.0, picocolors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" @@ -3207,6 +3765,16 @@ pirates@^4.0.1: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +platform@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +pluralize@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-3.1.0.tgz#84213d0a12356069daa84060c559242633161368" + integrity sha512-2wcybwjwXOzGI1rlxWtlcs0/nSYK0OzNPqsg35TKxJFQlGhFu3cZ1x7EHS4r4bubQlhzyF4YxxlJqQnIhkUQCw== + possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -3323,6 +3891,24 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +protobufjs@^7.2.4: + version "7.4.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" + integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -3372,6 +3958,11 @@ react-number-format@^5.3.1: dependencies: prop-types "^15.7.2" +react-number-format@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-5.4.2.tgz#aec282241f36cee31da13dc5e0f364c0fc6902ab" + integrity sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg== + react-remove-scroll-bar@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" @@ -3391,6 +3982,17 @@ react-remove-scroll@^2.5.7: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" +react-remove-scroll@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz#fb03a0845d7768a4f1519a99fdb84983b793dc07" + integrity sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ== + dependencies: + react-remove-scroll-bar "^2.3.6" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-smooth@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-4.0.1.tgz#6200d8699bfe051ae40ba187988323b1449eab1a" @@ -3418,6 +4020,15 @@ react-textarea-autosize@8.5.3: use-composed-ref "^1.3.0" use-latest "^1.2.1" +react-textarea-autosize@8.5.4: + version "8.5.4" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.4.tgz#1c568ad838857b6ce86ee2a96e504179305e0bf4" + integrity sha512-eSSjVtRLcLfFwFcariT77t9hcbVJHQV76b51QjQGarQIHml2+gM2lms0n3XrhnDmgK5B+/Z7TmQk5OHNzqYm/A== + dependencies: + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + react-transition-group@4.4.5, react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -3463,6 +4074,11 @@ readdirp@^3.6.0, readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +readdirp@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + recharts-scale@^0.4.4: version "0.4.5" resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" @@ -3512,6 +4128,16 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" +regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3614,12 +4240,17 @@ scheduler@^0.23.2: dependencies: loose-envify "^1.1.0" +sdp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/sdp/-/sdp-3.2.0.tgz#8961420552b36663b4d13ddba6f478d1461896a5" + integrity sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw== + semver@^6.0.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5: +semver@^7.3.5, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -3656,6 +4287,35 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +sharp@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e" + integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== + dependencies: + color "^4.2.3" + detect-libc "^2.0.3" + semver "^7.6.3" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.33.5" + "@img/sharp-darwin-x64" "0.33.5" + "@img/sharp-libvips-darwin-arm64" "1.0.4" + "@img/sharp-libvips-darwin-x64" "1.0.4" + "@img/sharp-libvips-linux-arm" "1.0.5" + "@img/sharp-libvips-linux-arm64" "1.0.4" + "@img/sharp-libvips-linux-s390x" "1.0.4" + "@img/sharp-libvips-linux-x64" "1.0.4" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + "@img/sharp-linux-arm" "0.33.5" + "@img/sharp-linux-arm64" "0.33.5" + "@img/sharp-linux-s390x" "0.33.5" + "@img/sharp-linux-x64" "0.33.5" + "@img/sharp-linuxmusl-arm64" "0.33.5" + "@img/sharp-linuxmusl-x64" "0.33.5" + "@img/sharp-wasm32" "0.33.5" + "@img/sharp-win32-ia32" "0.33.5" + "@img/sharp-win32-x64" "0.33.5" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -3702,6 +4362,13 @@ simple-get@^3.0.3: once "^1.3.1" simple-concat "^1.0.0" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + size-sensor@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/size-sensor/-/size-sensor-1.0.2.tgz#b8f8da029683cf2b4e22f12bf8b8f0a1145e8471" @@ -3729,6 +4396,14 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +string-at@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/string-at/-/string-at-1.1.0.tgz#332e090c5724418266a27a09394924b9fad41275" + integrity sha512-jCpPowWKBn0NFdvtmK2qxK40Ol4jPcgCt8qYnKpPx6B5eDwHMDhRvq9MCsDEgsOTNtbXY6beAMHMRT2qPJXllA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + "string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3773,6 +4448,26 @@ string.prototype.matchall@^4.0.11: set-function-name "^2.0.2" side-channel "^1.0.6" +string.prototype.padend@^3.0.0: + version "3.1.6" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz#ba79cf8992609a91c872daa47c6bb144ee7f62a5" + integrity sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +string.prototype.padstart@^3.0.0: + version "3.1.6" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.6.tgz#bda3b28098270e1e285e08318e47ad53bc601ffd" + integrity sha512-1y15lz7otgfRTAVK5qbp3eHIga+w8j7+jIH+7HpUrOfnLVl6n0hbspi4EXf4tR+PNOpBjPstltemkx0SvViOCg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -3783,7 +4478,7 @@ string.prototype.trim@^1.2.9: es-abstract "^1.23.0" es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.8: +string.prototype.trimend@^1.0.3, string.prototype.trimend@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== @@ -3792,7 +4487,25 @@ string.prototype.trimend@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.8: +string.prototype.trimleft@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.3.tgz#dee305118117d0a1843c1fc0d38d5d0754d83c60" + integrity sha512-699Ibssmj/awVzvdNk4g83/Iu8U9vDohzmA/ly2BrQWGhamuY4Tlvs5XKmKliDt3ky6SKbE1bzPhASKCFlx9Sg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + string.prototype.trimstart "^1.0.3" + +string.prototype.trimright@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.3.tgz#dc16a21d7456cbc8b2c54d47fe01f06d9efe94eb" + integrity sha512-hoOq56oRFnnfDuXNy2lGHiwT77MehHv9d0zGfRZ8QdC+4zjrkFB9vd5i/zYTd/ymFBd4YxtbdgHt3U6ksGeuBw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + string.prototype.trimend "^1.0.3" + +string.prototype.trimstart@^1.0.3, string.prototype.trimstart@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== @@ -3917,7 +4630,7 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar@7.4.3: +tar@7.4.3, tar@^7.0.1: version "7.4.3" resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== @@ -3972,6 +4685,11 @@ tippy.js@^6.3.7: dependencies: "@popperjs/core" "^2.9.0" +tls@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tls/-/tls-0.0.1.tgz#0ab2bf5968d71df2f8c0e1515d24a2240b98aac8" + integrity sha512-GzHpG+hwupY8VMR6rYsnAhTHqT/97zT45PG8WD5eTT1lq+dFE0nN+1PYpsoBcHJgSmTz5ceK2Cv88IkPmIPOtQ== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4050,6 +4768,11 @@ type-fest@^4.12.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.21.0.tgz#2eec399d9bda4ac686286314d07c6675fef3fdd8" integrity sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA== +type-fest@^4.26.1: + version "4.26.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" + integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== + typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -4119,7 +4842,7 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~6.19.2: +undici-types@~6.19.2, undici-types@~6.19.8: version "6.19.8" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== @@ -4168,6 +4891,11 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +uuid@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.3.tgz#248451cac9d1a4a4128033e765d137e2b2c49a3d" + integrity sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg== + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -4214,6 +4942,13 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webrtc-adapter@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-9.0.1.tgz#d4efa22ca9604cb2c8cdb9e492815ba37acfa0b2" + integrity sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ== + dependencies: + sdp "^3.2.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4279,6 +5014,44 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wibu-cli@^1.0.91: + version "1.0.91" + resolved "https://registry.yarnpkg.com/wibu-cli/-/wibu-cli-1.0.91.tgz#c17a3f98d6942e8bb6fa2d9ac14b8f9278016e9b" + integrity sha512-FR7nkbfcb4aqu9lAcW6xZWTIpTKvVXlXDMrg8hSlMLsR+Xen5nhVSp73H7h15c9N2GGxejGEgHIE/1yRCdWygw== + dependencies: + "@huggingface/transformers" "^3.0.2" + "@types/lodash" "^4.17.13" + "@types/web-push" "^3.6.4" + app-root-path "^3.1.0" + commander "^12.1.0" + dedent "^1.5.3" + directory-import "^3.3.1" + dotenv "^16.4.5" + json-to-ts "^2.1.0" + loading-cli "^1.1.2" + lodash "^4.17.21" + readdirp "^4.0.2" + web-push "^3.6.7" + +wibu-pkg@^1.0.63: + version "1.0.63" + resolved "https://registry.yarnpkg.com/wibu-pkg/-/wibu-pkg-1.0.63.tgz#f38c01bb8e70f94015cd8bb1b8a09d6c6b77bbe5" + integrity sha512-y2BeN5C8Q7Yy00H5UIaZZoF1zXWGPNVjMf08Tuz3HUFM3O7rbOpy6XTl/n8cwdGmVf4zjRzqABOGYB5pLU6KYw== + dependencies: + "@mantine/core" "^7.13.5" + "@mantine/hooks" "^7.13.5" + "@supabase/supabase-js" "^2.46.1" + "@types/lodash" "^4.17.13" + "@types/uuid" "^10.0.0" + "@types/web-push" "^3.6.4" + colors "^1.4.0" + loadsh "^0.0.4" + net "^1.0.2" + peerjs "^1.5.4" + tls "^0.0.1" + uuid "^11.0.3" + web-push "^3.6.7" + wibu-realtime@bipproduction/wibu-realtime: version "0.0.2" resolved "https://codeload.github.com/bipproduction/wibu-realtime/tar.gz/869adc04670602b4fccb833e7732d72b2061ee15"