From 65ba53aef713fb31dc83d52ae4e984c6e4462d5a Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Tue, 10 Feb 2026 08:56:07 +0700 Subject: [PATCH 01/17] problem 1 --- src/problem1/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/problem1/index.ts diff --git a/src/problem1/index.ts b/src/problem1/index.ts new file mode 100644 index 000000000..0517606a5 --- /dev/null +++ b/src/problem1/index.ts @@ -0,0 +1,21 @@ +const sum_to_n_a = function (n: number) { + if (n <= 0) return 0; + n = Math.floor(n); + let sum = 0; + for (let i = 1; i <= n; i++) { + sum += i; + } + return sum; +}; + +const sum_to_n_b = function (n: number) { + if (n <= 0) return 0; + n = Math.floor(n); + return (n * (n + 1)) / 2; +}; + +const sum_to_n_c = function (n: number) { + if (n <= 0) return 0; + n = Math.floor(n); + return Array.from({ length: n }, (_, i) => i + 1).reduce((acc, v) => acc + v, 0); +}; From 8431cb8249755b7c610cf5d69da80a252137e5ab Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Tue, 10 Feb 2026 16:29:57 +0700 Subject: [PATCH 02/17] setup vite/typescript/layout --- .trae/documents/plan_20260210_084427.md | 59 + src/problem2/.gitignore | 21 + src/problem2/index.html | 38 +- src/problem2/package-lock.json | 2733 +++++++++++++++++ src/problem2/package.json | 32 + src/problem2/postcss.config.js | 6 + src/problem2/script.js | 0 src/problem2/src/App.tsx | 23 + src/problem2/src/components/layout/Header.tsx | 43 + src/problem2/src/components/layout/Layout.tsx | 25 + .../src/components/layout/Sidebar.tsx | 62 + .../src/components/swap/OrderDetails.tsx | 56 + src/problem2/src/components/swap/SwapCard.tsx | 232 ++ .../src/components/swap/TokenInput.tsx | 81 + .../src/components/swap/TokenModal.tsx | 76 + src/problem2/src/components/ui/Button.tsx | 43 + src/problem2/src/components/ui/Input.tsx | 27 + src/problem2/src/components/ui/Modal.tsx | 58 + src/problem2/src/components/ui/Skeleton.tsx | 11 + src/problem2/src/components/ui/Toast.tsx | 64 + src/problem2/src/constants/tokens.ts | 39 + src/problem2/src/hooks/useSwap.ts | 60 + src/problem2/src/index.css | 9 + src/problem2/src/main.tsx | 10 + src/problem2/src/prices.json | 158 + src/problem2/src/tokens/1INCH.svg | 17 + src/problem2/src/tokens/AAVE.svg | 4 + src/problem2/src/tokens/ACT.svg | 15 + src/problem2/src/tokens/ADA.svg | 4 + src/problem2/src/tokens/AEVO.svg | 12 + src/problem2/src/tokens/AGI.svg | 6 + src/problem2/src/tokens/AI16Z.svg | 19 + src/problem2/src/tokens/AIXBT.svg | 19 + src/problem2/src/tokens/AKRO.svg | 10 + src/problem2/src/tokens/AKT.svg | 5 + src/problem2/src/tokens/ALGO.svg | 4 + src/problem2/src/tokens/ALPHA.svg | 20 + src/problem2/src/tokens/ALT.svg | 15 + src/problem2/src/tokens/AMP.svg | 5 + src/problem2/src/tokens/ANC.svg | 6 + src/problem2/src/tokens/ANDR.svg | 48 + src/problem2/src/tokens/ANIME.svg | 97 + src/problem2/src/tokens/ANKR.svg | 4 + src/problem2/src/tokens/ANT.svg | 20 + src/problem2/src/tokens/ANY.svg | 10 + src/problem2/src/tokens/APE.svg | 14 + src/problem2/src/tokens/APOLLO.svg | 21 + src/problem2/src/tokens/APT.svg | 11 + src/problem2/src/tokens/AR.svg | 5 + src/problem2/src/tokens/ARB.svg | 16 + src/problem2/src/tokens/ARCH.svg | 11 + src/problem2/src/tokens/ASA.svg | 4 + src/problem2/src/tokens/ASTRO.svg | 12 + src/problem2/src/tokens/ATOM-dATOM.svg | 20 + src/problem2/src/tokens/ATOM.svg | 9 + src/problem2/src/tokens/AUDIO.svg | 10 + src/problem2/src/tokens/AUT.svg | 208 ++ src/problem2/src/tokens/AVA.svg | 10 + src/problem2/src/tokens/AVAIL.svg | 200 ++ src/problem2/src/tokens/AVAX.svg | 4 + src/problem2/src/tokens/AXL.svg | 4 + src/problem2/src/tokens/AXS.svg | 4 + src/problem2/src/tokens/AXT.svg | 71 + src/problem2/src/tokens/BAKE.svg | 16 + src/problem2/src/tokens/BAL.svg | 6 + src/problem2/src/tokens/BAND.svg | 4 + src/problem2/src/tokens/BAT.svg | 4 + src/problem2/src/tokens/BCD.svg | 4 + src/problem2/src/tokens/BCH.svg | 4 + src/problem2/src/tokens/BCHA.svg | 5 + src/problem2/src/tokens/BCN.svg | 4 + src/problem2/src/tokens/BCNA.svg | 6 + src/problem2/src/tokens/BELT.svg | 1 + src/problem2/src/tokens/BERA.svg | 11 + src/problem2/src/tokens/BETH.svg | 21 + src/problem2/src/tokens/BHC.svg | 4 + src/problem2/src/tokens/BIT.svg | 4 + src/problem2/src/tokens/BLAST.svg | 11 + src/problem2/src/tokens/BLD.svg | 19 + src/problem2/src/tokens/BLOX.svg | 23 + src/problem2/src/tokens/BLUR.svg | 19 + src/problem2/src/tokens/BNB.svg | 4 + src/problem2/src/tokens/BNT.svg | 4 + src/problem2/src/tokens/BOLT.svg | 21 + src/problem2/src/tokens/BONK.svg | 424 +++ src/problem2/src/tokens/BOOT.svg | 10 + src/problem2/src/tokens/BRAINS.svg | 11 + src/problem2/src/tokens/BRETT.svg | 34 + src/problem2/src/tokens/BRKL.svg | 276 ++ src/problem2/src/tokens/BTC.svg | 5 + src/problem2/src/tokens/BTCST.svg | 4 + src/problem2/src/tokens/BTG.svg | 4 + src/problem2/src/tokens/BTM.svg | 7 + src/problem2/src/tokens/BTMX.svg | 5 + src/problem2/src/tokens/BTSG.svg | 4 + src/problem2/src/tokens/BTT.svg | 7 + src/problem2/src/tokens/BUNNY.svg | 4 + src/problem2/src/tokens/BUSD.svg | 8 + src/problem2/src/tokens/BUSDT.svg | 5 + src/problem2/src/tokens/C98.svg | 7 + src/problem2/src/tokens/CAKE.svg | 8 + src/problem2/src/tokens/CANTO.svg | 11 + src/problem2/src/tokens/CARB.svg | 11 + src/problem2/src/tokens/CAT.svg | 65 + src/problem2/src/tokens/CEL.svg | 11 + src/problem2/src/tokens/CELO.svg | 4 + src/problem2/src/tokens/CETH.svg | 17 + src/problem2/src/tokens/CFX.svg | 5 + src/problem2/src/tokens/CGAS.svg | 4 + src/problem2/src/tokens/CHEQ.svg | 34 + src/problem2/src/tokens/CHOG.svg | 20 + src/problem2/src/tokens/CHSB.svg | 10 + src/problem2/src/tokens/CHT.svg | 54 + src/problem2/src/tokens/CHZ.svg | 4 + src/problem2/src/tokens/CKB.svg | 5 + src/problem2/src/tokens/CMDX.svg | 4 + src/problem2/src/tokens/CMST.svg | 13 + src/problem2/src/tokens/CNT.svg | 110 + src/problem2/src/tokens/COIN.svg | 4 + src/problem2/src/tokens/COMP.svg | 4 + src/problem2/src/tokens/COOK.svg | 40 + src/problem2/src/tokens/CRBRUS.svg | 88 + src/problem2/src/tokens/CRE.svg | 42 + src/problem2/src/tokens/CRO.svg | 8 + src/problem2/src/tokens/CRV.svg | 790 +++++ src/problem2/src/tokens/CTK.svg | 7 + src/problem2/src/tokens/CW.svg | 13 + src/problem2/src/tokens/DAG.svg | 10 + src/problem2/src/tokens/DAI.svg | 4 + src/problem2/src/tokens/DAK.svg | 20 + src/problem2/src/tokens/DARC.svg | 9 + src/problem2/src/tokens/DASH.svg | 5 + src/problem2/src/tokens/DBC.svg | 4 + src/problem2/src/tokens/DCR.svg | 11 + src/problem2/src/tokens/DEC.svg | 38 + src/problem2/src/tokens/DEGEN.svg | 12 + src/problem2/src/tokens/DENT.svg | 15 + src/problem2/src/tokens/DGB.svg | 4 + src/problem2/src/tokens/DIG.svg | 54 + src/problem2/src/tokens/DKT.svg | 65 + src/problem2/src/tokens/DODO.svg | 6 + src/problem2/src/tokens/DOGE.svg | 124 + src/problem2/src/tokens/DOT.svg | 5 + src/problem2/src/tokens/DPL.svg | 16 + src/problem2/src/tokens/DPX.svg | 15 + src/problem2/src/tokens/DRFT.svg | 83 + src/problem2/src/tokens/DROP.svg | 13 + src/problem2/src/tokens/DSM.svg | 4 + src/problem2/src/tokens/DUVT.svg | 24 + src/problem2/src/tokens/DVPN.svg | 5 + src/problem2/src/tokens/DYDX.svg | 20 + src/problem2/src/tokens/DYM.svg | 11 + src/problem2/src/tokens/EEUR.svg | 16 + src/problem2/src/tokens/EIGEN.svg | 4 + src/problem2/src/tokens/ELA.svg | 5 + src/problem2/src/tokens/ELF.svg | 4 + src/problem2/src/tokens/ENA.svg | 21 + src/problem2/src/tokens/ENJ.svg | 63 + src/problem2/src/tokens/ENS.svg | 10 + src/problem2/src/tokens/EOS.svg | 4 + src/problem2/src/tokens/EPS.svg | 25 + src/problem2/src/tokens/ETC.svg | 6 + src/problem2/src/tokens/ETH.svg | 9 + src/problem2/src/tokens/ETHBTC.svg | 10 + src/problem2/src/tokens/ETN.svg | 4 + src/problem2/src/tokens/EUROC.svg | 12 + src/problem2/src/tokens/EUT.svg | 208 ++ src/problem2/src/tokens/EVMOS.svg | 4 + src/problem2/src/tokens/EWT.svg | 5 + src/problem2/src/tokens/FARTCOIN.svg | 158 + src/problem2/src/tokens/FBTC.svg | 29 + src/problem2/src/tokens/FEES.svg | 10 + src/problem2/src/tokens/FET.svg | 19 + src/problem2/src/tokens/FIL.svg | 4 + src/problem2/src/tokens/FIS.svg | 20 + src/problem2/src/tokens/FLIX.svg | 37 + src/problem2/src/tokens/FLM.svg | 13 + src/problem2/src/tokens/FLOW.svg | 5 + src/problem2/src/tokens/FLUID.svg | 53 + src/problem2/src/tokens/FLUO.svg | 11 + src/problem2/src/tokens/FRANK.svg | 268 ++ src/problem2/src/tokens/FSGLP.svg | 15 + src/problem2/src/tokens/FTM.svg | 4 + src/problem2/src/tokens/FTT.svg | 7 + src/problem2/src/tokens/FTTC.svg | 7 + src/problem2/src/tokens/FUN.svg | 4 + src/problem2/src/tokens/GALA.svg | 6 + src/problem2/src/tokens/GAMBIT.svg | 24 + src/problem2/src/tokens/GAS.svg | 4 + src/problem2/src/tokens/GBT.svg | 212 ++ src/problem2/src/tokens/GLP.svg | 15 + src/problem2/src/tokens/GM.svg | 7 + src/problem2/src/tokens/GMX.svg | 15 + src/problem2/src/tokens/GNO.svg | 7 + src/problem2/src/tokens/GNS.svg | 34 + src/problem2/src/tokens/GOAT.svg | 2174 +++++++++++++ src/problem2/src/tokens/GRASS.svg | 4 + src/problem2/src/tokens/GRAV.svg | 44 + src/problem2/src/tokens/GRT.svg | 4 + src/problem2/src/tokens/GT.svg | 4 + src/problem2/src/tokens/HBAR.svg | 4 + src/problem2/src/tokens/HDN.png | Bin 0 -> 20649 bytes src/problem2/src/tokens/HDN.svg | 9 + src/problem2/src/tokens/HELMET.svg | 9 + src/problem2/src/tokens/HKT.svg | 45 + src/problem2/src/tokens/HNT.svg | 4 + src/problem2/src/tokens/HOPE.svg | 144 + src/problem2/src/tokens/HOT.svg | 4 + src/problem2/src/tokens/HT.svg | 5 + src/problem2/src/tokens/HUAHUA.svg | 22 + src/problem2/src/tokens/HUNY.svg | 1 + src/problem2/src/tokens/HUSD.svg | 6 + src/problem2/src/tokens/HYPE.svg | 4 + src/problem2/src/tokens/IBCX.svg | 14 + src/problem2/src/tokens/ICP.svg | 16 + src/problem2/src/tokens/ICX.svg | 7 + src/problem2/src/tokens/IDT.svg | 54 + src/problem2/src/tokens/INIT.svg | 11 + src/problem2/src/tokens/INJ.svg | 14 + src/problem2/src/tokens/INT.svg | 82 + src/problem2/src/tokens/ION.svg | 114 + src/problem2/src/tokens/IOST.svg | 4 + src/problem2/src/tokens/IOTX.svg | 26 + src/problem2/src/tokens/IOV.svg | 9 + src/problem2/src/tokens/IP.svg | 24 + src/problem2/src/tokens/IRIS.svg | 51 + src/problem2/src/tokens/IXO.svg | 4 + src/problem2/src/tokens/JPT.svg | 54 + src/problem2/src/tokens/JTO.svg | 6 + src/problem2/src/tokens/JUNO.svg | 6 + src/problem2/src/tokens/JUP.svg | 34 + src/problem2/src/tokens/KAITO.svg | 16 + src/problem2/src/tokens/KAS.svg | 3 + src/problem2/src/tokens/KBONK.svg | 424 +++ src/problem2/src/tokens/KCS.svg | 4 + src/problem2/src/tokens/KFLOKI.svg | 40 + src/problem2/src/tokens/KLAY.svg | 7 + src/problem2/src/tokens/KMD.svg | 15 + src/problem2/src/tokens/KNC.svg | 7 + src/problem2/src/tokens/KPEPE.svg | 28 + src/problem2/src/tokens/KRT.svg | 248 ++ src/problem2/src/tokens/KSHIB.svg | 17 + src/problem2/src/tokens/KSM.svg | 4 + src/problem2/src/tokens/KUJI.svg | 19 + src/problem2/src/tokens/LAYER.svg | 11 + src/problem2/src/tokens/LBTC.svg | 26 + src/problem2/src/tokens/LDO.svg | 12 + src/problem2/src/tokens/LEO.svg | 77 + src/problem2/src/tokens/LET.svg | 15 + src/problem2/src/tokens/LIKE.svg | 41 + src/problem2/src/tokens/LINK.svg | 4 + src/problem2/src/tokens/LKT.svg | 16 + src/problem2/src/tokens/LOOM.svg | 15 + src/problem2/src/tokens/LOOP.svg | 35 + src/problem2/src/tokens/LOTA.svg | 10 + src/problem2/src/tokens/LPLBTC_29MAY2025.svg | 35 + src/problem2/src/tokens/LPT.svg | 4 + .../src/tokens/LPberaSTONE_10APR2025.svg | 29 + src/problem2/src/tokens/LPcmETH_26JUN2025.svg | 31 + src/problem2/src/tokens/LRC.svg | 4 + src/problem2/src/tokens/LSI.svg | 53 + src/problem2/src/tokens/LSK.svg | 4 + src/problem2/src/tokens/LTC.svg | 4 + src/problem2/src/tokens/LUM.svg | 12 + src/problem2/src/tokens/LUNA.svg | 15 + src/problem2/src/tokens/LUNAX.svg | 10 + src/problem2/src/tokens/LUNC.svg | 6 + src/problem2/src/tokens/LUNI.svg | 29 + src/problem2/src/tokens/LUNR.svg | 4 + src/problem2/src/tokens/LUV.svg | 49 + src/problem2/src/tokens/LVN.svg | 11 + .../src/tokens/Liquid Staking Index.svg | 29 + src/problem2/src/tokens/M87.svg | 11 + src/problem2/src/tokens/MANA.svg | 26 + src/problem2/src/tokens/MANTA.svg | 25 + src/problem2/src/tokens/MARBLE.svg | 8 + src/problem2/src/tokens/MATH.svg | 4 + src/problem2/src/tokens/MATIC.svg | 10 + src/problem2/src/tokens/MDX.svg | 5 + src/problem2/src/tokens/ME.svg | 11 + src/problem2/src/tokens/MED.svg | 8 + src/problem2/src/tokens/MEME.svg | 13 + src/problem2/src/tokens/METIS.svg | 11 + src/problem2/src/tokens/MEW.svg | 25 + src/problem2/src/tokens/MIAW.svg | 7 + src/problem2/src/tokens/MILK.svg | 12 + src/problem2/src/tokens/MINA.svg | 4 + src/problem2/src/tokens/MINE.svg | 11 + src/problem2/src/tokens/MIOTA.svg | 4 + src/problem2/src/tokens/MIR.svg | 4 + src/problem2/src/tokens/MKR.svg | 10 + src/problem2/src/tokens/MMOG.svg | 20 + src/problem2/src/tokens/MNT.svg | 4 + src/problem2/src/tokens/MNTA.svg | 18 + src/problem2/src/tokens/MNTL.svg | 17 + src/problem2/src/tokens/MON.svg | 11 + src/problem2/src/tokens/MOODENG.svg | 15 + src/problem2/src/tokens/MORPHO.svg | 14 + src/problem2/src/tokens/MYT.svg | 171 ++ src/problem2/src/tokens/NANO.svg | 6 + src/problem2/src/tokens/NAS.svg | 4 + src/problem2/src/tokens/NAT.svg | 8 + src/problem2/src/tokens/NEAR.svg | 4 + src/problem2/src/tokens/NEIROETH.svg | 15 + src/problem2/src/tokens/NEO.svg | 6 + src/problem2/src/tokens/NETA.svg | 6 + src/problem2/src/tokens/NEX.svg | 5 + src/problem2/src/tokens/NEXO.svg | 9 + src/problem2/src/tokens/NGM.svg | 6 + src/problem2/src/tokens/NIM.svg | 23 + src/problem2/src/tokens/NKN.svg | 22 + src/problem2/src/tokens/NMR.svg | 5 + src/problem2/src/tokens/NOT.svg | 11 + src/problem2/src/tokens/NOTE.svg | 17 + src/problem2/src/tokens/NTRN-dATOM.svg | 21 + src/problem2/src/tokens/NTRN.svg | 12 + src/problem2/src/tokens/NXM.svg | 8 + src/problem2/src/tokens/OCEAN.svg | 4 + src/problem2/src/tokens/OCH.svg | 15 + src/problem2/src/tokens/OGN.svg | 4 + src/problem2/src/tokens/OKB.svg | 15 + src/problem2/src/tokens/OKT.svg | 15 + src/problem2/src/tokens/OM.svg | 15 + src/problem2/src/tokens/OMG.svg | 7 + src/problem2/src/tokens/OMG_2.svg | 4 + src/problem2/src/tokens/OMI.svg | 18 + src/problem2/src/tokens/OMNI.svg | 11 + src/problem2/src/tokens/ONDO.svg | 11 + src/problem2/src/tokens/ONE.svg | 10 + src/problem2/src/tokens/ONT.svg | 4 + src/problem2/src/tokens/OP.svg | 12 + src/problem2/src/tokens/OPUL.svg | 7 + src/problem2/src/tokens/ORDI.svg | 11 + src/problem2/src/tokens/ORION.svg | 8 + src/problem2/src/tokens/ORNE.svg | 6 + src/problem2/src/tokens/OSMO.svg | 121 + src/problem2/src/tokens/OXT.svg | 7 + src/problem2/src/tokens/OXY.svg | 22 + src/problem2/src/tokens/PAX.svg | 11 + src/problem2/src/tokens/PAXG.svg | 22 + src/problem2/src/tokens/PENDLE.svg | 17 + src/problem2/src/tokens/PENGU.svg | 15 + src/problem2/src/tokens/PEPE.svg | 28 + src/problem2/src/tokens/PHT.svg | 124 + src/problem2/src/tokens/PLAY.svg | 23 + src/problem2/src/tokens/PLQ.svg | 15 + src/problem2/src/tokens/PLY.svg | 42 + src/problem2/src/tokens/PNUT.svg | 15 + src/problem2/src/tokens/POL.svg | 19 + src/problem2/src/tokens/POLY.svg | 55 + src/problem2/src/tokens/POPCAT.svg | 10 + src/problem2/src/tokens/PORT.svg | 4 + src/problem2/src/tokens/PROM.svg | 5 + src/problem2/src/tokens/PSI.svg | 4 + src/problem2/src/tokens/PSTAKE.svg | 5 + src/problem2/src/tokens/PTLBTC_29MAY2025.svg | 27 + src/problem2/src/tokens/PTMETH_26DEC2024.svg | 30 + .../src/tokens/PTberaSTONE_10APR2025.svg | 21 + src/problem2/src/tokens/PTcmETH_26JUN2025.svg | 23 + src/problem2/src/tokens/PUDGY.svg | 23 + src/problem2/src/tokens/PUMP.svg | 67 + src/problem2/src/tokens/PUNDIX.svg | 4 + src/problem2/src/tokens/PURR.svg | 62 + src/problem2/src/tokens/PURSE.svg | 22 + src/problem2/src/tokens/PYTH.svg | 12 + src/problem2/src/tokens/QCK.svg | 80 + src/problem2/src/tokens/QKC.svg | 10 + src/problem2/src/tokens/QNT.svg | 10 + src/problem2/src/tokens/QTUM.svg | 4 + src/problem2/src/tokens/RAY.svg | 14 + src/problem2/src/tokens/RBN.svg | 4 + src/problem2/src/tokens/REEF.svg | 10 + src/problem2/src/tokens/REGEN.svg | 24 + src/problem2/src/tokens/REN.svg | 16 + src/problem2/src/tokens/REP.svg | 5 + src/problem2/src/tokens/REV.svg | 12 + src/problem2/src/tokens/RLB.svg | 11 + src/problem2/src/tokens/RLC.svg | 4 + src/problem2/src/tokens/RNDR.svg | 11 + src/problem2/src/tokens/ROAR.svg | 18 + src/problem2/src/tokens/ROWAN.svg | 11 + src/problem2/src/tokens/RSR.svg | 4 + src/problem2/src/tokens/RUNE.svg | 10 + src/problem2/src/tokens/RVN.svg | 6 + src/problem2/src/tokens/S.svg | 4 + src/problem2/src/tokens/SAFEMOON.svg | 27 + src/problem2/src/tokens/SAGA.svg | 12 + src/problem2/src/tokens/SAND.svg | 10 + src/problem2/src/tokens/SAYVE.svg | 5 + src/problem2/src/tokens/SC.svg | 4 + src/problem2/src/tokens/SCRT.svg | 5 + src/problem2/src/tokens/SDT.svg | 48 + src/problem2/src/tokens/SEI.svg | 14 + src/problem2/src/tokens/SET.svg | 65 + src/problem2/src/tokens/SGT.svg | 138 + src/problem2/src/tokens/SHD.svg | 34 + src/problem2/src/tokens/SHIB.svg | 17 + src/problem2/src/tokens/SHIDO.svg | 20 + src/problem2/src/tokens/SITY.svg | 8 + src/problem2/src/tokens/SLERF.svg | 24 + src/problem2/src/tokens/SNT.svg | 4 + src/problem2/src/tokens/SNX.svg | 10 + src/problem2/src/tokens/SOL.svg | 12 + src/problem2/src/tokens/SOLETH.svg | 12 + src/problem2/src/tokens/SOM.svg | 10 + src/problem2/src/tokens/SOMM.svg | 65 + src/problem2/src/tokens/SPEC.svg | 4 + src/problem2/src/tokens/SRM.svg | 20 + src/problem2/src/tokens/SRV.svg | 5 + src/problem2/src/tokens/STARS.svg | 16 + src/problem2/src/tokens/STEEM.svg | 6 + src/problem2/src/tokens/STMX.svg | 4 + src/problem2/src/tokens/STORJ.svg | 13 + src/problem2/src/tokens/STRAX.svg | 12 + src/problem2/src/tokens/STRD.svg | 4 + src/problem2/src/tokens/STREAM.svg | 4 + src/problem2/src/tokens/STRK.svg | 13 + src/problem2/src/tokens/STT.svg | 4 + src/problem2/src/tokens/STX.svg | 4 + src/problem2/src/tokens/SUI.svg | 11 + src/problem2/src/tokens/SUN.svg | 60 + src/problem2/src/tokens/SUSHI.svg | 26 + src/problem2/src/tokens/SWTH-LEGACY.svg | 4 + src/problem2/src/tokens/SWTH.svg | 71 + src/problem2/src/tokens/SXP.svg | 10 + src/problem2/src/tokens/TAO.svg | 4 + src/problem2/src/tokens/TEL.svg | 4 + src/problem2/src/tokens/TFUEL.svg | 11 + src/problem2/src/tokens/THETA.svg | 13 + src/problem2/src/tokens/THT.svg | 68 + src/problem2/src/tokens/TIA.svg | 11 + src/problem2/src/tokens/TICK.svg | 17 + src/problem2/src/tokens/TITAN.svg | 11 + src/problem2/src/tokens/TLAND.svg | 5 + src/problem2/src/tokens/TLM.svg | 16 + src/problem2/src/tokens/TOMO.svg | 6 + src/problem2/src/tokens/TON.svg | 11 + src/problem2/src/tokens/TPC.svg | 17 + src/problem2/src/tokens/TRAXX.svg | 14 + src/problem2/src/tokens/TRB.svg | 11 + src/problem2/src/tokens/TRU.svg | 6 + src/problem2/src/tokens/TRUMP.svg | 20 + src/problem2/src/tokens/TRX.svg | 4 + src/problem2/src/tokens/TTT.svg | 6 + src/problem2/src/tokens/TUSD.svg | 6 + src/problem2/src/tokens/TWD.svg | 18 + src/problem2/src/tokens/TWT.svg | 77 + src/problem2/src/tokens/Token.svg | 15 + src/problem2/src/tokens/UBQ.svg | 7 + src/problem2/src/tokens/UMEE.svg | 39 + src/problem2/src/tokens/UNA.svg | 7 + src/problem2/src/tokens/UNI.svg | 15 + src/problem2/src/tokens/UOS.svg | 5 + src/problem2/src/tokens/USC-Minted.svg | 37 + src/problem2/src/tokens/USC.svg | 37 + src/problem2/src/tokens/USD.svg | 8 + src/problem2/src/tokens/USDC-dATOM.svg | 17 + src/problem2/src/tokens/USDC.e.svg | 6 + src/problem2/src/tokens/USDC.grv.svg | 14 + src/problem2/src/tokens/USDC.svg | 6 + src/problem2/src/tokens/USDP.svg | 12 + src/problem2/src/tokens/USDT.svg | 5 + src/problem2/src/tokens/USDY.svg | 11 + src/problem2/src/tokens/USK.svg | 19 + src/problem2/src/tokens/UST.svg | 5 + src/problem2/src/tokens/USUAL.svg | 48 + src/problem2/src/tokens/VDL.svg | 6 + src/problem2/src/tokens/VET.svg | 4 + src/problem2/src/tokens/VIRTUAL.svg | 24 + src/problem2/src/tokens/VKR.svg | 4 + src/problem2/src/tokens/VRTX.svg | 22 + src/problem2/src/tokens/W.svg | 11 + src/problem2/src/tokens/WAL.svg | 11 + src/problem2/src/tokens/WAVAX.svg | 4 + src/problem2/src/tokens/WAVE.svg | 4 + src/problem2/src/tokens/WBNB.svg | 4 + src/problem2/src/tokens/WBTC.svg | 9 + src/problem2/src/tokens/WETH.svg | 17 + src/problem2/src/tokens/WHALE.svg | 10 + src/problem2/src/tokens/WIF.svg | 23 + src/problem2/src/tokens/WIN.svg | 5 + src/problem2/src/tokens/WLD.svg | 11 + src/problem2/src/tokens/WMATIC.svg | 6 + src/problem2/src/tokens/WMNT.svg | 4 + src/problem2/src/tokens/WMON.png | Bin 0 -> 826 bytes src/problem2/src/tokens/WRX.svg | 7 + src/problem2/src/tokens/XCAD.svg | 12 + src/problem2/src/tokens/XDC.svg | 6 + src/problem2/src/tokens/XEM.svg | 4 + src/problem2/src/tokens/XKI.svg | 5 + src/problem2/src/tokens/XLM.svg | 5 + src/problem2/src/tokens/XMR.svg | 5 + src/problem2/src/tokens/XPRT.svg | 5 + src/problem2/src/tokens/XRP.svg | 4 + src/problem2/src/tokens/XSGD.svg | 11 + src/problem2/src/tokens/XTRA.svg | 9 + src/problem2/src/tokens/XTZ.svg | 4 + src/problem2/src/tokens/XVG.svg | 4 + src/problem2/src/tokens/XVS.svg | 11 + src/problem2/src/tokens/YAKI.svg | 20 + src/problem2/src/tokens/YAM.svg | 47 + src/problem2/src/tokens/YFI.svg | 6 + src/problem2/src/tokens/YieldUSD.svg | 17 + src/problem2/src/tokens/ZCH.svg | 6 + src/problem2/src/tokens/ZEC.svg | 10 + src/problem2/src/tokens/ZEN.svg | 20 + src/problem2/src/tokens/ZIL.svg | 7 + src/problem2/src/tokens/ZRO.svg | 12 + src/problem2/src/tokens/ZRX.svg | 7 + src/problem2/src/tokens/ZWAP.svg | 5 + src/problem2/src/tokens/ampKUJI.svg | 12 + src/problem2/src/tokens/ampLUNA.svg | 15 + src/problem2/src/tokens/axlUSDC.svg | 6 + src/problem2/src/tokens/bCFX.svg | 5 + src/problem2/src/tokens/bNEO.svg | 12 + src/problem2/src/tokens/beraSTONE.svg | 20 + src/problem2/src/tokens/cUSD.svg | 21 + src/problem2/src/tokens/cbBTC.svg | 5 + src/problem2/src/tokens/cbETH.svg | 10 + src/problem2/src/tokens/cmETH.svg | 22 + src/problem2/src/tokens/dATOM.svg | 13 + src/problem2/src/tokens/dGLP.svg | 20 + src/problem2/src/tokens/dINJ.svg | 20 + src/problem2/src/tokens/dXCAD.svg | 13 + src/problem2/src/tokens/eGLD.svg | 36 + src/problem2/src/tokens/ePLAY.svg | 23 + src/problem2/src/tokens/esFLUO.svg | 18 + src/problem2/src/tokens/gZIL.svg | 12 + src/problem2/src/tokens/iSEI.svg | 10 + src/problem2/src/tokens/iUSD.svg | 5 + src/problem2/src/tokens/mETH.svg | 24 + src/problem2/src/tokens/milkTIA.svg | 18 + src/problem2/src/tokens/nLEND.svg | 19 + src/problem2/src/tokens/nNEO.svg | 6 + src/problem2/src/tokens/rATOM.svg | 55 + src/problem2/src/tokens/rSWTH.svg | 88 + src/problem2/src/tokens/sARCH.svg | 11 + src/problem2/src/tokens/stATOM.svg | 22 + src/problem2/src/tokens/stDYDX.svg | 6 + src/problem2/src/tokens/stDYM.svg | 11 + src/problem2/src/tokens/stETH.svg | 18 + src/problem2/src/tokens/stEVMOS.svg | 16 + src/problem2/src/tokens/stFLUO.svg | 18 + src/problem2/src/tokens/stIBCX.svg | 4 + src/problem2/src/tokens/stINJ.svg | 4 + src/problem2/src/tokens/stJUNO.svg | 5 + src/problem2/src/tokens/stLUNA.svg | 9 + src/problem2/src/tokens/stOKT.svg | 8 + src/problem2/src/tokens/stOSMO.svg | 16 + src/problem2/src/tokens/stSAGA.svg | 5 + src/problem2/src/tokens/stSTARS.svg | 5 + src/problem2/src/tokens/stTIA.svg | 4 + src/problem2/src/tokens/stZIL.svg | 8 + src/problem2/src/tokens/stkATOM.svg | 20 + src/problem2/src/tokens/stkDYDX.svg | 22 + src/problem2/src/tokens/stkSTARS.svg | 15 + src/problem2/src/tokens/vZWAP.svg | 12 + src/problem2/src/tokens/veFLUO.svg | 18 + src/problem2/src/tokens/wKAS.svg | 5 + src/problem2/src/tokens/wstETH.svg | 11 + src/problem2/src/types/index.ts | 10 + src/problem2/src/utils/cn.ts | 6 + src/problem2/src/vite-env.d.ts | 1 + src/problem2/style.css | 8 - src/problem2/tailwind.config.js | 29 + src/problem2/tsconfig.app.json | 29 + src/problem2/tsconfig.json | 7 + src/problem2/tsconfig.node.json | 22 + src/problem2/vite.config.ts | 13 + 569 files changed, 18522 insertions(+), 34 deletions(-) create mode 100644 .trae/documents/plan_20260210_084427.md create mode 100644 src/problem2/.gitignore create mode 100644 src/problem2/package-lock.json create mode 100644 src/problem2/package.json create mode 100644 src/problem2/postcss.config.js delete mode 100644 src/problem2/script.js create mode 100644 src/problem2/src/App.tsx create mode 100644 src/problem2/src/components/layout/Header.tsx create mode 100644 src/problem2/src/components/layout/Layout.tsx create mode 100644 src/problem2/src/components/layout/Sidebar.tsx create mode 100644 src/problem2/src/components/swap/OrderDetails.tsx create mode 100644 src/problem2/src/components/swap/SwapCard.tsx create mode 100644 src/problem2/src/components/swap/TokenInput.tsx create mode 100644 src/problem2/src/components/swap/TokenModal.tsx create mode 100644 src/problem2/src/components/ui/Button.tsx create mode 100644 src/problem2/src/components/ui/Input.tsx create mode 100644 src/problem2/src/components/ui/Modal.tsx create mode 100644 src/problem2/src/components/ui/Skeleton.tsx create mode 100644 src/problem2/src/components/ui/Toast.tsx create mode 100644 src/problem2/src/constants/tokens.ts create mode 100644 src/problem2/src/hooks/useSwap.ts create mode 100644 src/problem2/src/index.css create mode 100644 src/problem2/src/main.tsx create mode 100644 src/problem2/src/prices.json create mode 100644 src/problem2/src/tokens/1INCH.svg create mode 100644 src/problem2/src/tokens/AAVE.svg create mode 100644 src/problem2/src/tokens/ACT.svg create mode 100644 src/problem2/src/tokens/ADA.svg create mode 100644 src/problem2/src/tokens/AEVO.svg create mode 100644 src/problem2/src/tokens/AGI.svg create mode 100644 src/problem2/src/tokens/AI16Z.svg create mode 100644 src/problem2/src/tokens/AIXBT.svg create mode 100644 src/problem2/src/tokens/AKRO.svg create mode 100644 src/problem2/src/tokens/AKT.svg create mode 100644 src/problem2/src/tokens/ALGO.svg create mode 100644 src/problem2/src/tokens/ALPHA.svg create mode 100644 src/problem2/src/tokens/ALT.svg create mode 100644 src/problem2/src/tokens/AMP.svg create mode 100644 src/problem2/src/tokens/ANC.svg create mode 100644 src/problem2/src/tokens/ANDR.svg create mode 100644 src/problem2/src/tokens/ANIME.svg create mode 100644 src/problem2/src/tokens/ANKR.svg create mode 100644 src/problem2/src/tokens/ANT.svg create mode 100644 src/problem2/src/tokens/ANY.svg create mode 100644 src/problem2/src/tokens/APE.svg create mode 100644 src/problem2/src/tokens/APOLLO.svg create mode 100644 src/problem2/src/tokens/APT.svg create mode 100644 src/problem2/src/tokens/AR.svg create mode 100644 src/problem2/src/tokens/ARB.svg create mode 100644 src/problem2/src/tokens/ARCH.svg create mode 100644 src/problem2/src/tokens/ASA.svg create mode 100644 src/problem2/src/tokens/ASTRO.svg create mode 100644 src/problem2/src/tokens/ATOM-dATOM.svg create mode 100644 src/problem2/src/tokens/ATOM.svg create mode 100644 src/problem2/src/tokens/AUDIO.svg create mode 100644 src/problem2/src/tokens/AUT.svg create mode 100644 src/problem2/src/tokens/AVA.svg create mode 100644 src/problem2/src/tokens/AVAIL.svg create mode 100644 src/problem2/src/tokens/AVAX.svg create mode 100644 src/problem2/src/tokens/AXL.svg create mode 100644 src/problem2/src/tokens/AXS.svg create mode 100644 src/problem2/src/tokens/AXT.svg create mode 100644 src/problem2/src/tokens/BAKE.svg create mode 100644 src/problem2/src/tokens/BAL.svg create mode 100644 src/problem2/src/tokens/BAND.svg create mode 100644 src/problem2/src/tokens/BAT.svg create mode 100644 src/problem2/src/tokens/BCD.svg create mode 100644 src/problem2/src/tokens/BCH.svg create mode 100644 src/problem2/src/tokens/BCHA.svg create mode 100644 src/problem2/src/tokens/BCN.svg create mode 100644 src/problem2/src/tokens/BCNA.svg create mode 100644 src/problem2/src/tokens/BELT.svg create mode 100644 src/problem2/src/tokens/BERA.svg create mode 100644 src/problem2/src/tokens/BETH.svg create mode 100644 src/problem2/src/tokens/BHC.svg create mode 100644 src/problem2/src/tokens/BIT.svg create mode 100644 src/problem2/src/tokens/BLAST.svg create mode 100644 src/problem2/src/tokens/BLD.svg create mode 100644 src/problem2/src/tokens/BLOX.svg create mode 100644 src/problem2/src/tokens/BLUR.svg create mode 100644 src/problem2/src/tokens/BNB.svg create mode 100644 src/problem2/src/tokens/BNT.svg create mode 100644 src/problem2/src/tokens/BOLT.svg create mode 100644 src/problem2/src/tokens/BONK.svg create mode 100644 src/problem2/src/tokens/BOOT.svg create mode 100644 src/problem2/src/tokens/BRAINS.svg create mode 100644 src/problem2/src/tokens/BRETT.svg create mode 100644 src/problem2/src/tokens/BRKL.svg create mode 100644 src/problem2/src/tokens/BTC.svg create mode 100644 src/problem2/src/tokens/BTCST.svg create mode 100644 src/problem2/src/tokens/BTG.svg create mode 100644 src/problem2/src/tokens/BTM.svg create mode 100644 src/problem2/src/tokens/BTMX.svg create mode 100644 src/problem2/src/tokens/BTSG.svg create mode 100644 src/problem2/src/tokens/BTT.svg create mode 100644 src/problem2/src/tokens/BUNNY.svg create mode 100644 src/problem2/src/tokens/BUSD.svg create mode 100644 src/problem2/src/tokens/BUSDT.svg create mode 100644 src/problem2/src/tokens/C98.svg create mode 100644 src/problem2/src/tokens/CAKE.svg create mode 100644 src/problem2/src/tokens/CANTO.svg create mode 100644 src/problem2/src/tokens/CARB.svg create mode 100644 src/problem2/src/tokens/CAT.svg create mode 100644 src/problem2/src/tokens/CEL.svg create mode 100644 src/problem2/src/tokens/CELO.svg create mode 100644 src/problem2/src/tokens/CETH.svg create mode 100644 src/problem2/src/tokens/CFX.svg create mode 100644 src/problem2/src/tokens/CGAS.svg create mode 100644 src/problem2/src/tokens/CHEQ.svg create mode 100644 src/problem2/src/tokens/CHOG.svg create mode 100644 src/problem2/src/tokens/CHSB.svg create mode 100644 src/problem2/src/tokens/CHT.svg create mode 100644 src/problem2/src/tokens/CHZ.svg create mode 100644 src/problem2/src/tokens/CKB.svg create mode 100644 src/problem2/src/tokens/CMDX.svg create mode 100644 src/problem2/src/tokens/CMST.svg create mode 100644 src/problem2/src/tokens/CNT.svg create mode 100644 src/problem2/src/tokens/COIN.svg create mode 100644 src/problem2/src/tokens/COMP.svg create mode 100644 src/problem2/src/tokens/COOK.svg create mode 100644 src/problem2/src/tokens/CRBRUS.svg create mode 100644 src/problem2/src/tokens/CRE.svg create mode 100644 src/problem2/src/tokens/CRO.svg create mode 100644 src/problem2/src/tokens/CRV.svg create mode 100644 src/problem2/src/tokens/CTK.svg create mode 100644 src/problem2/src/tokens/CW.svg create mode 100644 src/problem2/src/tokens/DAG.svg create mode 100644 src/problem2/src/tokens/DAI.svg create mode 100644 src/problem2/src/tokens/DAK.svg create mode 100644 src/problem2/src/tokens/DARC.svg create mode 100644 src/problem2/src/tokens/DASH.svg create mode 100644 src/problem2/src/tokens/DBC.svg create mode 100644 src/problem2/src/tokens/DCR.svg create mode 100644 src/problem2/src/tokens/DEC.svg create mode 100644 src/problem2/src/tokens/DEGEN.svg create mode 100644 src/problem2/src/tokens/DENT.svg create mode 100644 src/problem2/src/tokens/DGB.svg create mode 100644 src/problem2/src/tokens/DIG.svg create mode 100644 src/problem2/src/tokens/DKT.svg create mode 100644 src/problem2/src/tokens/DODO.svg create mode 100644 src/problem2/src/tokens/DOGE.svg create mode 100644 src/problem2/src/tokens/DOT.svg create mode 100644 src/problem2/src/tokens/DPL.svg create mode 100644 src/problem2/src/tokens/DPX.svg create mode 100644 src/problem2/src/tokens/DRFT.svg create mode 100644 src/problem2/src/tokens/DROP.svg create mode 100644 src/problem2/src/tokens/DSM.svg create mode 100644 src/problem2/src/tokens/DUVT.svg create mode 100644 src/problem2/src/tokens/DVPN.svg create mode 100644 src/problem2/src/tokens/DYDX.svg create mode 100644 src/problem2/src/tokens/DYM.svg create mode 100644 src/problem2/src/tokens/EEUR.svg create mode 100644 src/problem2/src/tokens/EIGEN.svg create mode 100644 src/problem2/src/tokens/ELA.svg create mode 100644 src/problem2/src/tokens/ELF.svg create mode 100644 src/problem2/src/tokens/ENA.svg create mode 100644 src/problem2/src/tokens/ENJ.svg create mode 100644 src/problem2/src/tokens/ENS.svg create mode 100644 src/problem2/src/tokens/EOS.svg create mode 100644 src/problem2/src/tokens/EPS.svg create mode 100644 src/problem2/src/tokens/ETC.svg create mode 100644 src/problem2/src/tokens/ETH.svg create mode 100644 src/problem2/src/tokens/ETHBTC.svg create mode 100644 src/problem2/src/tokens/ETN.svg create mode 100644 src/problem2/src/tokens/EUROC.svg create mode 100644 src/problem2/src/tokens/EUT.svg create mode 100644 src/problem2/src/tokens/EVMOS.svg create mode 100644 src/problem2/src/tokens/EWT.svg create mode 100644 src/problem2/src/tokens/FARTCOIN.svg create mode 100644 src/problem2/src/tokens/FBTC.svg create mode 100644 src/problem2/src/tokens/FEES.svg create mode 100644 src/problem2/src/tokens/FET.svg create mode 100644 src/problem2/src/tokens/FIL.svg create mode 100644 src/problem2/src/tokens/FIS.svg create mode 100644 src/problem2/src/tokens/FLIX.svg create mode 100644 src/problem2/src/tokens/FLM.svg create mode 100644 src/problem2/src/tokens/FLOW.svg create mode 100644 src/problem2/src/tokens/FLUID.svg create mode 100644 src/problem2/src/tokens/FLUO.svg create mode 100644 src/problem2/src/tokens/FRANK.svg create mode 100644 src/problem2/src/tokens/FSGLP.svg create mode 100644 src/problem2/src/tokens/FTM.svg create mode 100644 src/problem2/src/tokens/FTT.svg create mode 100644 src/problem2/src/tokens/FTTC.svg create mode 100644 src/problem2/src/tokens/FUN.svg create mode 100644 src/problem2/src/tokens/GALA.svg create mode 100644 src/problem2/src/tokens/GAMBIT.svg create mode 100644 src/problem2/src/tokens/GAS.svg create mode 100644 src/problem2/src/tokens/GBT.svg create mode 100644 src/problem2/src/tokens/GLP.svg create mode 100644 src/problem2/src/tokens/GM.svg create mode 100644 src/problem2/src/tokens/GMX.svg create mode 100644 src/problem2/src/tokens/GNO.svg create mode 100644 src/problem2/src/tokens/GNS.svg create mode 100644 src/problem2/src/tokens/GOAT.svg create mode 100644 src/problem2/src/tokens/GRASS.svg create mode 100644 src/problem2/src/tokens/GRAV.svg create mode 100644 src/problem2/src/tokens/GRT.svg create mode 100644 src/problem2/src/tokens/GT.svg create mode 100644 src/problem2/src/tokens/HBAR.svg create mode 100644 src/problem2/src/tokens/HDN.png create mode 100644 src/problem2/src/tokens/HDN.svg create mode 100644 src/problem2/src/tokens/HELMET.svg create mode 100644 src/problem2/src/tokens/HKT.svg create mode 100644 src/problem2/src/tokens/HNT.svg create mode 100644 src/problem2/src/tokens/HOPE.svg create mode 100644 src/problem2/src/tokens/HOT.svg create mode 100644 src/problem2/src/tokens/HT.svg create mode 100644 src/problem2/src/tokens/HUAHUA.svg create mode 100644 src/problem2/src/tokens/HUNY.svg create mode 100644 src/problem2/src/tokens/HUSD.svg create mode 100644 src/problem2/src/tokens/HYPE.svg create mode 100644 src/problem2/src/tokens/IBCX.svg create mode 100644 src/problem2/src/tokens/ICP.svg create mode 100644 src/problem2/src/tokens/ICX.svg create mode 100644 src/problem2/src/tokens/IDT.svg create mode 100644 src/problem2/src/tokens/INIT.svg create mode 100644 src/problem2/src/tokens/INJ.svg create mode 100644 src/problem2/src/tokens/INT.svg create mode 100644 src/problem2/src/tokens/ION.svg create mode 100644 src/problem2/src/tokens/IOST.svg create mode 100644 src/problem2/src/tokens/IOTX.svg create mode 100644 src/problem2/src/tokens/IOV.svg create mode 100644 src/problem2/src/tokens/IP.svg create mode 100644 src/problem2/src/tokens/IRIS.svg create mode 100644 src/problem2/src/tokens/IXO.svg create mode 100644 src/problem2/src/tokens/JPT.svg create mode 100644 src/problem2/src/tokens/JTO.svg create mode 100644 src/problem2/src/tokens/JUNO.svg create mode 100644 src/problem2/src/tokens/JUP.svg create mode 100644 src/problem2/src/tokens/KAITO.svg create mode 100644 src/problem2/src/tokens/KAS.svg create mode 100644 src/problem2/src/tokens/KBONK.svg create mode 100644 src/problem2/src/tokens/KCS.svg create mode 100644 src/problem2/src/tokens/KFLOKI.svg create mode 100644 src/problem2/src/tokens/KLAY.svg create mode 100644 src/problem2/src/tokens/KMD.svg create mode 100644 src/problem2/src/tokens/KNC.svg create mode 100644 src/problem2/src/tokens/KPEPE.svg create mode 100644 src/problem2/src/tokens/KRT.svg create mode 100644 src/problem2/src/tokens/KSHIB.svg create mode 100644 src/problem2/src/tokens/KSM.svg create mode 100644 src/problem2/src/tokens/KUJI.svg create mode 100644 src/problem2/src/tokens/LAYER.svg create mode 100644 src/problem2/src/tokens/LBTC.svg create mode 100644 src/problem2/src/tokens/LDO.svg create mode 100644 src/problem2/src/tokens/LEO.svg create mode 100644 src/problem2/src/tokens/LET.svg create mode 100644 src/problem2/src/tokens/LIKE.svg create mode 100644 src/problem2/src/tokens/LINK.svg create mode 100644 src/problem2/src/tokens/LKT.svg create mode 100644 src/problem2/src/tokens/LOOM.svg create mode 100644 src/problem2/src/tokens/LOOP.svg create mode 100644 src/problem2/src/tokens/LOTA.svg create mode 100644 src/problem2/src/tokens/LPLBTC_29MAY2025.svg create mode 100644 src/problem2/src/tokens/LPT.svg create mode 100644 src/problem2/src/tokens/LPberaSTONE_10APR2025.svg create mode 100644 src/problem2/src/tokens/LPcmETH_26JUN2025.svg create mode 100644 src/problem2/src/tokens/LRC.svg create mode 100644 src/problem2/src/tokens/LSI.svg create mode 100644 src/problem2/src/tokens/LSK.svg create mode 100644 src/problem2/src/tokens/LTC.svg create mode 100644 src/problem2/src/tokens/LUM.svg create mode 100644 src/problem2/src/tokens/LUNA.svg create mode 100644 src/problem2/src/tokens/LUNAX.svg create mode 100644 src/problem2/src/tokens/LUNC.svg create mode 100644 src/problem2/src/tokens/LUNI.svg create mode 100644 src/problem2/src/tokens/LUNR.svg create mode 100644 src/problem2/src/tokens/LUV.svg create mode 100644 src/problem2/src/tokens/LVN.svg create mode 100644 src/problem2/src/tokens/Liquid Staking Index.svg create mode 100644 src/problem2/src/tokens/M87.svg create mode 100644 src/problem2/src/tokens/MANA.svg create mode 100644 src/problem2/src/tokens/MANTA.svg create mode 100644 src/problem2/src/tokens/MARBLE.svg create mode 100644 src/problem2/src/tokens/MATH.svg create mode 100644 src/problem2/src/tokens/MATIC.svg create mode 100644 src/problem2/src/tokens/MDX.svg create mode 100644 src/problem2/src/tokens/ME.svg create mode 100644 src/problem2/src/tokens/MED.svg create mode 100644 src/problem2/src/tokens/MEME.svg create mode 100644 src/problem2/src/tokens/METIS.svg create mode 100644 src/problem2/src/tokens/MEW.svg create mode 100644 src/problem2/src/tokens/MIAW.svg create mode 100644 src/problem2/src/tokens/MILK.svg create mode 100644 src/problem2/src/tokens/MINA.svg create mode 100644 src/problem2/src/tokens/MINE.svg create mode 100644 src/problem2/src/tokens/MIOTA.svg create mode 100644 src/problem2/src/tokens/MIR.svg create mode 100644 src/problem2/src/tokens/MKR.svg create mode 100644 src/problem2/src/tokens/MMOG.svg create mode 100644 src/problem2/src/tokens/MNT.svg create mode 100644 src/problem2/src/tokens/MNTA.svg create mode 100644 src/problem2/src/tokens/MNTL.svg create mode 100644 src/problem2/src/tokens/MON.svg create mode 100644 src/problem2/src/tokens/MOODENG.svg create mode 100644 src/problem2/src/tokens/MORPHO.svg create mode 100644 src/problem2/src/tokens/MYT.svg create mode 100644 src/problem2/src/tokens/NANO.svg create mode 100644 src/problem2/src/tokens/NAS.svg create mode 100644 src/problem2/src/tokens/NAT.svg create mode 100644 src/problem2/src/tokens/NEAR.svg create mode 100644 src/problem2/src/tokens/NEIROETH.svg create mode 100644 src/problem2/src/tokens/NEO.svg create mode 100644 src/problem2/src/tokens/NETA.svg create mode 100644 src/problem2/src/tokens/NEX.svg create mode 100644 src/problem2/src/tokens/NEXO.svg create mode 100644 src/problem2/src/tokens/NGM.svg create mode 100644 src/problem2/src/tokens/NIM.svg create mode 100644 src/problem2/src/tokens/NKN.svg create mode 100644 src/problem2/src/tokens/NMR.svg create mode 100644 src/problem2/src/tokens/NOT.svg create mode 100644 src/problem2/src/tokens/NOTE.svg create mode 100644 src/problem2/src/tokens/NTRN-dATOM.svg create mode 100644 src/problem2/src/tokens/NTRN.svg create mode 100644 src/problem2/src/tokens/NXM.svg create mode 100644 src/problem2/src/tokens/OCEAN.svg create mode 100644 src/problem2/src/tokens/OCH.svg create mode 100644 src/problem2/src/tokens/OGN.svg create mode 100644 src/problem2/src/tokens/OKB.svg create mode 100644 src/problem2/src/tokens/OKT.svg create mode 100644 src/problem2/src/tokens/OM.svg create mode 100644 src/problem2/src/tokens/OMG.svg create mode 100644 src/problem2/src/tokens/OMG_2.svg create mode 100644 src/problem2/src/tokens/OMI.svg create mode 100644 src/problem2/src/tokens/OMNI.svg create mode 100644 src/problem2/src/tokens/ONDO.svg create mode 100644 src/problem2/src/tokens/ONE.svg create mode 100644 src/problem2/src/tokens/ONT.svg create mode 100644 src/problem2/src/tokens/OP.svg create mode 100644 src/problem2/src/tokens/OPUL.svg create mode 100644 src/problem2/src/tokens/ORDI.svg create mode 100644 src/problem2/src/tokens/ORION.svg create mode 100644 src/problem2/src/tokens/ORNE.svg create mode 100644 src/problem2/src/tokens/OSMO.svg create mode 100644 src/problem2/src/tokens/OXT.svg create mode 100644 src/problem2/src/tokens/OXY.svg create mode 100644 src/problem2/src/tokens/PAX.svg create mode 100644 src/problem2/src/tokens/PAXG.svg create mode 100644 src/problem2/src/tokens/PENDLE.svg create mode 100644 src/problem2/src/tokens/PENGU.svg create mode 100644 src/problem2/src/tokens/PEPE.svg create mode 100644 src/problem2/src/tokens/PHT.svg create mode 100644 src/problem2/src/tokens/PLAY.svg create mode 100644 src/problem2/src/tokens/PLQ.svg create mode 100644 src/problem2/src/tokens/PLY.svg create mode 100644 src/problem2/src/tokens/PNUT.svg create mode 100644 src/problem2/src/tokens/POL.svg create mode 100644 src/problem2/src/tokens/POLY.svg create mode 100644 src/problem2/src/tokens/POPCAT.svg create mode 100644 src/problem2/src/tokens/PORT.svg create mode 100644 src/problem2/src/tokens/PROM.svg create mode 100644 src/problem2/src/tokens/PSI.svg create mode 100644 src/problem2/src/tokens/PSTAKE.svg create mode 100644 src/problem2/src/tokens/PTLBTC_29MAY2025.svg create mode 100644 src/problem2/src/tokens/PTMETH_26DEC2024.svg create mode 100644 src/problem2/src/tokens/PTberaSTONE_10APR2025.svg create mode 100644 src/problem2/src/tokens/PTcmETH_26JUN2025.svg create mode 100644 src/problem2/src/tokens/PUDGY.svg create mode 100644 src/problem2/src/tokens/PUMP.svg create mode 100644 src/problem2/src/tokens/PUNDIX.svg create mode 100644 src/problem2/src/tokens/PURR.svg create mode 100644 src/problem2/src/tokens/PURSE.svg create mode 100644 src/problem2/src/tokens/PYTH.svg create mode 100644 src/problem2/src/tokens/QCK.svg create mode 100644 src/problem2/src/tokens/QKC.svg create mode 100644 src/problem2/src/tokens/QNT.svg create mode 100644 src/problem2/src/tokens/QTUM.svg create mode 100644 src/problem2/src/tokens/RAY.svg create mode 100644 src/problem2/src/tokens/RBN.svg create mode 100644 src/problem2/src/tokens/REEF.svg create mode 100644 src/problem2/src/tokens/REGEN.svg create mode 100644 src/problem2/src/tokens/REN.svg create mode 100644 src/problem2/src/tokens/REP.svg create mode 100644 src/problem2/src/tokens/REV.svg create mode 100644 src/problem2/src/tokens/RLB.svg create mode 100644 src/problem2/src/tokens/RLC.svg create mode 100644 src/problem2/src/tokens/RNDR.svg create mode 100644 src/problem2/src/tokens/ROAR.svg create mode 100644 src/problem2/src/tokens/ROWAN.svg create mode 100644 src/problem2/src/tokens/RSR.svg create mode 100644 src/problem2/src/tokens/RUNE.svg create mode 100644 src/problem2/src/tokens/RVN.svg create mode 100644 src/problem2/src/tokens/S.svg create mode 100644 src/problem2/src/tokens/SAFEMOON.svg create mode 100644 src/problem2/src/tokens/SAGA.svg create mode 100644 src/problem2/src/tokens/SAND.svg create mode 100644 src/problem2/src/tokens/SAYVE.svg create mode 100644 src/problem2/src/tokens/SC.svg create mode 100644 src/problem2/src/tokens/SCRT.svg create mode 100644 src/problem2/src/tokens/SDT.svg create mode 100644 src/problem2/src/tokens/SEI.svg create mode 100644 src/problem2/src/tokens/SET.svg create mode 100644 src/problem2/src/tokens/SGT.svg create mode 100644 src/problem2/src/tokens/SHD.svg create mode 100644 src/problem2/src/tokens/SHIB.svg create mode 100644 src/problem2/src/tokens/SHIDO.svg create mode 100644 src/problem2/src/tokens/SITY.svg create mode 100644 src/problem2/src/tokens/SLERF.svg create mode 100644 src/problem2/src/tokens/SNT.svg create mode 100644 src/problem2/src/tokens/SNX.svg create mode 100644 src/problem2/src/tokens/SOL.svg create mode 100644 src/problem2/src/tokens/SOLETH.svg create mode 100644 src/problem2/src/tokens/SOM.svg create mode 100644 src/problem2/src/tokens/SOMM.svg create mode 100644 src/problem2/src/tokens/SPEC.svg create mode 100644 src/problem2/src/tokens/SRM.svg create mode 100644 src/problem2/src/tokens/SRV.svg create mode 100644 src/problem2/src/tokens/STARS.svg create mode 100644 src/problem2/src/tokens/STEEM.svg create mode 100644 src/problem2/src/tokens/STMX.svg create mode 100644 src/problem2/src/tokens/STORJ.svg create mode 100644 src/problem2/src/tokens/STRAX.svg create mode 100644 src/problem2/src/tokens/STRD.svg create mode 100644 src/problem2/src/tokens/STREAM.svg create mode 100644 src/problem2/src/tokens/STRK.svg create mode 100644 src/problem2/src/tokens/STT.svg create mode 100644 src/problem2/src/tokens/STX.svg create mode 100644 src/problem2/src/tokens/SUI.svg create mode 100644 src/problem2/src/tokens/SUN.svg create mode 100644 src/problem2/src/tokens/SUSHI.svg create mode 100644 src/problem2/src/tokens/SWTH-LEGACY.svg create mode 100644 src/problem2/src/tokens/SWTH.svg create mode 100644 src/problem2/src/tokens/SXP.svg create mode 100644 src/problem2/src/tokens/TAO.svg create mode 100644 src/problem2/src/tokens/TEL.svg create mode 100644 src/problem2/src/tokens/TFUEL.svg create mode 100644 src/problem2/src/tokens/THETA.svg create mode 100644 src/problem2/src/tokens/THT.svg create mode 100644 src/problem2/src/tokens/TIA.svg create mode 100644 src/problem2/src/tokens/TICK.svg create mode 100644 src/problem2/src/tokens/TITAN.svg create mode 100644 src/problem2/src/tokens/TLAND.svg create mode 100644 src/problem2/src/tokens/TLM.svg create mode 100644 src/problem2/src/tokens/TOMO.svg create mode 100644 src/problem2/src/tokens/TON.svg create mode 100644 src/problem2/src/tokens/TPC.svg create mode 100644 src/problem2/src/tokens/TRAXX.svg create mode 100644 src/problem2/src/tokens/TRB.svg create mode 100644 src/problem2/src/tokens/TRU.svg create mode 100644 src/problem2/src/tokens/TRUMP.svg create mode 100644 src/problem2/src/tokens/TRX.svg create mode 100644 src/problem2/src/tokens/TTT.svg create mode 100644 src/problem2/src/tokens/TUSD.svg create mode 100644 src/problem2/src/tokens/TWD.svg create mode 100644 src/problem2/src/tokens/TWT.svg create mode 100644 src/problem2/src/tokens/Token.svg create mode 100644 src/problem2/src/tokens/UBQ.svg create mode 100644 src/problem2/src/tokens/UMEE.svg create mode 100644 src/problem2/src/tokens/UNA.svg create mode 100644 src/problem2/src/tokens/UNI.svg create mode 100644 src/problem2/src/tokens/UOS.svg create mode 100644 src/problem2/src/tokens/USC-Minted.svg create mode 100644 src/problem2/src/tokens/USC.svg create mode 100644 src/problem2/src/tokens/USD.svg create mode 100644 src/problem2/src/tokens/USDC-dATOM.svg create mode 100644 src/problem2/src/tokens/USDC.e.svg create mode 100644 src/problem2/src/tokens/USDC.grv.svg create mode 100644 src/problem2/src/tokens/USDC.svg create mode 100644 src/problem2/src/tokens/USDP.svg create mode 100644 src/problem2/src/tokens/USDT.svg create mode 100644 src/problem2/src/tokens/USDY.svg create mode 100644 src/problem2/src/tokens/USK.svg create mode 100644 src/problem2/src/tokens/UST.svg create mode 100644 src/problem2/src/tokens/USUAL.svg create mode 100644 src/problem2/src/tokens/VDL.svg create mode 100644 src/problem2/src/tokens/VET.svg create mode 100644 src/problem2/src/tokens/VIRTUAL.svg create mode 100644 src/problem2/src/tokens/VKR.svg create mode 100644 src/problem2/src/tokens/VRTX.svg create mode 100644 src/problem2/src/tokens/W.svg create mode 100644 src/problem2/src/tokens/WAL.svg create mode 100644 src/problem2/src/tokens/WAVAX.svg create mode 100644 src/problem2/src/tokens/WAVE.svg create mode 100644 src/problem2/src/tokens/WBNB.svg create mode 100644 src/problem2/src/tokens/WBTC.svg create mode 100644 src/problem2/src/tokens/WETH.svg create mode 100644 src/problem2/src/tokens/WHALE.svg create mode 100644 src/problem2/src/tokens/WIF.svg create mode 100644 src/problem2/src/tokens/WIN.svg create mode 100644 src/problem2/src/tokens/WLD.svg create mode 100644 src/problem2/src/tokens/WMATIC.svg create mode 100644 src/problem2/src/tokens/WMNT.svg create mode 100644 src/problem2/src/tokens/WMON.png create mode 100644 src/problem2/src/tokens/WRX.svg create mode 100644 src/problem2/src/tokens/XCAD.svg create mode 100644 src/problem2/src/tokens/XDC.svg create mode 100644 src/problem2/src/tokens/XEM.svg create mode 100644 src/problem2/src/tokens/XKI.svg create mode 100644 src/problem2/src/tokens/XLM.svg create mode 100644 src/problem2/src/tokens/XMR.svg create mode 100644 src/problem2/src/tokens/XPRT.svg create mode 100644 src/problem2/src/tokens/XRP.svg create mode 100644 src/problem2/src/tokens/XSGD.svg create mode 100644 src/problem2/src/tokens/XTRA.svg create mode 100644 src/problem2/src/tokens/XTZ.svg create mode 100644 src/problem2/src/tokens/XVG.svg create mode 100644 src/problem2/src/tokens/XVS.svg create mode 100644 src/problem2/src/tokens/YAKI.svg create mode 100644 src/problem2/src/tokens/YAM.svg create mode 100644 src/problem2/src/tokens/YFI.svg create mode 100644 src/problem2/src/tokens/YieldUSD.svg create mode 100644 src/problem2/src/tokens/ZCH.svg create mode 100644 src/problem2/src/tokens/ZEC.svg create mode 100644 src/problem2/src/tokens/ZEN.svg create mode 100644 src/problem2/src/tokens/ZIL.svg create mode 100644 src/problem2/src/tokens/ZRO.svg create mode 100644 src/problem2/src/tokens/ZRX.svg create mode 100644 src/problem2/src/tokens/ZWAP.svg create mode 100644 src/problem2/src/tokens/ampKUJI.svg create mode 100644 src/problem2/src/tokens/ampLUNA.svg create mode 100644 src/problem2/src/tokens/axlUSDC.svg create mode 100644 src/problem2/src/tokens/bCFX.svg create mode 100644 src/problem2/src/tokens/bNEO.svg create mode 100644 src/problem2/src/tokens/beraSTONE.svg create mode 100644 src/problem2/src/tokens/cUSD.svg create mode 100644 src/problem2/src/tokens/cbBTC.svg create mode 100644 src/problem2/src/tokens/cbETH.svg create mode 100644 src/problem2/src/tokens/cmETH.svg create mode 100644 src/problem2/src/tokens/dATOM.svg create mode 100644 src/problem2/src/tokens/dGLP.svg create mode 100644 src/problem2/src/tokens/dINJ.svg create mode 100644 src/problem2/src/tokens/dXCAD.svg create mode 100644 src/problem2/src/tokens/eGLD.svg create mode 100644 src/problem2/src/tokens/ePLAY.svg create mode 100644 src/problem2/src/tokens/esFLUO.svg create mode 100644 src/problem2/src/tokens/gZIL.svg create mode 100644 src/problem2/src/tokens/iSEI.svg create mode 100644 src/problem2/src/tokens/iUSD.svg create mode 100644 src/problem2/src/tokens/mETH.svg create mode 100644 src/problem2/src/tokens/milkTIA.svg create mode 100644 src/problem2/src/tokens/nLEND.svg create mode 100644 src/problem2/src/tokens/nNEO.svg create mode 100644 src/problem2/src/tokens/rATOM.svg create mode 100644 src/problem2/src/tokens/rSWTH.svg create mode 100644 src/problem2/src/tokens/sARCH.svg create mode 100644 src/problem2/src/tokens/stATOM.svg create mode 100644 src/problem2/src/tokens/stDYDX.svg create mode 100644 src/problem2/src/tokens/stDYM.svg create mode 100644 src/problem2/src/tokens/stETH.svg create mode 100644 src/problem2/src/tokens/stEVMOS.svg create mode 100644 src/problem2/src/tokens/stFLUO.svg create mode 100644 src/problem2/src/tokens/stIBCX.svg create mode 100644 src/problem2/src/tokens/stINJ.svg create mode 100644 src/problem2/src/tokens/stJUNO.svg create mode 100644 src/problem2/src/tokens/stLUNA.svg create mode 100644 src/problem2/src/tokens/stOKT.svg create mode 100644 src/problem2/src/tokens/stOSMO.svg create mode 100644 src/problem2/src/tokens/stSAGA.svg create mode 100644 src/problem2/src/tokens/stSTARS.svg create mode 100644 src/problem2/src/tokens/stTIA.svg create mode 100644 src/problem2/src/tokens/stZIL.svg create mode 100644 src/problem2/src/tokens/stkATOM.svg create mode 100644 src/problem2/src/tokens/stkDYDX.svg create mode 100644 src/problem2/src/tokens/stkSTARS.svg create mode 100644 src/problem2/src/tokens/vZWAP.svg create mode 100644 src/problem2/src/tokens/veFLUO.svg create mode 100644 src/problem2/src/tokens/wKAS.svg create mode 100644 src/problem2/src/tokens/wstETH.svg create mode 100644 src/problem2/src/types/index.ts create mode 100644 src/problem2/src/utils/cn.ts create mode 100644 src/problem2/src/vite-env.d.ts delete mode 100644 src/problem2/style.css create mode 100644 src/problem2/tailwind.config.js create mode 100644 src/problem2/tsconfig.app.json create mode 100644 src/problem2/tsconfig.json create mode 100644 src/problem2/tsconfig.node.json create mode 100644 src/problem2/vite.config.ts diff --git a/.trae/documents/plan_20260210_084427.md b/.trae/documents/plan_20260210_084427.md new file mode 100644 index 000000000..5a563dcb0 --- /dev/null +++ b/.trae/documents/plan_20260210_084427.md @@ -0,0 +1,59 @@ +# Build Binance-Style Token Swap Application + +## 1. Project Initialization & Configuration +- **Initialize Vite Project**: Create a new React + TypeScript project in `src/problem2`. +- **Install Dependencies**: + - `tailwindcss`, `postcss`, `autoprefixer` for styling. + - `lucide-react` for icons. + - `clsx`, `tailwind-merge` for class management. + - `zod` for validation. + - `framer-motion` (optional, for smooth modal/accordion animations if needed, otherwise CSS transitions). +- **Configure Tailwind**: Update `tailwind.config.js` with the specified Binance color palette (Primary `#FCD535`, Background `#1E2329`, etc.) and fonts. + +## 2. Architecture & Folder Structure +Create the following modular structure: +- `src/components/layout`: `Layout.tsx`, `Header.tsx`, `Sidebar.tsx` +- `src/components/swap`: `SwapCard.tsx`, `TokenInput.tsx`, `SlippageSettings.tsx`, `OrderDetails.tsx` +- `src/components/ui`: `Button.tsx`, `Modal.tsx`, `Skeleton.tsx`, `Toast.tsx` +- `src/hooks`: `useSwap.ts` (logic), `useToast.ts` (notifications) +- `src/constants`: `tokens.ts` (mock data), `theme.ts` +- `src/types`: `index.ts` (shared interfaces) +- `src/utils`: `format.ts` (number formatting) + +## 3. Implementation Steps + +### Phase 1: Foundation & Layout +- **Setup Global Styles**: Define base styles for dark mode and typography in `index.css`. +- **Build Layout Components**: + - **Header**: Sticky, Logo, Nav Links, Deposit Button. + - **Sidebar**: Collapsible, Navigation Icons. + - **Main Layout**: Responsive grid/flex structure to hold the Sidebar and Page Content. + +### Phase 2: Core UI Components +- **Primitive Components**: Create reusable `Button` (variants: primary, outline, danger), `Input`, `Card`. +- **Feedback Components**: Implement `Skeleton` for loading states and `Toast` for notifications. + +### Phase 3: Swap Feature Implementation +- **Data & Types**: Define Token interfaces and mock token list (BTC, ETH, USDT, etc.). +- **`useSwap` Hook**: + - Implement mock exchange rate logic. + - Handle `amount` changes and auto-calculate `to` amount. + - Manage loading states and slippage. +- **Swap Card UI**: + - **Tabs**: Market/Limit toggle. + - **Inputs**: "From" and "To" fields with Token Selector. + - **Token Modal**: Searchable list of tokens with "Hot Tokens". + - **Details**: Accordion for Fees, Price Impact, Minimum Received. + +### Phase 4: Integration & Refinement +- **Validation**: Integrate Zod to validate balance sufficiency and positive amounts. +- **Modals**: Implement "Confirm Swap" modal with summary. +- **Responsiveness**: Ensure mobile-first adaptation (collapsible sidebar, stacked layout). +- **Visual Polish**: Apply final "Binance" styling tweaks (hover states, transitions). + +## 4. Verification +- **Build Check**: Run `npm run build` to ensure no TS errors. +- **Functional Test**: + - Verify swap calculations. + - Check validation errors (insufficient balance). + - Confirm responsive behavior on different screen sizes. diff --git a/src/problem2/.gitignore b/src/problem2/.gitignore new file mode 100644 index 000000000..57e2d5b41 --- /dev/null +++ b/src/problem2/.gitignore @@ -0,0 +1,21 @@ +node_modules/ +dist/ +coverage/ +.vscode/ +.idea/ +.eslintcache +*.tsbuildinfo +.DS_Store +Thumbs.db +*.log +npm-debug.log* +yarn-debug.log* +pnpm-debug.log* +lerna-debug.log* +.env +.env.local +.env.development.local +.env.production.local +.env.test.local +*.swp +*.swo diff --git a/src/problem2/index.html b/src/problem2/index.html index 4058a68bf..7d09eee42 100644 --- a/src/problem2/index.html +++ b/src/problem2/index.html @@ -1,27 +1,13 @@ - - - - - Fancy Form - - - - - - - - -
-
Swap
- - - - - - - -
- - - + + + + + + + Coin Swap + + +
+ + diff --git a/src/problem2/package-lock.json b/src/problem2/package-lock.json new file mode 100644 index 000000000..c4a3c513c --- /dev/null +++ b/src/problem2/package-lock.json @@ -0,0 +1,2733 @@ +{ + "name": "token-swap-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "token-swap-app", + "version": "0.0.0", + "dependencies": { + "clsx": "^2.1.0", + "lucide-react": "^0.344.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.2.1", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/node": "^20.11.24", + "@types/react": "^18.2.64", + "@types/react-dom": "^18.2.21", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.18", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.2.2", + "vite": "^5.1.4" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.24", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001766", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.344.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.344.0.tgz", + "integrity": "sha512-6YyBnn91GB45VuVT96bYCOKElbJzUHqp65vX8cDcu55MQL9T969v4dhGClpljamuI/+KMO9P6w9Acq1CVQGvIQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", + "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/src/problem2/package.json b/src/problem2/package.json new file mode 100644 index 000000000..efcc812c3 --- /dev/null +++ b/src/problem2/package.json @@ -0,0 +1,32 @@ +{ + "name": "token-swap-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "clsx": "^2.1.0", + "lucide-react": "^0.344.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.2.1", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/node": "^20.11.24", + "@types/react": "^18.2.64", + "@types/react-dom": "^18.2.21", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.18", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.2.2", + "vite": "^5.1.4" + } +} diff --git a/src/problem2/postcss.config.js b/src/problem2/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/src/problem2/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/problem2/script.js b/src/problem2/script.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/problem2/src/App.tsx b/src/problem2/src/App.tsx new file mode 100644 index 000000000..c326b4c16 --- /dev/null +++ b/src/problem2/src/App.tsx @@ -0,0 +1,23 @@ +import { ToastProvider } from './components/ui/Toast'; +import { Layout } from './components/layout/Layout'; +import { SwapCard } from './components/swap/SwapCard'; + +function App() { + return ( + + +
+
+

Swap Tokens

+

Trade tokens in an instant

+
+
+ +
+
+
+
+ ) +} + +export default App diff --git a/src/problem2/src/components/layout/Header.tsx b/src/problem2/src/components/layout/Header.tsx new file mode 100644 index 000000000..a92db3643 --- /dev/null +++ b/src/problem2/src/components/layout/Header.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Menu, Globe, Bell, User, Wallet } from 'lucide-react'; +import { Button } from '../ui/Button'; + +export const Header: React.FC<{ onMenuClick: () => void }> = ({ onMenuClick }) => { + return ( +
+
+
+ + +
+ B +
+ Coin Swap +
+ +
+
+
+ + + + +
+ +
+
+
+ ); +}; diff --git a/src/problem2/src/components/layout/Layout.tsx b/src/problem2/src/components/layout/Layout.tsx new file mode 100644 index 000000000..c27cf3fe9 --- /dev/null +++ b/src/problem2/src/components/layout/Layout.tsx @@ -0,0 +1,25 @@ +import React, { useState } from 'react'; +import { Header } from './Header'; +import { Sidebar } from './Sidebar'; + +export const Layout: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [sidebarOpen, setSidebarOpen] = useState(false); + + return ( +
+
setSidebarOpen(true)} /> +
+
+ {}} /> +
+
+ setSidebarOpen(false)} /> +
+ +
+ {children} +
+
+
+ ); +}; diff --git a/src/problem2/src/components/layout/Sidebar.tsx b/src/problem2/src/components/layout/Sidebar.tsx new file mode 100644 index 000000000..be1cc967f --- /dev/null +++ b/src/problem2/src/components/layout/Sidebar.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { LayoutDashboard, History, Shield, HelpCircle, X } from 'lucide-react'; +import { cn } from '../../utils/cn'; + +interface SidebarProps { + isOpen: boolean; + onClose: () => void; +} + +export const Sidebar: React.FC = ({ isOpen, onClose }) => { + const menuItems = [ + { icon: LayoutDashboard, label: 'Dashboard', active: false }, + { icon: History, label: 'History', active: false }, + { icon: Shield, label: 'Security', active: false }, + { icon: HelpCircle, label: 'Support', active: false }, + ]; + + return ( + <> + {/* Mobile Overlay */} + {isOpen && ( +
+ )} + + {/* Sidebar Content */} + + + ); +}; diff --git a/src/problem2/src/components/swap/OrderDetails.tsx b/src/problem2/src/components/swap/OrderDetails.tsx new file mode 100644 index 000000000..fe02b6f5d --- /dev/null +++ b/src/problem2/src/components/swap/OrderDetails.tsx @@ -0,0 +1,56 @@ +import React, { useState } from 'react'; +import { ChevronDown, ChevronUp, Info } from 'lucide-react'; + +interface OrderDetailsProps { + exchangeRate: number; + fromSymbol: string; + toSymbol: string; + fee: number; + minReceived: string; + priceImpact: number; +} + +export const OrderDetails: React.FC = ({ + exchangeRate, + fromSymbol, + toSymbol, + fee, + minReceived, + priceImpact +}) => { + const [isOpen, setIsOpen] = useState(false); + + return ( +
+ + + {isOpen && ( +
+
+ Price Impact + 2 ? 'text-danger' : 'text-success'}> + < {priceImpact}% + +
+
+ Liquidity Provider Fee + {fee} {fromSymbol} +
+
+ Minimum Received + {minReceived} {toSymbol} +
+
+ )} +
+ ); +}; diff --git a/src/problem2/src/components/swap/SwapCard.tsx b/src/problem2/src/components/swap/SwapCard.tsx new file mode 100644 index 000000000..c8c507a36 --- /dev/null +++ b/src/problem2/src/components/swap/SwapCard.tsx @@ -0,0 +1,232 @@ +import React, { useState } from 'react'; +import { ArrowDownUp, Settings } from 'lucide-react'; +import { useSwap } from '../../hooks/useSwap'; +import { useToast } from '../ui/Toast'; +import { TokenInput } from './TokenInput'; +import { Button } from '../ui/Button'; +import { TokenModal } from './TokenModal'; +import { OrderDetails } from './OrderDetails'; +import { MOCK_TOKENS } from '../../constants/tokens'; +import { Token } from '../../types'; +import { Modal } from '../ui/Modal'; + +export const SwapCard: React.FC = () => { + const { + fromToken, setFromToken, + toToken, setToToken, + fromAmount, setFromAmount, + toAmount, + exchangeRate, + loading, + slippage, setSlippage, + handleSwitch + } = useSwap(); + + const { addToast } = useToast(); + + const [isTokenModalOpen, setIsTokenModalOpen] = useState(false); + const [activeSide, setActiveSide] = useState<'from' | 'to'>('from'); + const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false); + const [settingsOpen, setSettingsOpen] = useState(false); + const [tab, setTab] = useState<'market' | 'limit'>('market'); + + const handleTokenSelect = (token: Token) => { + if (activeSide === 'from') { + if (token.symbol === toToken.symbol) { + handleSwitch(); + } else { + setFromToken(token); + } + } else { + if (token.symbol === fromToken.symbol) { + handleSwitch(); + } else { + setToToken(token); + } + } + }; + + const openTokenModal = (side: 'from' | 'to') => { + setActiveSide(side); + setIsTokenModalOpen(true); + }; + + const handleSwap = () => { + // Validation + if (!fromAmount || Number(fromAmount) <= 0) { + addToast('Please enter an amount', 'error'); + return; + } + if (Number(fromAmount) > fromToken.balance) { + addToast('Insufficient balance', 'error'); + return; + } + + setIsConfirmModalOpen(true); + }; + + const executeSwap = () => { + setIsConfirmModalOpen(false); + // Simulate API call + setTimeout(() => { + addToast(`Swapped ${fromAmount} ${fromToken.symbol} for ${toAmount} ${toToken.symbol}`, 'success'); + setFromAmount(''); + }, 500); + }; + + return ( +
+
+
+
+ + +
+ +
+ + {settingsOpen && ( +
+
+ Slippage Tolerance + Your transaction will revert if the price changes unfavorably by more than this percentage. +
+
+ {[0.1, 0.5, 1.0].map((val) => ( + + ))} +
+
+ )} + +
+ openTokenModal('from')} + balance={fromToken.balance} + error={Number(fromAmount) > fromToken.balance ? "Insufficient balance" : undefined} + /> + +
+ +
+ + openTokenModal('to')} + readOnly + loading={loading} + /> +
+ + + + +
+ + setIsTokenModalOpen(false)} + onSelect={handleTokenSelect} + tokens={MOCK_TOKENS} + /> + + setIsConfirmModalOpen(false)} + title="Confirm Swap" + > +
+
+
+
+ +
+
{fromAmount}
+
{fromToken.symbol}
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
{toAmount}
+
{toToken.symbol}
+
+
+
+
+ +
+
+ Rate + 1 {fromToken.symbol} = {exchangeRate.toFixed(6)} {toToken.symbol} +
+
+ Network Fee + 0.001 {fromToken.symbol} +
+
+ Price Impact + 0.05% +
+
+ + +
+
+
+ ); +}; diff --git a/src/problem2/src/components/swap/TokenInput.tsx b/src/problem2/src/components/swap/TokenInput.tsx new file mode 100644 index 000000000..d30bbd04d --- /dev/null +++ b/src/problem2/src/components/swap/TokenInput.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import { ChevronDown } from 'lucide-react'; +import { Token } from '../../types'; +import { cn } from '../../utils/cn'; +import { Skeleton } from '../ui/Skeleton'; + +interface TokenInputProps { + label: string; + amount: string; + token: Token; + onAmountChange?: (val: string) => void; + onTokenClick: () => void; + readOnly?: boolean; + balance?: number; + loading?: boolean; + error?: string; +} + +export const TokenInput: React.FC = ({ + label, + amount, + token, + onAmountChange, + onTokenClick, + readOnly, + balance, + loading, + error +}) => { + const handleChange = (e: React.ChangeEvent) => { + const val = e.target.value; + // Allow only numbers and one decimal point + if (val === '' || /^\d*\.?\d*$/.test(val)) { + onAmountChange && onAmountChange(val); + } + }; + + return ( +
+
+ + {balance !== undefined && ( +
+ Balance: {balance} +
+ )} +
+ +
+ {loading ? ( + + ) : ( + + )} + + +
+ {error &&
{error}
} +
+ ); +}; diff --git a/src/problem2/src/components/swap/TokenModal.tsx b/src/problem2/src/components/swap/TokenModal.tsx new file mode 100644 index 000000000..4f10ed4d1 --- /dev/null +++ b/src/problem2/src/components/swap/TokenModal.tsx @@ -0,0 +1,76 @@ +import React, { useState } from 'react'; +import { Modal } from '../ui/Modal'; +import { Token } from '../../types'; +import { Input } from '../ui/Input'; + +interface TokenModalProps { + isOpen: boolean; + onClose: () => void; + onSelect: (token: Token) => void; + tokens: Token[]; +} + +export const TokenModal: React.FC = ({ isOpen, onClose, onSelect, tokens }) => { + const [search, setSearch] = useState(''); + + const filteredTokens = tokens.filter(t => + t.symbol.toLowerCase().includes(search.toLowerCase()) || + t.name.toLowerCase().includes(search.toLowerCase()) + ); + + return ( + +
+ setSearch(e.target.value)} + className="bg-background" + /> +
+ +
+

Hot Tokens

+
+ {tokens.slice(0, 4).map(token => ( + + ))} +
+
+ +
+ {filteredTokens.map(token => ( + + ))} + {filteredTokens.length === 0 && ( +
+ No tokens found +
+ )} +
+
+ ); +}; diff --git a/src/problem2/src/components/ui/Button.tsx b/src/problem2/src/components/ui/Button.tsx new file mode 100644 index 000000000..afeee9e4d --- /dev/null +++ b/src/problem2/src/components/ui/Button.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { cn } from '../../utils/cn'; + +interface ButtonProps extends React.ButtonHTMLAttributes { + variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'; + size?: 'sm' | 'md' | 'lg' | 'full'; + isLoading?: boolean; +} + +export const Button = React.forwardRef( + ({ className, variant = 'primary', size = 'md', isLoading, children, ...props }, ref) => { + return ( + + ); + } +); diff --git a/src/problem2/src/components/ui/Input.tsx b/src/problem2/src/components/ui/Input.tsx new file mode 100644 index 000000000..bd7b36828 --- /dev/null +++ b/src/problem2/src/components/ui/Input.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { cn } from '../../utils/cn'; + +export interface InputProps extends React.InputHTMLAttributes { + error?: string; + label?: string; +} + +export const Input = React.forwardRef( + ({ className, error, label, ...props }, ref) => { + return ( +
+ {label && } + + {error && {error}} +
+ ); + } +); diff --git a/src/problem2/src/components/ui/Modal.tsx b/src/problem2/src/components/ui/Modal.tsx new file mode 100644 index 000000000..58e72c840 --- /dev/null +++ b/src/problem2/src/components/ui/Modal.tsx @@ -0,0 +1,58 @@ +import React, { useEffect, useRef } from 'react'; +import { X } from 'lucide-react'; +import { cn } from '../../utils/cn'; +import { createPortal } from 'react-dom'; + +interface ModalProps { + isOpen: boolean; + onClose: () => void; + title: string; + children: React.ReactNode; + className?: string; +} + +export const Modal: React.FC = ({ isOpen, onClose, title, children, className }) => { + const modalRef = useRef(null); + + useEffect(() => { + const handleEscape = (e: KeyboardEvent) => { + if (e.key === 'Escape') onClose(); + }; + + if (isOpen) { + document.addEventListener('keydown', handleEscape); + document.body.style.overflow = 'hidden'; + } + + return () => { + document.removeEventListener('keydown', handleEscape); + document.body.style.overflow = 'unset'; + }; + }, [isOpen, onClose]); + + if (!isOpen) return null; + + return createPortal( +
+
e.stopPropagation()} + > +
+

{title}

+ +
+
+ {children} +
+
+
, + document.body + ); +}; diff --git a/src/problem2/src/components/ui/Skeleton.tsx b/src/problem2/src/components/ui/Skeleton.tsx new file mode 100644 index 000000000..e44d76cb4 --- /dev/null +++ b/src/problem2/src/components/ui/Skeleton.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { cn } from '../../utils/cn'; + +export const Skeleton: React.FC> = ({ className, ...props }) => { + return ( +
+ ); +}; diff --git a/src/problem2/src/components/ui/Toast.tsx b/src/problem2/src/components/ui/Toast.tsx new file mode 100644 index 000000000..9b4030ea9 --- /dev/null +++ b/src/problem2/src/components/ui/Toast.tsx @@ -0,0 +1,64 @@ +import React, { createContext, useContext, useState, useCallback } from 'react'; +import { X, CheckCircle, AlertCircle } from 'lucide-react'; +import { cn } from '../../utils/cn'; + +type ToastType = 'success' | 'error' | 'info'; + +interface Toast { + id: string; + message: string; + type: ToastType; +} + +interface ToastContextType { + addToast: (message: string, type: ToastType) => void; + removeToast: (id: string) => void; +} + +const ToastContext = createContext(undefined); + +export const ToastProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [toasts, setToasts] = useState([]); + + const addToast = useCallback((message: string, type: ToastType) => { + const id = Math.random().toString(36).substring(2, 9); + setToasts((prev) => [...prev, { id, message, type }]); + setTimeout(() => removeToast(id), 5000); + }, []); + + const removeToast = useCallback((id: string) => { + setToasts((prev) => prev.filter((t) => t.id !== id)); + }, []); + + return ( + + {children} +
+ {toasts.map((toast) => ( +
+ {toast.type === 'success' && } + {toast.type === 'error' && } +

{toast.message}

+ +
+ ))} +
+
+ ); +}; + +export const useToast = () => { + const context = useContext(ToastContext); + if (!context) throw new Error('useToast must be used within a ToastProvider'); + return context; +}; diff --git a/src/problem2/src/constants/tokens.ts b/src/problem2/src/constants/tokens.ts new file mode 100644 index 000000000..c501e56a0 --- /dev/null +++ b/src/problem2/src/constants/tokens.ts @@ -0,0 +1,39 @@ +import { Token } from '../types'; + +export const MOCK_TOKENS: Token[] = [ + { + symbol: 'BTC', + name: 'Bitcoin', + icon: 'https://cryptologos.cc/logos/bitcoin-btc-logo.svg?v=029', + balance: 0.05, + price: 52000 + }, + { + symbol: 'ETH', + name: 'Ethereum', + icon: 'https://cryptologos.cc/logos/ethereum-eth-logo.svg?v=029', + balance: 1.5, + price: 2900 + }, + { + symbol: 'USDT', + name: 'Tether', + icon: 'https://cryptologos.cc/logos/tether-usdt-logo.svg?v=029', + balance: 5000, + price: 1 + }, + { + symbol: 'BNB', + name: 'Binance Coin', + icon: 'https://cryptologos.cc/logos/bnb-bnb-logo.svg?v=029', + balance: 10, + price: 380 + }, + { + symbol: 'SOL', + name: 'Solana', + icon: 'https://cryptologos.cc/logos/solana-sol-logo.svg?v=029', + balance: 25, + price: 110 + }, +]; diff --git a/src/problem2/src/hooks/useSwap.ts b/src/problem2/src/hooks/useSwap.ts new file mode 100644 index 000000000..cb584ae58 --- /dev/null +++ b/src/problem2/src/hooks/useSwap.ts @@ -0,0 +1,60 @@ +import { useState, useEffect, useCallback } from 'react'; +import { Token } from '../types'; +import { MOCK_TOKENS } from '../constants/tokens'; + +export const useSwap = () => { + const [fromToken, setFromToken] = useState(MOCK_TOKENS[0]); // Default BTC + const [toToken, setToToken] = useState(MOCK_TOKENS[2]); // Default USDT + const [fromAmount, setFromAmount] = useState(''); + const [toAmount, setToAmount] = useState(''); + const [loading, setLoading] = useState(false); + const [slippage, setSlippage] = useState(0.5); + + const getExchangeRate = useCallback(() => { + return fromToken.price / toToken.price; + }, [fromToken, toToken]); + + const exchangeRate = getExchangeRate(); + + useEffect(() => { + if (!fromAmount || isNaN(Number(fromAmount))) { + setToAmount(''); + setLoading(false); + return; + } + + setLoading(true); + // Simulate network delay + const timer = setTimeout(() => { + const val = Number(fromAmount) * exchangeRate; + // Format to reasonable decimals based on price + const decimals = toToken.price < 1 ? 2 : 6; + setToAmount(val.toFixed(decimals)); + setLoading(false); + }, 600); + + return () => clearTimeout(timer); + }, [fromAmount, exchangeRate, toToken.price]); + + const handleSwitch = () => { + setFromToken(toToken); + setToToken(fromToken); + setFromAmount(toAmount); // Carry over the amount? Usually yes, or clear it. + // If we carry over, the effect will run and recalculate the new "to" + }; + + return { + fromToken, + setFromToken, + toToken, + setToToken, + fromAmount, + setFromAmount, + toAmount, + exchangeRate, + loading, + slippage, + setSlippage, + handleSwitch + }; +}; diff --git a/src/problem2/src/index.css b/src/problem2/src/index.css new file mode 100644 index 000000000..9438fa8c4 --- /dev/null +++ b/src/problem2/src/index.css @@ -0,0 +1,9 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + body { + @apply bg-background text-text-primary; + } +} diff --git a/src/problem2/src/main.tsx b/src/problem2/src/main.tsx new file mode 100644 index 000000000..3d7150da8 --- /dev/null +++ b/src/problem2/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/problem2/src/prices.json b/src/problem2/src/prices.json new file mode 100644 index 000000000..4bdf8bd5f --- /dev/null +++ b/src/problem2/src/prices.json @@ -0,0 +1,158 @@ +[ + { + "currency": "BLUR", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.20811525423728813 + }, + { + "currency": "bNEO", + "date": "2023-08-29T07:10:50.000Z", + "price": 7.1282679 + }, + { + "currency": "BUSD", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.999183113 + }, + { + "currency": "BUSD", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.9998782611186441 + }, + { "currency": "USD", "date": "2023-08-29T07:10:30.000Z", "price": 1 }, + { + "currency": "ETH", + "date": "2023-08-29T07:10:52.000Z", + "price": 1645.9337373737374 + }, + { + "currency": "GMX", + "date": "2023-08-29T07:10:40.000Z", + "price": 36.345114372881355 + }, + { + "currency": "STEVMOS", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.07276706779661017 + }, + { + "currency": "LUNA", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.40955638983050846 + }, + { + "currency": "RATOM", + "date": "2023-08-29T07:10:40.000Z", + "price": 10.250918915254237 + }, + { + "currency": "STRD", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.7386553389830508 + }, + { + "currency": "EVMOS", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.06246181355932203 + }, + { + "currency": "IBCX", + "date": "2023-08-29T07:10:40.000Z", + "price": 41.26811355932203 + }, + { + "currency": "IRIS", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.0177095593220339 + }, + { + "currency": "ampLUNA", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.49548589830508477 + }, + { "currency": "KUJI", "date": "2023-08-29T07:10:45.000Z", "price": 0.675 }, + { + "currency": "STOSMO", + "date": "2023-08-29T07:10:45.000Z", + "price": 0.431318 + }, + { "currency": "USDC", "date": "2023-08-29T07:10:40.000Z", "price": 0.989832 }, + { + "currency": "axlUSDC", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.989832 + }, + { + "currency": "ATOM", + "date": "2023-08-29T07:10:50.000Z", + "price": 7.186657333333334 + }, + { + "currency": "STATOM", + "date": "2023-08-29T07:10:45.000Z", + "price": 8.512162050847458 + }, + { + "currency": "OSMO", + "date": "2023-08-29T07:10:50.000Z", + "price": 0.3772974333333333 + }, + { + "currency": "rSWTH", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.00408771 + }, + { + "currency": "STLUNA", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.44232210169491526 + }, + { + "currency": "LSI", + "date": "2023-08-29T07:10:50.000Z", + "price": 67.69661525423729 + }, + { + "currency": "OKB", + "date": "2023-08-29T07:10:40.000Z", + "price": 42.97562059322034 + }, + { + "currency": "OKT", + "date": "2023-08-29T07:10:40.000Z", + "price": 13.561577966101694 + }, + { + "currency": "SWTH", + "date": "2023-08-29T07:10:45.000Z", + "price": 0.004039850455012084 + }, + { "currency": "USC", "date": "2023-08-29T07:10:40.000Z", "price": 0.994 }, + { "currency": "USDC", "date": "2023-08-29T07:10:30.000Z", "price": 1 }, + { "currency": "USDC", "date": "2023-08-29T07:10:30.000Z", "price": 1 }, + { + "currency": "USDC", + "date": "2023-08-29T07:10:40.000Z", + "price": 0.9998782611186441 + }, + { + "currency": "WBTC", + "date": "2023-08-29T07:10:52.000Z", + "price": 26002.82202020202 + }, + { + "currency": "wstETH", + "date": "2023-08-29T07:10:40.000Z", + "price": 1872.2579742372882 + }, + { + "currency": "YieldUSD", + "date": "2023-08-29T07:10:40.000Z", + "price": 1.0290847966101695 + }, + { + "currency": "ZIL", + "date": "2023-08-29T07:10:50.000Z", + "price": 0.01651813559322034 + } +] diff --git a/src/problem2/src/tokens/1INCH.svg b/src/problem2/src/tokens/1INCH.svg new file mode 100644 index 000000000..5970f7bd5 --- /dev/null +++ b/src/problem2/src/tokens/1INCH.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AAVE.svg b/src/problem2/src/tokens/AAVE.svg new file mode 100644 index 000000000..10e65a321 --- /dev/null +++ b/src/problem2/src/tokens/AAVE.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/ACT.svg b/src/problem2/src/tokens/ACT.svg new file mode 100644 index 000000000..2415fef55 --- /dev/null +++ b/src/problem2/src/tokens/ACT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ADA.svg b/src/problem2/src/tokens/ADA.svg new file mode 100644 index 000000000..c57bee959 --- /dev/null +++ b/src/problem2/src/tokens/ADA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/AEVO.svg b/src/problem2/src/tokens/AEVO.svg new file mode 100644 index 000000000..26c36a62d --- /dev/null +++ b/src/problem2/src/tokens/AEVO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AGI.svg b/src/problem2/src/tokens/AGI.svg new file mode 100644 index 000000000..2617764b4 --- /dev/null +++ b/src/problem2/src/tokens/AGI.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/AI16Z.svg b/src/problem2/src/tokens/AI16Z.svg new file mode 100644 index 000000000..d6b38455f --- /dev/null +++ b/src/problem2/src/tokens/AI16Z.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AIXBT.svg b/src/problem2/src/tokens/AIXBT.svg new file mode 100644 index 000000000..2fd4c736d --- /dev/null +++ b/src/problem2/src/tokens/AIXBT.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AKRO.svg b/src/problem2/src/tokens/AKRO.svg new file mode 100644 index 000000000..33501e5c2 --- /dev/null +++ b/src/problem2/src/tokens/AKRO.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/AKT.svg b/src/problem2/src/tokens/AKT.svg new file mode 100644 index 000000000..a0733cd5e --- /dev/null +++ b/src/problem2/src/tokens/AKT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/ALGO.svg b/src/problem2/src/tokens/ALGO.svg new file mode 100644 index 000000000..0c79ab88f --- /dev/null +++ b/src/problem2/src/tokens/ALGO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/ALPHA.svg b/src/problem2/src/tokens/ALPHA.svg new file mode 100644 index 000000000..9d916fb94 --- /dev/null +++ b/src/problem2/src/tokens/ALPHA.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ALT.svg b/src/problem2/src/tokens/ALT.svg new file mode 100644 index 000000000..fb551dfa7 --- /dev/null +++ b/src/problem2/src/tokens/ALT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AMP.svg b/src/problem2/src/tokens/AMP.svg new file mode 100644 index 000000000..71bec9f9b --- /dev/null +++ b/src/problem2/src/tokens/AMP.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/ANC.svg b/src/problem2/src/tokens/ANC.svg new file mode 100644 index 000000000..bd414783c --- /dev/null +++ b/src/problem2/src/tokens/ANC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/ANDR.svg b/src/problem2/src/tokens/ANDR.svg new file mode 100644 index 000000000..fc7e23b4e --- /dev/null +++ b/src/problem2/src/tokens/ANDR.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ANIME.svg b/src/problem2/src/tokens/ANIME.svg new file mode 100644 index 000000000..975db35cd --- /dev/null +++ b/src/problem2/src/tokens/ANIME.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ANKR.svg b/src/problem2/src/tokens/ANKR.svg new file mode 100644 index 000000000..b8599f016 --- /dev/null +++ b/src/problem2/src/tokens/ANKR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/ANT.svg b/src/problem2/src/tokens/ANT.svg new file mode 100644 index 000000000..f805ff79f --- /dev/null +++ b/src/problem2/src/tokens/ANT.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ANY.svg b/src/problem2/src/tokens/ANY.svg new file mode 100644 index 000000000..c50439117 --- /dev/null +++ b/src/problem2/src/tokens/ANY.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/APE.svg b/src/problem2/src/tokens/APE.svg new file mode 100644 index 000000000..26ff9cfd4 --- /dev/null +++ b/src/problem2/src/tokens/APE.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/APOLLO.svg b/src/problem2/src/tokens/APOLLO.svg new file mode 100644 index 000000000..852aa5cea --- /dev/null +++ b/src/problem2/src/tokens/APOLLO.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/APT.svg b/src/problem2/src/tokens/APT.svg new file mode 100644 index 000000000..df0a16904 --- /dev/null +++ b/src/problem2/src/tokens/APT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AR.svg b/src/problem2/src/tokens/AR.svg new file mode 100644 index 000000000..5efc91fdb --- /dev/null +++ b/src/problem2/src/tokens/AR.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/ARB.svg b/src/problem2/src/tokens/ARB.svg new file mode 100644 index 000000000..2666c28ab --- /dev/null +++ b/src/problem2/src/tokens/ARB.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ARCH.svg b/src/problem2/src/tokens/ARCH.svg new file mode 100644 index 000000000..b6deb843a --- /dev/null +++ b/src/problem2/src/tokens/ARCH.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ASA.svg b/src/problem2/src/tokens/ASA.svg new file mode 100644 index 000000000..7023a0624 --- /dev/null +++ b/src/problem2/src/tokens/ASA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/ASTRO.svg b/src/problem2/src/tokens/ASTRO.svg new file mode 100644 index 000000000..23047ab94 --- /dev/null +++ b/src/problem2/src/tokens/ASTRO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ATOM-dATOM.svg b/src/problem2/src/tokens/ATOM-dATOM.svg new file mode 100644 index 000000000..07e4a7d4c --- /dev/null +++ b/src/problem2/src/tokens/ATOM-dATOM.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ATOM.svg b/src/problem2/src/tokens/ATOM.svg new file mode 100644 index 000000000..f3f9d1042 --- /dev/null +++ b/src/problem2/src/tokens/ATOM.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/AUDIO.svg b/src/problem2/src/tokens/AUDIO.svg new file mode 100644 index 000000000..527d7ae79 --- /dev/null +++ b/src/problem2/src/tokens/AUDIO.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/AUT.svg b/src/problem2/src/tokens/AUT.svg new file mode 100644 index 000000000..4f442bcfe --- /dev/null +++ b/src/problem2/src/tokens/AUT.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AVA.svg b/src/problem2/src/tokens/AVA.svg new file mode 100644 index 000000000..b88859ee5 --- /dev/null +++ b/src/problem2/src/tokens/AVA.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/AVAIL.svg b/src/problem2/src/tokens/AVAIL.svg new file mode 100644 index 000000000..6b011a7f6 --- /dev/null +++ b/src/problem2/src/tokens/AVAIL.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/AVAX.svg b/src/problem2/src/tokens/AVAX.svg new file mode 100644 index 000000000..e85981529 --- /dev/null +++ b/src/problem2/src/tokens/AVAX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/AXL.svg b/src/problem2/src/tokens/AXL.svg new file mode 100644 index 000000000..a0d81a72f --- /dev/null +++ b/src/problem2/src/tokens/AXL.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/AXS.svg b/src/problem2/src/tokens/AXS.svg new file mode 100644 index 000000000..ab64a1a09 --- /dev/null +++ b/src/problem2/src/tokens/AXS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/AXT.svg b/src/problem2/src/tokens/AXT.svg new file mode 100644 index 000000000..a0be2a7e3 --- /dev/null +++ b/src/problem2/src/tokens/AXT.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BAKE.svg b/src/problem2/src/tokens/BAKE.svg new file mode 100644 index 000000000..48e18cc4c --- /dev/null +++ b/src/problem2/src/tokens/BAKE.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BAL.svg b/src/problem2/src/tokens/BAL.svg new file mode 100644 index 000000000..274d48692 --- /dev/null +++ b/src/problem2/src/tokens/BAL.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/BAND.svg b/src/problem2/src/tokens/BAND.svg new file mode 100644 index 000000000..fe0b05317 --- /dev/null +++ b/src/problem2/src/tokens/BAND.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BAT.svg b/src/problem2/src/tokens/BAT.svg new file mode 100644 index 000000000..6bea15edb --- /dev/null +++ b/src/problem2/src/tokens/BAT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BCD.svg b/src/problem2/src/tokens/BCD.svg new file mode 100644 index 000000000..2eae4d86a --- /dev/null +++ b/src/problem2/src/tokens/BCD.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BCH.svg b/src/problem2/src/tokens/BCH.svg new file mode 100644 index 000000000..c1b218586 --- /dev/null +++ b/src/problem2/src/tokens/BCH.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BCHA.svg b/src/problem2/src/tokens/BCHA.svg new file mode 100644 index 000000000..d1c50093b --- /dev/null +++ b/src/problem2/src/tokens/BCHA.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/BCN.svg b/src/problem2/src/tokens/BCN.svg new file mode 100644 index 000000000..446afbc22 --- /dev/null +++ b/src/problem2/src/tokens/BCN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BCNA.svg b/src/problem2/src/tokens/BCNA.svg new file mode 100644 index 000000000..81cb2950d --- /dev/null +++ b/src/problem2/src/tokens/BCNA.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/BELT.svg b/src/problem2/src/tokens/BELT.svg new file mode 100644 index 000000000..0711b1485 --- /dev/null +++ b/src/problem2/src/tokens/BELT.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem2/src/tokens/BERA.svg b/src/problem2/src/tokens/BERA.svg new file mode 100644 index 000000000..e77de0c56 --- /dev/null +++ b/src/problem2/src/tokens/BERA.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BETH.svg b/src/problem2/src/tokens/BETH.svg new file mode 100644 index 000000000..46a240195 --- /dev/null +++ b/src/problem2/src/tokens/BETH.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BHC.svg b/src/problem2/src/tokens/BHC.svg new file mode 100644 index 000000000..c1b218586 --- /dev/null +++ b/src/problem2/src/tokens/BHC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BIT.svg b/src/problem2/src/tokens/BIT.svg new file mode 100644 index 000000000..123a839eb --- /dev/null +++ b/src/problem2/src/tokens/BIT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BLAST.svg b/src/problem2/src/tokens/BLAST.svg new file mode 100644 index 000000000..d931df3f8 --- /dev/null +++ b/src/problem2/src/tokens/BLAST.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BLD.svg b/src/problem2/src/tokens/BLD.svg new file mode 100644 index 000000000..1674899d4 --- /dev/null +++ b/src/problem2/src/tokens/BLD.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BLOX.svg b/src/problem2/src/tokens/BLOX.svg new file mode 100644 index 000000000..7a3045c57 --- /dev/null +++ b/src/problem2/src/tokens/BLOX.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BLUR.svg b/src/problem2/src/tokens/BLUR.svg new file mode 100644 index 000000000..bf1e28098 --- /dev/null +++ b/src/problem2/src/tokens/BLUR.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BNB.svg b/src/problem2/src/tokens/BNB.svg new file mode 100644 index 000000000..a7c669976 --- /dev/null +++ b/src/problem2/src/tokens/BNB.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BNT.svg b/src/problem2/src/tokens/BNT.svg new file mode 100644 index 000000000..4c29bec3c --- /dev/null +++ b/src/problem2/src/tokens/BNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BOLT.svg b/src/problem2/src/tokens/BOLT.svg new file mode 100644 index 000000000..a74a21608 --- /dev/null +++ b/src/problem2/src/tokens/BOLT.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BONK.svg b/src/problem2/src/tokens/BONK.svg new file mode 100644 index 000000000..5df777e89 --- /dev/null +++ b/src/problem2/src/tokens/BONK.svg @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BOOT.svg b/src/problem2/src/tokens/BOOT.svg new file mode 100644 index 000000000..2469b80cf --- /dev/null +++ b/src/problem2/src/tokens/BOOT.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/BRAINS.svg b/src/problem2/src/tokens/BRAINS.svg new file mode 100644 index 000000000..5c6a1d418 --- /dev/null +++ b/src/problem2/src/tokens/BRAINS.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BRETT.svg b/src/problem2/src/tokens/BRETT.svg new file mode 100644 index 000000000..a799d6477 --- /dev/null +++ b/src/problem2/src/tokens/BRETT.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BRKL.svg b/src/problem2/src/tokens/BRKL.svg new file mode 100644 index 000000000..5963d1824 --- /dev/null +++ b/src/problem2/src/tokens/BRKL.svg @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/BTC.svg b/src/problem2/src/tokens/BTC.svg new file mode 100644 index 000000000..cd3b1e78e --- /dev/null +++ b/src/problem2/src/tokens/BTC.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/BTCST.svg b/src/problem2/src/tokens/BTCST.svg new file mode 100644 index 000000000..63d5b3c44 --- /dev/null +++ b/src/problem2/src/tokens/BTCST.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BTG.svg b/src/problem2/src/tokens/BTG.svg new file mode 100644 index 000000000..41629e7d6 --- /dev/null +++ b/src/problem2/src/tokens/BTG.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BTM.svg b/src/problem2/src/tokens/BTM.svg new file mode 100644 index 000000000..16fdbdfda --- /dev/null +++ b/src/problem2/src/tokens/BTM.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/BTMX.svg b/src/problem2/src/tokens/BTMX.svg new file mode 100644 index 000000000..5e4a26a71 --- /dev/null +++ b/src/problem2/src/tokens/BTMX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/BTSG.svg b/src/problem2/src/tokens/BTSG.svg new file mode 100644 index 000000000..9b82cf6a0 --- /dev/null +++ b/src/problem2/src/tokens/BTSG.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BTT.svg b/src/problem2/src/tokens/BTT.svg new file mode 100644 index 000000000..736450a2d --- /dev/null +++ b/src/problem2/src/tokens/BTT.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/BUNNY.svg b/src/problem2/src/tokens/BUNNY.svg new file mode 100644 index 000000000..4bed16291 --- /dev/null +++ b/src/problem2/src/tokens/BUNNY.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/BUSD.svg b/src/problem2/src/tokens/BUSD.svg new file mode 100644 index 000000000..b992764bd --- /dev/null +++ b/src/problem2/src/tokens/BUSD.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/BUSDT.svg b/src/problem2/src/tokens/BUSDT.svg new file mode 100644 index 000000000..08bbf0587 --- /dev/null +++ b/src/problem2/src/tokens/BUSDT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/C98.svg b/src/problem2/src/tokens/C98.svg new file mode 100644 index 000000000..3a0ff2bb7 --- /dev/null +++ b/src/problem2/src/tokens/C98.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/CAKE.svg b/src/problem2/src/tokens/CAKE.svg new file mode 100644 index 000000000..ce45fbe25 --- /dev/null +++ b/src/problem2/src/tokens/CAKE.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/CANTO.svg b/src/problem2/src/tokens/CANTO.svg new file mode 100644 index 000000000..d2758becf --- /dev/null +++ b/src/problem2/src/tokens/CANTO.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CARB.svg b/src/problem2/src/tokens/CARB.svg new file mode 100644 index 000000000..02e14d0bf --- /dev/null +++ b/src/problem2/src/tokens/CARB.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CAT.svg b/src/problem2/src/tokens/CAT.svg new file mode 100644 index 000000000..8f81af95b --- /dev/null +++ b/src/problem2/src/tokens/CAT.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CEL.svg b/src/problem2/src/tokens/CEL.svg new file mode 100644 index 000000000..02cfbd269 --- /dev/null +++ b/src/problem2/src/tokens/CEL.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CELO.svg b/src/problem2/src/tokens/CELO.svg new file mode 100644 index 000000000..5ff3c6c83 --- /dev/null +++ b/src/problem2/src/tokens/CELO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/CETH.svg b/src/problem2/src/tokens/CETH.svg new file mode 100644 index 000000000..448a94a7a --- /dev/null +++ b/src/problem2/src/tokens/CETH.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CFX.svg b/src/problem2/src/tokens/CFX.svg new file mode 100644 index 000000000..07e8c434d --- /dev/null +++ b/src/problem2/src/tokens/CFX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/CGAS.svg b/src/problem2/src/tokens/CGAS.svg new file mode 100644 index 000000000..3c31d75c0 --- /dev/null +++ b/src/problem2/src/tokens/CGAS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/CHEQ.svg b/src/problem2/src/tokens/CHEQ.svg new file mode 100644 index 000000000..ed1621a48 --- /dev/null +++ b/src/problem2/src/tokens/CHEQ.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CHOG.svg b/src/problem2/src/tokens/CHOG.svg new file mode 100644 index 000000000..adee63f97 --- /dev/null +++ b/src/problem2/src/tokens/CHOG.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CHSB.svg b/src/problem2/src/tokens/CHSB.svg new file mode 100644 index 000000000..0118cfce5 --- /dev/null +++ b/src/problem2/src/tokens/CHSB.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/CHT.svg b/src/problem2/src/tokens/CHT.svg new file mode 100644 index 000000000..19d639271 --- /dev/null +++ b/src/problem2/src/tokens/CHT.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CHZ.svg b/src/problem2/src/tokens/CHZ.svg new file mode 100644 index 000000000..68897c58f --- /dev/null +++ b/src/problem2/src/tokens/CHZ.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/CKB.svg b/src/problem2/src/tokens/CKB.svg new file mode 100644 index 000000000..888ff3323 --- /dev/null +++ b/src/problem2/src/tokens/CKB.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/CMDX.svg b/src/problem2/src/tokens/CMDX.svg new file mode 100644 index 000000000..028d44e95 --- /dev/null +++ b/src/problem2/src/tokens/CMDX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/CMST.svg b/src/problem2/src/tokens/CMST.svg new file mode 100644 index 000000000..cd6cb419e --- /dev/null +++ b/src/problem2/src/tokens/CMST.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CNT.svg b/src/problem2/src/tokens/CNT.svg new file mode 100644 index 000000000..c098860f7 --- /dev/null +++ b/src/problem2/src/tokens/CNT.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/COIN.svg b/src/problem2/src/tokens/COIN.svg new file mode 100644 index 000000000..098ee36d3 --- /dev/null +++ b/src/problem2/src/tokens/COIN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/COMP.svg b/src/problem2/src/tokens/COMP.svg new file mode 100644 index 000000000..563bf3af2 --- /dev/null +++ b/src/problem2/src/tokens/COMP.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/COOK.svg b/src/problem2/src/tokens/COOK.svg new file mode 100644 index 000000000..615625b40 --- /dev/null +++ b/src/problem2/src/tokens/COOK.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CRBRUS.svg b/src/problem2/src/tokens/CRBRUS.svg new file mode 100644 index 000000000..d847b37b3 --- /dev/null +++ b/src/problem2/src/tokens/CRBRUS.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CRE.svg b/src/problem2/src/tokens/CRE.svg new file mode 100644 index 000000000..4008331be --- /dev/null +++ b/src/problem2/src/tokens/CRE.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CRO.svg b/src/problem2/src/tokens/CRO.svg new file mode 100644 index 000000000..75ddad7d5 --- /dev/null +++ b/src/problem2/src/tokens/CRO.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/CRV.svg b/src/problem2/src/tokens/CRV.svg new file mode 100644 index 000000000..f9fa597fa --- /dev/null +++ b/src/problem2/src/tokens/CRV.svg @@ -0,0 +1,790 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/CTK.svg b/src/problem2/src/tokens/CTK.svg new file mode 100644 index 000000000..96bfa4f61 --- /dev/null +++ b/src/problem2/src/tokens/CTK.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/CW.svg b/src/problem2/src/tokens/CW.svg new file mode 100644 index 000000000..e0d8eef0a --- /dev/null +++ b/src/problem2/src/tokens/CW.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DAG.svg b/src/problem2/src/tokens/DAG.svg new file mode 100644 index 000000000..a06db4c40 --- /dev/null +++ b/src/problem2/src/tokens/DAG.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/DAI.svg b/src/problem2/src/tokens/DAI.svg new file mode 100644 index 000000000..00fdd7ae1 --- /dev/null +++ b/src/problem2/src/tokens/DAI.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/DAK.svg b/src/problem2/src/tokens/DAK.svg new file mode 100644 index 000000000..bbfa1b264 --- /dev/null +++ b/src/problem2/src/tokens/DAK.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DARC.svg b/src/problem2/src/tokens/DARC.svg new file mode 100644 index 000000000..8e131ded9 --- /dev/null +++ b/src/problem2/src/tokens/DARC.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/DASH.svg b/src/problem2/src/tokens/DASH.svg new file mode 100644 index 000000000..17e5eb714 --- /dev/null +++ b/src/problem2/src/tokens/DASH.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/DBC.svg b/src/problem2/src/tokens/DBC.svg new file mode 100644 index 000000000..91e7b7237 --- /dev/null +++ b/src/problem2/src/tokens/DBC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/DCR.svg b/src/problem2/src/tokens/DCR.svg new file mode 100644 index 000000000..d97040bcf --- /dev/null +++ b/src/problem2/src/tokens/DCR.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DEC.svg b/src/problem2/src/tokens/DEC.svg new file mode 100644 index 000000000..025f6329b --- /dev/null +++ b/src/problem2/src/tokens/DEC.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DEGEN.svg b/src/problem2/src/tokens/DEGEN.svg new file mode 100644 index 000000000..44233e8e9 --- /dev/null +++ b/src/problem2/src/tokens/DEGEN.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DENT.svg b/src/problem2/src/tokens/DENT.svg new file mode 100644 index 000000000..10035d5a1 --- /dev/null +++ b/src/problem2/src/tokens/DENT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DGB.svg b/src/problem2/src/tokens/DGB.svg new file mode 100644 index 000000000..ecf85eb29 --- /dev/null +++ b/src/problem2/src/tokens/DGB.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/DIG.svg b/src/problem2/src/tokens/DIG.svg new file mode 100644 index 000000000..b75f6740d --- /dev/null +++ b/src/problem2/src/tokens/DIG.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DKT.svg b/src/problem2/src/tokens/DKT.svg new file mode 100644 index 000000000..8d1d5a560 --- /dev/null +++ b/src/problem2/src/tokens/DKT.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DODO.svg b/src/problem2/src/tokens/DODO.svg new file mode 100644 index 000000000..514dd23b5 --- /dev/null +++ b/src/problem2/src/tokens/DODO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/DOGE.svg b/src/problem2/src/tokens/DOGE.svg new file mode 100644 index 000000000..f019ca4b5 --- /dev/null +++ b/src/problem2/src/tokens/DOGE.svg @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DOT.svg b/src/problem2/src/tokens/DOT.svg new file mode 100644 index 000000000..db6de54b2 --- /dev/null +++ b/src/problem2/src/tokens/DOT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/DPL.svg b/src/problem2/src/tokens/DPL.svg new file mode 100644 index 000000000..e511541f1 --- /dev/null +++ b/src/problem2/src/tokens/DPL.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DPX.svg b/src/problem2/src/tokens/DPX.svg new file mode 100644 index 000000000..d96e81297 --- /dev/null +++ b/src/problem2/src/tokens/DPX.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DRFT.svg b/src/problem2/src/tokens/DRFT.svg new file mode 100644 index 000000000..3f64fd962 --- /dev/null +++ b/src/problem2/src/tokens/DRFT.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DROP.svg b/src/problem2/src/tokens/DROP.svg new file mode 100644 index 000000000..dbb6c318b --- /dev/null +++ b/src/problem2/src/tokens/DROP.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DSM.svg b/src/problem2/src/tokens/DSM.svg new file mode 100644 index 000000000..b305f5f5e --- /dev/null +++ b/src/problem2/src/tokens/DSM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/DUVT.svg b/src/problem2/src/tokens/DUVT.svg new file mode 100644 index 000000000..4bced3bdb --- /dev/null +++ b/src/problem2/src/tokens/DUVT.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DVPN.svg b/src/problem2/src/tokens/DVPN.svg new file mode 100644 index 000000000..cb35dbc08 --- /dev/null +++ b/src/problem2/src/tokens/DVPN.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/DYDX.svg b/src/problem2/src/tokens/DYDX.svg new file mode 100644 index 000000000..7977307c0 --- /dev/null +++ b/src/problem2/src/tokens/DYDX.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/DYM.svg b/src/problem2/src/tokens/DYM.svg new file mode 100644 index 000000000..e696de4fd --- /dev/null +++ b/src/problem2/src/tokens/DYM.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/EEUR.svg b/src/problem2/src/tokens/EEUR.svg new file mode 100644 index 000000000..25f940a5b --- /dev/null +++ b/src/problem2/src/tokens/EEUR.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/EIGEN.svg b/src/problem2/src/tokens/EIGEN.svg new file mode 100644 index 000000000..350b748dd --- /dev/null +++ b/src/problem2/src/tokens/EIGEN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/ELA.svg b/src/problem2/src/tokens/ELA.svg new file mode 100644 index 000000000..761216845 --- /dev/null +++ b/src/problem2/src/tokens/ELA.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/ELF.svg b/src/problem2/src/tokens/ELF.svg new file mode 100644 index 000000000..fd3bc6cfe --- /dev/null +++ b/src/problem2/src/tokens/ELF.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/ENA.svg b/src/problem2/src/tokens/ENA.svg new file mode 100644 index 000000000..2445033b0 --- /dev/null +++ b/src/problem2/src/tokens/ENA.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ENJ.svg b/src/problem2/src/tokens/ENJ.svg new file mode 100644 index 000000000..7b832779f --- /dev/null +++ b/src/problem2/src/tokens/ENJ.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ENS.svg b/src/problem2/src/tokens/ENS.svg new file mode 100644 index 000000000..94d385bc1 --- /dev/null +++ b/src/problem2/src/tokens/ENS.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/EOS.svg b/src/problem2/src/tokens/EOS.svg new file mode 100644 index 000000000..61de71db6 --- /dev/null +++ b/src/problem2/src/tokens/EOS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/EPS.svg b/src/problem2/src/tokens/EPS.svg new file mode 100644 index 000000000..ef8bb614e --- /dev/null +++ b/src/problem2/src/tokens/EPS.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ETC.svg b/src/problem2/src/tokens/ETC.svg new file mode 100644 index 000000000..7b3e8b386 --- /dev/null +++ b/src/problem2/src/tokens/ETC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/ETH.svg b/src/problem2/src/tokens/ETH.svg new file mode 100644 index 000000000..6a7cd5afc --- /dev/null +++ b/src/problem2/src/tokens/ETH.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/ETHBTC.svg b/src/problem2/src/tokens/ETHBTC.svg new file mode 100644 index 000000000..bd01fc187 --- /dev/null +++ b/src/problem2/src/tokens/ETHBTC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/ETN.svg b/src/problem2/src/tokens/ETN.svg new file mode 100644 index 000000000..a13bc1424 --- /dev/null +++ b/src/problem2/src/tokens/ETN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/EUROC.svg b/src/problem2/src/tokens/EUROC.svg new file mode 100644 index 000000000..81134495c --- /dev/null +++ b/src/problem2/src/tokens/EUROC.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/EUT.svg b/src/problem2/src/tokens/EUT.svg new file mode 100644 index 000000000..56c4d324a --- /dev/null +++ b/src/problem2/src/tokens/EUT.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/EVMOS.svg b/src/problem2/src/tokens/EVMOS.svg new file mode 100644 index 000000000..8d0b90acb --- /dev/null +++ b/src/problem2/src/tokens/EVMOS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/EWT.svg b/src/problem2/src/tokens/EWT.svg new file mode 100644 index 000000000..db6e0ec63 --- /dev/null +++ b/src/problem2/src/tokens/EWT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/FARTCOIN.svg b/src/problem2/src/tokens/FARTCOIN.svg new file mode 100644 index 000000000..9fa8534fd --- /dev/null +++ b/src/problem2/src/tokens/FARTCOIN.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FBTC.svg b/src/problem2/src/tokens/FBTC.svg new file mode 100644 index 000000000..89b376bbf --- /dev/null +++ b/src/problem2/src/tokens/FBTC.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FEES.svg b/src/problem2/src/tokens/FEES.svg new file mode 100644 index 000000000..f31a2e1f8 --- /dev/null +++ b/src/problem2/src/tokens/FEES.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/FET.svg b/src/problem2/src/tokens/FET.svg new file mode 100644 index 000000000..20b53be3d --- /dev/null +++ b/src/problem2/src/tokens/FET.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FIL.svg b/src/problem2/src/tokens/FIL.svg new file mode 100644 index 000000000..a87544100 --- /dev/null +++ b/src/problem2/src/tokens/FIL.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/FIS.svg b/src/problem2/src/tokens/FIS.svg new file mode 100644 index 000000000..ae28f926c --- /dev/null +++ b/src/problem2/src/tokens/FIS.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FLIX.svg b/src/problem2/src/tokens/FLIX.svg new file mode 100644 index 000000000..962e47fb2 --- /dev/null +++ b/src/problem2/src/tokens/FLIX.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FLM.svg b/src/problem2/src/tokens/FLM.svg new file mode 100644 index 000000000..73ba61998 --- /dev/null +++ b/src/problem2/src/tokens/FLM.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FLOW.svg b/src/problem2/src/tokens/FLOW.svg new file mode 100644 index 000000000..7cf7e32db --- /dev/null +++ b/src/problem2/src/tokens/FLOW.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/FLUID.svg b/src/problem2/src/tokens/FLUID.svg new file mode 100644 index 000000000..9202222f8 --- /dev/null +++ b/src/problem2/src/tokens/FLUID.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FLUO.svg b/src/problem2/src/tokens/FLUO.svg new file mode 100644 index 000000000..d4e4c7f34 --- /dev/null +++ b/src/problem2/src/tokens/FLUO.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FRANK.svg b/src/problem2/src/tokens/FRANK.svg new file mode 100644 index 000000000..6a49dcfec --- /dev/null +++ b/src/problem2/src/tokens/FRANK.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FSGLP.svg b/src/problem2/src/tokens/FSGLP.svg new file mode 100644 index 000000000..1392a246b --- /dev/null +++ b/src/problem2/src/tokens/FSGLP.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/FTM.svg b/src/problem2/src/tokens/FTM.svg new file mode 100644 index 000000000..0f46c6923 --- /dev/null +++ b/src/problem2/src/tokens/FTM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/FTT.svg b/src/problem2/src/tokens/FTT.svg new file mode 100644 index 000000000..fcd829ef4 --- /dev/null +++ b/src/problem2/src/tokens/FTT.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/FTTC.svg b/src/problem2/src/tokens/FTTC.svg new file mode 100644 index 000000000..b53103bc4 --- /dev/null +++ b/src/problem2/src/tokens/FTTC.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/FUN.svg b/src/problem2/src/tokens/FUN.svg new file mode 100644 index 000000000..59cdc4bf2 --- /dev/null +++ b/src/problem2/src/tokens/FUN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/GALA.svg b/src/problem2/src/tokens/GALA.svg new file mode 100644 index 000000000..58a423f8b --- /dev/null +++ b/src/problem2/src/tokens/GALA.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/GAMBIT.svg b/src/problem2/src/tokens/GAMBIT.svg new file mode 100644 index 000000000..b2ef5aadb --- /dev/null +++ b/src/problem2/src/tokens/GAMBIT.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/GAS.svg b/src/problem2/src/tokens/GAS.svg new file mode 100644 index 000000000..3c31d75c0 --- /dev/null +++ b/src/problem2/src/tokens/GAS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/GBT.svg b/src/problem2/src/tokens/GBT.svg new file mode 100644 index 000000000..7dcf617c3 --- /dev/null +++ b/src/problem2/src/tokens/GBT.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/GLP.svg b/src/problem2/src/tokens/GLP.svg new file mode 100644 index 000000000..c5eefed0a --- /dev/null +++ b/src/problem2/src/tokens/GLP.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/GM.svg b/src/problem2/src/tokens/GM.svg new file mode 100644 index 000000000..7739426dc --- /dev/null +++ b/src/problem2/src/tokens/GM.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/GMX.svg b/src/problem2/src/tokens/GMX.svg new file mode 100644 index 000000000..80a8c19e7 --- /dev/null +++ b/src/problem2/src/tokens/GMX.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/GNO.svg b/src/problem2/src/tokens/GNO.svg new file mode 100644 index 000000000..b53b4961b --- /dev/null +++ b/src/problem2/src/tokens/GNO.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/GNS.svg b/src/problem2/src/tokens/GNS.svg new file mode 100644 index 000000000..f47eaabf7 --- /dev/null +++ b/src/problem2/src/tokens/GNS.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/GOAT.svg b/src/problem2/src/tokens/GOAT.svg new file mode 100644 index 000000000..f52285aaa --- /dev/null +++ b/src/problem2/src/tokens/GOAT.svg @@ -0,0 +1,2174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/GRASS.svg b/src/problem2/src/tokens/GRASS.svg new file mode 100644 index 000000000..caa370fff --- /dev/null +++ b/src/problem2/src/tokens/GRASS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/GRAV.svg b/src/problem2/src/tokens/GRAV.svg new file mode 100644 index 000000000..658e15507 --- /dev/null +++ b/src/problem2/src/tokens/GRAV.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/GRT.svg b/src/problem2/src/tokens/GRT.svg new file mode 100644 index 000000000..2d283004d --- /dev/null +++ b/src/problem2/src/tokens/GRT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/GT.svg b/src/problem2/src/tokens/GT.svg new file mode 100644 index 000000000..6cb00ff5c --- /dev/null +++ b/src/problem2/src/tokens/GT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/HBAR.svg b/src/problem2/src/tokens/HBAR.svg new file mode 100644 index 000000000..62d883190 --- /dev/null +++ b/src/problem2/src/tokens/HBAR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/HDN.png b/src/problem2/src/tokens/HDN.png new file mode 100644 index 0000000000000000000000000000000000000000..fd7e612922734d7b5dcc6cdae2d9e3c1b7a9e1cc GIT binary patch literal 20649 zcmV((K;XZLP)q-S*|dj85?opYRyGd(%y8EK?ZWF(X&kdP2b3rjM- z3kx>b_Zke?U@+za7G8oe#vlm^l;b36G&%P4%=C1e&N;`*weNfW`f6Ij>>67H-@T)! zR2{0T{{K7QN$+{j`7HTQ^6$OxeXp;epuk;HQnCz>LATqz<@oXAjn`j){X53S#$M0K z$w`@-nkvE9FQ=xa?x?S?e-6*3Jv}{*fA@EPH-Wc^|7W;Q>ksjwKJt-|q+PmnDg2Ii zykn==>&+-FE&ZdEl$3TX@J*IwO~>Q$YzQEAW@g5U#bSc5B^(Y*UtgbOWo1cscXt$j z*A)l^QU?YG`XQ(@v$M1DvuDqKY1y)6<@@&SJNop~Pf!0L3h56@ z^=rJ3TyxDe^6IOvss{1r*!j}fa8Z^nT`E{`IdbHPz7MoR-#a}$U4=G1JuPmRdu()k z?8#U>);KgY^waY4^7vQ3`ql2=_1d_8*B^+R{J*fPuY`Tym7kyQGrPH~t4r`RT^ueb z{D7va(WlK7U8ER9ILj@C~}CcprhU(65V&i`6{QWKozfeS%;>1$O71ck27| zHBUbIq(D3LJ*hExzwE5c%=d*N;W*ysUTDqFA9&z_<1n9x{`sH(dFKCX8sdN;9>nuK zSiI{!9*>&~OH*{O?!8<%&z>s{&xxY+#prcIk<_wL>5J2r0Is6yjH!?`C-m(%G~ zUtzxH&$;-;lc%3v}ln$_0&@;+_||qak^dl z8MsD%-+}A=M?`AR!pEG(N5uY93*;~U;xF=WV{w?Hy;!7Lmd7BcR%=U znVgt}5Q-2Tb;*Ve8|0N&UXg9vwy96x;!;>NEqKEBqCexM$Kx@5(6`XkIV^`b@!n2{ zGkIt6sJ({#8w!p>gGrJ-d-lS_?Ua_57AY+&le#l?Qd_%79((-fYTn?>RP%VP_?u1$ zcMmqn7k>1kA9egTqciKbD2x)AijTqEd=k6fja_fiJRp+N2#NNerYIDP%Eq;8W#8@t zvh~W%Di|wqS-k7G6&GhbBtrwk(%Vrl*~L{-R$7f$cqL{9WoBwbc0c)jnI7+yXxxc~ zPnFGA+$_~A*NeyD7yP+QO(P%(#U(W(M_gVv_PHexjkxi?gTte;XYU@_x$}BC-*8Iu zbMvIRxkZBoZjAhbA~l5+Iv({ft3Sfy(Qka?8$G{`b#uPeZ}^Y@_>Wm|qGfpOgLd4E zMR(!ZqDIh!@J8um>738jot3K6a#>JSDvOsbk_>;2YQy~9Vqs^8f)UyO>^CIOaY9ZU zJ0j&Z+r*jb6=&2T!$W=2TK^N-zCKGrGZV6EsYkL>hq1U*QdG4_Lg9eyef(iLf9f#_ zOQsZ;EtF^^EYqWxU`XAPmYF6iR;)zC1_8tJ9X@#9|&UO<$T3lm|{!7{p`KVTF@f58Zf zK4HbmS=;_hF zi@|)fo_aw}y!K;>M=~V8r2LH+2p`ek-Xej)MLbxY!pI!O@_w;QoH7MHI+y9J|^3ijLJZNw>Z*j z^fQhed|X0v0m;fO5<07b`~s;$4wQ=P9v&KoKgpBosw%mFFq-!SACrnra}6|RGd9^{ z5MbmjiGJRSH@W@x+p`cN4!}>`#yFoz8zUDw;>}w&OKEW_!pm9lc~c}KJp<2fal{>X z;E&;Gd)to6y7Gv;{@N1~j?Ag|u&`Gw2l5g}RJuDG@E&Q>KNyr(_I1eBoAc$s?k6D3 zs6;|hXj4$812OS9QzR0c#piltY;sI2rzO2Ttx}xlm$7L}a`Q?cm?3cnn#G-#CFK>F za_Pbum^0)w;Ulu|`G1l?D1bmfpfxFyotdS{XJ9U<2DD~jjpXO$$g!h`WpJQR@^W)L zrKJn5`RK)T~y za7@Ey_z%s68gXwfCzdc4_rn|?{_c0bd*|;}AV2--Pd|>(^h;3TYGk%@;=~C#bLNc3 z{eVMMI1FPM>R5Mrww5C?U9Y!Z^UbHp@`NT zQMU|t^+?0fJu(Ti=)`VXw5SprtWkX-O&@Wx!^myiE~liYr5Bc0l>hK&Kl|B7e=k1d zkw+eRACj<#kV~v(B6alWQ7J7g!J|~2HZUrUro0{>#EyjzM&;!vAC@KgBa-T$ke-1q znCb$_%*YTY%tCKdvs9D><vW!F1(dr z_PlUhJXs55`I_xW_|C}T(<9Q}ACTsbn5^CU9$9zgc5wt8Qh(w_XzYmO6m5n1$&ksu z-7?faCPmBdkkDwGtX`glYtECS=L2&6P4^=)^dP(yIR1k&*!7B}gpbL&bC;xg(I)Z2 zXDwW~P@}K5);7t>&5?@IGWg17sa{wm{#3s&7z}NP`JRJdj{eS|6PT$xA%wq#+Opmt zPdxF2CT2{uX6Giw=gt(5*MnV-gpRQ*cAV4Y5Pw#Ij7|^AYkSVX?@Y;9M^xsfwoB!b zwUSo4T4pC(V3MY!@%YyyGsh+8PPR*CVXfp;Un?#w)bf?9#p6nqrK@%zg4!kym21JXohUN;X|@))mB-$Vy!G%yc)YV6^UZZ&fKx^mS*n`b-0K{H48U+43kU# zE+;o1yL$;VEltw1a^YXLO6}@xl2cMC!-L)8jdjCZ4ak=39+IixgfyLcSu*2i<-~G83(4ce8m>Y z%E<+6VPV(D5>c0hTm=rkr%!P%MsUQR46bD!L<1-k3Wwq8qD6~gBK;DLB?PH%Gk~{r z%lKfQJp0T~5R#|M+I3e*Z~L>7=IRnpI4X@@Vd;hsDK1Hu+?xAj>y8`rDxyeI`+6_p zbAs4JOQj1D}(DfYBg+?@vpe{oeoh-a6oTjc>U?KJ}?j72I{# zU4IV&+(lrH!q~fauiSn2-MSE)H*dCY*m6l=YC>Lp;pAmY(E;H&fiVr^ zwL=<;5<)jnJyBwQHgg>cgwKRJW@l$$;@l99OF=MVV{6v0RlLg;wuXY0u|SAtHeEO(lfBPLDw4&hdxI=qx>e2D znX`4Ou?P1ZfZ3{+UAG`A18#=}t^=rfC#s-rZ<#=VOJ%HIzy95DXy2a3O>$?lHo@W% zlfRu;?2t0R6oHvxy-{CAmh@d}k@}HhSw)geE-u@oINek{M%&b zuG2VEb7(h79BWK$`+KVss@qRwbdVxlH5`0YVMHXzEHEFmo>B+nd%zJa+5H34iAz~Qxuv}(fSNTf`08-r&)rYW^?;uMaWOg_gn zh#(xF{5k%f0xn06#5{?@p{e6NF?UMAjKPMq8Q;r=uE#X+6tl4xW5Y|E@TG)qxzt7gys~}iFVj=3*TW?iU$l?`M zpFV>Af)5WKUWCsRql41gbPfrbL!%uxUT0ooA+zsjYn0)E9?8S+{8(hZhsV6eWxtL> zVNO9!WVjp*&H;9Bk}}|KOafiV&}){h1GbeboeeL`cyFt;4;6|#qgvACl8km;gjtFJ z)Xb9ATW`X9I<;PqnVqGkaR~%541pXwc|tYwZ=kNnFlkGFa2=TwTpeIKa@#c=`tw-yKt=XATZ@HRCwEhmnjRA`%va@%dUsb{NWFKe`6m4C+>#XIEb*)!$m zW0K7C{JO{+zQ+b=Z|jt$sPY}CNAv{&Qv+;`wy&q9`69yDDmd_nR{oeYCgJ=<06?Fk z$z#m^TUID}U3@Q=42Z`8Vuwszh?-VNMdf0d3Czi8=W&F)aT%B{l$-8&A0Qb!fH3bH zk1;_NDTIGzfon4`y~9TiNy&n8Y=Butdi&{?e_c8F*J4>;`N~)R2+2*1#IvTRCUv&_ zN1;$4be`ssycj$@xSB;P)<|CU&9eKjz@BE@Zygc|1L=h`w=~?PSz|=y(2Ws; zz(WM0L<{fwGhj=}2yA}g%YHp~b0qn5nnr#$F*t5Q6rW^xWDwe&qtTq-pDLBhZWDk0 zRw=2e5Jwn^q7_aC7Wz39NHnh7pBhTDxPALJdGW=UH3FN2sYdW{9a0Gg9G%#DIEZTB7UTw_Qc}7Aj@74iY6~~-z_yR@qr-7wcpqa38jC81#ag)6pN2Jb z;b&o~J6$iM<0H!WpuaHMU`Pz+p-G&>uB8*MCq&|O#wiQUQy4|X9X^HVoe%^aFi8!J z^aKed_p;uUMU(1Mo31dF#1lfb)KsY+%`=a0)=)b9=H_O}17ZWt9QuLPd*{3;1M9=ss{Y@oqvb@ktbeDZJFw6l1t~Gmzi-yRZ%NxpP4VHoyId& zpH7sT!Fq!2fbB>TL>5v>Xpvsglk6bcJXJ&i9)EZD6#xpYIR z#5|6q3E*xUAD__Nf_~$j?|f%+7n)sZ_*Aw-w^S>vxJP$%6xG9y){8RLcTz4K-zS|N zLo$UIBd1ZLcj0|ZXl@ZJ zi+NBhsX(`nO|*s zJZ9N^Dmb^3Cr;^2GT}3fLK8Xhq2#uNAF;IrfFmMeK9 z9JT!l6J|!1Zq$Yf;fq=jsXE;b+4t%mSc`Yjs#M;8|NUDbkOTj!K(LE$0$cBGTqN#n zhNMGq!rTqKSneX|fTFPYG>xbnC>Xijwxi^=T50$6fe?1HY1~f8YZj z$U&I*5E7!LxDe~`k)sOiEm^iyotv5=gqw8$5J$n}@B{sHqUaMBE19Xs^*eiq5g($d zTC--g-l)lr`L$^YFy9+z8c-)YCl`;sCY|S>LU9Rf6>_g;!mzmz46vx29MmUrGqKAp zy=kWhyVOmMgWq9pLbGRiG}h9P7XBj)vqQ2(SVQa#`RU`wQ09GySYB$CeJxA`32M&Z z*?e!VlhOV&$d%16cduZ&QnMzb7l95 zOR{|34YGdII{kfb_a)hX`~s4*^OEX?$tp+(f66Uc*=eAB`epfQWc-NAAObrTiMfHJ z!F)LEaFh{P1AtF|#uCXb0&)P&ip1ZTqd4b<;)ckrTFIZ`cOAgpSRot+JH`XPfW{9F z4XQOc9BuDFS^7Lm5&d{gKwO*N4frNU@7?F~LOU8Y(jxJD<*Jq3ybBP8hJM9l0Vw=i zByB6Qva+SMtsRxJQt2BUl1R+5p#hjGvPJ^qJu)(cghzn*Li)3TFaSI&fdoMH@kDhb zKE;55yVNZFWnUqeO_y9241YE~IVyeKEz;dLChz~)*ATI+!Oz`^1d)*!b}Ev+8PvXq zQ1Kh+Y?HdC(=u_mUM`-wBzNAuMI7)k8vgQ{Vxk-{FQ9mb&m%AIIV3mT^-0OWE@#GX zDv2ftneX6@$uif?=S(>579@=&sB=tc0m{^3XyyXa*0c}ht{`Be0$E9F)zc-}SveL+5nuk!cfND~e1TZ#zdH)*&V6C3B~28@F>_nCL3=rvOLF(|zl{?>$l_sv115!nW67bHQy8xp2v!we)h8?u0%yJ8;*Au7xBV{2K_)Lb1U$@i}o059|#Qr&w3T5%(V#niXpVgchx(D2OwpYFN@@Ml6zvJ3Bd@Z*x6k1*TeNHputA2@_ z)y0TQvKq*@qIvRXmLLNLs2G@%0Lpa~3QM+5IPp+`X5pB`u_4@nCaGNkOv#ri&+ciG zg9n-l=q`sRf|V!ise+!Uc;Sl^#eeLTucI!vmA;$p_9nLK2E(~l93(U@o= z3L{Bw%hs)O?#yW=QD|g_a5ybHPZqDZUuHw&Voje=gm-eZNK&(~0b*VaF#O2z7!)+Y zpWJch-GqlyKJkf9+=}q`F;^niZo>jq(bSBgI=1bKE3i}ZQPKpc7UyC_q~X|piOzIN z=S)B<@}tsx{BhZM^(SoHiZ_LuK7&M(034a^Oe}2>&-(_vDp~nUECO$Feke>9pl!k! zy?E`fEjVi6SF@-}b~L^wp}`}PpD`^3i>u`Hxqf-(rG2RE-6;2e_#tR)p<-SUFjOK@ zdtvDt*cnB^knhWNhl|zM#pA9wT#wmEid@5l&evYEaU2ZQVLP?!Dnzg~qPdCUZ^)OX z$J(SIwNsuya8kBxUL_$H4Kw~0Yf%W&Htp_4M4u;5p3>+q6xN2-a8g4MO+AQ^w~!y! zh#0xDyb|%SQ}VLWT8y8$V@`l#KI!PI7B>nyBUY;9)Kp5CpkF+Rcj0#m&k)3 z{3=g*8b%r{lWpD<@KC5KL!^;EDKZP-1k z(H7UrjdJkWh8ZBkTcl%X0z$(E0;4A6qCY}U%h)(f6|@YAHae!%A4jw`Mh4$zTn)L40OFN;jua?&IfmE#v@NWc37^t z>4UO*^A7bj%wK|`X-)nJ!y7?RFkEOAHr~(d^!X-rz5_RY!}bZ0{N`_2BU-m^ zos6NZ?MTF;A%xi8tV$_cn1at8mpSl~b8}-dGYKtC$LAxdoo8JT-GBsw5dg-gXz zjE6)t8SF#EL5EAyHS6z28%%TNo6SKIGfG5ZCQ5TVT}fu5hPx2?Nb?DaO`Md1bhljU zN9p(cjQp4X_6;=KEJkvMMTk%%kaGZ{pv^XmZUjO>s5x}IlMo57%Y?E;VvpcfS5xC)SZqG$U`>nWJ*5(GFnDPCLDX2b~Z8d?`=OVwzMmt1EkT=9! z&=lDBp@H*K>TQu!KsBxX5ve;LkvksvxVZdTNW6x$KEmjRkcej1bJGc^B$zZ+2E{ez z$UNqUvRqulLJ_lh<_W|&eMVWyP#ETP74xnYAM<(Yya`5;FqNn@Bm!7L;$x^@IO6D=95=dcC2*#fojhRoN zFn+*jj*SM}J|M_B;(?TN_Y z1E3E%(_x~fP@{p#!a5hB!#4x?*ckkYy%AiwFTVIK&6E3uj_Mhd?EW8oxA6!^2 zb_~R~&P&H7G_g;zyoHjEC}=WZlgVO;=N)7UGV1WS756E}hZq8cI(6&-)s%!Lm_?g! zr|0*Vv-%gdC=qDZY&*i$W;FDa$j_c`kZa!l5%Ff^sYB$A0mxE8>j;gx%i3VmNNudl z_#>@dBs9?k6=tI_fG|!yW*~UBQ}Y_5iN90UBd#?Od8q}!?@5Tr16y$#t=$eMLC>g? z?Iy?j#P6O!X+V&>m7)CI1@?cT3fBu$+}zeGv(RXA(rB`>a%p7u16#aRf^k2(TNh{u>4;5hR!mN(KgEyASrDyWgBorc z6G526KoAC+FcA)a&c)+r^O>JXpfDUoi`r1Hl)Ep1rJgI#?Q4*N%FQwfU~i(eMf}h} zZlF|{1Kf!I{RsL13E7N|k7}Jgl0Y1|*oKI$J|kuqaMk`NG?{|q_k??BVvX}wK|~T^ zIs79-X+r5nsQmjOM3bpil`=PBPk>@{%G_-n70yw#@i7WZ_oo99z#xNZY#LTXV>T%w zi0h+3YQP0{;4@B~_)(+dZP#DF9T&8a7d1IOC2LnNgGwPfn47^)3@h84O_XaFMZjWD z1(27CXaO>y`UBbyYP=s);B6ec#Hr+F`{5=e4Yg(w#{sqG!F zh#A?TyW+qX-ozh2W5U@i)Z%#t9l$Nitg(N5XzvT3ItY*VNQ0$eHm$aELF-l9l<;4s`OCZbe87 z!N;fJ1Z~or+c_is;eP2wm|X^BfgFGkgf%`frglGqoyhMUfaQ&5s`JJ@8SUgw_oF$& zm@F*^AUH6ngZc^^(bpYKlf@d0npam`S@it57NuYbh_i7W;;ew5)a_@kr`|VY;v?M{0mAHene@#J-y{ni`TRAjv~hUMcrvYQKdOQCAom=^~8cK_?SRp}A-dV%>$U20dNf zNJz((fDn(_^$#~_NG9)4(-Vy(Asns2hdl5{_RqMeq#0>gjAs^@bmKq(8qL9+MG^ur zK8a?GC`B}!fM!@@LkP}5Wa|bm64wgZ`^ss+B?~2%HfOU_@OrjMq^Gg7ctG!g*NO5+ zmn#s7Wa0w6S~!CLSh1)IFB-z)!2Z%Npb2s|J`0{|Oi~=j zm=PC-;9eRa8h&h7cLy41dNrA4iM6mOU;P+O!8izN49aM>x3K(}2{6rj1qY#bs z{Xi`Xi>qNKx+M)+C<}57KW!$PQ=$5)iKzrxO}W7;1QSus*9H@DQ4<-uhSe8A$kdd{ zUh$RrWn>n^FtYM7y&(e^?1B)|k}&-ob~8!ZBj}Lj;*Eo*6D=zRf>5Z*C9`~T$bv9k z)3EEL{BUQ6qmE>fXRc>{9zxTo%#;YOHx||!Oe_&K^16eGAi*TPVf4ulLHJ?%qIgtG z$~F)mklgH4ybmk^e5Myf^iUwCn#)S{B}7@L08FN!>PlaY^^2oD;!zhMlWKgJBE5`o zauM?87vv+Sh}&QsoLzD8S_t8QR4rPG&eltkUQ-I74~rUv$~wXtiOsDD# zE}-mUTv8SaF9XA4NgrYs-|RqRci)_`&o=?Hvq9i#wBb=CS1#LLfWWB>I_!}yO3EwiGAkFA5S;G!sF(s%`Qf_{h zbRn$d0x=K>211&M@xdrajkYsUK;mCvfv7>;>3mOHI}_Y5nwUi8(QFh=3>~&6C@caC z;f~o17=Eq&S+UC%#c1q}>};B5){YJzcvVU;G9>0q&^*Yw>)K(Cg2fMTvYs`)riN7n5EP=bWxDe({SDrTQsztW<3?{5h=DG~ zhMdxI$__&-tI?GIY6o`u)#5_99g2*o!}YRx2iM9)&BS;ms(nU!s+Nt3Fp#lt%w=NO zrD~Io^P8DU4#70nKz~D_TM$Ah$%3&FhBrrvUev_d?#<+P7Li{%@VhXycMhbBn6d|L z`mEDJ8#eGhH%W1zF-2koI-~kKz9tl!lN5Yj8hTQ)0armwA{g~F;{xQHj*EQ_Z}pzs zoE+z&gNNiDcikZej-CRGW3Al^%nxzpNp1-Q6gVZTt8-Ax9*|IKzGkMp@H{wu*1x$` z*%+hrg@iLV8u4a<%-13tX=Q7i-L&a}DH=wpbIYb;IeX@)c+&E~@tuPy9Zs4-e%Ndx zZ*W+4o?+m2nkj>yae>t#<1>t}GE`CJV;QrRz~y2IGIm@HIXf9dsVU>UExvvjKrEv$ z5+CA7YU9*KID>e2#%5m%d08o{F~sOB^~(-Kk7IK8yY7>3efv972HpZq76ks<4}S22 zQ3_=8um0+O6D#is3F+^_@jvKtoB(bhA-_w)SkYtTL z!MY5Q^5h7?T$Lm2?nb>n-G-T%K$3wE_K7n#1=wg(W?<3-ZX}?-BCQ$G{ksu$9X@(Y z29RFtOpFmk#F(9|7-B5dtBn5Sns57FNIb-%H(BBGl9Wg^rK@Ov~I&s4WAvG+;`6kQw6$;OVuZv(Z-EP!Z zf|i^;epIfyavK=$vul&^K@-lO3W*k{wbegePE1GgyL#*ZQ*4l*Fz#L?F1~DL@7hx`Tq0g<)AvWii7OR~!C~68c zj%8R6P-3_9GPydrqv_Cip@dyn!ywTut4xY=v(&~05q_RMUME}1CS^-;7pjJh5}X;; zMRL3B8aC_XNhqIWa9~l)(v`7DN9?fF9I`P}vvUZF8pCHd1nJ?lAdme$LukJ*9fC{O z&Rjwp>^CGTz~@vvy!hKG2!vrZe@~Kw4;#e=KT7;=WON$uQzAJ9nX+MRK7tVVF$gva zzdSNNB^8TmB|E=J+qT(5f~YZq_3uhjNrA(6U3cAe_uM!^B%1Q4o#;6)N2pt*a0qJxX{l*o?MHA1tCp<2K2F z*{VGU#nL7pmZbT6a*lO=qrxKSO9{;AjK(q4TqZHMaiFUa^S2t{2fP|25P3FTTqc{h zu{hv{8ivp6J&|qCpvFTp$_)XgOwGa>Xd`OwT~X=kMbMCg{KMx^elo{{kaa@3RUumF z7Ge@AG`0KGsZ)QA*6@HU(J_^YMcWU0{B@~WxsJfVn3PsyU`r}sT_5af9F9qHC97aF zOb`+|>5)vUPv*Mo#fvhoScz5wJkP*JgR?5fK}aSFOCt6g$Z-VuwAI}1w&IN&bHcEe zNUH^{JlX7%_uqG=Oz(e{DKH!^d;lPch0Ak6FRem9_=q%|ZUP`v^Oc`2(l!X+@TvH-y&c3~9$qE?)``3y8qM z0}!2qMs{^z@EWYaQgjs%g9D{#FFKsZl0F2-IgF!x7=&6+rF!C-J_O6Xm~$8gt<&#b zjkzAg1){+A(GcJAl*|H`Nkb3Dq~%wxln-ibCD=WFun4)+OG=9nisrtdFlEoy6C?Lh$u8Xnis{=BI&-jpT(2V< z4Qi-rxMk|}v8lSjA0XnqcFkI4+B4~-wuex%h+1_L$%WAI`;c=5A~1Zk54l@x4)ckj zEipf|Dg#VK^CVq+HR7Tsn6j%~jEW}M z^C)s4E0!y5){t8!?9OA_xsJd$x&1l$njBc1Z398>TQVQwmBEe#U|d z>l0&A2d&I|<{xBx06;|#$t<$^6!e?dgJz06R(9U}U)3UT!q3c%&2(p|Y@ zaa~ImFP3%`%GN<3tdR#`HJE}=4L8WpWQyeb@}(qi7()dvVCvD8@DpBa4))g|$dMWC zxnX3s0G+zPu_i!H{N}F+1dcr$i`0bao{MsG3oZ7AtX;D~7tm$u)@T^Zz{1Z)r@%cz z1InOB$`@u~%d;ah1?n15uB;cPA`Ag!foiERwwT(v&F<5N7VfC99nmOc&ssz5GOd(; z$Df)dtsNfu=6CkVy|-@wK82l&(NA#CN}#slrV%{E}6U*duZrCTsRr`a{4ioyEuu zG>N9&jNRej?xOm0(ddN8NaW76veIzjC2+2A{NXMju+x&}#OVTA<+vC}Vz!k7$qr^^ zEncLJJM1s!-HeF*%*1`=n8VwG$qg;g&LU85 za$$ZD>$}(^;!!7_94$_+SS(_5vtW9{5hR6xVF<&ABOZBfH>M0pvApX8pOK9_u9tL7 zdhj7!W|XDjGtgIm3d+L>P%_dp^*JpyUBh_xOO|3+vlvzZ?wR6a+zc2wI5Kn&44EF( z&tXmG&^|sLl8nN|N+###7)70C4nC6Mc0GpPYy&g}05l4O_gmll-uGVrS39V%Bhcy} zyATcsR;Fj90^#jM!~^HEbeSeabZVI?#WL(}#L&tupeaVd@shNV^F|oKj>5g zBeJXzJ_j7-NX(ux5y0lYh)Jf*qu8AWbJdP%7C-s5O`m`ACx6oL@ZW#y)b#YsN|Kwi zGIKGj@CwwhLjpgDh{d5Tzj@iEQVM4GSl75r#Ycg4t<;^$hDs8%6*j=vbLi>IE6m1_ z$zrwRG)s}h&1$hK!A22#?3L~~4Noo6NXKZ3!;z*Tw9i+FdQ7>TIrgM1uNs$c{KH;E zNab*_Q}AswxIU+vt51D&7f^#XdE}RUFsaMXV7Xnk+yo|kbuF;2T&=&@QQ_r51zdb@ zN=U1R#)%s&j1RW>QDfJxUZssUr23GU5JNBF6lMfx!|cJ0sqZSN*dhfBBKG(S`c6Pf zGq5(~n}uNFmSeQ}1kwW_)~~~NPyMgjqGKmd)qQ@$hV}RN^$oZ(F*R-f?ibPMe>*0r zos+fe*W)5HqzLn&y4w5Y;@}BcxA|IGRZ*)Z!HR%|;(3{A(>QkWma6qWUAF)Js(RCc}N6RLd{p?wEUWw-p(&%TRm zt(NUKzC*U{xKV$vBRV{WNpHQO3wSW2vN6d@;nY>5z5LzyShKX9 zdID3kAApwPfEbTm{w8LnCJlWdZP1EZ^pm{0|1~WgaAGz#*eEc>@4xvppI_-yM>~NN zcJq-)r2B!ibj1Eh)DFD5Uz;6ungS9uBGRQ*H-gG}okG-b$1*#LdUpQ-$t$}Sy?cfD z8H9s~#|@i&9^<)}VMy3(`}b+>m<>3FUC4wm83MDZ-sSui{;vs%Ip)ufc%lk2@CoKs zLr(|$#dV>fS?ED`G8BdHn3^MB8Ki9pgSec_=}BT;Zx)C)>?HCcQ-|lU18xHL+H<^! zsfFm@VH=JO9>vBhmLBv(`YSdea$264e`2XX*fz&;vK(l3_FTOzUACOSXB^?~W9SR1 z|KCn>z%dLh=oLAH8g-Bmb9Hr%N;d$=xuvbcZpvr-GfSHeyU&8rD9Ef5oj40<`Xm+v zBm5#ZG8%$obs^K{n2If1H)~Wie<2LMWu6tG0uQ4Z#C!Nm6qivBZ88}uoHj~F zoWkG3ezUS@PiBp45aCz&#;c(x{f5D|<`18l1)BVf!2o)SWM3ceK|(D)r3*(5y?E(eNL~Zj9^r3B>Z8 zqm0nFskt544(O|n;KEX0@%ZM<1C=C@BPv(v%Q8MfZZ>DQq|C{5~TMA;^m zG7f_p?rMn5Kq71psR<`2rt?R6%-04rQG7osw`TMXbO#XqX7D|Q^1yP889adGw#pvD9EU)j{?@m?_1teX zo(cAH540pOg$bj@NbjG2?j?}H!U+s2V)K-sl2em|(u4Ww<5rDab?0Z1ydf+eJ%9|f z1Hho2Uoa;@M2`khv`g1D$j)o80JEjT<}sNXc0yz3^KAK;zl-VUeW*DsU%nn;I!9{M zDClPxh+a6`lnlRAFW)J954Hio%h#Q3V0b!Xg8+NI-Z!AZ^M6M21WUx6$%ux`Wch&k z7)>h1RiI&MFA~x+>N3stRb42f)SZB}YadWN0wcv0TXsaOL7_9E%Sp(z#lS;dW{gqNw zy*gPJ(J4d<)1&}Ls*;s!ccKTdNaFK=L4yv=e;DmBL~IU*rm5nwNcY`$pFL^FIDH*% z%|aA{l6W6#}&MeDj;c&EVGqQPBF$s?pAb$e8Ck8+HB4)_^ zJ@~w_-$)?H9%D%9zqf1GO&>!>32IcTy!zTc*?HB~7z$8_W}aGmP89))5OwcNSJdg3 z(U!wFo#41c&;wDPGlB`8t#YBgTj}@?5bLzXjAjCh#{*RAF!N)_Ra>;Q${neb-{y_l zm|u^-Y`QFaiiA4m6!jFTlZo9U!5ThuU~PZGBq`;&d<^Xf12%g7We7mdDxBnn>3 zO*h^2hM{QudIp(1M@>0!zYcT+1V@^r{_wLhJQbBKJMK_ZWsYlVMl;V6%-wqQ(MR6F}kAQq3K zelpvC6f@J$0?(>MHjAL3HWPJ}QtT?UbddyyL^Fy2f$-13P#0)B>3|Vx<+=r4v_Ko@G$c$a)j^zy9%JNk1(fine|s3( zb`TRWm;_=R(;V78?)%c0zVy_;dnzfW4a{QD);UBRcVhvvNg&{+xd@X}j%hY+V5k%n z6st3h#qHhE-CBp_XA$b}BWRunjDEobxB#qqz!hZmg~Bjlz?PzDOZF;}EdmpELAK%G zmvj_(jvPB=pRy*7WS@s|z&0l@=7pmShv%Etn(Ofa)eD zWkcJjbslUOgtzF?i6fPWJaXW`fr>hHF^*#!JB(L@6`L3%a^4 zX??>F8jd2iNQfdpehUgb=;uI$8SXDAM6=B4E(4E`9P79v|0FZk}ZNv+6(Y5 z6RJOpHUl1kQH_~~Ma3A>KW$HxXz~>$$Pw7XPNf!@ z1B@vUc8hU_*XmWPle{qX83`lqKzQBOazRe*{l3INWsSy5BrC60^0UV=-uARqRw0ln zU7>^A_;)yzS|_$r@C0M)p?#ccnx9_)>T&OX`S!QJefBLK#t++93@!N|aG-Bz`p;dl zXU}eV;N9<)lc&zh=IvWxjzpuVFv8ur=`rbUZ^j{CRj{>~x&w%zIITe%`%0xS17;=$ zd@8LE03;YE!9~wV*`f!r>vxME z(7GV1#4BaRDpXJP+(f&oNb|?{e*wcTxjsxRVd7_?9iKx|{4h=m4ZY>ZRq*gH3^{AU z2j|nDaDLR8a~Bc9-iSIuCt&e%ZQKvD?}Id(NLV{$gW*ZZj_$=pgL{j4BqjbqIoImI z5c@otvoKu7Luw4pfC62{>-4EpcBD3I+M5-O_V(<_HwC}mLnRrSuUoq zl#1+~*)g?i{scR9?D%^&^-w65Go+&ck01Ck&Orph&Cw%X2$UlL0~3SN*D@}Xm<@L8 zJ3pn-n;CmMJUW1NIHyB1dCJh9z55mS!e*e~_&$X5SyP^U%TL(BDKg`@*|G;8e6SUM zql~*P1+{|x`*zEp{>dlhkw#&#p7|=wH^Hs zfX+`}I)jFK_QtQ$=!tFE4u`$iYMK>(cj}3ooHb=?_a^$X3E?&YUzsHd|6#&hGEL?a z_6(|=IJFXWaFk}J$E6Xz;$j2p6dM--ZaIMg3X`Znq7GDcgG>wnn#XIey77IA<0-q! z5!1=2O-&cI*u*jHj6^96n93+N&2F4j_ea0!QQ*Jv2|Ms37Pv&mA((Zry+x%Z1<2q7 z^7sGnFh;0W>4Y0PXVz0VP9jbwA413W9+(>(cXY08PRa|@P?sOV$!sCmWF%2ImD7{j zfTJLA7CMN@3=}93GE^LiF&jJ$&8e&vmzpzkvJM5~aypW)OP;S|+06aq%wL;?n23eq z`r2ur5Cg3zrM>B8_?Gh^Nt8*&k}F|)yKx9vuEHMzx6}Gm|;Ht_~RWgUnu%{iUHsiu~eH2 z@>~S=nbmNe(N*poN>y(PBE6`ig zB&Tq+Y6PSB^3xm8JL#0+o;t}yX6(waCjz<2HUvgR2!mrWv`GscEb zbYXR0l%Do8&|++Yv(IDZ$YMpRQ)Z6AM^vBzvqRD`Q8f}8Lwhqu!gkf6xn?maPiyho zDlJ_blSd6;NJ}5akrx|6Yz>#nEslamH;c%-Gv-(W!Kx zs}M#ufCM%>J1w91qmRJ0zAOb8$EpA#^9B;vQan2KdU6bu&}^?vfL5PZwFOl*2rxPz z#g+G<)>0;}*$&)zy&iQ`wQvItS4qP#{IlqJd{Nu#()`snQ~`T_?$}crV15W~sTJnMu(4WSlBbI=N+I4{G2e-ShD5C2Ej^gnzSE`YK&gmyow ztgQI2g@py4?CcDSs3s$hU*I@BX7X$)WBkuUe{pa$N|~rzU`M-A^UQ$R@Mo2%nTXBy zLI5*Tz6hWphFs3!NbafeX<51PJs@|Z#Q>K(2KHoZwoBSO$3e;5q#ce<)bXbV4uZB6 zmc`}h*TZ1YX_zI;nJ4*av)UgRb7i6)K`3SxsBjU6#9*A@aGjhve;oCaYFW1JZL)Ob z^->06hKr$h%&yTBh2TI>4s>I+@TsSt(%KH^QIfm?vmD0bCqMr2kKYXjX!jq);l#M$ zS%7F?!Q|>qaHKVWysc}22~m~LL8X^2U7|NbJ`|Bz7ufWS)4j|;SYH6qj?58XTA}u% zGqFlRuip6Rc^p|+BMTO-&|D!FoKmc8#o9{vpixA4d0;8#DM5RB_#n(2h8d4GL6|d= zhwiB<9Cqw>Ou`JsrFPZTdLU19?i|i;e-X#97GW5{cJQ&bVWQAZ+uY4NhA)Wz4bDwr zJ%y8zI0%`Y0TcwmOyYR>Hw?@0|KgPF|Ayo<{8p^xTX}qU9FfH{7^%%c%s0VAIhm+& zOzdNi{T#Cxn}jfaE{0DIq3}ah_aq>X%WQQLozpmZPl?Eg3s8SvrIkLNuZx;}e$Frk zB=^XQ)dfIa5Te3#aK`fJ&;?uq&bxI^$Vgu?P5|{mi-3OtIY`OCdF?n4F*B`9+Pf!Y z!3j$NoF1*Id24M@flGwXQ@9YI18BB{K84%*NhsAD{a0RpQqu)hT}wblZ( zMA68bgC^Eo4U=6NFq2VNBCoM0oH8MFCJrUz^at+#j?PPZOa-SKz4|ItH2dyZJiDD*5&^%O(C+n~k45v)X zD=)pGz#d5iOf<_Dl)?df^@s`{kL1*BJyE-0ZbAwvlSg4VyN#Y7aK zJBZCu?VslaYzMeeQG~&+SmMYFhnXAf#{92A9g@Ft#cHh(W@e?UkKpl3blzlP@@u?4 z4#=hv!ugB8{_DSf{5L&P_4h6iV-f-1XMXzApRR)$ONZacWHw9R^1=%*kS(calMvi{ z=%Ekbz~e_1=AdvAHH2h`)#XMXD{+F3O>kp=pm4n-mbe}JQ6e+Kk2-ZU_!G=3!)yKK8f{As{fxne_?ie*oeAJ{;Zg;BP}KewPACehy9r{Wxsz zR@mKlqCQ~hSy9MtFJ5e7q^9PAgO|DR_uhN2{PLH-RI^5u7O&UEV(f34I!)6iBPV4K$9w`8iDM z5C81X{_Lpy${|Vrc?Dwpi|cD&``TwAlr;d~?jQtSRaK+tEf*@~HkutKa71*Ov~h8{%SkezAoI4k>g&ePgtL`%bRiJ_jv7GIM}Nh|rcn4g z1`vs4PPL7&2x|H(#D}os z%V2(T`ExFsvIb#}_%$6Z!%y0OE-pir6V*a6?or?twe)z*5{sI=T7&**lEPN)+ zNe+`R?ry@|43&BM0yThsh=QRBqS-ODFkLgBOKHq zI(YbpID{90&>|o;uv#~c-Jc0a;)*NogK%~ubKU>}%pkHFL-Mu`MYLz|yUoy;!_< + + + + + + + + diff --git a/src/problem2/src/tokens/HELMET.svg b/src/problem2/src/tokens/HELMET.svg new file mode 100644 index 000000000..1a5085987 --- /dev/null +++ b/src/problem2/src/tokens/HELMET.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/HKT.svg b/src/problem2/src/tokens/HKT.svg new file mode 100644 index 000000000..d2f5c930a --- /dev/null +++ b/src/problem2/src/tokens/HKT.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/HNT.svg b/src/problem2/src/tokens/HNT.svg new file mode 100644 index 000000000..402e23689 --- /dev/null +++ b/src/problem2/src/tokens/HNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/HOPE.svg b/src/problem2/src/tokens/HOPE.svg new file mode 100644 index 000000000..b7541ae4a --- /dev/null +++ b/src/problem2/src/tokens/HOPE.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/HOT.svg b/src/problem2/src/tokens/HOT.svg new file mode 100644 index 000000000..eab9101a1 --- /dev/null +++ b/src/problem2/src/tokens/HOT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/HT.svg b/src/problem2/src/tokens/HT.svg new file mode 100644 index 000000000..72cdfdd09 --- /dev/null +++ b/src/problem2/src/tokens/HT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/HUAHUA.svg b/src/problem2/src/tokens/HUAHUA.svg new file mode 100644 index 000000000..e94cd98d8 --- /dev/null +++ b/src/problem2/src/tokens/HUAHUA.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/HUNY.svg b/src/problem2/src/tokens/HUNY.svg new file mode 100644 index 000000000..b06f2f545 --- /dev/null +++ b/src/problem2/src/tokens/HUNY.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem2/src/tokens/HUSD.svg b/src/problem2/src/tokens/HUSD.svg new file mode 100644 index 000000000..30b26c037 --- /dev/null +++ b/src/problem2/src/tokens/HUSD.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/HYPE.svg b/src/problem2/src/tokens/HYPE.svg new file mode 100644 index 000000000..24eb8536f --- /dev/null +++ b/src/problem2/src/tokens/HYPE.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/IBCX.svg b/src/problem2/src/tokens/IBCX.svg new file mode 100644 index 000000000..061c6ccef --- /dev/null +++ b/src/problem2/src/tokens/IBCX.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ICP.svg b/src/problem2/src/tokens/ICP.svg new file mode 100644 index 000000000..c7a99ba9b --- /dev/null +++ b/src/problem2/src/tokens/ICP.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ICX.svg b/src/problem2/src/tokens/ICX.svg new file mode 100644 index 000000000..53efc54ef --- /dev/null +++ b/src/problem2/src/tokens/ICX.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/IDT.svg b/src/problem2/src/tokens/IDT.svg new file mode 100644 index 000000000..91288c58b --- /dev/null +++ b/src/problem2/src/tokens/IDT.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/INIT.svg b/src/problem2/src/tokens/INIT.svg new file mode 100644 index 000000000..47395f643 --- /dev/null +++ b/src/problem2/src/tokens/INIT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/INJ.svg b/src/problem2/src/tokens/INJ.svg new file mode 100644 index 000000000..b6d304e49 --- /dev/null +++ b/src/problem2/src/tokens/INJ.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/INT.svg b/src/problem2/src/tokens/INT.svg new file mode 100644 index 000000000..9ab0d29f3 --- /dev/null +++ b/src/problem2/src/tokens/INT.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ION.svg b/src/problem2/src/tokens/ION.svg new file mode 100644 index 000000000..adad5f300 --- /dev/null +++ b/src/problem2/src/tokens/ION.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/IOST.svg b/src/problem2/src/tokens/IOST.svg new file mode 100644 index 000000000..8f791796a --- /dev/null +++ b/src/problem2/src/tokens/IOST.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/IOTX.svg b/src/problem2/src/tokens/IOTX.svg new file mode 100644 index 000000000..97a846183 --- /dev/null +++ b/src/problem2/src/tokens/IOTX.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/IOV.svg b/src/problem2/src/tokens/IOV.svg new file mode 100644 index 000000000..2c37835ff --- /dev/null +++ b/src/problem2/src/tokens/IOV.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/IP.svg b/src/problem2/src/tokens/IP.svg new file mode 100644 index 000000000..be63bba6d --- /dev/null +++ b/src/problem2/src/tokens/IP.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/IRIS.svg b/src/problem2/src/tokens/IRIS.svg new file mode 100644 index 000000000..59b13b5aa --- /dev/null +++ b/src/problem2/src/tokens/IRIS.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/IXO.svg b/src/problem2/src/tokens/IXO.svg new file mode 100644 index 000000000..0d1fb1013 --- /dev/null +++ b/src/problem2/src/tokens/IXO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/JPT.svg b/src/problem2/src/tokens/JPT.svg new file mode 100644 index 000000000..14014e4cb --- /dev/null +++ b/src/problem2/src/tokens/JPT.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/JTO.svg b/src/problem2/src/tokens/JTO.svg new file mode 100644 index 000000000..3ce7f5158 --- /dev/null +++ b/src/problem2/src/tokens/JTO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/JUNO.svg b/src/problem2/src/tokens/JUNO.svg new file mode 100644 index 000000000..d65fb3da3 --- /dev/null +++ b/src/problem2/src/tokens/JUNO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/JUP.svg b/src/problem2/src/tokens/JUP.svg new file mode 100644 index 000000000..adf928481 --- /dev/null +++ b/src/problem2/src/tokens/JUP.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KAITO.svg b/src/problem2/src/tokens/KAITO.svg new file mode 100644 index 000000000..f51471047 --- /dev/null +++ b/src/problem2/src/tokens/KAITO.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KAS.svg b/src/problem2/src/tokens/KAS.svg new file mode 100644 index 000000000..1c9ea6bc4 --- /dev/null +++ b/src/problem2/src/tokens/KAS.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/problem2/src/tokens/KBONK.svg b/src/problem2/src/tokens/KBONK.svg new file mode 100644 index 000000000..5df777e89 --- /dev/null +++ b/src/problem2/src/tokens/KBONK.svg @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KCS.svg b/src/problem2/src/tokens/KCS.svg new file mode 100644 index 000000000..a4b333dfb --- /dev/null +++ b/src/problem2/src/tokens/KCS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/KFLOKI.svg b/src/problem2/src/tokens/KFLOKI.svg new file mode 100644 index 000000000..d35699e87 --- /dev/null +++ b/src/problem2/src/tokens/KFLOKI.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KLAY.svg b/src/problem2/src/tokens/KLAY.svg new file mode 100644 index 000000000..6f1d4cabe --- /dev/null +++ b/src/problem2/src/tokens/KLAY.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/KMD.svg b/src/problem2/src/tokens/KMD.svg new file mode 100644 index 000000000..62598658b --- /dev/null +++ b/src/problem2/src/tokens/KMD.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KNC.svg b/src/problem2/src/tokens/KNC.svg new file mode 100644 index 000000000..d9ed00657 --- /dev/null +++ b/src/problem2/src/tokens/KNC.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/KPEPE.svg b/src/problem2/src/tokens/KPEPE.svg new file mode 100644 index 000000000..92665e550 --- /dev/null +++ b/src/problem2/src/tokens/KPEPE.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KRT.svg b/src/problem2/src/tokens/KRT.svg new file mode 100644 index 000000000..e6ea416cf --- /dev/null +++ b/src/problem2/src/tokens/KRT.svg @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KSHIB.svg b/src/problem2/src/tokens/KSHIB.svg new file mode 100644 index 000000000..adbb2f009 --- /dev/null +++ b/src/problem2/src/tokens/KSHIB.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/KSM.svg b/src/problem2/src/tokens/KSM.svg new file mode 100644 index 000000000..771f73596 --- /dev/null +++ b/src/problem2/src/tokens/KSM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/KUJI.svg b/src/problem2/src/tokens/KUJI.svg new file mode 100644 index 000000000..7c169dd72 --- /dev/null +++ b/src/problem2/src/tokens/KUJI.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LAYER.svg b/src/problem2/src/tokens/LAYER.svg new file mode 100644 index 000000000..9e9036df3 --- /dev/null +++ b/src/problem2/src/tokens/LAYER.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LBTC.svg b/src/problem2/src/tokens/LBTC.svg new file mode 100644 index 000000000..1476de62a --- /dev/null +++ b/src/problem2/src/tokens/LBTC.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LDO.svg b/src/problem2/src/tokens/LDO.svg new file mode 100644 index 000000000..c8860768c --- /dev/null +++ b/src/problem2/src/tokens/LDO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LEO.svg b/src/problem2/src/tokens/LEO.svg new file mode 100644 index 000000000..f94a11c94 --- /dev/null +++ b/src/problem2/src/tokens/LEO.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LET.svg b/src/problem2/src/tokens/LET.svg new file mode 100644 index 000000000..8f6a4a06e --- /dev/null +++ b/src/problem2/src/tokens/LET.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LIKE.svg b/src/problem2/src/tokens/LIKE.svg new file mode 100644 index 000000000..a0ac6ac6a --- /dev/null +++ b/src/problem2/src/tokens/LIKE.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LINK.svg b/src/problem2/src/tokens/LINK.svg new file mode 100644 index 000000000..8484106a4 --- /dev/null +++ b/src/problem2/src/tokens/LINK.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/LKT.svg b/src/problem2/src/tokens/LKT.svg new file mode 100644 index 000000000..f224ae0ff --- /dev/null +++ b/src/problem2/src/tokens/LKT.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LOOM.svg b/src/problem2/src/tokens/LOOM.svg new file mode 100644 index 000000000..5ad043561 --- /dev/null +++ b/src/problem2/src/tokens/LOOM.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LOOP.svg b/src/problem2/src/tokens/LOOP.svg new file mode 100644 index 000000000..6c6942043 --- /dev/null +++ b/src/problem2/src/tokens/LOOP.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LOTA.svg b/src/problem2/src/tokens/LOTA.svg new file mode 100644 index 000000000..10c742ae6 --- /dev/null +++ b/src/problem2/src/tokens/LOTA.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/LPLBTC_29MAY2025.svg b/src/problem2/src/tokens/LPLBTC_29MAY2025.svg new file mode 100644 index 000000000..d75f81bcd --- /dev/null +++ b/src/problem2/src/tokens/LPLBTC_29MAY2025.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LPT.svg b/src/problem2/src/tokens/LPT.svg new file mode 100644 index 000000000..c026842d9 --- /dev/null +++ b/src/problem2/src/tokens/LPT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/LPberaSTONE_10APR2025.svg b/src/problem2/src/tokens/LPberaSTONE_10APR2025.svg new file mode 100644 index 000000000..24fd8ebe9 --- /dev/null +++ b/src/problem2/src/tokens/LPberaSTONE_10APR2025.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LPcmETH_26JUN2025.svg b/src/problem2/src/tokens/LPcmETH_26JUN2025.svg new file mode 100644 index 000000000..dd4bb6fbb --- /dev/null +++ b/src/problem2/src/tokens/LPcmETH_26JUN2025.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LRC.svg b/src/problem2/src/tokens/LRC.svg new file mode 100644 index 000000000..2319bb063 --- /dev/null +++ b/src/problem2/src/tokens/LRC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/LSI.svg b/src/problem2/src/tokens/LSI.svg new file mode 100644 index 000000000..48618f66b --- /dev/null +++ b/src/problem2/src/tokens/LSI.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LSK.svg b/src/problem2/src/tokens/LSK.svg new file mode 100644 index 000000000..d7b38f123 --- /dev/null +++ b/src/problem2/src/tokens/LSK.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/LTC.svg b/src/problem2/src/tokens/LTC.svg new file mode 100644 index 000000000..d734c3ac5 --- /dev/null +++ b/src/problem2/src/tokens/LTC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/LUM.svg b/src/problem2/src/tokens/LUM.svg new file mode 100644 index 000000000..8994d02ad --- /dev/null +++ b/src/problem2/src/tokens/LUM.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LUNA.svg b/src/problem2/src/tokens/LUNA.svg new file mode 100644 index 000000000..6a839981d --- /dev/null +++ b/src/problem2/src/tokens/LUNA.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LUNAX.svg b/src/problem2/src/tokens/LUNAX.svg new file mode 100644 index 000000000..afc19e17d --- /dev/null +++ b/src/problem2/src/tokens/LUNAX.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/LUNC.svg b/src/problem2/src/tokens/LUNC.svg new file mode 100644 index 000000000..fe40173c9 --- /dev/null +++ b/src/problem2/src/tokens/LUNC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/LUNI.svg b/src/problem2/src/tokens/LUNI.svg new file mode 100644 index 000000000..172164374 --- /dev/null +++ b/src/problem2/src/tokens/LUNI.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LUNR.svg b/src/problem2/src/tokens/LUNR.svg new file mode 100644 index 000000000..1b8b15237 --- /dev/null +++ b/src/problem2/src/tokens/LUNR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/LUV.svg b/src/problem2/src/tokens/LUV.svg new file mode 100644 index 000000000..0f7342c49 --- /dev/null +++ b/src/problem2/src/tokens/LUV.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/LVN.svg b/src/problem2/src/tokens/LVN.svg new file mode 100644 index 000000000..65aac46ea --- /dev/null +++ b/src/problem2/src/tokens/LVN.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/Liquid Staking Index.svg b/src/problem2/src/tokens/Liquid Staking Index.svg new file mode 100644 index 000000000..58533746b --- /dev/null +++ b/src/problem2/src/tokens/Liquid Staking Index.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/M87.svg b/src/problem2/src/tokens/M87.svg new file mode 100644 index 000000000..77f8c882b --- /dev/null +++ b/src/problem2/src/tokens/M87.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MANA.svg b/src/problem2/src/tokens/MANA.svg new file mode 100644 index 000000000..062946722 --- /dev/null +++ b/src/problem2/src/tokens/MANA.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MANTA.svg b/src/problem2/src/tokens/MANTA.svg new file mode 100644 index 000000000..1970537a1 --- /dev/null +++ b/src/problem2/src/tokens/MANTA.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MARBLE.svg b/src/problem2/src/tokens/MARBLE.svg new file mode 100644 index 000000000..4e9c2214f --- /dev/null +++ b/src/problem2/src/tokens/MARBLE.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/MATH.svg b/src/problem2/src/tokens/MATH.svg new file mode 100644 index 000000000..144d40f0b --- /dev/null +++ b/src/problem2/src/tokens/MATH.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/MATIC.svg b/src/problem2/src/tokens/MATIC.svg new file mode 100644 index 000000000..98d07c7d9 --- /dev/null +++ b/src/problem2/src/tokens/MATIC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/MDX.svg b/src/problem2/src/tokens/MDX.svg new file mode 100644 index 000000000..8f3b26780 --- /dev/null +++ b/src/problem2/src/tokens/MDX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/ME.svg b/src/problem2/src/tokens/ME.svg new file mode 100644 index 000000000..f35418272 --- /dev/null +++ b/src/problem2/src/tokens/ME.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MED.svg b/src/problem2/src/tokens/MED.svg new file mode 100644 index 000000000..900d13925 --- /dev/null +++ b/src/problem2/src/tokens/MED.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/MEME.svg b/src/problem2/src/tokens/MEME.svg new file mode 100644 index 000000000..d784304a6 --- /dev/null +++ b/src/problem2/src/tokens/MEME.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/METIS.svg b/src/problem2/src/tokens/METIS.svg new file mode 100644 index 000000000..3bd43ffad --- /dev/null +++ b/src/problem2/src/tokens/METIS.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MEW.svg b/src/problem2/src/tokens/MEW.svg new file mode 100644 index 000000000..dc9532c53 --- /dev/null +++ b/src/problem2/src/tokens/MEW.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MIAW.svg b/src/problem2/src/tokens/MIAW.svg new file mode 100644 index 000000000..ddf46721c --- /dev/null +++ b/src/problem2/src/tokens/MIAW.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/MILK.svg b/src/problem2/src/tokens/MILK.svg new file mode 100644 index 000000000..e6a434e9c --- /dev/null +++ b/src/problem2/src/tokens/MILK.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MINA.svg b/src/problem2/src/tokens/MINA.svg new file mode 100644 index 000000000..d5aafd739 --- /dev/null +++ b/src/problem2/src/tokens/MINA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/MINE.svg b/src/problem2/src/tokens/MINE.svg new file mode 100644 index 000000000..ff71cab9e --- /dev/null +++ b/src/problem2/src/tokens/MINE.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MIOTA.svg b/src/problem2/src/tokens/MIOTA.svg new file mode 100644 index 000000000..3d3c08c60 --- /dev/null +++ b/src/problem2/src/tokens/MIOTA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/MIR.svg b/src/problem2/src/tokens/MIR.svg new file mode 100644 index 000000000..024779131 --- /dev/null +++ b/src/problem2/src/tokens/MIR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/MKR.svg b/src/problem2/src/tokens/MKR.svg new file mode 100644 index 000000000..9a639d137 --- /dev/null +++ b/src/problem2/src/tokens/MKR.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/MMOG.svg b/src/problem2/src/tokens/MMOG.svg new file mode 100644 index 000000000..6bb1f33b1 --- /dev/null +++ b/src/problem2/src/tokens/MMOG.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MNT.svg b/src/problem2/src/tokens/MNT.svg new file mode 100644 index 000000000..1aa231ddd --- /dev/null +++ b/src/problem2/src/tokens/MNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/MNTA.svg b/src/problem2/src/tokens/MNTA.svg new file mode 100644 index 000000000..e3b7cfa95 --- /dev/null +++ b/src/problem2/src/tokens/MNTA.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MNTL.svg b/src/problem2/src/tokens/MNTL.svg new file mode 100644 index 000000000..71e1c497e --- /dev/null +++ b/src/problem2/src/tokens/MNTL.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MON.svg b/src/problem2/src/tokens/MON.svg new file mode 100644 index 000000000..be988333a --- /dev/null +++ b/src/problem2/src/tokens/MON.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MOODENG.svg b/src/problem2/src/tokens/MOODENG.svg new file mode 100644 index 000000000..679ffc5b3 --- /dev/null +++ b/src/problem2/src/tokens/MOODENG.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MORPHO.svg b/src/problem2/src/tokens/MORPHO.svg new file mode 100644 index 000000000..a27a0fb36 --- /dev/null +++ b/src/problem2/src/tokens/MORPHO.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/MYT.svg b/src/problem2/src/tokens/MYT.svg new file mode 100644 index 000000000..92cbc6468 --- /dev/null +++ b/src/problem2/src/tokens/MYT.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NANO.svg b/src/problem2/src/tokens/NANO.svg new file mode 100644 index 000000000..9ed54dd84 --- /dev/null +++ b/src/problem2/src/tokens/NANO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/NAS.svg b/src/problem2/src/tokens/NAS.svg new file mode 100644 index 000000000..071766c17 --- /dev/null +++ b/src/problem2/src/tokens/NAS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/NAT.svg b/src/problem2/src/tokens/NAT.svg new file mode 100644 index 000000000..d72f7e18f --- /dev/null +++ b/src/problem2/src/tokens/NAT.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/NEAR.svg b/src/problem2/src/tokens/NEAR.svg new file mode 100644 index 000000000..7bc784c80 --- /dev/null +++ b/src/problem2/src/tokens/NEAR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/NEIROETH.svg b/src/problem2/src/tokens/NEIROETH.svg new file mode 100644 index 000000000..3ced226fe --- /dev/null +++ b/src/problem2/src/tokens/NEIROETH.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NEO.svg b/src/problem2/src/tokens/NEO.svg new file mode 100644 index 000000000..d4a90e1b2 --- /dev/null +++ b/src/problem2/src/tokens/NEO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/NETA.svg b/src/problem2/src/tokens/NETA.svg new file mode 100644 index 000000000..b617dbef9 --- /dev/null +++ b/src/problem2/src/tokens/NETA.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/NEX.svg b/src/problem2/src/tokens/NEX.svg new file mode 100644 index 000000000..34be620b9 --- /dev/null +++ b/src/problem2/src/tokens/NEX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/NEXO.svg b/src/problem2/src/tokens/NEXO.svg new file mode 100644 index 000000000..4f8507a40 --- /dev/null +++ b/src/problem2/src/tokens/NEXO.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/NGM.svg b/src/problem2/src/tokens/NGM.svg new file mode 100644 index 000000000..ebdc8a035 --- /dev/null +++ b/src/problem2/src/tokens/NGM.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/NIM.svg b/src/problem2/src/tokens/NIM.svg new file mode 100644 index 000000000..ec74006b7 --- /dev/null +++ b/src/problem2/src/tokens/NIM.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NKN.svg b/src/problem2/src/tokens/NKN.svg new file mode 100644 index 000000000..e008ac5d7 --- /dev/null +++ b/src/problem2/src/tokens/NKN.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NMR.svg b/src/problem2/src/tokens/NMR.svg new file mode 100644 index 000000000..fcb458caf --- /dev/null +++ b/src/problem2/src/tokens/NMR.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/NOT.svg b/src/problem2/src/tokens/NOT.svg new file mode 100644 index 000000000..5561ccec7 --- /dev/null +++ b/src/problem2/src/tokens/NOT.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NOTE.svg b/src/problem2/src/tokens/NOTE.svg new file mode 100644 index 000000000..9f44e1971 --- /dev/null +++ b/src/problem2/src/tokens/NOTE.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NTRN-dATOM.svg b/src/problem2/src/tokens/NTRN-dATOM.svg new file mode 100644 index 000000000..5b3303f21 --- /dev/null +++ b/src/problem2/src/tokens/NTRN-dATOM.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NTRN.svg b/src/problem2/src/tokens/NTRN.svg new file mode 100644 index 000000000..150a6137d --- /dev/null +++ b/src/problem2/src/tokens/NTRN.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/NXM.svg b/src/problem2/src/tokens/NXM.svg new file mode 100644 index 000000000..165bc3b98 --- /dev/null +++ b/src/problem2/src/tokens/NXM.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/OCEAN.svg b/src/problem2/src/tokens/OCEAN.svg new file mode 100644 index 000000000..ad0f99d6a --- /dev/null +++ b/src/problem2/src/tokens/OCEAN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/OCH.svg b/src/problem2/src/tokens/OCH.svg new file mode 100644 index 000000000..51c3f8e03 --- /dev/null +++ b/src/problem2/src/tokens/OCH.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/OGN.svg b/src/problem2/src/tokens/OGN.svg new file mode 100644 index 000000000..e15dbac85 --- /dev/null +++ b/src/problem2/src/tokens/OGN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/OKB.svg b/src/problem2/src/tokens/OKB.svg new file mode 100644 index 000000000..786f75ba4 --- /dev/null +++ b/src/problem2/src/tokens/OKB.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/OKT.svg b/src/problem2/src/tokens/OKT.svg new file mode 100644 index 000000000..0afcd8a1c --- /dev/null +++ b/src/problem2/src/tokens/OKT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/OM.svg b/src/problem2/src/tokens/OM.svg new file mode 100644 index 000000000..6305bd156 --- /dev/null +++ b/src/problem2/src/tokens/OM.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/OMG.svg b/src/problem2/src/tokens/OMG.svg new file mode 100644 index 000000000..2d3d8ae8e --- /dev/null +++ b/src/problem2/src/tokens/OMG.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/OMG_2.svg b/src/problem2/src/tokens/OMG_2.svg new file mode 100644 index 000000000..5735f9f72 --- /dev/null +++ b/src/problem2/src/tokens/OMG_2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/OMI.svg b/src/problem2/src/tokens/OMI.svg new file mode 100644 index 000000000..b1d502008 --- /dev/null +++ b/src/problem2/src/tokens/OMI.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/OMNI.svg b/src/problem2/src/tokens/OMNI.svg new file mode 100644 index 000000000..ea1ce8353 --- /dev/null +++ b/src/problem2/src/tokens/OMNI.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ONDO.svg b/src/problem2/src/tokens/ONDO.svg new file mode 100644 index 000000000..84482f794 --- /dev/null +++ b/src/problem2/src/tokens/ONDO.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ONE.svg b/src/problem2/src/tokens/ONE.svg new file mode 100644 index 000000000..63c1260c0 --- /dev/null +++ b/src/problem2/src/tokens/ONE.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/ONT.svg b/src/problem2/src/tokens/ONT.svg new file mode 100644 index 000000000..93378b474 --- /dev/null +++ b/src/problem2/src/tokens/ONT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/OP.svg b/src/problem2/src/tokens/OP.svg new file mode 100644 index 000000000..b5feac794 --- /dev/null +++ b/src/problem2/src/tokens/OP.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/OPUL.svg b/src/problem2/src/tokens/OPUL.svg new file mode 100644 index 000000000..c7ae4dbf3 --- /dev/null +++ b/src/problem2/src/tokens/OPUL.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/ORDI.svg b/src/problem2/src/tokens/ORDI.svg new file mode 100644 index 000000000..380181270 --- /dev/null +++ b/src/problem2/src/tokens/ORDI.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ORION.svg b/src/problem2/src/tokens/ORION.svg new file mode 100644 index 000000000..b5f9ba6ff --- /dev/null +++ b/src/problem2/src/tokens/ORION.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/ORNE.svg b/src/problem2/src/tokens/ORNE.svg new file mode 100644 index 000000000..d986b3f31 --- /dev/null +++ b/src/problem2/src/tokens/ORNE.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/OSMO.svg b/src/problem2/src/tokens/OSMO.svg new file mode 100644 index 000000000..e98545517 --- /dev/null +++ b/src/problem2/src/tokens/OSMO.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/OXT.svg b/src/problem2/src/tokens/OXT.svg new file mode 100644 index 000000000..bba9547da --- /dev/null +++ b/src/problem2/src/tokens/OXT.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/OXY.svg b/src/problem2/src/tokens/OXY.svg new file mode 100644 index 000000000..9175a0b90 --- /dev/null +++ b/src/problem2/src/tokens/OXY.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PAX.svg b/src/problem2/src/tokens/PAX.svg new file mode 100644 index 000000000..32b0ef821 --- /dev/null +++ b/src/problem2/src/tokens/PAX.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PAXG.svg b/src/problem2/src/tokens/PAXG.svg new file mode 100644 index 000000000..5ff89051f --- /dev/null +++ b/src/problem2/src/tokens/PAXG.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PENDLE.svg b/src/problem2/src/tokens/PENDLE.svg new file mode 100644 index 000000000..367540fbb --- /dev/null +++ b/src/problem2/src/tokens/PENDLE.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PENGU.svg b/src/problem2/src/tokens/PENGU.svg new file mode 100644 index 000000000..a5c99add3 --- /dev/null +++ b/src/problem2/src/tokens/PENGU.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PEPE.svg b/src/problem2/src/tokens/PEPE.svg new file mode 100644 index 000000000..1e6ba151a --- /dev/null +++ b/src/problem2/src/tokens/PEPE.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PHT.svg b/src/problem2/src/tokens/PHT.svg new file mode 100644 index 000000000..d51511805 --- /dev/null +++ b/src/problem2/src/tokens/PHT.svg @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PLAY.svg b/src/problem2/src/tokens/PLAY.svg new file mode 100644 index 000000000..bae257742 --- /dev/null +++ b/src/problem2/src/tokens/PLAY.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PLQ.svg b/src/problem2/src/tokens/PLQ.svg new file mode 100644 index 000000000..31b353bb4 --- /dev/null +++ b/src/problem2/src/tokens/PLQ.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PLY.svg b/src/problem2/src/tokens/PLY.svg new file mode 100644 index 000000000..c79b32044 --- /dev/null +++ b/src/problem2/src/tokens/PLY.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PNUT.svg b/src/problem2/src/tokens/PNUT.svg new file mode 100644 index 000000000..90abdb384 --- /dev/null +++ b/src/problem2/src/tokens/PNUT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/POL.svg b/src/problem2/src/tokens/POL.svg new file mode 100644 index 000000000..ceff03709 --- /dev/null +++ b/src/problem2/src/tokens/POL.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/POLY.svg b/src/problem2/src/tokens/POLY.svg new file mode 100644 index 000000000..b894fef5d --- /dev/null +++ b/src/problem2/src/tokens/POLY.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/POPCAT.svg b/src/problem2/src/tokens/POPCAT.svg new file mode 100644 index 000000000..ab8fa4c5e --- /dev/null +++ b/src/problem2/src/tokens/POPCAT.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/PORT.svg b/src/problem2/src/tokens/PORT.svg new file mode 100644 index 000000000..d84653736 --- /dev/null +++ b/src/problem2/src/tokens/PORT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/PROM.svg b/src/problem2/src/tokens/PROM.svg new file mode 100644 index 000000000..044c9e357 --- /dev/null +++ b/src/problem2/src/tokens/PROM.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/PSI.svg b/src/problem2/src/tokens/PSI.svg new file mode 100644 index 000000000..674744b4e --- /dev/null +++ b/src/problem2/src/tokens/PSI.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/PSTAKE.svg b/src/problem2/src/tokens/PSTAKE.svg new file mode 100644 index 000000000..caf13d8d6 --- /dev/null +++ b/src/problem2/src/tokens/PSTAKE.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/PTLBTC_29MAY2025.svg b/src/problem2/src/tokens/PTLBTC_29MAY2025.svg new file mode 100644 index 000000000..afb01c923 --- /dev/null +++ b/src/problem2/src/tokens/PTLBTC_29MAY2025.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PTMETH_26DEC2024.svg b/src/problem2/src/tokens/PTMETH_26DEC2024.svg new file mode 100644 index 000000000..3256ec9f5 --- /dev/null +++ b/src/problem2/src/tokens/PTMETH_26DEC2024.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PTberaSTONE_10APR2025.svg b/src/problem2/src/tokens/PTberaSTONE_10APR2025.svg new file mode 100644 index 000000000..1444e75df --- /dev/null +++ b/src/problem2/src/tokens/PTberaSTONE_10APR2025.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PTcmETH_26JUN2025.svg b/src/problem2/src/tokens/PTcmETH_26JUN2025.svg new file mode 100644 index 000000000..860a1e389 --- /dev/null +++ b/src/problem2/src/tokens/PTcmETH_26JUN2025.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PUDGY.svg b/src/problem2/src/tokens/PUDGY.svg new file mode 100644 index 000000000..239424d8c --- /dev/null +++ b/src/problem2/src/tokens/PUDGY.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PUMP.svg b/src/problem2/src/tokens/PUMP.svg new file mode 100644 index 000000000..3b8ac28fd --- /dev/null +++ b/src/problem2/src/tokens/PUMP.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PUNDIX.svg b/src/problem2/src/tokens/PUNDIX.svg new file mode 100644 index 000000000..a522d0d26 --- /dev/null +++ b/src/problem2/src/tokens/PUNDIX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/PURR.svg b/src/problem2/src/tokens/PURR.svg new file mode 100644 index 000000000..c8b82375c --- /dev/null +++ b/src/problem2/src/tokens/PURR.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PURSE.svg b/src/problem2/src/tokens/PURSE.svg new file mode 100644 index 000000000..9188e092d --- /dev/null +++ b/src/problem2/src/tokens/PURSE.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/PYTH.svg b/src/problem2/src/tokens/PYTH.svg new file mode 100644 index 000000000..b34cc9ea3 --- /dev/null +++ b/src/problem2/src/tokens/PYTH.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/QCK.svg b/src/problem2/src/tokens/QCK.svg new file mode 100644 index 000000000..358cb7dbb --- /dev/null +++ b/src/problem2/src/tokens/QCK.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/QKC.svg b/src/problem2/src/tokens/QKC.svg new file mode 100644 index 000000000..e31277750 --- /dev/null +++ b/src/problem2/src/tokens/QKC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/QNT.svg b/src/problem2/src/tokens/QNT.svg new file mode 100644 index 000000000..a611eaa24 --- /dev/null +++ b/src/problem2/src/tokens/QNT.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/QTUM.svg b/src/problem2/src/tokens/QTUM.svg new file mode 100644 index 000000000..e96f6cf2c --- /dev/null +++ b/src/problem2/src/tokens/QTUM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/RAY.svg b/src/problem2/src/tokens/RAY.svg new file mode 100644 index 000000000..e769284e2 --- /dev/null +++ b/src/problem2/src/tokens/RAY.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/RBN.svg b/src/problem2/src/tokens/RBN.svg new file mode 100644 index 000000000..ef40c376d --- /dev/null +++ b/src/problem2/src/tokens/RBN.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/REEF.svg b/src/problem2/src/tokens/REEF.svg new file mode 100644 index 000000000..5c777f840 --- /dev/null +++ b/src/problem2/src/tokens/REEF.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/REGEN.svg b/src/problem2/src/tokens/REGEN.svg new file mode 100644 index 000000000..242a4c66c --- /dev/null +++ b/src/problem2/src/tokens/REGEN.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/REN.svg b/src/problem2/src/tokens/REN.svg new file mode 100644 index 000000000..bae08ca56 --- /dev/null +++ b/src/problem2/src/tokens/REN.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/REP.svg b/src/problem2/src/tokens/REP.svg new file mode 100644 index 000000000..c311970b6 --- /dev/null +++ b/src/problem2/src/tokens/REP.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/REV.svg b/src/problem2/src/tokens/REV.svg new file mode 100644 index 000000000..6dcaa131a --- /dev/null +++ b/src/problem2/src/tokens/REV.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/RLB.svg b/src/problem2/src/tokens/RLB.svg new file mode 100644 index 000000000..344fe8e02 --- /dev/null +++ b/src/problem2/src/tokens/RLB.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/RLC.svg b/src/problem2/src/tokens/RLC.svg new file mode 100644 index 000000000..c816edf01 --- /dev/null +++ b/src/problem2/src/tokens/RLC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/RNDR.svg b/src/problem2/src/tokens/RNDR.svg new file mode 100644 index 000000000..031e8816b --- /dev/null +++ b/src/problem2/src/tokens/RNDR.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ROAR.svg b/src/problem2/src/tokens/ROAR.svg new file mode 100644 index 000000000..d29ab0963 --- /dev/null +++ b/src/problem2/src/tokens/ROAR.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ROWAN.svg b/src/problem2/src/tokens/ROWAN.svg new file mode 100644 index 000000000..6b395742d --- /dev/null +++ b/src/problem2/src/tokens/ROWAN.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/RSR.svg b/src/problem2/src/tokens/RSR.svg new file mode 100644 index 000000000..f85bb78c2 --- /dev/null +++ b/src/problem2/src/tokens/RSR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/RUNE.svg b/src/problem2/src/tokens/RUNE.svg new file mode 100644 index 000000000..ccbb65cef --- /dev/null +++ b/src/problem2/src/tokens/RUNE.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/RVN.svg b/src/problem2/src/tokens/RVN.svg new file mode 100644 index 000000000..4d6d30eee --- /dev/null +++ b/src/problem2/src/tokens/RVN.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/S.svg b/src/problem2/src/tokens/S.svg new file mode 100644 index 000000000..b216a1804 --- /dev/null +++ b/src/problem2/src/tokens/S.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/SAFEMOON.svg b/src/problem2/src/tokens/SAFEMOON.svg new file mode 100644 index 000000000..9ff12873a --- /dev/null +++ b/src/problem2/src/tokens/SAFEMOON.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SAGA.svg b/src/problem2/src/tokens/SAGA.svg new file mode 100644 index 000000000..53455ea0d --- /dev/null +++ b/src/problem2/src/tokens/SAGA.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SAND.svg b/src/problem2/src/tokens/SAND.svg new file mode 100644 index 000000000..4e01196b4 --- /dev/null +++ b/src/problem2/src/tokens/SAND.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/SAYVE.svg b/src/problem2/src/tokens/SAYVE.svg new file mode 100644 index 000000000..2cea35fc5 --- /dev/null +++ b/src/problem2/src/tokens/SAYVE.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/SC.svg b/src/problem2/src/tokens/SC.svg new file mode 100644 index 000000000..aebc27644 --- /dev/null +++ b/src/problem2/src/tokens/SC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/SCRT.svg b/src/problem2/src/tokens/SCRT.svg new file mode 100644 index 000000000..9451de411 --- /dev/null +++ b/src/problem2/src/tokens/SCRT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/SDT.svg b/src/problem2/src/tokens/SDT.svg new file mode 100644 index 000000000..222a72897 --- /dev/null +++ b/src/problem2/src/tokens/SDT.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SEI.svg b/src/problem2/src/tokens/SEI.svg new file mode 100644 index 000000000..65ea99277 --- /dev/null +++ b/src/problem2/src/tokens/SEI.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SET.svg b/src/problem2/src/tokens/SET.svg new file mode 100644 index 000000000..f46a6ba24 --- /dev/null +++ b/src/problem2/src/tokens/SET.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SGT.svg b/src/problem2/src/tokens/SGT.svg new file mode 100644 index 000000000..a975dece9 --- /dev/null +++ b/src/problem2/src/tokens/SGT.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SHD.svg b/src/problem2/src/tokens/SHD.svg new file mode 100644 index 000000000..bdb7e6c29 --- /dev/null +++ b/src/problem2/src/tokens/SHD.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SHIB.svg b/src/problem2/src/tokens/SHIB.svg new file mode 100644 index 000000000..adbb2f009 --- /dev/null +++ b/src/problem2/src/tokens/SHIB.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SHIDO.svg b/src/problem2/src/tokens/SHIDO.svg new file mode 100644 index 000000000..bd7deeeb4 --- /dev/null +++ b/src/problem2/src/tokens/SHIDO.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SITY.svg b/src/problem2/src/tokens/SITY.svg new file mode 100644 index 000000000..7cfb8209b --- /dev/null +++ b/src/problem2/src/tokens/SITY.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/SLERF.svg b/src/problem2/src/tokens/SLERF.svg new file mode 100644 index 000000000..713f29af9 --- /dev/null +++ b/src/problem2/src/tokens/SLERF.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SNT.svg b/src/problem2/src/tokens/SNT.svg new file mode 100644 index 000000000..cc8ad2df4 --- /dev/null +++ b/src/problem2/src/tokens/SNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/SNX.svg b/src/problem2/src/tokens/SNX.svg new file mode 100644 index 000000000..14e059138 --- /dev/null +++ b/src/problem2/src/tokens/SNX.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/SOL.svg b/src/problem2/src/tokens/SOL.svg new file mode 100644 index 000000000..0568e8088 --- /dev/null +++ b/src/problem2/src/tokens/SOL.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SOLETH.svg b/src/problem2/src/tokens/SOLETH.svg new file mode 100644 index 000000000..c7f81893f --- /dev/null +++ b/src/problem2/src/tokens/SOLETH.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SOM.svg b/src/problem2/src/tokens/SOM.svg new file mode 100644 index 000000000..778bf9b5c --- /dev/null +++ b/src/problem2/src/tokens/SOM.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/SOMM.svg b/src/problem2/src/tokens/SOMM.svg new file mode 100644 index 000000000..fa82d261e --- /dev/null +++ b/src/problem2/src/tokens/SOMM.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SPEC.svg b/src/problem2/src/tokens/SPEC.svg new file mode 100644 index 000000000..75c9b37b2 --- /dev/null +++ b/src/problem2/src/tokens/SPEC.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/SRM.svg b/src/problem2/src/tokens/SRM.svg new file mode 100644 index 000000000..e488de82d --- /dev/null +++ b/src/problem2/src/tokens/SRM.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SRV.svg b/src/problem2/src/tokens/SRV.svg new file mode 100644 index 000000000..b15a61c77 --- /dev/null +++ b/src/problem2/src/tokens/SRV.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/STARS.svg b/src/problem2/src/tokens/STARS.svg new file mode 100644 index 000000000..de6d376db --- /dev/null +++ b/src/problem2/src/tokens/STARS.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/STEEM.svg b/src/problem2/src/tokens/STEEM.svg new file mode 100644 index 000000000..503009b90 --- /dev/null +++ b/src/problem2/src/tokens/STEEM.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/STMX.svg b/src/problem2/src/tokens/STMX.svg new file mode 100644 index 000000000..976e86474 --- /dev/null +++ b/src/problem2/src/tokens/STMX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/STORJ.svg b/src/problem2/src/tokens/STORJ.svg new file mode 100644 index 000000000..85a332a6c --- /dev/null +++ b/src/problem2/src/tokens/STORJ.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/STRAX.svg b/src/problem2/src/tokens/STRAX.svg new file mode 100644 index 000000000..a34822931 --- /dev/null +++ b/src/problem2/src/tokens/STRAX.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/STRD.svg b/src/problem2/src/tokens/STRD.svg new file mode 100644 index 000000000..f25a48536 --- /dev/null +++ b/src/problem2/src/tokens/STRD.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/STREAM.svg b/src/problem2/src/tokens/STREAM.svg new file mode 100644 index 000000000..fba4ce060 --- /dev/null +++ b/src/problem2/src/tokens/STREAM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/STRK.svg b/src/problem2/src/tokens/STRK.svg new file mode 100644 index 000000000..22c139824 --- /dev/null +++ b/src/problem2/src/tokens/STRK.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/STT.svg b/src/problem2/src/tokens/STT.svg new file mode 100644 index 000000000..d37590a8d --- /dev/null +++ b/src/problem2/src/tokens/STT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/STX.svg b/src/problem2/src/tokens/STX.svg new file mode 100644 index 000000000..ed89fc927 --- /dev/null +++ b/src/problem2/src/tokens/STX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/SUI.svg b/src/problem2/src/tokens/SUI.svg new file mode 100644 index 000000000..7687a8804 --- /dev/null +++ b/src/problem2/src/tokens/SUI.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SUN.svg b/src/problem2/src/tokens/SUN.svg new file mode 100644 index 000000000..1159b6cbf --- /dev/null +++ b/src/problem2/src/tokens/SUN.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SUSHI.svg b/src/problem2/src/tokens/SUSHI.svg new file mode 100644 index 000000000..e118f213b --- /dev/null +++ b/src/problem2/src/tokens/SUSHI.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SWTH-LEGACY.svg b/src/problem2/src/tokens/SWTH-LEGACY.svg new file mode 100644 index 000000000..60ba0650e --- /dev/null +++ b/src/problem2/src/tokens/SWTH-LEGACY.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/SWTH.svg b/src/problem2/src/tokens/SWTH.svg new file mode 100644 index 000000000..353c1b5bc --- /dev/null +++ b/src/problem2/src/tokens/SWTH.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/SXP.svg b/src/problem2/src/tokens/SXP.svg new file mode 100644 index 000000000..89fd3b147 --- /dev/null +++ b/src/problem2/src/tokens/SXP.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/TAO.svg b/src/problem2/src/tokens/TAO.svg new file mode 100644 index 000000000..9f0dbfcf8 --- /dev/null +++ b/src/problem2/src/tokens/TAO.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/TEL.svg b/src/problem2/src/tokens/TEL.svg new file mode 100644 index 000000000..2992514bf --- /dev/null +++ b/src/problem2/src/tokens/TEL.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/TFUEL.svg b/src/problem2/src/tokens/TFUEL.svg new file mode 100644 index 000000000..d57d7d949 --- /dev/null +++ b/src/problem2/src/tokens/TFUEL.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/THETA.svg b/src/problem2/src/tokens/THETA.svg new file mode 100644 index 000000000..8ff93f401 --- /dev/null +++ b/src/problem2/src/tokens/THETA.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/THT.svg b/src/problem2/src/tokens/THT.svg new file mode 100644 index 000000000..8ee5eb9ff --- /dev/null +++ b/src/problem2/src/tokens/THT.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TIA.svg b/src/problem2/src/tokens/TIA.svg new file mode 100644 index 000000000..41d8ab96c --- /dev/null +++ b/src/problem2/src/tokens/TIA.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TICK.svg b/src/problem2/src/tokens/TICK.svg new file mode 100644 index 000000000..3be70db26 --- /dev/null +++ b/src/problem2/src/tokens/TICK.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TITAN.svg b/src/problem2/src/tokens/TITAN.svg new file mode 100644 index 000000000..d52faa138 --- /dev/null +++ b/src/problem2/src/tokens/TITAN.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TLAND.svg b/src/problem2/src/tokens/TLAND.svg new file mode 100644 index 000000000..9f9e3e233 --- /dev/null +++ b/src/problem2/src/tokens/TLAND.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/TLM.svg b/src/problem2/src/tokens/TLM.svg new file mode 100644 index 000000000..1fe3283fe --- /dev/null +++ b/src/problem2/src/tokens/TLM.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TOMO.svg b/src/problem2/src/tokens/TOMO.svg new file mode 100644 index 000000000..45bda83d4 --- /dev/null +++ b/src/problem2/src/tokens/TOMO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/TON.svg b/src/problem2/src/tokens/TON.svg new file mode 100644 index 000000000..c1e0b9148 --- /dev/null +++ b/src/problem2/src/tokens/TON.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TPC.svg b/src/problem2/src/tokens/TPC.svg new file mode 100644 index 000000000..29f8a4af8 --- /dev/null +++ b/src/problem2/src/tokens/TPC.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TRAXX.svg b/src/problem2/src/tokens/TRAXX.svg new file mode 100644 index 000000000..05c2ec099 --- /dev/null +++ b/src/problem2/src/tokens/TRAXX.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TRB.svg b/src/problem2/src/tokens/TRB.svg new file mode 100644 index 000000000..e319e65d7 --- /dev/null +++ b/src/problem2/src/tokens/TRB.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TRU.svg b/src/problem2/src/tokens/TRU.svg new file mode 100644 index 000000000..29ddc8ac2 --- /dev/null +++ b/src/problem2/src/tokens/TRU.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/TRUMP.svg b/src/problem2/src/tokens/TRUMP.svg new file mode 100644 index 000000000..2571b5e20 --- /dev/null +++ b/src/problem2/src/tokens/TRUMP.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TRX.svg b/src/problem2/src/tokens/TRX.svg new file mode 100644 index 000000000..c105ddc30 --- /dev/null +++ b/src/problem2/src/tokens/TRX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/TTT.svg b/src/problem2/src/tokens/TTT.svg new file mode 100644 index 000000000..13e6080a8 --- /dev/null +++ b/src/problem2/src/tokens/TTT.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/TUSD.svg b/src/problem2/src/tokens/TUSD.svg new file mode 100644 index 000000000..712ec923d --- /dev/null +++ b/src/problem2/src/tokens/TUSD.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/TWD.svg b/src/problem2/src/tokens/TWD.svg new file mode 100644 index 000000000..014f52555 --- /dev/null +++ b/src/problem2/src/tokens/TWD.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/TWT.svg b/src/problem2/src/tokens/TWT.svg new file mode 100644 index 000000000..b67bf3753 --- /dev/null +++ b/src/problem2/src/tokens/TWT.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/Token.svg b/src/problem2/src/tokens/Token.svg new file mode 100644 index 000000000..bed64e294 --- /dev/null +++ b/src/problem2/src/tokens/Token.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/UBQ.svg b/src/problem2/src/tokens/UBQ.svg new file mode 100644 index 000000000..139af049c --- /dev/null +++ b/src/problem2/src/tokens/UBQ.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/UMEE.svg b/src/problem2/src/tokens/UMEE.svg new file mode 100644 index 000000000..f9243257d --- /dev/null +++ b/src/problem2/src/tokens/UMEE.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/UNA.svg b/src/problem2/src/tokens/UNA.svg new file mode 100644 index 000000000..077c1555e --- /dev/null +++ b/src/problem2/src/tokens/UNA.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/UNI.svg b/src/problem2/src/tokens/UNI.svg new file mode 100644 index 000000000..37996b6c0 --- /dev/null +++ b/src/problem2/src/tokens/UNI.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/UOS.svg b/src/problem2/src/tokens/UOS.svg new file mode 100644 index 000000000..eb07c3cce --- /dev/null +++ b/src/problem2/src/tokens/UOS.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/USC-Minted.svg b/src/problem2/src/tokens/USC-Minted.svg new file mode 100644 index 000000000..466cda74f --- /dev/null +++ b/src/problem2/src/tokens/USC-Minted.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/USC.svg b/src/problem2/src/tokens/USC.svg new file mode 100644 index 000000000..32bd9541f --- /dev/null +++ b/src/problem2/src/tokens/USC.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/USD.svg b/src/problem2/src/tokens/USD.svg new file mode 100644 index 000000000..abf67ab10 --- /dev/null +++ b/src/problem2/src/tokens/USD.svg @@ -0,0 +1,8 @@ + + + Token Symbol/USD + + + + + \ No newline at end of file diff --git a/src/problem2/src/tokens/USDC-dATOM.svg b/src/problem2/src/tokens/USDC-dATOM.svg new file mode 100644 index 000000000..7202b50ae --- /dev/null +++ b/src/problem2/src/tokens/USDC-dATOM.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/USDC.e.svg b/src/problem2/src/tokens/USDC.e.svg new file mode 100644 index 000000000..eee4251a7 --- /dev/null +++ b/src/problem2/src/tokens/USDC.e.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/USDC.grv.svg b/src/problem2/src/tokens/USDC.grv.svg new file mode 100644 index 000000000..458ab4901 --- /dev/null +++ b/src/problem2/src/tokens/USDC.grv.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/USDC.svg b/src/problem2/src/tokens/USDC.svg new file mode 100644 index 000000000..eee4251a7 --- /dev/null +++ b/src/problem2/src/tokens/USDC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/USDP.svg b/src/problem2/src/tokens/USDP.svg new file mode 100644 index 000000000..b7e76ff9d --- /dev/null +++ b/src/problem2/src/tokens/USDP.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/USDT.svg b/src/problem2/src/tokens/USDT.svg new file mode 100644 index 000000000..8b3986d05 --- /dev/null +++ b/src/problem2/src/tokens/USDT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/USDY.svg b/src/problem2/src/tokens/USDY.svg new file mode 100644 index 000000000..118da5939 --- /dev/null +++ b/src/problem2/src/tokens/USDY.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/USK.svg b/src/problem2/src/tokens/USK.svg new file mode 100644 index 000000000..15ba03fe9 --- /dev/null +++ b/src/problem2/src/tokens/USK.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/UST.svg b/src/problem2/src/tokens/UST.svg new file mode 100644 index 000000000..2a0a59707 --- /dev/null +++ b/src/problem2/src/tokens/UST.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/USUAL.svg b/src/problem2/src/tokens/USUAL.svg new file mode 100644 index 000000000..1bdf52827 --- /dev/null +++ b/src/problem2/src/tokens/USUAL.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/VDL.svg b/src/problem2/src/tokens/VDL.svg new file mode 100644 index 000000000..d839e0da4 --- /dev/null +++ b/src/problem2/src/tokens/VDL.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/VET.svg b/src/problem2/src/tokens/VET.svg new file mode 100644 index 000000000..88ebf982a --- /dev/null +++ b/src/problem2/src/tokens/VET.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/VIRTUAL.svg b/src/problem2/src/tokens/VIRTUAL.svg new file mode 100644 index 000000000..7d623039a --- /dev/null +++ b/src/problem2/src/tokens/VIRTUAL.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/VKR.svg b/src/problem2/src/tokens/VKR.svg new file mode 100644 index 000000000..cb3c68d59 --- /dev/null +++ b/src/problem2/src/tokens/VKR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/VRTX.svg b/src/problem2/src/tokens/VRTX.svg new file mode 100644 index 000000000..8cb3dc30e --- /dev/null +++ b/src/problem2/src/tokens/VRTX.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/W.svg b/src/problem2/src/tokens/W.svg new file mode 100644 index 000000000..95823f225 --- /dev/null +++ b/src/problem2/src/tokens/W.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/WAL.svg b/src/problem2/src/tokens/WAL.svg new file mode 100644 index 000000000..8d06c07e1 --- /dev/null +++ b/src/problem2/src/tokens/WAL.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/WAVAX.svg b/src/problem2/src/tokens/WAVAX.svg new file mode 100644 index 000000000..e244ad3aa --- /dev/null +++ b/src/problem2/src/tokens/WAVAX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/WAVE.svg b/src/problem2/src/tokens/WAVE.svg new file mode 100644 index 000000000..2ca6ac070 --- /dev/null +++ b/src/problem2/src/tokens/WAVE.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/WBNB.svg b/src/problem2/src/tokens/WBNB.svg new file mode 100644 index 000000000..e45c696b5 --- /dev/null +++ b/src/problem2/src/tokens/WBNB.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/WBTC.svg b/src/problem2/src/tokens/WBTC.svg new file mode 100644 index 000000000..b597b84a4 --- /dev/null +++ b/src/problem2/src/tokens/WBTC.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/WETH.svg b/src/problem2/src/tokens/WETH.svg new file mode 100644 index 000000000..cba6f1d78 --- /dev/null +++ b/src/problem2/src/tokens/WETH.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/WHALE.svg b/src/problem2/src/tokens/WHALE.svg new file mode 100644 index 000000000..a42a2449d --- /dev/null +++ b/src/problem2/src/tokens/WHALE.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/WIF.svg b/src/problem2/src/tokens/WIF.svg new file mode 100644 index 000000000..6df4ea15a --- /dev/null +++ b/src/problem2/src/tokens/WIF.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/WIN.svg b/src/problem2/src/tokens/WIN.svg new file mode 100644 index 000000000..bc2435409 --- /dev/null +++ b/src/problem2/src/tokens/WIN.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/WLD.svg b/src/problem2/src/tokens/WLD.svg new file mode 100644 index 000000000..62191032d --- /dev/null +++ b/src/problem2/src/tokens/WLD.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/WMATIC.svg b/src/problem2/src/tokens/WMATIC.svg new file mode 100644 index 000000000..ba0630b51 --- /dev/null +++ b/src/problem2/src/tokens/WMATIC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/WMNT.svg b/src/problem2/src/tokens/WMNT.svg new file mode 100644 index 000000000..8b8784b36 --- /dev/null +++ b/src/problem2/src/tokens/WMNT.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/WMON.png b/src/problem2/src/tokens/WMON.png new file mode 100644 index 0000000000000000000000000000000000000000..452cae24b2c588ca08de28a09ee5ed1a99d599e6 GIT binary patch literal 826 zcmV-A1I7G_P)JyI+|hhb^x;`Js-NNz}Q3Is?XrH4=vpullw zH#z+32AS& z@=uMO1wYoF3~KyGgY!XOd7Z4q6p-b}*elVCRGLA)BtfAlLB9uZ(6OQQ)tRUP(SBBK zTwEV1aAQtk0mwuzXR-_)R1~+x{O&hV)OOj?R62$HwC#SPsIkrP@wHdk^= z=qpL4!#oTbFAc<-LE*xpJc{{2+lC*XZP(f;sG7cUuYAxOsCDda?6)Ab3k(i_@% literal 0 HcmV?d00001 diff --git a/src/problem2/src/tokens/WRX.svg b/src/problem2/src/tokens/WRX.svg new file mode 100644 index 000000000..543f57090 --- /dev/null +++ b/src/problem2/src/tokens/WRX.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/XCAD.svg b/src/problem2/src/tokens/XCAD.svg new file mode 100644 index 000000000..545a88d1b --- /dev/null +++ b/src/problem2/src/tokens/XCAD.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/XDC.svg b/src/problem2/src/tokens/XDC.svg new file mode 100644 index 000000000..c90381022 --- /dev/null +++ b/src/problem2/src/tokens/XDC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/XEM.svg b/src/problem2/src/tokens/XEM.svg new file mode 100644 index 000000000..da54e72a2 --- /dev/null +++ b/src/problem2/src/tokens/XEM.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/XKI.svg b/src/problem2/src/tokens/XKI.svg new file mode 100644 index 000000000..dd5fea7cf --- /dev/null +++ b/src/problem2/src/tokens/XKI.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/XLM.svg b/src/problem2/src/tokens/XLM.svg new file mode 100644 index 000000000..d836619c1 --- /dev/null +++ b/src/problem2/src/tokens/XLM.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/XMR.svg b/src/problem2/src/tokens/XMR.svg new file mode 100644 index 000000000..475a95cb7 --- /dev/null +++ b/src/problem2/src/tokens/XMR.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/XPRT.svg b/src/problem2/src/tokens/XPRT.svg new file mode 100644 index 000000000..7ecd4ace9 --- /dev/null +++ b/src/problem2/src/tokens/XPRT.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/XRP.svg b/src/problem2/src/tokens/XRP.svg new file mode 100644 index 000000000..b3d441bf4 --- /dev/null +++ b/src/problem2/src/tokens/XRP.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/XSGD.svg b/src/problem2/src/tokens/XSGD.svg new file mode 100644 index 000000000..f04caab93 --- /dev/null +++ b/src/problem2/src/tokens/XSGD.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/XTRA.svg b/src/problem2/src/tokens/XTRA.svg new file mode 100644 index 000000000..1c6367d3b --- /dev/null +++ b/src/problem2/src/tokens/XTRA.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/problem2/src/tokens/XTZ.svg b/src/problem2/src/tokens/XTZ.svg new file mode 100644 index 000000000..28b924e5c --- /dev/null +++ b/src/problem2/src/tokens/XTZ.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/XVG.svg b/src/problem2/src/tokens/XVG.svg new file mode 100644 index 000000000..537378cff --- /dev/null +++ b/src/problem2/src/tokens/XVG.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/XVS.svg b/src/problem2/src/tokens/XVS.svg new file mode 100644 index 000000000..3176f9fb6 --- /dev/null +++ b/src/problem2/src/tokens/XVS.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/YAKI.svg b/src/problem2/src/tokens/YAKI.svg new file mode 100644 index 000000000..5179eb95a --- /dev/null +++ b/src/problem2/src/tokens/YAKI.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/YAM.svg b/src/problem2/src/tokens/YAM.svg new file mode 100644 index 000000000..2e8a65421 --- /dev/null +++ b/src/problem2/src/tokens/YAM.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/YFI.svg b/src/problem2/src/tokens/YFI.svg new file mode 100644 index 000000000..b7674608b --- /dev/null +++ b/src/problem2/src/tokens/YFI.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/YieldUSD.svg b/src/problem2/src/tokens/YieldUSD.svg new file mode 100644 index 000000000..e435a687c --- /dev/null +++ b/src/problem2/src/tokens/YieldUSD.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ZCH.svg b/src/problem2/src/tokens/ZCH.svg new file mode 100644 index 000000000..1e9d4250d --- /dev/null +++ b/src/problem2/src/tokens/ZCH.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/ZEC.svg b/src/problem2/src/tokens/ZEC.svg new file mode 100644 index 000000000..b6b86dcc1 --- /dev/null +++ b/src/problem2/src/tokens/ZEC.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/ZEN.svg b/src/problem2/src/tokens/ZEN.svg new file mode 100644 index 000000000..b305169ac --- /dev/null +++ b/src/problem2/src/tokens/ZEN.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ZIL.svg b/src/problem2/src/tokens/ZIL.svg new file mode 100644 index 000000000..c89e8ce16 --- /dev/null +++ b/src/problem2/src/tokens/ZIL.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/ZRO.svg b/src/problem2/src/tokens/ZRO.svg new file mode 100644 index 000000000..e485e3b2a --- /dev/null +++ b/src/problem2/src/tokens/ZRO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ZRX.svg b/src/problem2/src/tokens/ZRX.svg new file mode 100644 index 000000000..f42e914a6 --- /dev/null +++ b/src/problem2/src/tokens/ZRX.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/problem2/src/tokens/ZWAP.svg b/src/problem2/src/tokens/ZWAP.svg new file mode 100644 index 000000000..130d14d73 --- /dev/null +++ b/src/problem2/src/tokens/ZWAP.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/ampKUJI.svg b/src/problem2/src/tokens/ampKUJI.svg new file mode 100644 index 000000000..2692787da --- /dev/null +++ b/src/problem2/src/tokens/ampKUJI.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ampLUNA.svg b/src/problem2/src/tokens/ampLUNA.svg new file mode 100644 index 000000000..ebeab5868 --- /dev/null +++ b/src/problem2/src/tokens/ampLUNA.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/axlUSDC.svg b/src/problem2/src/tokens/axlUSDC.svg new file mode 100644 index 000000000..fc879f679 --- /dev/null +++ b/src/problem2/src/tokens/axlUSDC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/bCFX.svg b/src/problem2/src/tokens/bCFX.svg new file mode 100644 index 000000000..07e8c434d --- /dev/null +++ b/src/problem2/src/tokens/bCFX.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/bNEO.svg b/src/problem2/src/tokens/bNEO.svg new file mode 100644 index 000000000..561b2282d --- /dev/null +++ b/src/problem2/src/tokens/bNEO.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/beraSTONE.svg b/src/problem2/src/tokens/beraSTONE.svg new file mode 100644 index 000000000..3da255f50 --- /dev/null +++ b/src/problem2/src/tokens/beraSTONE.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/cUSD.svg b/src/problem2/src/tokens/cUSD.svg new file mode 100644 index 000000000..33407ebc9 --- /dev/null +++ b/src/problem2/src/tokens/cUSD.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/cbBTC.svg b/src/problem2/src/tokens/cbBTC.svg new file mode 100644 index 000000000..77fee5c01 --- /dev/null +++ b/src/problem2/src/tokens/cbBTC.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/cbETH.svg b/src/problem2/src/tokens/cbETH.svg new file mode 100644 index 000000000..5a18b9264 --- /dev/null +++ b/src/problem2/src/tokens/cbETH.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/cmETH.svg b/src/problem2/src/tokens/cmETH.svg new file mode 100644 index 000000000..0a82791d0 --- /dev/null +++ b/src/problem2/src/tokens/cmETH.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/dATOM.svg b/src/problem2/src/tokens/dATOM.svg new file mode 100644 index 000000000..b73e04155 --- /dev/null +++ b/src/problem2/src/tokens/dATOM.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/dGLP.svg b/src/problem2/src/tokens/dGLP.svg new file mode 100644 index 000000000..84cac9cde --- /dev/null +++ b/src/problem2/src/tokens/dGLP.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/dINJ.svg b/src/problem2/src/tokens/dINJ.svg new file mode 100644 index 000000000..05b1763cc --- /dev/null +++ b/src/problem2/src/tokens/dINJ.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/dXCAD.svg b/src/problem2/src/tokens/dXCAD.svg new file mode 100644 index 000000000..881f50fd0 --- /dev/null +++ b/src/problem2/src/tokens/dXCAD.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/eGLD.svg b/src/problem2/src/tokens/eGLD.svg new file mode 100644 index 000000000..e42ad2510 --- /dev/null +++ b/src/problem2/src/tokens/eGLD.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/ePLAY.svg b/src/problem2/src/tokens/ePLAY.svg new file mode 100644 index 000000000..bae257742 --- /dev/null +++ b/src/problem2/src/tokens/ePLAY.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/esFLUO.svg b/src/problem2/src/tokens/esFLUO.svg new file mode 100644 index 000000000..0b69ed318 --- /dev/null +++ b/src/problem2/src/tokens/esFLUO.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/gZIL.svg b/src/problem2/src/tokens/gZIL.svg new file mode 100644 index 000000000..27334389b --- /dev/null +++ b/src/problem2/src/tokens/gZIL.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/iSEI.svg b/src/problem2/src/tokens/iSEI.svg new file mode 100644 index 000000000..246b86f8a --- /dev/null +++ b/src/problem2/src/tokens/iSEI.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/problem2/src/tokens/iUSD.svg b/src/problem2/src/tokens/iUSD.svg new file mode 100644 index 000000000..ca263a047 --- /dev/null +++ b/src/problem2/src/tokens/iUSD.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/mETH.svg b/src/problem2/src/tokens/mETH.svg new file mode 100644 index 000000000..6d6d5d076 --- /dev/null +++ b/src/problem2/src/tokens/mETH.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/milkTIA.svg b/src/problem2/src/tokens/milkTIA.svg new file mode 100644 index 000000000..d595abfa3 --- /dev/null +++ b/src/problem2/src/tokens/milkTIA.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/nLEND.svg b/src/problem2/src/tokens/nLEND.svg new file mode 100644 index 000000000..d5c91b274 --- /dev/null +++ b/src/problem2/src/tokens/nLEND.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/nNEO.svg b/src/problem2/src/tokens/nNEO.svg new file mode 100644 index 000000000..d4a90e1b2 --- /dev/null +++ b/src/problem2/src/tokens/nNEO.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/rATOM.svg b/src/problem2/src/tokens/rATOM.svg new file mode 100644 index 000000000..8cd5f8056 --- /dev/null +++ b/src/problem2/src/tokens/rATOM.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/rSWTH.svg b/src/problem2/src/tokens/rSWTH.svg new file mode 100644 index 000000000..d5250ff90 --- /dev/null +++ b/src/problem2/src/tokens/rSWTH.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/sARCH.svg b/src/problem2/src/tokens/sARCH.svg new file mode 100644 index 000000000..3ec2b656f --- /dev/null +++ b/src/problem2/src/tokens/sARCH.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stATOM.svg b/src/problem2/src/tokens/stATOM.svg new file mode 100644 index 000000000..c3e505f8b --- /dev/null +++ b/src/problem2/src/tokens/stATOM.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stDYDX.svg b/src/problem2/src/tokens/stDYDX.svg new file mode 100644 index 000000000..6d851637a --- /dev/null +++ b/src/problem2/src/tokens/stDYDX.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/problem2/src/tokens/stDYM.svg b/src/problem2/src/tokens/stDYM.svg new file mode 100644 index 000000000..d96175572 --- /dev/null +++ b/src/problem2/src/tokens/stDYM.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stETH.svg b/src/problem2/src/tokens/stETH.svg new file mode 100644 index 000000000..8c490e47f --- /dev/null +++ b/src/problem2/src/tokens/stETH.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stEVMOS.svg b/src/problem2/src/tokens/stEVMOS.svg new file mode 100644 index 000000000..a2a888820 --- /dev/null +++ b/src/problem2/src/tokens/stEVMOS.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/problem2/src/tokens/stFLUO.svg b/src/problem2/src/tokens/stFLUO.svg new file mode 100644 index 000000000..bf182c96d --- /dev/null +++ b/src/problem2/src/tokens/stFLUO.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stIBCX.svg b/src/problem2/src/tokens/stIBCX.svg new file mode 100644 index 000000000..8a10d241d --- /dev/null +++ b/src/problem2/src/tokens/stIBCX.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/stINJ.svg b/src/problem2/src/tokens/stINJ.svg new file mode 100644 index 000000000..6b97bec4f --- /dev/null +++ b/src/problem2/src/tokens/stINJ.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/stJUNO.svg b/src/problem2/src/tokens/stJUNO.svg new file mode 100644 index 000000000..8d92f375c --- /dev/null +++ b/src/problem2/src/tokens/stJUNO.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/stLUNA.svg b/src/problem2/src/tokens/stLUNA.svg new file mode 100644 index 000000000..606be7947 --- /dev/null +++ b/src/problem2/src/tokens/stLUNA.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/problem2/src/tokens/stOKT.svg b/src/problem2/src/tokens/stOKT.svg new file mode 100644 index 000000000..33b541d11 --- /dev/null +++ b/src/problem2/src/tokens/stOKT.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/stOSMO.svg b/src/problem2/src/tokens/stOSMO.svg new file mode 100644 index 000000000..73d296046 --- /dev/null +++ b/src/problem2/src/tokens/stOSMO.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stSAGA.svg b/src/problem2/src/tokens/stSAGA.svg new file mode 100644 index 000000000..d6092fc7c --- /dev/null +++ b/src/problem2/src/tokens/stSAGA.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/stSTARS.svg b/src/problem2/src/tokens/stSTARS.svg new file mode 100644 index 000000000..ffc7def96 --- /dev/null +++ b/src/problem2/src/tokens/stSTARS.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/stTIA.svg b/src/problem2/src/tokens/stTIA.svg new file mode 100644 index 000000000..3d3e28470 --- /dev/null +++ b/src/problem2/src/tokens/stTIA.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/problem2/src/tokens/stZIL.svg b/src/problem2/src/tokens/stZIL.svg new file mode 100644 index 000000000..81323f746 --- /dev/null +++ b/src/problem2/src/tokens/stZIL.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/problem2/src/tokens/stkATOM.svg b/src/problem2/src/tokens/stkATOM.svg new file mode 100644 index 000000000..1e6c7a2b2 --- /dev/null +++ b/src/problem2/src/tokens/stkATOM.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stkDYDX.svg b/src/problem2/src/tokens/stkDYDX.svg new file mode 100644 index 000000000..2d2883a9e --- /dev/null +++ b/src/problem2/src/tokens/stkDYDX.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/stkSTARS.svg b/src/problem2/src/tokens/stkSTARS.svg new file mode 100644 index 000000000..97e87da6e --- /dev/null +++ b/src/problem2/src/tokens/stkSTARS.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/vZWAP.svg b/src/problem2/src/tokens/vZWAP.svg new file mode 100644 index 000000000..0874b89e8 --- /dev/null +++ b/src/problem2/src/tokens/vZWAP.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/veFLUO.svg b/src/problem2/src/tokens/veFLUO.svg new file mode 100644 index 000000000..3624b5647 --- /dev/null +++ b/src/problem2/src/tokens/veFLUO.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/problem2/src/tokens/wKAS.svg b/src/problem2/src/tokens/wKAS.svg new file mode 100644 index 000000000..14185747c --- /dev/null +++ b/src/problem2/src/tokens/wKAS.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/problem2/src/tokens/wstETH.svg b/src/problem2/src/tokens/wstETH.svg new file mode 100644 index 000000000..15c8a9716 --- /dev/null +++ b/src/problem2/src/tokens/wstETH.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/problem2/src/types/index.ts b/src/problem2/src/types/index.ts new file mode 100644 index 000000000..8ae77d24b --- /dev/null +++ b/src/problem2/src/types/index.ts @@ -0,0 +1,10 @@ +export interface Token { + symbol: string; + name: string; + icon: string; + balance: number; + price: number; +} + +export type SwapSide = 'from' | 'to'; +export type OrderType = 'market' | 'limit'; diff --git a/src/problem2/src/utils/cn.ts b/src/problem2/src/utils/cn.ts new file mode 100644 index 000000000..d084ccade --- /dev/null +++ b/src/problem2/src/utils/cn.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/problem2/src/vite-env.d.ts b/src/problem2/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/src/problem2/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/problem2/style.css b/src/problem2/style.css deleted file mode 100644 index 915af91c7..000000000 --- a/src/problem2/style.css +++ /dev/null @@ -1,8 +0,0 @@ -body { - display: flex; - flex-direction: row; - align-items: center; - justify-content: center; - min-width: 360px; - font-family: Arial, Helvetica, sans-serif; -} diff --git a/src/problem2/tailwind.config.js b/src/problem2/tailwind.config.js new file mode 100644 index 000000000..fe883408c --- /dev/null +++ b/src/problem2/tailwind.config.js @@ -0,0 +1,29 @@ +import tailwindAnimate from 'tailwindcss-animate'; + +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + colors: { + primary: '#FCD535', + background: '#1E2329', + 'background-secondary': '#2B3139', + 'text-primary': '#EAECEF', + 'text-secondary': '#929AA5', + success: '#0ECB81', + danger: '#F6465D', + warning: '#F0B90B', + }, + fontFamily: { + sans: ['Inter', 'Roboto', 'sans-serif'], + }, + }, + }, + plugins: [ + tailwindAnimate + ], +} diff --git a/src/problem2/tsconfig.app.json b/src/problem2/tsconfig.app.json new file mode 100644 index 000000000..211de142e --- /dev/null +++ b/src/problem2/tsconfig.app.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/src/problem2/tsconfig.json b/src/problem2/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/src/problem2/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/src/problem2/tsconfig.node.json b/src/problem2/tsconfig.node.json new file mode 100644 index 000000000..0d3d71446 --- /dev/null +++ b/src/problem2/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/src/problem2/vite.config.ts b/src/problem2/vite.config.ts new file mode 100644 index 000000000..e2f45a76b --- /dev/null +++ b/src/problem2/vite.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import path from 'path' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, +}) From b1bc9f0d03a4ca18aa5114970b260879f13b03d9 Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Tue, 10 Feb 2026 16:37:36 +0700 Subject: [PATCH 03/17] update tokens list --- src/problem2/src/constants/tokens.ts | 102 +++++++++++++++++---------- 1 file changed, 65 insertions(+), 37 deletions(-) diff --git a/src/problem2/src/constants/tokens.ts b/src/problem2/src/constants/tokens.ts index c501e56a0..256720f2c 100644 --- a/src/problem2/src/constants/tokens.ts +++ b/src/problem2/src/constants/tokens.ts @@ -1,39 +1,67 @@ import { Token } from '../types'; +import pricesData from '../prices.json'; -export const MOCK_TOKENS: Token[] = [ - { - symbol: 'BTC', - name: 'Bitcoin', - icon: 'https://cryptologos.cc/logos/bitcoin-btc-logo.svg?v=029', - balance: 0.05, - price: 52000 - }, - { - symbol: 'ETH', - name: 'Ethereum', - icon: 'https://cryptologos.cc/logos/ethereum-eth-logo.svg?v=029', - balance: 1.5, - price: 2900 - }, - { - symbol: 'USDT', - name: 'Tether', - icon: 'https://cryptologos.cc/logos/tether-usdt-logo.svg?v=029', - balance: 5000, - price: 1 - }, - { - symbol: 'BNB', - name: 'Binance Coin', - icon: 'https://cryptologos.cc/logos/bnb-bnb-logo.svg?v=029', - balance: 10, - price: 380 - }, - { - symbol: 'SOL', - name: 'Solana', - icon: 'https://cryptologos.cc/logos/solana-sol-logo.svg?v=029', - balance: 25, - price: 110 - }, -]; +type PriceEntry = { currency: string; date: string; price: number }; + +const latestPrice = (symbol: string) => { + const items = (pricesData as PriceEntry[]).filter( + (p) => p.currency.toUpperCase() === symbol.toUpperCase() + ); + if (items.length === 0) return 0; + return items.reduce((a, b) => + new Date(b.date).getTime() > new Date(a.date).getTime() ? b : a + ).price; +}; + +// Eagerly import all token icons (svg/png) and build a symbol -> url map +const iconModules = import.meta.glob<{ default: string }>( + '../tokens/*.{svg,png}', + { eager: true } +); + +const iconMap: Record = {}; +for (const path in iconModules) { + const file = path.split('/').pop()!; + const base = file.replace(/\.(svg|png)$/i, ''); + iconMap[base.toUpperCase()] = (iconModules[path] as any).default; +} + +const FRIENDLY_NAMES: Record = { + ETH: 'Ethereum', + WBTC: 'Wrapped Bitcoin', + USDC: 'USD Coin', + BUSD: 'Binance USD', + ATOM: 'Cosmos', + OSMO: 'Osmosis', +}; + +const DEFAULT_BALANCES: Record = { + ETH: 1.5, + WBTC: 0.05, + USDC: 5000, + BUSD: 3000, + ATOM: 25, + OSMO: 100, +}; + +// Build full token list from prices.json currencies +const currencies = Array.from( + new Set((pricesData as PriceEntry[]).map((p) => p.currency)) +); + +export const MOCK_TOKENS: Token[] = currencies.map((symbol) => { + const upper = symbol.toUpperCase(); + const icon = + iconMap[upper] ?? + // Try some common alt naming fallbacks + (upper === 'USD' ? iconMap['USDC'] : undefined) ?? + iconMap['ETH']; // final fallback + + return { + symbol: upper, + name: FRIENDLY_NAMES[upper] ?? upper, + icon, + balance: DEFAULT_BALANCES[upper] ?? 0, + price: latestPrice(upper), + }; +}); From f17075eff391d93c75f354a6b27f50bd5981019a Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Tue, 10 Feb 2026 16:45:24 +0700 Subject: [PATCH 04/17] fix skeleton loading --- src/problem2/src/components/swap/TokenInput.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/problem2/src/components/swap/TokenInput.tsx b/src/problem2/src/components/swap/TokenInput.tsx index d30bbd04d..036da0e4e 100644 --- a/src/problem2/src/components/swap/TokenInput.tsx +++ b/src/problem2/src/components/swap/TokenInput.tsx @@ -51,7 +51,7 @@ export const TokenInput: React.FC = ({
{loading ? ( - + ) : ( Date: Wed, 11 Feb 2026 09:01:39 +0700 Subject: [PATCH 05/17] use antd modal --- src/problem2/package-lock.json | 956 +++++++++++++++++- .../src/components/swap/TokenModal.tsx | 2 +- src/problem2/src/components/ui/Modal.tsx | 66 +- src/problem2/src/index.css | 23 + src/problem2/src/main.tsx | 1 + 5 files changed, 1001 insertions(+), 47 deletions(-) diff --git a/src/problem2/package-lock.json b/src/problem2/package-lock.json index c4a3c513c..f024c44df 100644 --- a/src/problem2/package-lock.json +++ b/src/problem2/package-lock.json @@ -8,6 +8,7 @@ "name": "token-swap-app", "version": "0.0.0", "dependencies": { + "antd": "^6.3.0", "clsx": "^2.1.0", "lucide-react": "^0.344.0", "react": "^18.2.0", @@ -41,6 +42,99 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@ant-design/colors": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-8.0.1.tgz", + "integrity": "sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.0" + } + }, + "node_modules/@ant-design/cssinjs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-2.1.0.tgz", + "integrity": "sha512-eZFrPCnrYrF3XtL7qA4L75P0qA3TtZta8H3Yggy7UYFh8gZgu5bSMNF+v4UVCzGxzYmx8ZvPdgOce0BJ6PsW9g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "stylis": "^4.3.4" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-2.1.1.tgz", + "integrity": "sha512-RKxkj5pGFB+FkPJ5NGhoX3DK3xsv0pMltha7Ei1AnY3tILeq38L7tuhaWDPQI/5nlPxOog44wvqpNyyGcUsNMg==", + "license": "MIT", + "dependencies": { + "@ant-design/cssinjs": "^2.1.0", + "@babel/runtime": "^7.23.2", + "@rc-component/util": "^1.4.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-3.0.1.tgz", + "integrity": "sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==", + "license": "MIT", + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-6.1.0.tgz", + "integrity": "sha512-KrWMu1fIg3w/1F2zfn+JlfNDU8dDqILfA5Tg85iqs1lf8ooyGlbkA+TkwfOKKgqpUmAiRY1PTFpuOU2DAIgSUg==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^8.0.0", + "@ant-design/icons-svg": "^4.4.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==", + "license": "MIT" + }, + "node_modules/@ant-design/react-slick": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-2.0.0.tgz", + "integrity": "sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "clsx": "^2.1.1", + "json2mq": "^0.2.0", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", @@ -275,6 +369,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -323,6 +426,18 @@ "node": ">=6.9.0" } }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "license": "MIT" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -802,6 +917,719 @@ "node": ">= 8" } }, + "node_modules/@rc-component/async-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.1.0.tgz", + "integrity": "sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@rc-component/cascader": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@rc-component/cascader/-/cascader-1.14.0.tgz", + "integrity": "sha512-Ip9356xwZUR2nbW5PRVGif4B/bDve4pLa/N+PGbvBaTnjbvmN4PFMBGQSmlDlzKP1ovxaYMvwF/dI9lXNLT4iQ==", + "license": "MIT", + "dependencies": { + "@rc-component/select": "~1.6.0", + "@rc-component/tree": "~1.2.0", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/checkbox": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/checkbox/-/checkbox-2.0.0.tgz", + "integrity": "sha512-3CXGPpAR9gsPKeO2N78HAPOzU30UdemD6HGJoWVJOpa6WleaGB5kzZj3v6bdTZab31YuWgY/RxV3VKPctn0DwQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/collapse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/collapse/-/collapse-1.2.0.tgz", + "integrity": "sha512-ZRYSKSS39qsFx93p26bde7JUZJshsUBEQRlRXPuJYlAiNX0vyYlF5TsAm8JZN3LcF8XvKikdzPbgAtXSbkLUkw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-3.1.0.tgz", + "integrity": "sha512-o7Vavj7yyfVxFmeynXf0fCHVlC0UTE9al74c6nYuLck+gjuVdQNWSVXR8Efq/mmWFy7891SCOsfaPq6Eqe1s/g==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/context": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/context/-/context-2.0.1.tgz", + "integrity": "sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/dialog": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/@rc-component/dialog/-/dialog-1.8.4.tgz", + "integrity": "sha512-Ay6PM7phkTkquplG8fWfUGFZ2GTLx9diTl4f0d8Eqxd7W1u1KjE9AQooFQHOHnhZf0Ya3z51+5EKCWHmt/dNEw==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.3", + "@rc-component/portal": "^2.1.0", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/drawer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@rc-component/drawer/-/drawer-1.4.2.tgz", + "integrity": "sha512-1ib+fZEp6FBu+YvcIktm+nCQ+Q+qIpwpoaJH6opGr4ofh2QMq+qdr5DLC4oCf5qf3pcWX9lUWPYX652k4ini8Q==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/portal": "^2.1.3", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/dropdown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/dropdown/-/dropdown-1.0.2.tgz", + "integrity": "sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==", + "license": "MIT", + "dependencies": { + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/@rc-component/form": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@rc-component/form/-/form-1.6.2.tgz", + "integrity": "sha512-OgIn2RAoaSBqaIgzJf/X6iflIa9LpTozci1lagLBdURDFhGA370v0+T0tXxOi8YShMjTha531sFhwtnrv+EJaQ==", + "license": "MIT", + "dependencies": { + "@rc-component/async-validator": "^5.1.0", + "@rc-component/util": "^1.6.2", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/image": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@rc-component/image/-/image-1.6.0.tgz", + "integrity": "sha512-tSfn2ZE/oP082g4QIOxeehkmgnXB7R+5AFj/lIFr4k7pEuxHBdyGIq9axoCY9qea8NN0DY6p4IB/F07tLqaT5A==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.0.0", + "@rc-component/portal": "^2.1.2", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/input": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/input/-/input-1.1.2.tgz", + "integrity": "sha512-Q61IMR47piUBudgixJ30CciKIy9b1H95qe7GgEKOmSJVJXvFRWJllJfQry9tif+MX2cWFXWJf/RXz4kaCeq/Fg==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@rc-component/input-number": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@rc-component/input-number/-/input-number-1.6.2.tgz", + "integrity": "sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==", + "license": "MIT", + "dependencies": { + "@rc-component/mini-decimal": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mentions": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@rc-component/mentions/-/mentions-1.6.0.tgz", + "integrity": "sha512-KIkQNP6habNuTsLhUv0UGEOwG67tlmE7KNIJoQZZNggEZl5lQJTytFDb69sl5CK3TDdISCTjKP3nGEBKgT61CQ==", + "license": "MIT", + "dependencies": { + "@rc-component/input": "~1.1.0", + "@rc-component/menu": "~1.2.0", + "@rc-component/textarea": "~1.1.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/menu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/menu/-/menu-1.2.0.tgz", + "integrity": "sha512-VWwDuhvYHSnTGj4n6bV3ISrLACcPAzdPOq3d0BzkeiM5cve8BEYfvkEhNoM0PLzv51jpcejeyrLXeMVIJ+QJlg==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/overflow": "^1.0.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz", + "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@rc-component/motion": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@rc-component/motion/-/motion-1.1.6.tgz", + "integrity": "sha512-aEQobs/YA0kqRvHIPjQvOytdtdRVyhf/uXAal4chBjxDu6odHckExJzjn2D+Ju1aKK6hx3pAs6BXdV9+86xkgQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mutate-observer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/mutate-observer/-/mutate-observer-2.0.1.tgz", + "integrity": "sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/notification": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/notification/-/notification-1.2.0.tgz", + "integrity": "sha512-OX3J+zVU7rvoJCikjrfW7qOUp7zlDeFBK2eA3SFbGSkDqo63Sl4Ss8A04kFP+fxHSxMDIS9jYVEZtU1FNCFuBA==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/overflow": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/overflow/-/overflow-1.0.0.tgz", + "integrity": "sha512-GSlBeoE0XTBi5cf3zl8Qh7Uqhn7v8RrlJ8ajeVpEkNe94HWy5l5BQ0Mwn2TVUq9gdgbfEMUmTX7tJFAg7mz0Rw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@rc-component/resize-observer": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/pagination": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/pagination/-/pagination-1.2.0.tgz", + "integrity": "sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/picker": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/picker/-/picker-1.9.0.tgz", + "integrity": "sha512-OLisdk8AWVCG9goBU1dWzuH5QlBQk8jktmQ6p0/IyBFwdKGwyIZOSjnBYo8hooHiTdl0lU+wGf/OfMtVBw02KQ==", + "license": "MIT", + "dependencies": { + "@rc-component/overflow": "^1.0.0", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/trigger": "^3.6.15", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=12.x" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/@rc-component/portal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-2.2.0.tgz", + "integrity": "sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=12.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/progress": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/progress/-/progress-1.0.2.tgz", + "integrity": "sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/qrcode": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.1.1.tgz", + "integrity": "sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/rate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/rate/-/rate-1.0.1.tgz", + "integrity": "sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/resize-observer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rc-component/resize-observer/-/resize-observer-1.1.1.tgz", + "integrity": "sha512-NfXXMmiR+SmUuKE1NwJESzEUYUFWIDUn2uXpxCTOLwiRUUakd62DRNFjRJArgzyFW8S5rsL4aX5XlyIXyC/vRA==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/segmented": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@rc-component/segmented/-/segmented-1.3.0.tgz", + "integrity": "sha512-5J/bJ01mbDnoA6P/FW8SxUvKn+OgUSTZJPzCNnTBntG50tzoP7DydGhqxp7ggZXZls7me3mc2EQDXakU3iTVFg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@rc-component/select": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@rc-component/select/-/select-1.6.5.tgz", + "integrity": "sha512-Cx+/OYEorXlPQ6ZFDro3HbalPZLlJWagvGtl8DGYO4losXM6gw43qbsxWqU1c3XOQVIOUDBlr7dSksSNMj8kXg==", + "license": "MIT", + "dependencies": { + "@rc-component/overflow": "^1.0.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/slider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/slider/-/slider-1.0.1.tgz", + "integrity": "sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/steps": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@rc-component/steps/-/steps-1.2.2.tgz", + "integrity": "sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/switch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rc-component/switch/-/switch-1.0.3.tgz", + "integrity": "sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/table": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@rc-component/table/-/table-1.9.1.tgz", + "integrity": "sha512-FVI5ZS/GdB3BcgexfCYKi3iHhZS3Fr59EtsxORszYGrfpH1eWr33eDNSYkVfLI6tfJ7vftJDd9D5apfFWqkdJg==", + "license": "MIT", + "dependencies": { + "@rc-component/context": "^2.0.1", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.1.0", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/tabs": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@rc-component/tabs/-/tabs-1.7.0.tgz", + "integrity": "sha512-J48cs2iBi7Ho3nptBxxIqizEliUC+ExE23faspUQKGQ550vaBlv3aGF8Epv/UB1vFWeoJDTW/dNzgIU0Qj5i/w==", + "license": "MIT", + "dependencies": { + "@rc-component/dropdown": "~1.0.0", + "@rc-component/menu": "~1.2.0", + "@rc-component/motion": "^1.1.3", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/textarea": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/textarea/-/textarea-1.1.2.tgz", + "integrity": "sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==", + "license": "MIT", + "dependencies": { + "@rc-component/input": "~1.1.0", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tooltip": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rc-component/tooltip/-/tooltip-1.4.0.tgz", + "integrity": "sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==", + "license": "MIT", + "dependencies": { + "@rc-component/trigger": "^3.7.1", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-2.3.0.tgz", + "integrity": "sha512-K04K9r32kUC+auBSQfr+Fss4SpSIS9JGe56oq/ALAX0p+i2ylYOI1MgR83yBY7v96eO6ZFXcM/igCQmubps0Ow==", + "license": "MIT", + "dependencies": { + "@rc-component/portal": "^2.2.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.7.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tree": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rc-component/tree/-/tree-1.2.3.tgz", + "integrity": "sha512-mG8hF2ogQcKaEpfyxzPvMWqqkptofd7Sf+YiXOpPzuXLTLwNKfLDJtysc1/oybopbnzxNqWh2Vgwi+GYwNIb7w==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.0.0", + "@rc-component/util": "^1.8.1", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/tree-select": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@rc-component/tree-select/-/tree-select-1.8.0.tgz", + "integrity": "sha512-iYsPq3nuLYvGqdvFAW+l+I9ASRIOVbMXyA8FGZg2lGym/GwkaWeJGzI4eJ7c9IOEhRj0oyfIN4S92Fl3J05mjQ==", + "license": "MIT", + "dependencies": { + "@rc-component/select": "~1.6.0", + "@rc-component/tree": "~1.2.0", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/trigger": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-3.9.0.tgz", + "integrity": "sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/portal": "^2.2.0", + "@rc-component/resize-observer": "^1.1.1", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/upload": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/upload/-/upload-1.1.0.tgz", + "integrity": "sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/util/-/util-1.9.0.tgz", + "integrity": "sha512-5uW6AfhIigCWeEQDthTozlxiT4Prn6xYQWeO0xokjcaa186OtwPRHBZJ2o0T0FhbjGhZ3vXdbkv0sx3gAYW7Vg==", + "license": "MIT", + "dependencies": { + "is-mobile": "^5.0.0", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/virtual-list": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/virtual-list/-/virtual-list-1.0.2.tgz", + "integrity": "sha512-uvTol/mH74FYsn5loDGJxo+7kjkO4i+y4j87Re1pxJBs0FaeuMuLRzQRGaXwnMcV1CxpZLi2Z56Rerj2M00fjQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.0", + "@rc-component/resize-observer": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -1270,6 +2098,70 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/antd": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/antd/-/antd-6.3.0.tgz", + "integrity": "sha512-bbHJcASrRHp02wTpr940KtUHlTT6tvmaD4OAjqgOJXNmTQ/+qBDdBVWY/yeDV41p/WbWjTLlaqRGVbL3UEVpNw==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^8.0.1", + "@ant-design/cssinjs": "^2.1.0", + "@ant-design/cssinjs-utils": "^2.1.1", + "@ant-design/fast-color": "^3.0.1", + "@ant-design/icons": "^6.1.0", + "@ant-design/react-slick": "~2.0.0", + "@babel/runtime": "^7.28.4", + "@rc-component/cascader": "~1.14.0", + "@rc-component/checkbox": "~2.0.0", + "@rc-component/collapse": "~1.2.0", + "@rc-component/color-picker": "~3.1.0", + "@rc-component/dialog": "~1.8.4", + "@rc-component/drawer": "~1.4.2", + "@rc-component/dropdown": "~1.0.2", + "@rc-component/form": "~1.6.2", + "@rc-component/image": "~1.6.0", + "@rc-component/input": "~1.1.2", + "@rc-component/input-number": "~1.6.2", + "@rc-component/mentions": "~1.6.0", + "@rc-component/menu": "~1.2.0", + "@rc-component/motion": "~1.1.6", + "@rc-component/mutate-observer": "^2.0.1", + "@rc-component/notification": "~1.2.0", + "@rc-component/pagination": "~1.2.0", + "@rc-component/picker": "~1.9.0", + "@rc-component/progress": "~1.0.2", + "@rc-component/qrcode": "~1.1.1", + "@rc-component/rate": "~1.0.1", + "@rc-component/resize-observer": "^1.1.1", + "@rc-component/segmented": "~1.3.0", + "@rc-component/select": "~1.6.5", + "@rc-component/slider": "~1.0.1", + "@rc-component/steps": "~1.2.2", + "@rc-component/switch": "~1.0.3", + "@rc-component/table": "~1.9.1", + "@rc-component/tabs": "~1.7.0", + "@rc-component/textarea": "~1.1.2", + "@rc-component/tooltip": "~1.4.0", + "@rc-component/tour": "~2.3.0", + "@rc-component/tree": "~1.2.3", + "@rc-component/tree-select": "~1.8.0", + "@rc-component/trigger": "^3.9.0", + "@rc-component/upload": "~1.1.0", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1", + "dayjs": "^1.11.11", + "scroll-into-view-if-needed": "^3.1.0", + "throttle-debounce": "^5.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -1493,6 +2385,12 @@ "node": ">= 6" } }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "license": "MIT" + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -1517,7 +2415,12 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", "license": "MIT" }, "node_modules/debug": { @@ -1788,6 +2691,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-mobile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-5.0.0.tgz", + "integrity": "sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==", + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -1827,6 +2736,15 @@ "node": ">=6" } }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -2246,6 +3164,12 @@ "react": "^18.3.1" } }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -2389,6 +3313,15 @@ "loose-envify": "^1.1.0" } }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2409,6 +3342,18 @@ "node": ">=0.10.0" } }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, "node_modules/sucrase": { "version": "3.35.1", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", @@ -2526,6 +3471,15 @@ "node": ">=0.8" } }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", diff --git a/src/problem2/src/components/swap/TokenModal.tsx b/src/problem2/src/components/swap/TokenModal.tsx index 4f10ed4d1..1cfd03102 100644 --- a/src/problem2/src/components/swap/TokenModal.tsx +++ b/src/problem2/src/components/swap/TokenModal.tsx @@ -45,7 +45,7 @@ export const TokenModal: React.FC = ({ isOpen, onClose, onSelec
-
+
{filteredTokens.map(token => ( -
-
- {children} -
-
-
, - document.body + return ( + + {children} + ); }; diff --git a/src/problem2/src/index.css b/src/problem2/src/index.css index 9438fa8c4..6e9227406 100644 --- a/src/problem2/src/index.css +++ b/src/problem2/src/index.css @@ -7,3 +7,26 @@ @apply bg-background text-text-primary; } } + +@layer utilities { + .custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: #4b5563 transparent; + overscroll-behavior: contain; + } + .custom-scrollbar::-webkit-scrollbar { + width: 8px; + height: 0px; + } + .custom-scrollbar::-webkit-scrollbar-track { + background: transparent; + } + .custom-scrollbar::-webkit-scrollbar-thumb { + background-color: #4b5563; + border-radius: 9999px; + border: 2px solid transparent; + } + .custom-scrollbar:hover::-webkit-scrollbar-thumb { + background-color: #6b7280; + } +} diff --git a/src/problem2/src/main.tsx b/src/problem2/src/main.tsx index 3d7150da8..d2cc420c1 100644 --- a/src/problem2/src/main.tsx +++ b/src/problem2/src/main.tsx @@ -2,6 +2,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' +import 'antd/dist/reset.css' ReactDOM.createRoot(document.getElementById('root')!).render( From 3e0c0b99905a0df950ed8b623a9de1e551aaeeb2 Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Wed, 11 Feb 2026 09:45:55 +0700 Subject: [PATCH 06/17] problem 3 --- src/problem3/index.tsx | 84 +++++++++++++++++++ .../inefficiencies-and-anti-patterns.MD | 47 +++++++++++ 2 files changed, 131 insertions(+) create mode 100644 src/problem3/index.tsx create mode 100644 src/problem3/inefficiencies-and-anti-patterns.MD diff --git a/src/problem3/index.tsx b/src/problem3/index.tsx new file mode 100644 index 000000000..8b0aab250 --- /dev/null +++ b/src/problem3/index.tsx @@ -0,0 +1,84 @@ +interface WalletBalance { + currency: string; + amount: number; + // Added missing property + blockchain: string; +} +interface FormattedWalletBalance { + currency: string; + amount: number; + formatted: string; +} + +interface BoxProps {} + +interface Props extends BoxProps {} + +// Extracted Priority Logic (Avoids re-declaring on every render) +const PRIORITY_MAP: Record = { + Osmosis: 100, + Ethereum: 50, + Arbitrum: 30, + Zilliqa: 20, + Neo: 20, +}; + +const getPriority = (blockchain: string): number => { + // fix any type + return PRIORITY_MAP[blockchain] ?? -99; +}; + +const WalletPage: React.FC = (props: Props) => { + const { children, ...rest } = props; + const balances = useWalletBalances(); + const prices = usePrices(); + + const formattedBalances = useMemo(() => { + return balances + .filter((balance: WalletBalance) => { + const balancePriority = getPriority(balance.blockchain); + // Fixed logic to show positive balances + if (balancePriority > -99) { + if (balance.amount <= 0) { + return true; + } + } + return false; + }) + .sort((lhs: WalletBalance, rhs: WalletBalance) => { + const leftPriority = getPriority(lhs.blockchain); + const rightPriority = getPriority(rhs.blockchain); + if (leftPriority > rightPriority) { + return -1; + } else if (rightPriority > leftPriority) { + return 1; + } + }) + .map( + (balance: WalletBalance): FormattedWalletBalance => ({ + ...balance, + formatted: balance.amount.toFixed(), + }), + ); + }, [balances]); + // Removed 'prices' dependency + + const rows = formattedBalances.map( + // Clean Mapping + (balance: FormattedWalletBalance, index: number) => { + const usdValue = prices[balance.currency] * balance.amount; + return ( + + ); + }, + ); + + return
{rows}
; +}; diff --git a/src/problem3/inefficiencies-and-anti-patterns.MD b/src/problem3/inefficiencies-and-anti-patterns.MD new file mode 100644 index 000000000..4d5f4dab5 --- /dev/null +++ b/src/problem3/inefficiencies-and-anti-patterns.MD @@ -0,0 +1,47 @@ +1. Logic Errors + + - "lhsPriority" is undefined, should be "balancePriority" + + - this code below is wrong in logic: + if (balance.amount <= 0) { + return true; + } + + issues: the logic is wrong, it should be "balance.amount > 0" + correct: balance.amount > 0 is right logic + + - this code below is wrong in logic: + rows = sortedBalances.map((balance: FormattedWalletBalance, index: number)) => {} + + issues: rows constant maps over sortedBalances, but the type is declared as FormattedWalletBalance. However, sortedBalances hasn't been formatted yet; that happens in formattedBalances + correct: + rows = formattedBalances.map((balance: FormattedWalletBalance, index: number)) => {} + + +2. Performance Inefficiencies + + - Unnecessary Dependency, in code below: + const sortedBalances = useMemo(() => { + return balances.filter((balance: WalletBalance) => { + ... + }); + }, [balances, prices]); + + issues: useMemo for sortedBalances depends on prices, but prices are never used inside that calculation. This causes the entire list to re-sort whenever price data updates + correct: Remove prices from the dependency array + + - constant re-declaration of PRIORITY_MAP: + + issues: PRIORITY_MAP is a constant that doesn't change. + correct: Declare it outside the component to avoid re-declaring it on every render. + + - overuse iteration: map over the data three times (filter/sort, then map for formatting, then map for rows) + + - Hardcoded Keys: Using index as a key in React is an anti-pattern when the list can be re-sorted or filtered. It leads to UI glitches and poor performance. Use a unique identifier (like currency). + + + + 3. Typescript Anti-patterns + + - Usage of any + - Missing Interface Properties: The WalletBalance interface is missing the blockchain property, yet the code attempts to access balance.blockchain From d4a960dd0996dd76ae90c7d5ad2ecbed43ca3ae3 Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Wed, 11 Feb 2026 10:47:46 +0700 Subject: [PATCH 07/17] setup server --- src/problem5/.gitignore | 5 + src/problem5/.keep | 0 src/problem5/README.md | 103 + src/problem5/dist/app.js | 27 + .../dist/controllers/resourceController.js | 35 + .../dist/middleware/errorMiddleware.js | 19 + src/problem5/dist/middleware/validate.js | 26 + .../dist/repositories/resourceRepository.js | 25 + src/problem5/dist/routes/resourceRoutes.js | 47 + src/problem5/dist/server.js | 23 + src/problem5/dist/services/resourceService.js | 38 + src/problem5/dist/utils/AppError.js | 13 + src/problem5/dist/utils/asyncWrapper.js | 9 + src/problem5/dist/utils/prisma.js | 5 + src/problem5/dist/utils/validationSchemas.js | 18 + src/problem5/package-lock.json | 2363 +++++++++++++++++ src/problem5/package.json | 38 + src/problem5/prisma.config.ts | 14 + src/problem5/prisma/dev.db | Bin 0 -> 12288 bytes src/problem5/prisma/schema.prisma | 17 + src/problem5/src/app.ts | 28 + .../src/controllers/resourceController.ts | 37 + .../src/middleware/errorMiddleware.ts | 24 + src/problem5/src/middleware/validate.ts | 26 + .../src/repositories/resourceRepository.ts | 24 + src/problem5/src/routes/resourceRoutes.ts | 15 + src/problem5/src/server.ts | 21 + src/problem5/src/services/resourceService.ts | 41 + src/problem5/src/utils/AppError.ts | 14 + src/problem5/src/utils/asyncWrapper.ts | 7 + src/problem5/src/utils/prisma.ts | 5 + src/problem5/src/utils/validationSchemas.ts | 17 + src/problem5/tsconfig.json | 15 + 33 files changed, 3099 insertions(+) create mode 100644 src/problem5/.gitignore delete mode 100644 src/problem5/.keep create mode 100644 src/problem5/README.md create mode 100644 src/problem5/dist/app.js create mode 100644 src/problem5/dist/controllers/resourceController.js create mode 100644 src/problem5/dist/middleware/errorMiddleware.js create mode 100644 src/problem5/dist/middleware/validate.js create mode 100644 src/problem5/dist/repositories/resourceRepository.js create mode 100644 src/problem5/dist/routes/resourceRoutes.js create mode 100644 src/problem5/dist/server.js create mode 100644 src/problem5/dist/services/resourceService.js create mode 100644 src/problem5/dist/utils/AppError.js create mode 100644 src/problem5/dist/utils/asyncWrapper.js create mode 100644 src/problem5/dist/utils/prisma.js create mode 100644 src/problem5/dist/utils/validationSchemas.js create mode 100644 src/problem5/package-lock.json create mode 100644 src/problem5/package.json create mode 100644 src/problem5/prisma.config.ts create mode 100644 src/problem5/prisma/dev.db create mode 100644 src/problem5/prisma/schema.prisma create mode 100644 src/problem5/src/app.ts create mode 100644 src/problem5/src/controllers/resourceController.ts create mode 100644 src/problem5/src/middleware/errorMiddleware.ts create mode 100644 src/problem5/src/middleware/validate.ts create mode 100644 src/problem5/src/repositories/resourceRepository.ts create mode 100644 src/problem5/src/routes/resourceRoutes.ts create mode 100644 src/problem5/src/server.ts create mode 100644 src/problem5/src/services/resourceService.ts create mode 100644 src/problem5/src/utils/AppError.ts create mode 100644 src/problem5/src/utils/asyncWrapper.ts create mode 100644 src/problem5/src/utils/prisma.ts create mode 100644 src/problem5/src/utils/validationSchemas.ts create mode 100644 src/problem5/tsconfig.json diff --git a/src/problem5/.gitignore b/src/problem5/.gitignore new file mode 100644 index 000000000..9f62ec0b8 --- /dev/null +++ b/src/problem5/.gitignore @@ -0,0 +1,5 @@ +node_modules +# Keep environment variables out of version control +.env + +/generated/prisma diff --git a/src/problem5/.keep b/src/problem5/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/problem5/README.md b/src/problem5/README.md new file mode 100644 index 000000000..408e157f9 --- /dev/null +++ b/src/problem5/README.md @@ -0,0 +1,103 @@ +# Resource API (Problem 5) + +A production-grade RESTful CRUD API built with Express, TypeScript, and Prisma. + +## Prerequisites + +- Node.js (v18 or higher) +- npm or yarn + +## Installation + +1. Navigate to the project folder: + ```bash + cd src/problem5 + ``` + +2. Install dependencies: + ```bash + npm install + ``` + +3. Configure Environment Variables: + Ensure a `.env` file exists in the root of `src/problem5` with the following content: + ```env + DATABASE_URL="file:./dev.db" + PORT=3000 + ``` + *Note: You can switch `DATABASE_URL` to a PostgreSQL connection string if preferred.* + +4. Initialize the Database: + ```bash + npx prisma generate + npx prisma db push + ``` + +## Running the Application + +- **Development Mode** (with hot-reload): + ```bash + npm run dev + ``` + Server will start at `http://localhost:3000`. + +- **Production Build**: + ```bash + npm run build + npm start + ``` + +## API Documentation + +### Resources + +#### Create a Resource +- **URL**: `POST /api/resources` +- **Body**: + ```json + { + "name": "Resource Name", + "description": "Optional description", + "status": "active" + } + ``` +- **Response**: `201 Created` + +#### List Resources +- **URL**: `GET /api/resources` +- **Query Params**: + - `status`: Filter by status (e.g., `?status=active`) + - `name`: Filter by name substring (e.g., `?name=Resource`) +- **Response**: `200 OK` + +#### Get a Resource +- **URL**: `GET /api/resources/:id` +- **Response**: `200 OK` or `404 Not Found` + +#### Update a Resource +- **URL**: `PATCH /api/resources/:id` +- **Body**: (Partial update) + ```json + { + "status": "inactive" + } + ``` +- **Response**: `200 OK` + +#### Delete a Resource +- **URL**: `DELETE /api/resources/:id` +- **Response**: `204 No Content` + +## Architecture + +This project follows a layered architecture: +- **Controller**: Handles HTTP requests and responses. +- **Service**: Contains business logic. +- **Repository**: Handles direct database interactions (Prisma). + +Technologies used: +- **ExpressJS**: Web framework. +- **TypeScript**: Language. +- **Prisma**: ORM. +- **Zod**: Validation. +- **SQLite**: Default database (easy to swap). diff --git a/src/problem5/dist/app.js b/src/problem5/dist/app.js new file mode 100644 index 000000000..d2fdce009 --- /dev/null +++ b/src/problem5/dist/app.js @@ -0,0 +1,27 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const express_1 = __importDefault(require("express")); +const cors_1 = __importDefault(require("cors")); +const helmet_1 = __importDefault(require("helmet")); +const morgan_1 = __importDefault(require("morgan")); +const resourceRoutes_1 = __importDefault(require("./routes/resourceRoutes")); +const errorMiddleware_1 = require("./middleware/errorMiddleware"); +const app = (0, express_1.default)(); +// Middleware +app.use((0, cors_1.default)()); +app.use((0, helmet_1.default)()); +app.use((0, morgan_1.default)('dev')); +app.use(express_1.default.json()); +app.use(express_1.default.urlencoded({ extended: true })); +// Routes +app.use('/api/resources', resourceRoutes_1.default); +// Health Check +app.get('/health', (req, res) => { + res.status(200).json({ status: 'ok' }); +}); +// Error Handling +app.use(errorMiddleware_1.errorMiddleware); +exports.default = app; diff --git a/src/problem5/dist/controllers/resourceController.js b/src/problem5/dist/controllers/resourceController.js new file mode 100644 index 000000000..8887d6b75 --- /dev/null +++ b/src/problem5/dist/controllers/resourceController.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.deleteResource = exports.updateResource = exports.getResource = exports.getResources = exports.createResource = void 0; +const resourceService_1 = require("../services/resourceService"); +const http_status_codes_1 = require("http-status-codes"); +const resourceService = new resourceService_1.ResourceService(); +const createResource = async (req, res) => { + const resource = await resourceService.createResource(req.body); + res.status(http_status_codes_1.StatusCodes.CREATED).json({ status: 'success', data: resource }); +}; +exports.createResource = createResource; +const getResources = async (req, res) => { + const { status, name } = req.query; + const resources = await resourceService.getResources(status, name); + res.status(http_status_codes_1.StatusCodes.OK).json({ status: 'success', data: resources }); +}; +exports.getResources = getResources; +const getResource = async (req, res) => { + const id = parseInt(req.params.id); + const resource = await resourceService.getResourceById(id); + res.status(http_status_codes_1.StatusCodes.OK).json({ status: 'success', data: resource }); +}; +exports.getResource = getResource; +const updateResource = async (req, res) => { + const id = parseInt(req.params.id); + const resource = await resourceService.updateResource(id, req.body); + res.status(http_status_codes_1.StatusCodes.OK).json({ status: 'success', data: resource }); +}; +exports.updateResource = updateResource; +const deleteResource = async (req, res) => { + const id = parseInt(req.params.id); + await resourceService.deleteResource(id); + res.status(http_status_codes_1.StatusCodes.NO_CONTENT).send(); +}; +exports.deleteResource = deleteResource; diff --git a/src/problem5/dist/middleware/errorMiddleware.js b/src/problem5/dist/middleware/errorMiddleware.js new file mode 100644 index 000000000..77b78eb6f --- /dev/null +++ b/src/problem5/dist/middleware/errorMiddleware.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.errorMiddleware = void 0; +const AppError_1 = require("../utils/AppError"); +const http_status_codes_1 = require("http-status-codes"); +const errorMiddleware = (err, // AppError | Error +req, res, next) => { + let error = err; + if (!(error instanceof AppError_1.AppError)) { + console.error('Unexpected Error:', err); + error = new AppError_1.AppError('Something went wrong', http_status_codes_1.StatusCodes.INTERNAL_SERVER_ERROR); + } + const appError = error; + res.status(appError.statusCode).json({ + status: appError.status, + message: appError.message, + }); +}; +exports.errorMiddleware = errorMiddleware; diff --git a/src/problem5/dist/middleware/validate.js b/src/problem5/dist/middleware/validate.js new file mode 100644 index 000000000..c7c907e6d --- /dev/null +++ b/src/problem5/dist/middleware/validate.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validate = void 0; +const zod_1 = require("zod"); +const AppError_1 = require("../utils/AppError"); +const http_status_codes_1 = require("http-status-codes"); +const validate = (schema) => (req, res, next) => { + try { + schema.parse({ + body: req.body, + query: req.query, + params: req.params, + }); + next(); + } + catch (error) { + if (error instanceof zod_1.ZodError) { + const messages = error.errors.map((e) => e.message).join(', '); + next(new AppError_1.AppError(`Validation Error: ${messages}`, http_status_codes_1.StatusCodes.BAD_REQUEST)); + } + else { + next(error); + } + } +}; +exports.validate = validate; diff --git a/src/problem5/dist/repositories/resourceRepository.js b/src/problem5/dist/repositories/resourceRepository.js new file mode 100644 index 000000000..8c39a71fd --- /dev/null +++ b/src/problem5/dist/repositories/resourceRepository.js @@ -0,0 +1,25 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ResourceRepository = void 0; +const prisma_1 = __importDefault(require("../utils/prisma")); +class ResourceRepository { + async create(data) { + return prisma_1.default.resource.create({ data }); + } + async findAll(filter) { + return prisma_1.default.resource.findMany({ where: filter }); + } + async findById(id) { + return prisma_1.default.resource.findUnique({ where: { id } }); + } + async update(id, data) { + return prisma_1.default.resource.update({ where: { id }, data }); + } + async delete(id) { + return prisma_1.default.resource.delete({ where: { id } }); + } +} +exports.ResourceRepository = ResourceRepository; diff --git a/src/problem5/dist/routes/resourceRoutes.js b/src/problem5/dist/routes/resourceRoutes.js new file mode 100644 index 000000000..4f65be843 --- /dev/null +++ b/src/problem5/dist/routes/resourceRoutes.js @@ -0,0 +1,47 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +const express_1 = require("express"); +const resourceController = __importStar(require("../controllers/resourceController")); +const validate_1 = require("../middleware/validate"); +const validationSchemas_1 = require("../utils/validationSchemas"); +const asyncWrapper_1 = require("../utils/asyncWrapper"); +const router = (0, express_1.Router)(); +router.post('/', (0, validate_1.validate)(validationSchemas_1.createResourceSchema), (0, asyncWrapper_1.asyncWrapper)(resourceController.createResource)); +router.get('/', (0, asyncWrapper_1.asyncWrapper)(resourceController.getResources)); +router.get('/:id', (0, asyncWrapper_1.asyncWrapper)(resourceController.getResource)); +router.patch('/:id', (0, validate_1.validate)(validationSchemas_1.updateResourceSchema), (0, asyncWrapper_1.asyncWrapper)(resourceController.updateResource)); +router.delete('/:id', (0, asyncWrapper_1.asyncWrapper)(resourceController.deleteResource)); +exports.default = router; diff --git a/src/problem5/dist/server.js b/src/problem5/dist/server.js new file mode 100644 index 000000000..ba5dab4e8 --- /dev/null +++ b/src/problem5/dist/server.js @@ -0,0 +1,23 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const app_1 = __importDefault(require("./app")); +const dotenv_1 = __importDefault(require("dotenv")); +const prisma_1 = __importDefault(require("./utils/prisma")); +dotenv_1.default.config(); +const PORT = process.env.PORT || 3000; +async function start() { + try { + await prisma_1.default.$connect(); + } + catch (err) { + console.error('Prisma connection error'); + process.exit(1); + } + app_1.default.listen(PORT, () => { + console.log(`Server running on port ${PORT}`); + }); +} +start(); diff --git a/src/problem5/dist/services/resourceService.js b/src/problem5/dist/services/resourceService.js new file mode 100644 index 000000000..fb252e746 --- /dev/null +++ b/src/problem5/dist/services/resourceService.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ResourceService = void 0; +const resourceRepository_1 = require("../repositories/resourceRepository"); +const AppError_1 = require("../utils/AppError"); +const http_status_codes_1 = require("http-status-codes"); +class ResourceService { + constructor() { + this.resourceRepository = new resourceRepository_1.ResourceRepository(); + } + async createResource(data) { + return this.resourceRepository.create(data); + } + async getResources(status, name) { + const filter = {}; + if (status) + filter.status = status; + if (name) + filter.name = { contains: name }; + return this.resourceRepository.findAll(filter); + } + async getResourceById(id) { + const resource = await this.resourceRepository.findById(id); + if (!resource) { + throw new AppError_1.AppError('Resource not found', http_status_codes_1.StatusCodes.NOT_FOUND); + } + return resource; + } + async updateResource(id, data) { + await this.getResourceById(id); // Ensure exists + return this.resourceRepository.update(id, data); + } + async deleteResource(id) { + await this.getResourceById(id); // Ensure exists + await this.resourceRepository.delete(id); + } +} +exports.ResourceService = ResourceService; diff --git a/src/problem5/dist/utils/AppError.js b/src/problem5/dist/utils/AppError.js new file mode 100644 index 000000000..2fd1e1ad8 --- /dev/null +++ b/src/problem5/dist/utils/AppError.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppError = void 0; +class AppError extends Error { + constructor(message, statusCode) { + super(message); + this.statusCode = statusCode; + this.status = `${statusCode}`.startsWith('4') ? 'fail' : 'error'; + this.isOperational = true; + Error.captureStackTrace(this, this.constructor); + } +} +exports.AppError = AppError; diff --git a/src/problem5/dist/utils/asyncWrapper.js b/src/problem5/dist/utils/asyncWrapper.js new file mode 100644 index 000000000..6431fea86 --- /dev/null +++ b/src/problem5/dist/utils/asyncWrapper.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.asyncWrapper = void 0; +const asyncWrapper = (fn) => { + return (req, res, next) => { + fn(req, res, next).catch(next); + }; +}; +exports.asyncWrapper = asyncWrapper; diff --git a/src/problem5/dist/utils/prisma.js b/src/problem5/dist/utils/prisma.js new file mode 100644 index 000000000..a3a357632 --- /dev/null +++ b/src/problem5/dist/utils/prisma.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const client_1 = require("@prisma/client"); +const prisma = new client_1.PrismaClient(); +exports.default = prisma; diff --git a/src/problem5/dist/utils/validationSchemas.js b/src/problem5/dist/utils/validationSchemas.js new file mode 100644 index 000000000..a92a4b8cc --- /dev/null +++ b/src/problem5/dist/utils/validationSchemas.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.updateResourceSchema = exports.createResourceSchema = void 0; +const zod_1 = require("zod"); +exports.createResourceSchema = zod_1.z.object({ + body: zod_1.z.object({ + name: zod_1.z.string().min(1, 'Name is required'), + description: zod_1.z.string().optional(), + status: zod_1.z.enum(['active', 'inactive']).optional(), + }), +}); +exports.updateResourceSchema = zod_1.z.object({ + body: zod_1.z.object({ + name: zod_1.z.string().min(1).optional(), + description: zod_1.z.string().optional(), + status: zod_1.z.enum(['active', 'inactive']).optional(), + }), +}); diff --git a/src/problem5/package-lock.json b/src/problem5/package-lock.json new file mode 100644 index 000000000..80496308c --- /dev/null +++ b/src/problem5/package-lock.json @@ -0,0 +1,2363 @@ +{ + "name": "problem5", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "problem5", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@prisma/client": "5.10.0", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.18.2", + "helmet": "^7.1.0", + "http-status-codes": "^2.3.0", + "morgan": "^1.10.0", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/morgan": "^1.9.9", + "@types/node": "^20.11.24", + "nodemon": "^3.1.0", + "prisma": "5.10.0", + "rimraf": "^5.0.5", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@prisma/client": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.10.0.tgz", + "integrity": "sha512-JQqKYpKplsAaPDk0RVKBsN4ly6AWJys6Hkjh9PJMgtdY0IME1C0aHckyGUhHpenmOO2J6liPDDm1svSrzce8BQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.10.0.tgz", + "integrity": "sha512-xBs8M4bGIBUqJ/9lZM+joEJkrNaGPKMUcK3a5JqUDQtwPDaWDTq24wOpkHfoJtvNbmGtlDl9Ky5HAbctN5+x7g==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.10.0.tgz", + "integrity": "sha512-9NVgMD3bjB5fsxVnrqbasZG3PwurfI2/XKhFfKuZulVRldm5Nz/SJ38t+o0DcOoOmuYMrY4R+UFO57QAB6hCeA==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.10.0", + "@prisma/engines-version": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9", + "@prisma/fetch-engine": "5.10.0", + "@prisma/get-platform": "5.10.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9.tgz", + "integrity": "sha512-uCy/++3Jx/O3ufM+qv2H1L4tOemTNqcP/gyEVOlZqTpBvYJUe0tWtW0y3o2Ueq04mll4aM5X3f6ugQftOSLdFQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.10.0.tgz", + "integrity": "sha512-6A7Rh7ItuenDo0itgJ8V90cTeLejN1+vUjUzgdonhcNN+7UhZczZfEGe16nI+steW6+ScB5O8+LZybRLNBb0HA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.10.0", + "@prisma/engines-version": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9", + "@prisma/get-platform": "5.10.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.10.0.tgz", + "integrity": "sha512-pSxK2RTVhnG6FVkTlSBdBPuvf8087VliR1MMF5ca8/loyY07FtvYF02SP9ZQZITvbZ+6XX1LTwo8WjIp/EHgIQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.10.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/morgan": { + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", + "integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helmet": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.2.0.tgz", + "integrity": "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-status-codes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", + "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/morgan": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.1.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz", + "integrity": "sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prisma": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.10.0.tgz", + "integrity": "sha512-uN3jT1v1XP12tvatsBsMUDC/aK+3kA2VUXznl3UutgK4XHdVjM3SBW8bFb/bT9dHU40apwsEazUK9M/vG13YmA==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "5.10.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/src/problem5/package.json b/src/problem5/package.json new file mode 100644 index 000000000..7f0769bf8 --- /dev/null +++ b/src/problem5/package.json @@ -0,0 +1,38 @@ +{ + "name": "problem5", + "version": "1.0.0", + "main": "dist/server.js", + "scripts": { + "dev": "nodemon src/server.ts", + "build": "tsc", + "start": "node dist/server.js", + "prisma:generate": "prisma generate", + "prisma:push": "prisma db push", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "@prisma/client": "5.10.0", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.18.2", + "helmet": "^7.1.0", + "http-status-codes": "^2.3.0", + "morgan": "^1.10.0", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/morgan": "^1.9.9", + "@types/node": "^20.11.24", + "nodemon": "^3.1.0", + "prisma": "5.10.0", + "rimraf": "^5.0.5", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" + } +} diff --git a/src/problem5/prisma.config.ts b/src/problem5/prisma.config.ts new file mode 100644 index 000000000..831a20fa8 --- /dev/null +++ b/src/problem5/prisma.config.ts @@ -0,0 +1,14 @@ +// This file was generated by Prisma, and assumes you have installed the following: +// npm install --save-dev prisma dotenv +import "dotenv/config"; +import { defineConfig } from "prisma/config"; + +export default defineConfig({ + schema: "prisma/schema.prisma", + migrations: { + path: "prisma/migrations", + }, + datasource: { + url: process.env["DATABASE_URL"], + }, +}); diff --git a/src/problem5/prisma/dev.db b/src/problem5/prisma/dev.db new file mode 100644 index 0000000000000000000000000000000000000000..7c8a1860f7d5781802b4cac5cdec4af9740f6c36 GIT binary patch literal 12288 zcmeI#&r8EF6bJBh6NQ1p+fIW=FWcDg;y+;Bq7>V1b}6{isBH#?{cKauBL0Q`8U7Wf zt{pfK@A`d^h9vJL?Wdp!;I{TNvze z@o}!RYRwnceAf>I1Rwwb2tWV=5P$##AOHaf{7ZpJ?X=bJ8#5I?EoHV_>dWXnle=85 zqvK(H=yOYO64s5w=_t3m4p(xZD|@efm1jpaG~%~b;0Wr3kxHIrr%aAg87diD%A}DN5Vp$?=NxK=f$!@#nis26 zVY!pCIN!!U7B_mu-CSS#5fFd?1Rwwb2tWV=5P$##AOHaf{9ysy|NrpM#iv040uX=z S1Rwwb2tWV=5P$##N`X&Yrg_2u literal 0 HcmV?d00001 diff --git a/src/problem5/prisma/schema.prisma b/src/problem5/prisma/schema.prisma new file mode 100644 index 000000000..6796628f1 --- /dev/null +++ b/src/problem5/prisma/schema.prisma @@ -0,0 +1,17 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model Resource { + id Int @id @default(autoincrement()) + name String + description String? + status String @default("active") // active, inactive + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} diff --git a/src/problem5/src/app.ts b/src/problem5/src/app.ts new file mode 100644 index 000000000..594899a7c --- /dev/null +++ b/src/problem5/src/app.ts @@ -0,0 +1,28 @@ +import express from 'express'; +import cors from 'cors'; +import helmet from 'helmet'; +import morgan from 'morgan'; +import resourceRoutes from './routes/resourceRoutes'; +import { errorMiddleware } from './middleware/errorMiddleware'; + +const app = express(); + +// Middleware +app.use(cors()); +app.use(helmet()); +app.use(morgan('dev')); +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); + +// Routes +app.use('/api/resources', resourceRoutes); + +// Health Check +app.get('/health', (req, res) => { + res.status(200).json({ status: 'ok' }); +}); + +// Error Handling +app.use(errorMiddleware); + +export default app; diff --git a/src/problem5/src/controllers/resourceController.ts b/src/problem5/src/controllers/resourceController.ts new file mode 100644 index 000000000..d801c2bef --- /dev/null +++ b/src/problem5/src/controllers/resourceController.ts @@ -0,0 +1,37 @@ +import { Request, Response } from 'express'; +import { ResourceService } from '../services/resourceService'; +import { StatusCodes } from 'http-status-codes'; + +const resourceService = new ResourceService(); + +export const createResource = async (req: Request, res: Response) => { + const resource = await resourceService.createResource(req.body); + res.status(StatusCodes.CREATED).json({ status: 'success', data: resource }); +}; + +export const getResources = async (req: Request, res: Response) => { + const { status, name } = req.query; + const resources = await resourceService.getResources( + status as string, + name as string + ); + res.status(StatusCodes.OK).json({ status: 'success', data: resources }); +}; + +export const getResource = async (req: Request, res: Response) => { + const id = parseInt(req.params.id); + const resource = await resourceService.getResourceById(id); + res.status(StatusCodes.OK).json({ status: 'success', data: resource }); +}; + +export const updateResource = async (req: Request, res: Response) => { + const id = parseInt(req.params.id); + const resource = await resourceService.updateResource(id, req.body); + res.status(StatusCodes.OK).json({ status: 'success', data: resource }); +}; + +export const deleteResource = async (req: Request, res: Response) => { + const id = parseInt(req.params.id); + await resourceService.deleteResource(id); + res.status(StatusCodes.NO_CONTENT).send(); +}; diff --git a/src/problem5/src/middleware/errorMiddleware.ts b/src/problem5/src/middleware/errorMiddleware.ts new file mode 100644 index 000000000..1825db320 --- /dev/null +++ b/src/problem5/src/middleware/errorMiddleware.ts @@ -0,0 +1,24 @@ +import { Request, Response, NextFunction } from 'express'; +import { AppError } from '../utils/AppError'; +import { StatusCodes } from 'http-status-codes'; + +export const errorMiddleware = ( + err: any, // AppError | Error + req: Request, + res: Response, + next: NextFunction +) => { + let error = err; + + if (!(error instanceof AppError)) { + console.error('Unexpected Error:', err); + error = new AppError('Something went wrong', StatusCodes.INTERNAL_SERVER_ERROR); + } + + const appError = error as AppError; + + res.status(appError.statusCode).json({ + status: appError.status, + message: appError.message, + }); +}; diff --git a/src/problem5/src/middleware/validate.ts b/src/problem5/src/middleware/validate.ts new file mode 100644 index 000000000..870ef9810 --- /dev/null +++ b/src/problem5/src/middleware/validate.ts @@ -0,0 +1,26 @@ +import { Request, Response, NextFunction } from 'express'; +import { AnyZodObject, ZodError } from 'zod'; +import { AppError } from '../utils/AppError'; +import { StatusCodes } from 'http-status-codes'; + +export const validate = (schema: AnyZodObject) => ( + req: Request, + res: Response, + next: NextFunction +) => { + try { + schema.parse({ + body: req.body, + query: req.query, + params: req.params, + }); + next(); + } catch (error) { + if (error instanceof ZodError) { + const messages = error.errors.map((e) => e.message).join(', '); + next(new AppError(`Validation Error: ${messages}`, StatusCodes.BAD_REQUEST)); + } else { + next(error); + } + } +}; diff --git a/src/problem5/src/repositories/resourceRepository.ts b/src/problem5/src/repositories/resourceRepository.ts new file mode 100644 index 000000000..8f6aa3d42 --- /dev/null +++ b/src/problem5/src/repositories/resourceRepository.ts @@ -0,0 +1,24 @@ +import prisma from '../utils/prisma'; +import { Resource, Prisma } from '@prisma/client'; + +export class ResourceRepository { + async create(data: Prisma.ResourceCreateInput): Promise { + return prisma.resource.create({ data }); + } + + async findAll(filter: Prisma.ResourceWhereInput): Promise { + return prisma.resource.findMany({ where: filter }); + } + + async findById(id: number): Promise { + return prisma.resource.findUnique({ where: { id } }); + } + + async update(id: number, data: Prisma.ResourceUpdateInput): Promise { + return prisma.resource.update({ where: { id }, data }); + } + + async delete(id: number): Promise { + return prisma.resource.delete({ where: { id } }); + } +} diff --git a/src/problem5/src/routes/resourceRoutes.ts b/src/problem5/src/routes/resourceRoutes.ts new file mode 100644 index 000000000..bde67d689 --- /dev/null +++ b/src/problem5/src/routes/resourceRoutes.ts @@ -0,0 +1,15 @@ +import { Router } from 'express'; +import * as resourceController from '../controllers/resourceController'; +import { validate } from '../middleware/validate'; +import { createResourceSchema, updateResourceSchema } from '../utils/validationSchemas'; +import { asyncWrapper } from '../utils/asyncWrapper'; + +const router = Router(); + +router.post('/', validate(createResourceSchema), asyncWrapper(resourceController.createResource)); +router.get('/', asyncWrapper(resourceController.getResources)); +router.get('/:id', asyncWrapper(resourceController.getResource)); +router.patch('/:id', validate(updateResourceSchema), asyncWrapper(resourceController.updateResource)); +router.delete('/:id', asyncWrapper(resourceController.deleteResource)); + +export default router; diff --git a/src/problem5/src/server.ts b/src/problem5/src/server.ts new file mode 100644 index 000000000..46ecb0fa9 --- /dev/null +++ b/src/problem5/src/server.ts @@ -0,0 +1,21 @@ +import app from './app'; +import dotenv from 'dotenv'; +import prisma from './utils/prisma'; + +dotenv.config(); + +const PORT = process.env.PORT || 3000; + +async function start() { + try { + await prisma.$connect(); + } catch (err) { + console.error('Prisma connection error'); + process.exit(1); + } + app.listen(PORT, () => { + console.log(`Server running on port ${PORT}`); + }); +} + +start(); diff --git a/src/problem5/src/services/resourceService.ts b/src/problem5/src/services/resourceService.ts new file mode 100644 index 000000000..0a6eea2c6 --- /dev/null +++ b/src/problem5/src/services/resourceService.ts @@ -0,0 +1,41 @@ +import { ResourceRepository } from '../repositories/resourceRepository'; +import { AppError } from '../utils/AppError'; +import { StatusCodes } from 'http-status-codes'; +import { Resource } from '@prisma/client'; + +export class ResourceService { + private resourceRepository: ResourceRepository; + + constructor() { + this.resourceRepository = new ResourceRepository(); + } + + async createResource(data: any): Promise { + return this.resourceRepository.create(data); + } + + async getResources(status?: string, name?: string): Promise { + const filter: any = {}; + if (status) filter.status = status; + if (name) filter.name = { contains: name }; + return this.resourceRepository.findAll(filter); + } + + async getResourceById(id: number): Promise { + const resource = await this.resourceRepository.findById(id); + if (!resource) { + throw new AppError('Resource not found', StatusCodes.NOT_FOUND); + } + return resource; + } + + async updateResource(id: number, data: any): Promise { + await this.getResourceById(id); // Ensure exists + return this.resourceRepository.update(id, data); + } + + async deleteResource(id: number): Promise { + await this.getResourceById(id); // Ensure exists + await this.resourceRepository.delete(id); + } +} diff --git a/src/problem5/src/utils/AppError.ts b/src/problem5/src/utils/AppError.ts new file mode 100644 index 000000000..5f74b409a --- /dev/null +++ b/src/problem5/src/utils/AppError.ts @@ -0,0 +1,14 @@ +export class AppError extends Error { + statusCode: number; + status: string; + isOperational: boolean; + + constructor(message: string, statusCode: number) { + super(message); + this.statusCode = statusCode; + this.status = `${statusCode}`.startsWith('4') ? 'fail' : 'error'; + this.isOperational = true; + + Error.captureStackTrace(this, this.constructor); + } +} diff --git a/src/problem5/src/utils/asyncWrapper.ts b/src/problem5/src/utils/asyncWrapper.ts new file mode 100644 index 000000000..5d4a98ef9 --- /dev/null +++ b/src/problem5/src/utils/asyncWrapper.ts @@ -0,0 +1,7 @@ +import { Request, Response, NextFunction } from 'express'; + +export const asyncWrapper = (fn: (req: Request, res: Response, next: NextFunction) => Promise) => { + return (req: Request, res: Response, next: NextFunction) => { + fn(req, res, next).catch(next); + }; +}; diff --git a/src/problem5/src/utils/prisma.ts b/src/problem5/src/utils/prisma.ts new file mode 100644 index 000000000..4e54f7a77 --- /dev/null +++ b/src/problem5/src/utils/prisma.ts @@ -0,0 +1,5 @@ +import { PrismaClient } from '@prisma/client'; + +const prisma = new PrismaClient(); + +export default prisma; diff --git a/src/problem5/src/utils/validationSchemas.ts b/src/problem5/src/utils/validationSchemas.ts new file mode 100644 index 000000000..023a544c4 --- /dev/null +++ b/src/problem5/src/utils/validationSchemas.ts @@ -0,0 +1,17 @@ +import { z } from 'zod'; + +export const createResourceSchema = z.object({ + body: z.object({ + name: z.string().min(1, 'Name is required'), + description: z.string().optional(), + status: z.enum(['active', 'inactive']).optional(), + }), +}); + +export const updateResourceSchema = z.object({ + body: z.object({ + name: z.string().min(1).optional(), + description: z.string().optional(), + status: z.enum(['active', 'inactive']).optional(), + }), +}); diff --git a/src/problem5/tsconfig.json b/src/problem5/tsconfig.json new file mode 100644 index 000000000..81a4e7b85 --- /dev/null +++ b/src/problem5/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} From 6c9a75c1a711f41b0739aab1bb35311463c4013f Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Wed, 11 Feb 2026 13:54:35 +0700 Subject: [PATCH 08/17] FE for problem 5 --- .trae/documents/plan_20260211_035333.md | 40 + src/problem5/frontend/.gitignore | 24 + src/problem5/frontend/README.md | 73 + src/problem5/frontend/eslint.config.js | 23 + src/problem5/frontend/index.html | 13 + src/problem5/frontend/package-lock.json | 5436 +++++++++++++++++ src/problem5/frontend/package.json | 39 + src/problem5/frontend/postcss.config.js | 6 + src/problem5/frontend/public/vite.svg | 1 + src/problem5/frontend/src/App.css | 42 + src/problem5/frontend/src/App.tsx | 45 + src/problem5/frontend/src/assets/react.svg | 1 + .../frontend/src/components/layout/Layout.tsx | 21 + .../src/components/layout/Sidebar.tsx | 82 + .../frontend/src/components/ui/Button.tsx | 52 + .../frontend/src/components/ui/Input.tsx | 55 + src/problem5/frontend/src/index.css | 84 + src/problem5/frontend/src/main.tsx | 11 + .../frontend/src/pages/ResourceList.tsx | 261 + src/problem5/frontend/src/services/api.ts | 41 + src/problem5/frontend/src/utils/cn.ts | 6 + src/problem5/frontend/tailwind.config.cjs | 51 + src/problem5/frontend/tsconfig.app.json | 28 + src/problem5/frontend/tsconfig.json | 7 + src/problem5/frontend/tsconfig.node.json | 26 + src/problem5/frontend/vite.config.ts | 7 + 26 files changed, 6475 insertions(+) create mode 100644 .trae/documents/plan_20260211_035333.md create mode 100644 src/problem5/frontend/.gitignore create mode 100644 src/problem5/frontend/README.md create mode 100644 src/problem5/frontend/eslint.config.js create mode 100644 src/problem5/frontend/index.html create mode 100644 src/problem5/frontend/package-lock.json create mode 100644 src/problem5/frontend/package.json create mode 100644 src/problem5/frontend/postcss.config.js create mode 100644 src/problem5/frontend/public/vite.svg create mode 100644 src/problem5/frontend/src/App.css create mode 100644 src/problem5/frontend/src/App.tsx create mode 100644 src/problem5/frontend/src/assets/react.svg create mode 100644 src/problem5/frontend/src/components/layout/Layout.tsx create mode 100644 src/problem5/frontend/src/components/layout/Sidebar.tsx create mode 100644 src/problem5/frontend/src/components/ui/Button.tsx create mode 100644 src/problem5/frontend/src/components/ui/Input.tsx create mode 100644 src/problem5/frontend/src/index.css create mode 100644 src/problem5/frontend/src/main.tsx create mode 100644 src/problem5/frontend/src/pages/ResourceList.tsx create mode 100644 src/problem5/frontend/src/services/api.ts create mode 100644 src/problem5/frontend/src/utils/cn.ts create mode 100644 src/problem5/frontend/tailwind.config.cjs create mode 100644 src/problem5/frontend/tsconfig.app.json create mode 100644 src/problem5/frontend/tsconfig.json create mode 100644 src/problem5/frontend/tsconfig.node.json create mode 100644 src/problem5/frontend/vite.config.ts diff --git a/.trae/documents/plan_20260211_035333.md b/.trae/documents/plan_20260211_035333.md new file mode 100644 index 000000000..6aca3e94a --- /dev/null +++ b/.trae/documents/plan_20260211_035333.md @@ -0,0 +1,40 @@ +I will build the Admin Dashboard in `src/problem5/frontend` using **React + Vite + TypeScript**, mirroring the **Binance-style dark theme** and architecture from `problem2`. + +### **Tech Stack & Dependencies** +- **Core**: React 18, Vite, TypeScript +- **Styling**: Tailwind CSS (with `problem2` color palette), `clsx`, `tailwind-merge` +- **UI Library**: `antd` (for Modals/Notifications, consistent with `problem2`'s latest state) + Custom Tailwind Components +- **Icons**: `lucide-react` +- **HTTP Client**: `axios` +- **Routing**: `react-router-dom` + +### **Implementation Steps** +1. **Project Initialization** + - Scaffold Vite project in `src/problem5/frontend`. + - Install dependencies (`tailwindcss`, `antd`, `axios`, `react-router-dom`, `lucide-react`). + - Configure `tailwind.config.js` with the specific color palette (Primary `#FCD535`, Background `#1E2329`, etc.). + +2. **Core Components Setup** + - Port **UI Primitives** from `problem2`: + - `Button` (Variants: Primary/Secondary/Danger) + - `Input` (Dark themed) + - `Modal` (Wrapper around Antd Modal with dark theme overrides) + - Implement **Layout**: + - `Sidebar` (Navigation) + - `Header` (Page title) + - Responsive shell + +3. **Feature Implementation (Resource Admin)** + - **API Layer**: Create `services/api.ts` to connect to `http://localhost:3000/api/resources`. + - **Resource List View**: + - Data table with sorting/filtering. + - Status badges (Active/Inactive). + - Action buttons (Edit, Delete). + - **Create/Edit Resource**: + - Form using `antd` Form or custom state. + - Fields: Name (Validation), Description, Status. + - **Delete Flow**: Confirmation modal before deletion. + +4. **Integration & styling** + - Apply the "Binance" dark theme globally. + - Ensure responsive design for mobile/desktop. diff --git a/src/problem5/frontend/.gitignore b/src/problem5/frontend/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/src/problem5/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/src/problem5/frontend/README.md b/src/problem5/frontend/README.md new file mode 100644 index 000000000..d2e77611f --- /dev/null +++ b/src/problem5/frontend/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/src/problem5/frontend/eslint.config.js b/src/problem5/frontend/eslint.config.js new file mode 100644 index 000000000..5e6b472f5 --- /dev/null +++ b/src/problem5/frontend/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/src/problem5/frontend/index.html b/src/problem5/frontend/index.html new file mode 100644 index 000000000..072a57e8e --- /dev/null +++ b/src/problem5/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + frontend + + +
+ + + diff --git a/src/problem5/frontend/package-lock.json b/src/problem5/frontend/package-lock.json new file mode 100644 index 000000000..ba662ebf1 --- /dev/null +++ b/src/problem5/frontend/package-lock.json @@ -0,0 +1,5436 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "antd": "^6.3.0", + "axios": "^1.13.5", + "clsx": "^2.1.1", + "lucide-react": "^0.563.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.13.0", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.24", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.1", + "typescript": "~5.9.3", + "typescript-eslint": "^8.48.0", + "vite": "^7.3.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ant-design/colors": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-8.0.1.tgz", + "integrity": "sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.0" + } + }, + "node_modules/@ant-design/cssinjs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-2.1.0.tgz", + "integrity": "sha512-eZFrPCnrYrF3XtL7qA4L75P0qA3TtZta8H3Yggy7UYFh8gZgu5bSMNF+v4UVCzGxzYmx8ZvPdgOce0BJ6PsW9g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "stylis": "^4.3.4" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-2.1.1.tgz", + "integrity": "sha512-RKxkj5pGFB+FkPJ5NGhoX3DK3xsv0pMltha7Ei1AnY3tILeq38L7tuhaWDPQI/5nlPxOog44wvqpNyyGcUsNMg==", + "license": "MIT", + "dependencies": { + "@ant-design/cssinjs": "^2.1.0", + "@babel/runtime": "^7.23.2", + "@rc-component/util": "^1.4.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-3.0.1.tgz", + "integrity": "sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==", + "license": "MIT", + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-6.1.0.tgz", + "integrity": "sha512-KrWMu1fIg3w/1F2zfn+JlfNDU8dDqILfA5Tg85iqs1lf8ooyGlbkA+TkwfOKKgqpUmAiRY1PTFpuOU2DAIgSUg==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^8.0.0", + "@ant-design/icons-svg": "^4.4.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==", + "license": "MIT" + }, + "node_modules/@ant-design/react-slick": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-2.0.0.tgz", + "integrity": "sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "clsx": "^2.1.1", + "json2mq": "^0.2.0", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rc-component/async-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.1.0.tgz", + "integrity": "sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@rc-component/cascader": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@rc-component/cascader/-/cascader-1.14.0.tgz", + "integrity": "sha512-Ip9356xwZUR2nbW5PRVGif4B/bDve4pLa/N+PGbvBaTnjbvmN4PFMBGQSmlDlzKP1ovxaYMvwF/dI9lXNLT4iQ==", + "license": "MIT", + "dependencies": { + "@rc-component/select": "~1.6.0", + "@rc-component/tree": "~1.2.0", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/checkbox": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/checkbox/-/checkbox-2.0.0.tgz", + "integrity": "sha512-3CXGPpAR9gsPKeO2N78HAPOzU30UdemD6HGJoWVJOpa6WleaGB5kzZj3v6bdTZab31YuWgY/RxV3VKPctn0DwQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/collapse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/collapse/-/collapse-1.2.0.tgz", + "integrity": "sha512-ZRYSKSS39qsFx93p26bde7JUZJshsUBEQRlRXPuJYlAiNX0vyYlF5TsAm8JZN3LcF8XvKikdzPbgAtXSbkLUkw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-3.1.0.tgz", + "integrity": "sha512-o7Vavj7yyfVxFmeynXf0fCHVlC0UTE9al74c6nYuLck+gjuVdQNWSVXR8Efq/mmWFy7891SCOsfaPq6Eqe1s/g==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/context": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/context/-/context-2.0.1.tgz", + "integrity": "sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/dialog": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/@rc-component/dialog/-/dialog-1.8.4.tgz", + "integrity": "sha512-Ay6PM7phkTkquplG8fWfUGFZ2GTLx9diTl4f0d8Eqxd7W1u1KjE9AQooFQHOHnhZf0Ya3z51+5EKCWHmt/dNEw==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.3", + "@rc-component/portal": "^2.1.0", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/drawer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@rc-component/drawer/-/drawer-1.4.2.tgz", + "integrity": "sha512-1ib+fZEp6FBu+YvcIktm+nCQ+Q+qIpwpoaJH6opGr4ofh2QMq+qdr5DLC4oCf5qf3pcWX9lUWPYX652k4ini8Q==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/portal": "^2.1.3", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/dropdown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/dropdown/-/dropdown-1.0.2.tgz", + "integrity": "sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==", + "license": "MIT", + "dependencies": { + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/@rc-component/form": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@rc-component/form/-/form-1.6.2.tgz", + "integrity": "sha512-OgIn2RAoaSBqaIgzJf/X6iflIa9LpTozci1lagLBdURDFhGA370v0+T0tXxOi8YShMjTha531sFhwtnrv+EJaQ==", + "license": "MIT", + "dependencies": { + "@rc-component/async-validator": "^5.1.0", + "@rc-component/util": "^1.6.2", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/image": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@rc-component/image/-/image-1.6.0.tgz", + "integrity": "sha512-tSfn2ZE/oP082g4QIOxeehkmgnXB7R+5AFj/lIFr4k7pEuxHBdyGIq9axoCY9qea8NN0DY6p4IB/F07tLqaT5A==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.0.0", + "@rc-component/portal": "^2.1.2", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/input": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/input/-/input-1.1.2.tgz", + "integrity": "sha512-Q61IMR47piUBudgixJ30CciKIy9b1H95qe7GgEKOmSJVJXvFRWJllJfQry9tif+MX2cWFXWJf/RXz4kaCeq/Fg==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@rc-component/input-number": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@rc-component/input-number/-/input-number-1.6.2.tgz", + "integrity": "sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==", + "license": "MIT", + "dependencies": { + "@rc-component/mini-decimal": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mentions": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@rc-component/mentions/-/mentions-1.6.0.tgz", + "integrity": "sha512-KIkQNP6habNuTsLhUv0UGEOwG67tlmE7KNIJoQZZNggEZl5lQJTytFDb69sl5CK3TDdISCTjKP3nGEBKgT61CQ==", + "license": "MIT", + "dependencies": { + "@rc-component/input": "~1.1.0", + "@rc-component/menu": "~1.2.0", + "@rc-component/textarea": "~1.1.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/menu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/menu/-/menu-1.2.0.tgz", + "integrity": "sha512-VWwDuhvYHSnTGj4n6bV3ISrLACcPAzdPOq3d0BzkeiM5cve8BEYfvkEhNoM0PLzv51jpcejeyrLXeMVIJ+QJlg==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/overflow": "^1.0.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz", + "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@rc-component/motion": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@rc-component/motion/-/motion-1.1.6.tgz", + "integrity": "sha512-aEQobs/YA0kqRvHIPjQvOytdtdRVyhf/uXAal4chBjxDu6odHckExJzjn2D+Ju1aKK6hx3pAs6BXdV9+86xkgQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mutate-observer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/mutate-observer/-/mutate-observer-2.0.1.tgz", + "integrity": "sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/notification": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/notification/-/notification-1.2.0.tgz", + "integrity": "sha512-OX3J+zVU7rvoJCikjrfW7qOUp7zlDeFBK2eA3SFbGSkDqo63Sl4Ss8A04kFP+fxHSxMDIS9jYVEZtU1FNCFuBA==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/overflow": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/overflow/-/overflow-1.0.0.tgz", + "integrity": "sha512-GSlBeoE0XTBi5cf3zl8Qh7Uqhn7v8RrlJ8ajeVpEkNe94HWy5l5BQ0Mwn2TVUq9gdgbfEMUmTX7tJFAg7mz0Rw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@rc-component/resize-observer": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/pagination": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/pagination/-/pagination-1.2.0.tgz", + "integrity": "sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/picker": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/picker/-/picker-1.9.0.tgz", + "integrity": "sha512-OLisdk8AWVCG9goBU1dWzuH5QlBQk8jktmQ6p0/IyBFwdKGwyIZOSjnBYo8hooHiTdl0lU+wGf/OfMtVBw02KQ==", + "license": "MIT", + "dependencies": { + "@rc-component/overflow": "^1.0.0", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/trigger": "^3.6.15", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=12.x" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/@rc-component/portal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-2.2.0.tgz", + "integrity": "sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=12.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/progress": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/progress/-/progress-1.0.2.tgz", + "integrity": "sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/qrcode": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.1.1.tgz", + "integrity": "sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/rate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/rate/-/rate-1.0.1.tgz", + "integrity": "sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/resize-observer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rc-component/resize-observer/-/resize-observer-1.1.1.tgz", + "integrity": "sha512-NfXXMmiR+SmUuKE1NwJESzEUYUFWIDUn2uXpxCTOLwiRUUakd62DRNFjRJArgzyFW8S5rsL4aX5XlyIXyC/vRA==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/segmented": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@rc-component/segmented/-/segmented-1.3.0.tgz", + "integrity": "sha512-5J/bJ01mbDnoA6P/FW8SxUvKn+OgUSTZJPzCNnTBntG50tzoP7DydGhqxp7ggZXZls7me3mc2EQDXakU3iTVFg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@rc-component/select": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@rc-component/select/-/select-1.6.5.tgz", + "integrity": "sha512-Cx+/OYEorXlPQ6ZFDro3HbalPZLlJWagvGtl8DGYO4losXM6gw43qbsxWqU1c3XOQVIOUDBlr7dSksSNMj8kXg==", + "license": "MIT", + "dependencies": { + "@rc-component/overflow": "^1.0.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/slider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/slider/-/slider-1.0.1.tgz", + "integrity": "sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/steps": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@rc-component/steps/-/steps-1.2.2.tgz", + "integrity": "sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/switch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rc-component/switch/-/switch-1.0.3.tgz", + "integrity": "sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/table": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@rc-component/table/-/table-1.9.1.tgz", + "integrity": "sha512-FVI5ZS/GdB3BcgexfCYKi3iHhZS3Fr59EtsxORszYGrfpH1eWr33eDNSYkVfLI6tfJ7vftJDd9D5apfFWqkdJg==", + "license": "MIT", + "dependencies": { + "@rc-component/context": "^2.0.1", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.1.0", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/tabs": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@rc-component/tabs/-/tabs-1.7.0.tgz", + "integrity": "sha512-J48cs2iBi7Ho3nptBxxIqizEliUC+ExE23faspUQKGQ550vaBlv3aGF8Epv/UB1vFWeoJDTW/dNzgIU0Qj5i/w==", + "license": "MIT", + "dependencies": { + "@rc-component/dropdown": "~1.0.0", + "@rc-component/menu": "~1.2.0", + "@rc-component/motion": "^1.1.3", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/textarea": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/textarea/-/textarea-1.1.2.tgz", + "integrity": "sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==", + "license": "MIT", + "dependencies": { + "@rc-component/input": "~1.1.0", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tooltip": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rc-component/tooltip/-/tooltip-1.4.0.tgz", + "integrity": "sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==", + "license": "MIT", + "dependencies": { + "@rc-component/trigger": "^3.7.1", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-2.3.0.tgz", + "integrity": "sha512-K04K9r32kUC+auBSQfr+Fss4SpSIS9JGe56oq/ALAX0p+i2ylYOI1MgR83yBY7v96eO6ZFXcM/igCQmubps0Ow==", + "license": "MIT", + "dependencies": { + "@rc-component/portal": "^2.2.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.7.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tree": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rc-component/tree/-/tree-1.2.3.tgz", + "integrity": "sha512-mG8hF2ogQcKaEpfyxzPvMWqqkptofd7Sf+YiXOpPzuXLTLwNKfLDJtysc1/oybopbnzxNqWh2Vgwi+GYwNIb7w==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.0.0", + "@rc-component/util": "^1.8.1", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/tree-select": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@rc-component/tree-select/-/tree-select-1.8.0.tgz", + "integrity": "sha512-iYsPq3nuLYvGqdvFAW+l+I9ASRIOVbMXyA8FGZg2lGym/GwkaWeJGzI4eJ7c9IOEhRj0oyfIN4S92Fl3J05mjQ==", + "license": "MIT", + "dependencies": { + "@rc-component/select": "~1.6.0", + "@rc-component/tree": "~1.2.0", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/trigger": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-3.9.0.tgz", + "integrity": "sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/portal": "^2.2.0", + "@rc-component/resize-observer": "^1.1.1", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/upload": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/upload/-/upload-1.1.0.tgz", + "integrity": "sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/util/-/util-1.9.0.tgz", + "integrity": "sha512-5uW6AfhIigCWeEQDthTozlxiT4Prn6xYQWeO0xokjcaa186OtwPRHBZJ2o0T0FhbjGhZ3vXdbkv0sx3gAYW7Vg==", + "license": "MIT", + "dependencies": { + "is-mobile": "^5.0.0", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/virtual-list": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/virtual-list/-/virtual-list-1.0.2.tgz", + "integrity": "sha512-uvTol/mH74FYsn5loDGJxo+7kjkO4i+y4j87Re1pxJBs0FaeuMuLRzQRGaXwnMcV1CxpZLi2Z56Rerj2M00fjQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.0", + "@rc-component/resize-observer": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.13.tgz", + "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", + "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz", + "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/type-utils": "8.55.0", + "@typescript-eslint/utils": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.55.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz", + "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz", + "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.55.0", + "@typescript-eslint/types": "^8.55.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz", + "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz", + "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz", + "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz", + "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz", + "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.55.0", + "@typescript-eslint/tsconfig-utils": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz", + "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz", + "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.55.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz", + "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antd": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/antd/-/antd-6.3.0.tgz", + "integrity": "sha512-bbHJcASrRHp02wTpr940KtUHlTT6tvmaD4OAjqgOJXNmTQ/+qBDdBVWY/yeDV41p/WbWjTLlaqRGVbL3UEVpNw==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^8.0.1", + "@ant-design/cssinjs": "^2.1.0", + "@ant-design/cssinjs-utils": "^2.1.1", + "@ant-design/fast-color": "^3.0.1", + "@ant-design/icons": "^6.1.0", + "@ant-design/react-slick": "~2.0.0", + "@babel/runtime": "^7.28.4", + "@rc-component/cascader": "~1.14.0", + "@rc-component/checkbox": "~2.0.0", + "@rc-component/collapse": "~1.2.0", + "@rc-component/color-picker": "~3.1.0", + "@rc-component/dialog": "~1.8.4", + "@rc-component/drawer": "~1.4.2", + "@rc-component/dropdown": "~1.0.2", + "@rc-component/form": "~1.6.2", + "@rc-component/image": "~1.6.0", + "@rc-component/input": "~1.1.2", + "@rc-component/input-number": "~1.6.2", + "@rc-component/mentions": "~1.6.0", + "@rc-component/menu": "~1.2.0", + "@rc-component/motion": "~1.1.6", + "@rc-component/mutate-observer": "^2.0.1", + "@rc-component/notification": "~1.2.0", + "@rc-component/pagination": "~1.2.0", + "@rc-component/picker": "~1.9.0", + "@rc-component/progress": "~1.0.2", + "@rc-component/qrcode": "~1.1.1", + "@rc-component/rate": "~1.0.1", + "@rc-component/resize-observer": "^1.1.1", + "@rc-component/segmented": "~1.3.0", + "@rc-component/select": "~1.6.5", + "@rc-component/slider": "~1.0.1", + "@rc-component/steps": "~1.2.2", + "@rc-component/switch": "~1.0.3", + "@rc-component/table": "~1.9.1", + "@rc-component/tabs": "~1.7.0", + "@rc-component/textarea": "~1.1.2", + "@rc-component/tooltip": "~1.4.0", + "@rc-component/tour": "~2.3.0", + "@rc-component/tree": "~1.2.3", + "@rc-component/tree-select": "~1.8.0", + "@rc-component/trigger": "^3.9.0", + "@rc-component/upload": "~1.1.0", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1", + "dayjs": "^1.11.11", + "scroll-into-view-if-needed": "^3.1.0", + "throttle-debounce": "^5.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.24", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001766", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-mobile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-5.0.0.tgz", + "integrity": "sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", + "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz", + "integrity": "sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==", + "license": "MIT", + "dependencies": { + "react-router": "7.13.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.55.0.tgz", + "integrity": "sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.55.0", + "@typescript-eslint/parser": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/src/problem5/frontend/package.json b/src/problem5/frontend/package.json new file mode 100644 index 000000000..21c3e2a59 --- /dev/null +++ b/src/problem5/frontend/package.json @@ -0,0 +1,39 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "antd": "^6.3.0", + "axios": "^1.13.5", + "clsx": "^2.1.1", + "lucide-react": "^0.563.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.13.0", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.24", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.1", + "typescript": "~5.9.3", + "typescript-eslint": "^8.48.0", + "vite": "^7.3.1" + } +} diff --git a/src/problem5/frontend/postcss.config.js b/src/problem5/frontend/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/src/problem5/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/problem5/frontend/public/vite.svg b/src/problem5/frontend/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/src/problem5/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem5/frontend/src/App.css b/src/problem5/frontend/src/App.css new file mode 100644 index 000000000..b9d355df2 --- /dev/null +++ b/src/problem5/frontend/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/src/problem5/frontend/src/App.tsx b/src/problem5/frontend/src/App.tsx new file mode 100644 index 000000000..9396d574e --- /dev/null +++ b/src/problem5/frontend/src/App.tsx @@ -0,0 +1,45 @@ +import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; +import { ResourceList } from './pages/ResourceList'; +import { ConfigProvider, theme } from 'antd'; + +const App = () => { + return ( + + + + } /> + } /> + } /> + + + + ); +}; + +export default App; diff --git a/src/problem5/frontend/src/assets/react.svg b/src/problem5/frontend/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/src/problem5/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/problem5/frontend/src/components/layout/Layout.tsx b/src/problem5/frontend/src/components/layout/Layout.tsx new file mode 100644 index 000000000..0924f9665 --- /dev/null +++ b/src/problem5/frontend/src/components/layout/Layout.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Sidebar } from './Sidebar'; + +interface LayoutProps { + children: React.ReactNode; +} + +export const Layout: React.FC = ({ children }) => { + return ( +
+ +
+
+
+ {children} +
+
+
+
+ ); +}; diff --git a/src/problem5/frontend/src/components/layout/Sidebar.tsx b/src/problem5/frontend/src/components/layout/Sidebar.tsx new file mode 100644 index 000000000..1310a60fb --- /dev/null +++ b/src/problem5/frontend/src/components/layout/Sidebar.tsx @@ -0,0 +1,82 @@ +import { useState } from 'react'; +import { Menu, X, LogOut, Package } from 'lucide-react'; +import { cn } from '../../utils/cn'; +import { Link, useLocation } from 'react-router-dom'; + +export const Sidebar = () => { + const [isOpen, setIsOpen] = useState(false); + const location = useLocation(); + + const menuItems = [ + // { icon: LayoutDashboard, label: 'Dashboard', path: '/' }, + { icon: Package, label: 'Resources', path: '/resources' }, + // { icon: Settings, label: 'Settings', path: '/settings' }, + ]; + + const toggleSidebar = () => setIsOpen(!isOpen); + + return ( + <> + {/* Mobile Menu Button */} + + + {/* Overlay */} + {isOpen && ( +
setIsOpen(false)} + /> + )} + + {/* Sidebar */} + + + ); +}; diff --git a/src/problem5/frontend/src/components/ui/Button.tsx b/src/problem5/frontend/src/components/ui/Button.tsx new file mode 100644 index 000000000..80018a12d --- /dev/null +++ b/src/problem5/frontend/src/components/ui/Button.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { cn } from '../../utils/cn'; +import { Loader2 } from 'lucide-react'; + +interface ButtonProps extends React.ButtonHTMLAttributes { + variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'; + size?: 'sm' | 'md' | 'lg' | 'icon'; + isLoading?: boolean; +} + +export const Button: React.FC = ({ + className, + variant = 'primary', + size = 'md', + isLoading, + children, + disabled, + ...props +}) => { + const variants = { + primary: 'bg-primary text-background hover:bg-primary-hover border-none shadow-lg shadow-primary/20', + secondary: 'bg-background-secondary text-text-primary hover:bg-background-tertiary border border-gray-700', + outline: 'bg-transparent border-2 border-primary text-primary hover:bg-primary-dim', + ghost: 'bg-transparent text-text-secondary hover:text-text-primary hover:bg-white/5', + danger: 'bg-status-danger/10 text-status-danger hover:bg-status-danger/20 border border-status-danger/20', + }; + + const sizes = { + sm: 'h-8 px-3 text-xs', + md: 'h-10 px-4 text-sm', + lg: 'h-12 px-6 text-base', + icon: 'h-10 w-10 p-0 flex items-center justify-center', + }; + + return ( + + ); +}; diff --git a/src/problem5/frontend/src/components/ui/Input.tsx b/src/problem5/frontend/src/components/ui/Input.tsx new file mode 100644 index 000000000..62d65c0c0 --- /dev/null +++ b/src/problem5/frontend/src/components/ui/Input.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { cn } from '../../utils/cn'; + +interface InputProps extends React.InputHTMLAttributes { + label?: string; + error?: string; + leftIcon?: React.ReactNode; + rightIcon?: React.ReactNode; +} + +export const Input: React.FC = ({ + className, + label, + error, + leftIcon, + rightIcon, + id, + ...props +}) => { + return ( +
+ {label && ( + + )} +
+ {leftIcon && ( +
+ {leftIcon} +
+ )} + + {rightIcon && ( +
+ {rightIcon} +
+ )} +
+ {error && ( +

{error}

+ )} +
+ ); +}; diff --git a/src/problem5/frontend/src/index.css b/src/problem5/frontend/src/index.css new file mode 100644 index 000000000..5222bbbb9 --- /dev/null +++ b/src/problem5/frontend/src/index.css @@ -0,0 +1,84 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + body { + @apply bg-background text-text-primary antialiased; + } +} + +@layer utilities { + .custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; + } + + .custom-scrollbar::-webkit-scrollbar-track { + @apply bg-transparent; + } + + .custom-scrollbar::-webkit-scrollbar-thumb { + @apply bg-gray-600 rounded-full hover:bg-gray-500; + } + + /* Hide scrollbar for Chrome, Safari and Opera */ + .no-scrollbar::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + .no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + } +} + +/* Ant Design Dark Theme Overrides */ +.ant-modal-content { + @apply !bg-background-secondary !text-text-primary !border !border-gray-800 !rounded-2xl; +} + +.ant-modal-header { + @apply !bg-background-secondary !border-b !border-gray-800 !mb-4; +} + +.ant-modal-title { + @apply !text-text-primary !text-xl !font-bold; +} + +.ant-modal-close { + @apply !text-text-secondary hover:!text-text-primary; +} + +.ant-form-item-label > label { + @apply !text-text-secondary; +} + +.ant-input, .ant-input-password, .ant-input-number, .ant-select-selector { + @apply !bg-background !border-gray-700 !text-text-primary placeholder:!text-gray-600; +} + +.ant-input:hover, .ant-input:focus, .ant-select-selector:hover, .ant-select-selector:focus { + @apply !border-primary; +} + +.ant-select-arrow { + @apply !text-text-secondary; +} + +.ant-select-dropdown { + @apply !bg-background-secondary !border !border-gray-700; +} + +.ant-select-item { + @apply !text-text-primary; +} + +.ant-select-item-option-selected { + @apply !bg-background-tertiary !text-primary; +} + +.ant-select-item-option-active { + @apply !bg-background-tertiary; +} diff --git a/src/problem5/frontend/src/main.tsx b/src/problem5/frontend/src/main.tsx new file mode 100644 index 000000000..ef1e1da5e --- /dev/null +++ b/src/problem5/frontend/src/main.tsx @@ -0,0 +1,11 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import 'antd/dist/reset.css' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/problem5/frontend/src/pages/ResourceList.tsx b/src/problem5/frontend/src/pages/ResourceList.tsx new file mode 100644 index 000000000..c0453b78c --- /dev/null +++ b/src/problem5/frontend/src/pages/ResourceList.tsx @@ -0,0 +1,261 @@ +import { useEffect, useState } from 'react'; +import { Layout } from '../components/layout/Layout'; +import { Button } from '../components/ui/Button'; +import { Input } from '../components/ui/Input'; +import type { Resource, CreateResourceDTO } from '../services/api'; +import { resourceService } from '../services/api'; +import { Plus, Search, Edit2, Trash2} from 'lucide-react'; +import { Modal, Form, Select, Input as AntInput, message, Popconfirm, Tag } from 'antd'; + +const { Option } = Select; + +export const ResourceList = () => { + const [resources, setResources] = useState([]); + const [loading, setLoading] = useState(false); + const [search, setSearch] = useState(''); + const [statusFilter, setStatusFilter] = useState(undefined); + + // Modal State + const [isModalOpen, setIsModalOpen] = useState(false); + const [editingId, setEditingId] = useState(null); + const [form] = Form.useForm(); + const [submitting, setSubmitting] = useState(false); + + const fetchResources = async () => { + setLoading(true); + try { + const data = await resourceService.getAll({ name: search, status: statusFilter }); + setResources(data); + } catch (error) { + message.error('Failed to fetch resources'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + const timer = setTimeout(() => { + fetchResources(); + }, 300); // Debounce search + return () => clearTimeout(timer); + }, [search, statusFilter]); + + const handleCreate = () => { + setEditingId(null); + form.resetFields(); + setIsModalOpen(true); + }; + + const handleEdit = (resource: Resource) => { + setEditingId(resource.id); + form.setFieldsValue(resource); + setIsModalOpen(true); + }; + + const handleDelete = async (id: number) => { + try { + await resourceService.delete(id); + message.success('Resource deleted successfully'); + fetchResources(); + } catch (error) { + message.error('Failed to delete resource'); + } + }; + + const handleSubmit = async (values: CreateResourceDTO) => { + setSubmitting(true); + try { + if (editingId) { + await resourceService.update(editingId, values); + message.success('Resource updated successfully'); + } else { + await resourceService.create(values); + message.success('Resource created successfully'); + } + setIsModalOpen(false); + fetchResources(); + } catch (error) { + message.error('Operation failed'); + } finally { + setSubmitting(false); + } + }; + + return ( + +
+
+

Resources

+

Manage your system resources efficiently.

+
+ +
+ + {/* Filters */} +
+
+ setSearch(e.target.value)} + leftIcon={} + /> +
+
+ +
+
+ + {/* Grid View */} + {loading ? ( +
+ {[1, 2, 3, 4, 5, 6].map((i) => ( +
+ ))} +
+ ) : resources.length === 0 ? ( +
+
+ +
+

No Resources Found

+

+ Try adjusting your search or filters, or create a new resource. +

+
+ ) : ( +
+ {resources.map((resource) => ( +
+
+ + handleDelete(resource.id)} + okText="Yes" + cancelText="No" + okButtonProps={{ className: 'bg-status-danger' }} + > + + +
+ +
+
+ + {resource.name.charAt(0).toUpperCase()} + +
+ + {resource.status.toUpperCase()} + +
+ +

+ {resource.name} +

+ +

+ {resource.description || 'No description provided.'} +

+ +
+ ID: #{resource.id} + {new Date(resource.updatedAt).toLocaleDateString()} +
+
+ ))} +
+ )} + + {/* Create/Edit Modal */} + setIsModalOpen(false)} + footer={null} + centered + width={500} + > +
+ + + + + + + + + + + + +
+ + +
+
+
+ + ); +}; diff --git a/src/problem5/frontend/src/services/api.ts b/src/problem5/frontend/src/services/api.ts new file mode 100644 index 000000000..3a570c434 --- /dev/null +++ b/src/problem5/frontend/src/services/api.ts @@ -0,0 +1,41 @@ +import axios from 'axios'; + +const API_URL = 'http://localhost:3000/api/resources'; + +export interface Resource { + id: number; + name: string; + description?: string; + status: 'active' | 'inactive'; + createdAt: string; + updatedAt: string; +} + +export type CreateResourceDTO = Omit; +export type UpdateResourceDTO = Partial; + +export const resourceService = { + getAll: async (params?: { status?: string; name?: string }) => { + const response = await axios.get<{ status: string; data: Resource[] }>(API_URL, { params }); + return response.data.data; + }, + + getById: async (id: number) => { + const response = await axios.get<{ status: string; data: Resource }>(`${API_URL}/${id}`); + return response.data.data; + }, + + create: async (data: CreateResourceDTO) => { + const response = await axios.post<{ status: string; data: Resource }>(API_URL, data); + return response.data.data; + }, + + update: async (id: number, data: UpdateResourceDTO) => { + const response = await axios.patch<{ status: string; data: Resource }>(`${API_URL}/${id}`, data); + return response.data.data; + }, + + delete: async (id: number) => { + await axios.delete(`${API_URL}/${id}`); + }, +}; diff --git a/src/problem5/frontend/src/utils/cn.ts b/src/problem5/frontend/src/utils/cn.ts new file mode 100644 index 000000000..2819a830d --- /dev/null +++ b/src/problem5/frontend/src/utils/cn.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/src/problem5/frontend/tailwind.config.cjs b/src/problem5/frontend/tailwind.config.cjs new file mode 100644 index 000000000..d48413db3 --- /dev/null +++ b/src/problem5/frontend/tailwind.config.cjs @@ -0,0 +1,51 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + colors: { + primary: { + DEFAULT: '#FCD535', + hover: '#F0B90B', + dim: 'rgba(252, 213, 53, 0.1)' + }, + background: { + DEFAULT: '#1E2329', + secondary: '#2B3139', + tertiary: '#474D57' + }, + text: { + primary: '#EAECEF', + secondary: '#848E9C', + tertiary: '#5E6673' + }, + status: { + success: '#0ECB81', + danger: '#F6465D', + warning: '#F0B90B' + } + }, + fontFamily: { + sans: ['Inter', 'Roboto', 'sans-serif'], + }, + animation: { + 'fade-in': 'fadeIn 0.2s ease-in-out', + 'slide-up': 'slideUp 0.3s ease-out', + }, + keyframes: { + fadeIn: { + '0%': { opacity: '0' }, + '100%': { opacity: '1' }, + }, + slideUp: { + '0%': { transform: 'translateY(10px)', opacity: '0' }, + '100%': { transform: 'translateY(0)', opacity: '1' }, + } + } + }, + }, + plugins: [], +} diff --git a/src/problem5/frontend/tsconfig.app.json b/src/problem5/frontend/tsconfig.app.json new file mode 100644 index 000000000..a9b5a59ca --- /dev/null +++ b/src/problem5/frontend/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/src/problem5/frontend/tsconfig.json b/src/problem5/frontend/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/src/problem5/frontend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/src/problem5/frontend/tsconfig.node.json b/src/problem5/frontend/tsconfig.node.json new file mode 100644 index 000000000..8a67f62f4 --- /dev/null +++ b/src/problem5/frontend/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/src/problem5/frontend/vite.config.ts b/src/problem5/frontend/vite.config.ts new file mode 100644 index 000000000..8b0f57b91 --- /dev/null +++ b/src/problem5/frontend/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From 04aa64341a710c497da679d4e01a53b4cfd1b0b1 Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Wed, 11 Feb 2026 14:15:10 +0700 Subject: [PATCH 09/17] update pagination --- .../dist/controllers/resourceController.js | 6 ++-- .../dist/repositories/resourceRepository.js | 7 +++-- src/problem5/dist/services/resourceService.js | 10 +++++-- .../frontend/src/pages/ResourceList.tsx | 28 ++++++++++++++++--- src/problem5/frontend/src/services/api.ts | 12 ++++++-- .../src/controllers/resourceController.ts | 10 ++++--- .../src/repositories/resourceRepository.ts | 8 ++++-- src/problem5/src/services/resourceService.ts | 12 ++++++-- 8 files changed, 70 insertions(+), 23 deletions(-) diff --git a/src/problem5/dist/controllers/resourceController.js b/src/problem5/dist/controllers/resourceController.js index 8887d6b75..98ce2fcf4 100644 --- a/src/problem5/dist/controllers/resourceController.js +++ b/src/problem5/dist/controllers/resourceController.js @@ -10,9 +10,9 @@ const createResource = async (req, res) => { }; exports.createResource = createResource; const getResources = async (req, res) => { - const { status, name } = req.query; - const resources = await resourceService.getResources(status, name); - res.status(http_status_codes_1.StatusCodes.OK).json({ status: 'success', data: resources }); + const { status, name, page, limit } = req.query; + const result = await resourceService.getResources(status, name, page ? parseInt(page) : undefined, limit ? parseInt(limit) : undefined); + res.status(http_status_codes_1.StatusCodes.OK).json({ status: 'success', data: result.items, meta: result.meta }); }; exports.getResources = getResources; const getResource = async (req, res) => { diff --git a/src/problem5/dist/repositories/resourceRepository.js b/src/problem5/dist/repositories/resourceRepository.js index 8c39a71fd..8e7a9d47e 100644 --- a/src/problem5/dist/repositories/resourceRepository.js +++ b/src/problem5/dist/repositories/resourceRepository.js @@ -9,8 +9,11 @@ class ResourceRepository { async create(data) { return prisma_1.default.resource.create({ data }); } - async findAll(filter) { - return prisma_1.default.resource.findMany({ where: filter }); + async findAll(filter, skip, take) { + return prisma_1.default.resource.findMany({ where: filter, skip, take, orderBy: { updatedAt: 'desc' } }); + } + async count(filter) { + return prisma_1.default.resource.count({ where: filter }); } async findById(id) { return prisma_1.default.resource.findUnique({ where: { id } }); diff --git a/src/problem5/dist/services/resourceService.js b/src/problem5/dist/services/resourceService.js index fb252e746..41fd54260 100644 --- a/src/problem5/dist/services/resourceService.js +++ b/src/problem5/dist/services/resourceService.js @@ -11,13 +11,19 @@ class ResourceService { async createResource(data) { return this.resourceRepository.create(data); } - async getResources(status, name) { + async getResources(status, name, page = 1, limit = 10) { const filter = {}; if (status) filter.status = status; if (name) filter.name = { contains: name }; - return this.resourceRepository.findAll(filter); + const skip = (page - 1) * limit; + const [items, total] = await Promise.all([ + this.resourceRepository.findAll(filter, skip, limit), + this.resourceRepository.count(filter), + ]); + const totalPages = Math.max(1, Math.ceil(total / limit)); + return { items, meta: { page, limit, total, totalPages } }; } async getResourceById(id) { const resource = await this.resourceRepository.findById(id); diff --git a/src/problem5/frontend/src/pages/ResourceList.tsx b/src/problem5/frontend/src/pages/ResourceList.tsx index c0453b78c..338828f35 100644 --- a/src/problem5/frontend/src/pages/ResourceList.tsx +++ b/src/problem5/frontend/src/pages/ResourceList.tsx @@ -5,7 +5,7 @@ import { Input } from '../components/ui/Input'; import type { Resource, CreateResourceDTO } from '../services/api'; import { resourceService } from '../services/api'; import { Plus, Search, Edit2, Trash2} from 'lucide-react'; -import { Modal, Form, Select, Input as AntInput, message, Popconfirm, Tag } from 'antd'; +import { Modal, Form, Select, Input as AntInput, message, Popconfirm, Tag, Pagination } from 'antd'; const { Option } = Select; @@ -14,6 +14,9 @@ export const ResourceList = () => { const [loading, setLoading] = useState(false); const [search, setSearch] = useState(''); const [statusFilter, setStatusFilter] = useState(undefined); + const [page, setPage] = useState(1); + const [pageSize, setPageSize] = useState(9); + const [total, setTotal] = useState(0); // Modal State const [isModalOpen, setIsModalOpen] = useState(false); @@ -24,10 +27,11 @@ export const ResourceList = () => { const fetchResources = async () => { setLoading(true); try { - const data = await resourceService.getAll({ name: search, status: statusFilter }); - setResources(data); + const result = await resourceService.getAll({ name: search, status: statusFilter, page, limit: pageSize }); + setResources(result.data); + setTotal(result.meta.total); } catch (error) { - message.error('Failed to fetch resources'); + // message.error('Failed to fetch resources'); } finally { setLoading(false); } @@ -38,6 +42,10 @@ export const ResourceList = () => { fetchResources(); }, 300); // Debounce search return () => clearTimeout(timer); + }, [search, statusFilter, page, pageSize]); + + useEffect(() => { + setPage(1); }, [search, statusFilter]); const handleCreate = () => { @@ -256,6 +264,18 @@ export const ResourceList = () => {
+
+ { + setPage(p); + setPageSize(ps); + }} + /> +
); }; diff --git a/src/problem5/frontend/src/services/api.ts b/src/problem5/frontend/src/services/api.ts index 3a570c434..96c1c896e 100644 --- a/src/problem5/frontend/src/services/api.ts +++ b/src/problem5/frontend/src/services/api.ts @@ -13,11 +13,17 @@ export interface Resource { export type CreateResourceDTO = Omit; export type UpdateResourceDTO = Partial; +export interface PaginationMeta { + page: number; + limit: number; + total: number; + totalPages: number; +} export const resourceService = { - getAll: async (params?: { status?: string; name?: string }) => { - const response = await axios.get<{ status: string; data: Resource[] }>(API_URL, { params }); - return response.data.data; + getAll: async (params?: { status?: string; name?: string; page?: number; limit?: number }) => { + const response = await axios.get<{ status: string; data: Resource[]; meta: PaginationMeta }>(API_URL, { params }); + return response.data; }, getById: async (id: number) => { diff --git a/src/problem5/src/controllers/resourceController.ts b/src/problem5/src/controllers/resourceController.ts index d801c2bef..07341c3dc 100644 --- a/src/problem5/src/controllers/resourceController.ts +++ b/src/problem5/src/controllers/resourceController.ts @@ -10,12 +10,14 @@ export const createResource = async (req: Request, res: Response) => { }; export const getResources = async (req: Request, res: Response) => { - const { status, name } = req.query; - const resources = await resourceService.getResources( + const { status, name, page, limit } = req.query; + const result = await resourceService.getResources( status as string, - name as string + name as string, + page ? parseInt(page as string) : undefined, + limit ? parseInt(limit as string) : undefined ); - res.status(StatusCodes.OK).json({ status: 'success', data: resources }); + res.status(StatusCodes.OK).json({ status: 'success', data: result.items, meta: result.meta }); }; export const getResource = async (req: Request, res: Response) => { diff --git a/src/problem5/src/repositories/resourceRepository.ts b/src/problem5/src/repositories/resourceRepository.ts index 8f6aa3d42..30844b245 100644 --- a/src/problem5/src/repositories/resourceRepository.ts +++ b/src/problem5/src/repositories/resourceRepository.ts @@ -6,8 +6,12 @@ export class ResourceRepository { return prisma.resource.create({ data }); } - async findAll(filter: Prisma.ResourceWhereInput): Promise { - return prisma.resource.findMany({ where: filter }); + async findAll(filter: Prisma.ResourceWhereInput, skip?: number, take?: number): Promise { + return prisma.resource.findMany({ where: filter, skip, take, orderBy: { updatedAt: 'desc' } }); + } + + async count(filter: Prisma.ResourceWhereInput): Promise { + return prisma.resource.count({ where: filter }); } async findById(id: number): Promise { diff --git a/src/problem5/src/services/resourceService.ts b/src/problem5/src/services/resourceService.ts index 0a6eea2c6..d4b52b6d8 100644 --- a/src/problem5/src/services/resourceService.ts +++ b/src/problem5/src/services/resourceService.ts @@ -14,11 +14,17 @@ export class ResourceService { return this.resourceRepository.create(data); } - async getResources(status?: string, name?: string): Promise { + async getResources(status?: string, name?: string, page: number = 1, limit: number = 10): Promise<{ items: Resource[]; meta: { page: number; limit: number; total: number; totalPages: number } }> { const filter: any = {}; if (status) filter.status = status; - if (name) filter.name = { contains: name }; - return this.resourceRepository.findAll(filter); + if (name) filter.name = { contains: name }; + const skip = (page - 1) * limit; + const [items, total] = await Promise.all([ + this.resourceRepository.findAll(filter, skip, limit), + this.resourceRepository.count(filter), + ]); + const totalPages = Math.max(1, Math.ceil(total / limit)); + return { items, meta: { page, limit, total, totalPages } }; } async getResourceById(id: number): Promise { From 61599dcf3245d6d4d4977f65f752809fcd69c94e Mon Sep 17 00:00:00 2001 From: ngochieu276 Date: Wed, 11 Feb 2026 14:22:37 +0700 Subject: [PATCH 10/17] resource detail --- src/problem5/frontend/package-lock.json | 27 +++++++ src/problem5/frontend/package.json | 1 + src/problem5/frontend/src/App.tsx | 4 +- src/problem5/frontend/src/main.tsx | 7 +- .../src/pages/resources/ResourceDetail.tsx | 81 +++++++++++++++++++ .../pages/{ => resources}/ResourceList.tsx | 59 +++++++------- 6 files changed, 149 insertions(+), 30 deletions(-) create mode 100644 src/problem5/frontend/src/pages/resources/ResourceDetail.tsx rename src/problem5/frontend/src/pages/{ => resources}/ResourceList.tsx (87%) diff --git a/src/problem5/frontend/package-lock.json b/src/problem5/frontend/package-lock.json index ba662ebf1..73059b628 100644 --- a/src/problem5/frontend/package-lock.json +++ b/src/problem5/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "frontend", "version": "0.0.0", "dependencies": { + "@tanstack/react-query": "^5.90.20", "antd": "^6.3.0", "axios": "^1.13.5", "clsx": "^2.1.1", @@ -2253,6 +2254,32 @@ "win32" ] }, + "node_modules/@tanstack/query-core": { + "version": "5.90.20", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.20.tgz", + "integrity": "sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.90.20", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz", + "integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.90.20" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", diff --git a/src/problem5/frontend/package.json b/src/problem5/frontend/package.json index 21c3e2a59..7d17b30ff 100644 --- a/src/problem5/frontend/package.json +++ b/src/problem5/frontend/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "@tanstack/react-query": "^5.90.20", "antd": "^6.3.0", "axios": "^1.13.5", "clsx": "^2.1.1", diff --git a/src/problem5/frontend/src/App.tsx b/src/problem5/frontend/src/App.tsx index 9396d574e..b8b5dfc7b 100644 --- a/src/problem5/frontend/src/App.tsx +++ b/src/problem5/frontend/src/App.tsx @@ -1,5 +1,6 @@ import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; -import { ResourceList } from './pages/ResourceList'; +import { ResourceList } from './pages/resources/ResourceList'; +import { ResourceDetail } from './pages/resources/ResourceDetail'; import { ConfigProvider, theme } from 'antd'; const App = () => { @@ -35,6 +36,7 @@ const App = () => { } /> } /> + } /> } /> diff --git a/src/problem5/frontend/src/main.tsx b/src/problem5/frontend/src/main.tsx index ef1e1da5e..b26be9d95 100644 --- a/src/problem5/frontend/src/main.tsx +++ b/src/problem5/frontend/src/main.tsx @@ -3,9 +3,14 @@ import { createRoot } from 'react-dom/client' import 'antd/dist/reset.css' import './index.css' import App from './App.tsx' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' + +const queryClient = new QueryClient() createRoot(document.getElementById('root')!).render( - + + + , ) diff --git a/src/problem5/frontend/src/pages/resources/ResourceDetail.tsx b/src/problem5/frontend/src/pages/resources/ResourceDetail.tsx new file mode 100644 index 000000000..90e7af87a --- /dev/null +++ b/src/problem5/frontend/src/pages/resources/ResourceDetail.tsx @@ -0,0 +1,81 @@ +import { useParams, useNavigate } from 'react-router-dom' +import { useQuery } from '@tanstack/react-query' +import { resourceService } from '../../services/api' +import { Layout } from '../../components/layout/Layout' +import { Button } from '../../components/ui/Button' +import { Tag } from 'antd' + +export const ResourceDetail = () => { + const { id } = useParams() + const navigate = useNavigate() + + const { data, isLoading } = useQuery({ + queryKey: ['resource', id], + queryFn: async () => { + const resource = await resourceService.getById(Number(id)) + return resource + }, + enabled: !!id, + }) + + if (isLoading) { + return ( + +
+
+
+
+
+ + ) + } + + if (!data) { + return ( + +
+
+

Resource Not Found

+ +
+

The requested resource does not exist.

+
+
+ ) + } + + return ( + +
+
+

{data.name}

+ +
+
+ + {data.status.toUpperCase()} + + ID: #{data.id} +
+

{data.description || 'No description provided.'}

+
+
+
Created At
+
{new Date(data.createdAt).toLocaleString()}
+
+
+
Updated At
+
{new Date(data.updatedAt).toLocaleString()}
+
+
+
+
+ ) +} diff --git a/src/problem5/frontend/src/pages/ResourceList.tsx b/src/problem5/frontend/src/pages/resources/ResourceList.tsx similarity index 87% rename from src/problem5/frontend/src/pages/ResourceList.tsx rename to src/problem5/frontend/src/pages/resources/ResourceList.tsx index 338828f35..ea2928bbc 100644 --- a/src/problem5/frontend/src/pages/ResourceList.tsx +++ b/src/problem5/frontend/src/pages/resources/ResourceList.tsx @@ -1,17 +1,20 @@ import { useEffect, useState } from 'react'; -import { Layout } from '../components/layout/Layout'; -import { Button } from '../components/ui/Button'; -import { Input } from '../components/ui/Input'; -import type { Resource, CreateResourceDTO } from '../services/api'; -import { resourceService } from '../services/api'; +import { Layout } from '../../components/layout/Layout'; +import { Button } from '../../components/ui/Button'; +import { Input } from '../../components/ui/Input'; +import type { Resource, CreateResourceDTO } from '../../services/api'; +import { resourceService } from '../../services/api'; import { Plus, Search, Edit2, Trash2} from 'lucide-react'; import { Modal, Form, Select, Input as AntInput, message, Popconfirm, Tag, Pagination } from 'antd'; +import { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'; +import { useNavigate } from 'react-router-dom'; const { Option } = Select; export const ResourceList = () => { + const queryClient = useQueryClient(); + const navigate = useNavigate(); const [resources, setResources] = useState([]); - const [loading, setLoading] = useState(false); const [search, setSearch] = useState(''); const [statusFilter, setStatusFilter] = useState(undefined); const [page, setPage] = useState(1); @@ -24,25 +27,23 @@ export const ResourceList = () => { const [form] = Form.useForm(); const [submitting, setSubmitting] = useState(false); - const fetchResources = async () => { - setLoading(true); - try { + const { isLoading } = useQuery({ + queryKey: ['resources', { search, statusFilter, page, pageSize }], + queryFn: async () => { const result = await resourceService.getAll({ name: search, status: statusFilter, page, limit: pageSize }); setResources(result.data); setTotal(result.meta.total); - } catch (error) { - // message.error('Failed to fetch resources'); - } finally { - setLoading(false); - } - }; + return result; + }, + placeholderData: keepPreviousData, + }); useEffect(() => { const timer = setTimeout(() => { - fetchResources(); - }, 300); // Debounce search + queryClient.invalidateQueries({ queryKey: ['resources'] }); + }, 300); return () => clearTimeout(timer); - }, [search, statusFilter, page, pageSize]); + }, [search, statusFilter, page, pageSize, queryClient]); useEffect(() => { setPage(1); @@ -60,15 +61,16 @@ export const ResourceList = () => { setIsModalOpen(true); }; - const handleDelete = async (id: number) => { - try { - await resourceService.delete(id); + const deleteMutation = useMutation({ + mutationFn: (id: number) => resourceService.delete(id), + onSuccess: () => { message.success('Resource deleted successfully'); - fetchResources(); - } catch (error) { + queryClient.invalidateQueries({ queryKey: ['resources'] }); + }, + onError: () => { message.error('Failed to delete resource'); - } - }; + }, + }); const handleSubmit = async (values: CreateResourceDTO) => { setSubmitting(true); @@ -81,7 +83,7 @@ export const ResourceList = () => { message.success('Resource created successfully'); } setIsModalOpen(false); - fetchResources(); + queryClient.invalidateQueries({ queryKey: ['resources'] }); } catch (error) { message.error('Operation failed'); } finally { @@ -127,7 +129,7 @@ export const ResourceList = () => {
{/* Grid View */} - {loading ? ( + {isLoading ? (
{[1, 2, 3, 4, 5, 6].map((i) => (
@@ -149,6 +151,7 @@ export const ResourceList = () => {
navigate(`/resources/${resource.id}`)} >
-
{/* Filters */} @@ -120,19 +127,145 @@ export const ResourceList = () => { allowClear className="w-full h-10" onChange={setStatusFilter} - dropdownStyle={{ backgroundColor: '#2B3139', borderColor: '#374151' }} + dropdownStyle={{ + backgroundColor: "#2B3139", + borderColor: "#374151", + }} >
- - {/* Grid View */} - {isLoading ? ( +
+ + +
+ {/* Table or Grid View */} + {view === "table" ? ( + { + setPage(pagination.current || 1); + setPageSize(pagination.pageSize || 9); + }} + onRow={(record) => ({ + onClick: () => navigate(`/resources/${record.id}`), + })} + columns={[ + { + title: "Name", + dataIndex: "name", + key: "name", + render: (text: string) => ( + {text} + ), + }, + { + title: "Description", + dataIndex: "description", + key: "description", + render: (text: string) => ( + {text || "—"} + ), + }, + { + title: "Status", + dataIndex: "status", + key: "status", + render: (status: string) => ( + + {status.toUpperCase()} + + ), + }, + { + title: "Updated", + dataIndex: "updatedAt", + key: "updatedAt", + render: (value: string) => ( + + {new Date(value).toLocaleDateString()} + + ), + defaultSortOrder: "descend" as any, + }, + { + title: "Actions", + key: "actions", + render: (_: any, record: Resource) => ( +
+ + { + e?.stopPropagation(); + deleteMutation.mutate(record.id); + }} + okText="Yes" + cancelText="No" + okButtonProps={{ className: "bg-status-danger" }} + > + + +
+ ), + }, + ]} + /> + ) : isLoading ? (
{[1, 2, 3, 4, 5, 6].map((i) => ( -
+
))}
) : resources.length === 0 ? ( @@ -140,7 +273,9 @@ export const ResourceList = () => {
-

No Resources Found

+

+ No Resources Found +

Try adjusting your search or filters, or create a new resource.

@@ -148,32 +283,39 @@ export const ResourceList = () => { ) : (
{resources.map((resource) => ( -
navigate(`/resources/${resource.id}`)} > -
- deleteMutation.mutate(resource.id)} + onConfirm={(e) => { + e?.stopPropagation(); + deleteMutation.mutate(resource.id); + }} okText="Yes" cancelText="No" - okButtonProps={{ className: 'bg-status-danger' }} + okButtonProps={{ className: "bg-status-danger" }} > - @@ -186,24 +328,30 @@ export const ResourceList = () => { {resource.name.charAt(0).toUpperCase()}
- {resource.status.toUpperCase()}
-

+

{resource.name}

- +

- {resource.description || 'No description provided.'} + {resource.description || "No description provided."}

@@ -229,27 +377,31 @@ export const ResourceList = () => { layout="vertical" onFinish={handleSubmit} className="mt-6" - initialValues={{ status: 'active' }} + initialValues={{ status: "active" }} > - + - - + +