From c8414116caacde98aceb43bee88343f684447160 Mon Sep 17 00:00:00 2001 From: nin0dev Date: Sun, 28 Jul 2024 09:26:14 -0400 Subject: [PATCH] restructured everything :trolley: --- .gitignore | 130 ++ eslint.config.mjs | 60 + index.js | 65 - oneko.js | 239 --- package.json | 22 + pnpm-lock.yaml | 1455 +++++++++++++++++ style.css => public/css/style.css | 0 game.ico => public/img/game.ico | Bin .../img/logo-but-round.png | Bin logo.png => public/img/logo.png | Bin music.ico => public/img/music.ico | Bin oneko.gif => public/img/oneko.gif | Bin public/js/index.js | 66 + public/js/oneko.js | 239 +++ server.js | 11 + index.html => templates/index.ejs | 0 wallpaper.jpg | Bin 32984 -> 0 bytes 17 files changed, 1983 insertions(+), 304 deletions(-) create mode 100644 .gitignore create mode 100644 eslint.config.mjs delete mode 100644 index.js delete mode 100644 oneko.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml rename style.css => public/css/style.css (100%) rename game.ico => public/img/game.ico (100%) rename logo-but-round.png => public/img/logo-but-round.png (100%) rename logo.png => public/img/logo.png (100%) rename music.ico => public/img/music.ico (100%) rename oneko.gif => public/img/oneko.gif (100%) create mode 100644 public/js/index.js create mode 100644 public/js/oneko.js create mode 100644 server.js rename index.html => templates/index.ejs (100%) delete mode 100644 wallpaper.jpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6a7d6d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..5179250 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,60 @@ +import pluginJs from "@eslint/js"; +import stylisticJs from "@stylistic/eslint-plugin-js"; +import globals from "globals"; + +export default [ + {files: ["**/*.{js,mjs,cjs,ts}"],}, + {languageOptions: { globals: globals.node }}, + pluginJs.configs.recommended, + { + ignores: ["dist/*", "**/jquery.js"] + }, + { + plugins: { + "@stylistic/js": stylisticJs, + }, + rules: { + "yoda": "error", + "eqeqeq": ["error", "always", { "null": "ignore" }], + "prefer-destructuring": ["error", { + "VariableDeclarator": { "array": false, "object": true }, + "AssignmentExpression": { "array": false, "object": false } + }], + "operator-assignment": ["error", "always"], + "no-useless-computed-key": "error", + "no-unneeded-ternary": ["error", { "defaultAssignment": false }], + "no-invalid-regexp": "error", + "no-constant-condition": ["error", { "checkLoops": false }], + "no-duplicate-imports": "error", + "dot-notation": "error", + "no-fallthrough": "error", + "for-direction": "error", + "no-async-promise-executor": "error", + "no-cond-assign": "error", + "no-dupe-else-if": "error", + "no-duplicate-case": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-prototype-builtins": "error", + "no-regex-spaces": "error", + "no-shadow-restricted-names": "error", + "no-unexpected-multiline": "error", + "no-unsafe-optional-chaining": "error", + "no-useless-backreference": "error", + "use-isnan": "error", + "prefer-const": "error", + "prefer-spread": "error", + "semi": [2, "always"], + "@stylistic/js/indent": ["error", 4], + "@stylistic/js/quotes": [2, "double", { "avoidEscape": true }] + } + }, + { + files: ["public/**/*.js"], + rules: { + "no-undef": "off", // due to being separate files eslint goes insane + "@typescript-eslint/no-unused-vars": ["off"] // noone cares lol + } + } +]; \ No newline at end of file diff --git a/index.js b/index.js deleted file mode 100644 index d59d85d..0000000 --- a/index.js +++ /dev/null @@ -1,65 +0,0 @@ -let shouldLog = false; -function log(content) { - if (shouldLog) console.log(content); -} -function onUpdate(data) { - // set status - log(data) - const pfp = document.getElementById("pfp"); - switch(data["discord_status"]) { - case "online": - pfp.style.borderColor = "var(--online-color)"; - break; - case "idle": - pfp.style.borderColor = "var(--idle-color)"; - break; - case "dnd": - pfp.style.borderColor = "var(--dnd-color)"; - break; - case "offline": - pfp.style.borderColor = "var(--offline-color)"; - break; - } - // set presence - log(data["activities"]) - let listening = false - let content = "" - data["activities"].forEach(presence => { - if(presence["application_id"] == "463151177836658699" && presence["assets"]["small_text"] != "Paused") { // premid - listening = true - artist = presence["state"].substring(0, presence["state"].indexOf(" -")) - if (artist == "") { - artist = presence["state"] - } - content = `Listening to ${presence["details"]} - ${artist}` - } - if(presence["application_id"] == "1108588077900898414") { // vencord lastfm - listening = true - content = `Listening to ${presence["details"]} - ${presence["state"]}` - } - if(presence["application_id"] == "1054951789318909972") { // vendetta lastfm - listening = true - content = `Listening to ${presence["details"]} - ${presence["state"]}` - } - if(presence["id"] == "spotify:1") { // built in spotify hooluy shit normal presence) - listening = true - content = `Listening to ${presence["details"]} - ${presence["state"]}` - } - if(presence["type"] == 0 && presence["application_id"] != "463151177836658699" && presence["application_id"] != "1108588077900898414") { // generic playing status that isn't vencord lastfm or premid - listening = false - content = `Playing ${presence["name"]}` - } - - }); - document.getElementById("presence").style.display = content == "" ? "none": "flex" - document.getElementById("presence-content").innerText = content - document.getElementById("presence-icon").src = listening ? "music.ico" : "game.ico" -} -LanyardWrapper.connectWebSocket("886685857560539176", onUpdate) -.catch(err => { - console.error(err); -}); -function showCredits() { - document.getElementById("credits").style.display = "block" - document.getElementById("credits-button").style.display = "none" -} diff --git a/oneko.js b/oneko.js deleted file mode 100644 index bd8b882..0000000 --- a/oneko.js +++ /dev/null @@ -1,239 +0,0 @@ -// oneko.js: https://github.com/adryd325/oneko.js - -(function oneko() { - const isReducedMotion = - window.matchMedia(`(prefers-reduced-motion: reduce)`) === true || - window.matchMedia(`(prefers-reduced-motion: reduce)`).matches === true; - - if (isReducedMotion) return; - - const nekoEl = document.createElement("div"); - - let nekoPosX = 32; - let nekoPosY = 32; - - let mousePosX = 0; - let mousePosY = 0; - - let frameCount = 0; - let idleTime = 0; - let idleAnimation = null; - let idleAnimationFrame = 0; - - const nekoSpeed = 10; - const spriteSets = { - idle: [[-3, -3]], - alert: [[-7, -3]], - scratchSelf: [ - [-5, 0], - [-6, 0], - [-7, 0], - ], - scratchWallN: [ - [0, 0], - [0, -1], - ], - scratchWallS: [ - [-7, -1], - [-6, -2], - ], - scratchWallE: [ - [-2, -2], - [-2, -3], - ], - scratchWallW: [ - [-4, 0], - [-4, -1], - ], - tired: [[-3, -2]], - sleeping: [ - [-2, 0], - [-2, -1], - ], - N: [ - [-1, -2], - [-1, -3], - ], - NE: [ - [0, -2], - [0, -3], - ], - E: [ - [-3, 0], - [-3, -1], - ], - SE: [ - [-5, -1], - [-5, -2], - ], - S: [ - [-6, -3], - [-7, -2], - ], - SW: [ - [-5, -3], - [-6, -1], - ], - W: [ - [-4, -2], - [-4, -3], - ], - NW: [ - [-1, 0], - [-1, -1], - ], - }; - - function init() { - nekoEl.id = "oneko"; - nekoEl.ariaHidden = true; - nekoEl.style.width = "32px"; - nekoEl.style.height = "32px"; - nekoEl.style.position = "fixed"; - nekoEl.style.pointerEvents = "none"; - nekoEl.style.imageRendering = "pixelated"; - nekoEl.style.left = `${nekoPosX - 16}px`; - nekoEl.style.top = `${nekoPosY - 16}px`; - nekoEl.style.zIndex = Number.MAX_VALUE; - - let nekoFile = "./oneko.gif" - const curScript = document.currentScript - if (curScript && curScript.dataset.cat) { - nekoFile = curScript.dataset.cat - } - nekoEl.style.backgroundImage = `url(${nekoFile})`; - - document.body.appendChild(nekoEl); - - document.addEventListener("mousemove", function (event) { - mousePosX = event.clientX; - mousePosY = event.clientY; - }); - - window.requestAnimationFrame(onAnimationFrame); - } - - let lastFrameTimestamp; - - function onAnimationFrame(timestamp) { - // Stops execution if the neko element is removed from DOM - if (!nekoEl.isConnected) { - return; - } - if (!lastFrameTimestamp) { - lastFrameTimestamp = timestamp; - } - if (timestamp - lastFrameTimestamp > 100) { - lastFrameTimestamp = timestamp - frame() - } - window.requestAnimationFrame(onAnimationFrame); - } - - function setSprite(name, frame) { - const sprite = spriteSets[name][frame % spriteSets[name].length]; - nekoEl.style.backgroundPosition = `${sprite[0] * 32}px ${sprite[1] * 32}px`; - } - - function resetIdleAnimation() { - idleAnimation = null; - idleAnimationFrame = 0; - } - - function idle() { - idleTime += 1; - - // every ~ 20 seconds - if ( - idleTime > 10 && - Math.floor(Math.random() * 200) == 0 && - idleAnimation == null - ) { - let avalibleIdleAnimations = ["sleeping", "scratchSelf"]; - if (nekoPosX < 32) { - avalibleIdleAnimations.push("scratchWallW"); - } - if (nekoPosY < 32) { - avalibleIdleAnimations.push("scratchWallN"); - } - if (nekoPosX > window.innerWidth - 32) { - avalibleIdleAnimations.push("scratchWallE"); - } - if (nekoPosY > window.innerHeight - 32) { - avalibleIdleAnimations.push("scratchWallS"); - } - idleAnimation = - avalibleIdleAnimations[ - Math.floor(Math.random() * avalibleIdleAnimations.length) - ]; - } - - switch (idleAnimation) { - case "sleeping": - if (idleAnimationFrame < 8) { - setSprite("tired", 0); - break; - } - setSprite("sleeping", Math.floor(idleAnimationFrame / 4)); - if (idleAnimationFrame > 192) { - resetIdleAnimation(); - } - break; - case "scratchWallN": - case "scratchWallS": - case "scratchWallE": - case "scratchWallW": - case "scratchSelf": - setSprite(idleAnimation, idleAnimationFrame); - if (idleAnimationFrame > 9) { - resetIdleAnimation(); - } - break; - default: - setSprite("idle", 0); - return; - } - idleAnimationFrame += 1; - } - - function frame() { - frameCount += 1; - const diffX = nekoPosX - mousePosX; - const diffY = nekoPosY - mousePosY; - const distance = Math.sqrt(diffX ** 2 + diffY ** 2); - - if (distance < nekoSpeed || distance < 48) { - idle(); - return; - } - - idleAnimation = null; - idleAnimationFrame = 0; - - if (idleTime > 1) { - setSprite("alert", 0); - // count down after being alerted before moving - idleTime = Math.min(idleTime, 7); - idleTime -= 1; - return; - } - - let direction; - direction = diffY / distance > 0.5 ? "N" : ""; - direction += diffY / distance < -0.5 ? "S" : ""; - direction += diffX / distance > 0.5 ? "W" : ""; - direction += diffX / distance < -0.5 ? "E" : ""; - setSprite(direction, frameCount); - - nekoPosX -= (diffX / distance) * nekoSpeed; - nekoPosY -= (diffY / distance) * nekoSpeed; - - nekoPosX = Math.min(Math.max(16, nekoPosX), window.innerWidth - 16); - nekoPosY = Math.min(Math.max(16, nekoPosY), window.innerHeight - 16); - - nekoEl.style.left = `${nekoPosX - 16}px`; - nekoEl.style.top = `${nekoPosY - 16}px`; - } - - init(); -})(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..8f47973 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "website", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "echo \"Error: no test specified\" && exit 1" + }, + "author": "nin0dev", + "license": "All Rights Reserved", + "dependencies": { + "@stylistic/eslint-plugin-js": "^2.4.0", + "eslint-plugin-simple-import-sort": "^12.1.1", + "express": "^4.19.2", + "nodemon": "^3.1.4" + }, + "devDependencies": { + "@eslint/js": "^9.8.0", + "eslint": "9.x", + "globals": "^15.8.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..0fadf89 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1455 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@stylistic/eslint-plugin-js': + specifier: ^2.4.0 + version: 2.4.0(eslint@9.8.0) + eslint-plugin-simple-import-sort: + specifier: ^12.1.1 + version: 12.1.1(eslint@9.8.0) + express: + specifier: ^4.19.2 + version: 4.19.2 + nodemon: + specifier: ^3.1.4 + version: 3.1.4 + devDependencies: + '@eslint/js': + specifier: ^9.8.0 + version: 9.8.0 + eslint: + specifier: 9.x + version: 9.8.0 + globals: + specifier: ^15.8.0 + version: 15.8.0 + +packages: + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.17.1': + resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.8.0': + resolution: {integrity: sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@stylistic/eslint-plugin-js@2.4.0': + resolution: {integrity: sha512-ScIYDFAwNz+ELr3KfAZMuYMCUq7Q6TdEEIq4RBRR77EHucpDrwi5Kx2d0VdYxb4s4o6nOtSkJmY9MCZupDYJow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@types/eslint@9.6.0': + resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-simple-import-sort@12.1.1: + resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} + peerDependencies: + eslint: '>=5.0.0' + + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.8.0: + resolution: {integrity: sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.8.0: + resolution: {integrity: sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==} + engines: {node: '>=18'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + nodemon@3.1.4: + resolution: {integrity: sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==} + engines: {node: '>=10'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@eslint-community/eslint-utils@4.4.0(eslint@9.8.0)': + dependencies: + eslint: 9.8.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/config-array@0.17.1': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.6(supports-color@5.5.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.6(supports-color@5.5.0) + espree: 10.1.0 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.8.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@stylistic/eslint-plugin-js@2.4.0(eslint@9.8.0)': + dependencies: + '@types/eslint': 9.6.0 + acorn: 8.12.1 + eslint: 9.8.0 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + + '@types/eslint@9.6.0': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.5': {} + + '@types/json-schema@7.0.15': {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + body-parser@1.20.2: + 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.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bytes@3.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.0.6: {} + + cookie@0.6.0: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.6(supports-color@5.5.0): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 5.5.0 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + depd@2.0.0: {} + + destroy@1.2.0: {} + + ee-first@1.1.1: {} + + encodeurl@1.0.2: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-simple-import-sort@12.1.1(eslint@9.8.0): + dependencies: + eslint: 9.8.0 + + eslint-scope@8.0.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@9.8.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.17.1 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.8.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.1.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + express@4.19.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.6.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.2.0: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flatted@3.3.1: {} + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@15.8.0: {} + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ignore-by-default@1.0.1: {} + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + isexe@2.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + media-typer@0.3.0: {} + + merge-descriptors@1.0.1: {} + + methods@1.1.2: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + nodemon@3.1.4: + dependencies: + chokidar: 3.6.0 + debug: 4.3.6(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.6.3 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.1 + undefsafe: 2.0.5 + + normalize-path@3.0.0: {} + + object-inspect@1.13.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-to-regexp@0.1.7: {} + + picomatch@2.3.1: {} + + prelude-ls@1.2.1: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + pstree.remy@1.1.8: {} + + punycode@2.3.1: {} + + qs@6.11.0: + dependencies: + side-channel: 1.0.6 + + queue-microtask@1.2.3: {} + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve-from@4.0.0: {} + + reusify@1.0.4: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + semver@7.6.3: {} + + send@0.18.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.15.0: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.6.3 + + statuses@2.0.1: {} + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + text-table@0.2.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + touch@3.1.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + undefsafe@2.0.5: {} + + unpipe@1.0.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + utils-merge@1.0.1: {} + + vary@1.1.2: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yocto-queue@0.1.0: {} diff --git a/style.css b/public/css/style.css similarity index 100% rename from style.css rename to public/css/style.css diff --git a/game.ico b/public/img/game.ico similarity index 100% rename from game.ico rename to public/img/game.ico diff --git a/logo-but-round.png b/public/img/logo-but-round.png similarity index 100% rename from logo-but-round.png rename to public/img/logo-but-round.png diff --git a/logo.png b/public/img/logo.png similarity index 100% rename from logo.png rename to public/img/logo.png diff --git a/music.ico b/public/img/music.ico similarity index 100% rename from music.ico rename to public/img/music.ico diff --git a/oneko.gif b/public/img/oneko.gif similarity index 100% rename from oneko.gif rename to public/img/oneko.gif diff --git a/public/js/index.js b/public/js/index.js new file mode 100644 index 0000000..3bdafd9 --- /dev/null +++ b/public/js/index.js @@ -0,0 +1,66 @@ +const shouldLog = false; +function log(content) { + if (shouldLog) console.log(content); +} +function onUpdate(data) { + // set status + log(data); + const pfp = document.getElementById("pfp"); + switch(data.discord_status) { + case "online": + pfp.style.borderColor = "var(--online-color)"; + break; + case "idle": + pfp.style.borderColor = "var(--idle-color)"; + break; + case "dnd": + pfp.style.borderColor = "var(--dnd-color)"; + break; + case "offline": + pfp.style.borderColor = "var(--offline-color)"; + break; + } + // set presence + log(data.activities); + let listening = false; + let content = ""; + data.activities.forEach(presence => { + if(presence.application_id === "463151177836658699" && presence.assets.small_text != "Paused") { // premid + listening = true; + artist = presence.state.substring(0, presence.state.indexOf(" -")); + if (artist === "") { + artist = presence.state; + } + content = `Listening to ${presence.details} - ${artist}`; + } + if(presence.application_id === "1108588077900898414") { // vencord lastfm + listening = true; + content = `Listening to ${presence.details} - ${presence.state}`; + } + if(presence.application_id === "1054951789318909972") { // vendetta lastfm + listening = true; + content = `Listening to ${presence.details} - ${presence.state}`; + } + if(presence.id === "spotify:1") { // built in spotify hooluy shit normal presence) + listening = true; + content = `Listening to ${presence.details} - ${presence.state}`; + } + if(presence.type === 0 && presence.application_id !== "463151177836658699" && presence.application_id !== "1108588077900898414") { // generic playing status that isn't vencord lastfm or premid + listening = false; + content = `Playing ${presence.name}`; + } + + }); + document.getElementById("presence").style.display = content === "" ? "none": "flex"; + document.getElementById("presence-content").innerText = content; + document.getElementById("presence-icon").src = listening ? "music.ico" : "game.ico"; +} +LanyardWrapper.connectWebSocket("886685857560539176", onUpdate) + .catch(err => { + console.error(err); + }); +// eslint-disable-next-line no-unused-vars +function showCredits() { + document.getElementById("credits").style.display = "block"; + document.getElementById("credits-button").style.display = "none"; +} diff --git a/public/js/oneko.js b/public/js/oneko.js new file mode 100644 index 0000000..3bc00a5 --- /dev/null +++ b/public/js/oneko.js @@ -0,0 +1,239 @@ +// oneko.js: https://github.com/adryd325/oneko.js + +(function oneko() { + const isReducedMotion = + window.matchMedia("(prefers-reduced-motion: reduce)") === true || + window.matchMedia("(prefers-reduced-motion: reduce)").matches === true; + + if (isReducedMotion) return; + + const nekoEl = document.createElement("div"); + + let nekoPosX = 32; + let nekoPosY = 32; + + let mousePosX = 0; + let mousePosY = 0; + + let frameCount = 0; + let idleTime = 0; + let idleAnimation = null; + let idleAnimationFrame = 0; + + const nekoSpeed = 10; + const spriteSets = { + idle: [[-3, -3]], + alert: [[-7, -3]], + scratchSelf: [ + [-5, 0], + [-6, 0], + [-7, 0], + ], + scratchWallN: [ + [0, 0], + [0, -1], + ], + scratchWallS: [ + [-7, -1], + [-6, -2], + ], + scratchWallE: [ + [-2, -2], + [-2, -3], + ], + scratchWallW: [ + [-4, 0], + [-4, -1], + ], + tired: [[-3, -2]], + sleeping: [ + [-2, 0], + [-2, -1], + ], + N: [ + [-1, -2], + [-1, -3], + ], + NE: [ + [0, -2], + [0, -3], + ], + E: [ + [-3, 0], + [-3, -1], + ], + SE: [ + [-5, -1], + [-5, -2], + ], + S: [ + [-6, -3], + [-7, -2], + ], + SW: [ + [-5, -3], + [-6, -1], + ], + W: [ + [-4, -2], + [-4, -3], + ], + NW: [ + [-1, 0], + [-1, -1], + ], + }; + + function init() { + nekoEl.id = "oneko"; + nekoEl.ariaHidden = true; + nekoEl.style.width = "32px"; + nekoEl.style.height = "32px"; + nekoEl.style.position = "fixed"; + nekoEl.style.pointerEvents = "none"; + nekoEl.style.imageRendering = "pixelated"; + nekoEl.style.left = `${nekoPosX - 16}px`; + nekoEl.style.top = `${nekoPosY - 16}px`; + nekoEl.style.zIndex = Number.MAX_VALUE; + + let nekoFile = "./oneko.gif"; + const curScript = document.currentScript; + if (curScript && curScript.dataset.cat) { + nekoFile = curScript.dataset.cat; + } + nekoEl.style.backgroundImage = `url(${nekoFile})`; + + document.body.appendChild(nekoEl); + + document.addEventListener("mousemove", function (event) { + mousePosX = event.clientX; + mousePosY = event.clientY; + }); + + window.requestAnimationFrame(onAnimationFrame); + } + + let lastFrameTimestamp; + + function onAnimationFrame(timestamp) { + // Stops execution if the neko element is removed from DOM + if (!nekoEl.isConnected) { + return; + } + if (!lastFrameTimestamp) { + lastFrameTimestamp = timestamp; + } + if (timestamp - lastFrameTimestamp > 100) { + lastFrameTimestamp = timestamp; + frame(); + } + window.requestAnimationFrame(onAnimationFrame); + } + + function setSprite(name, frame) { + const sprite = spriteSets[name][frame % spriteSets[name].length]; + nekoEl.style.backgroundPosition = `${sprite[0] * 32}px ${sprite[1] * 32}px`; + } + + function resetIdleAnimation() { + idleAnimation = null; + idleAnimationFrame = 0; + } + + function idle() { + idleTime += 1; + + // every ~ 20 seconds + if ( + idleTime > 10 && + Math.floor(Math.random() * 200) === 0 && + idleAnimation == null + ) { + const avalibleIdleAnimations = ["sleeping", "scratchSelf"]; + if (nekoPosX < 32) { + avalibleIdleAnimations.push("scratchWallW"); + } + if (nekoPosY < 32) { + avalibleIdleAnimations.push("scratchWallN"); + } + if (nekoPosX > window.innerWidth - 32) { + avalibleIdleAnimations.push("scratchWallE"); + } + if (nekoPosY > window.innerHeight - 32) { + avalibleIdleAnimations.push("scratchWallS"); + } + idleAnimation = + avalibleIdleAnimations[ + Math.floor(Math.random() * avalibleIdleAnimations.length) + ]; + } + + switch (idleAnimation) { + case "sleeping": + if (idleAnimationFrame < 8) { + setSprite("tired", 0); + break; + } + setSprite("sleeping", Math.floor(idleAnimationFrame / 4)); + if (idleAnimationFrame > 192) { + resetIdleAnimation(); + } + break; + case "scratchWallN": + case "scratchWallS": + case "scratchWallE": + case "scratchWallW": + case "scratchSelf": + setSprite(idleAnimation, idleAnimationFrame); + if (idleAnimationFrame > 9) { + resetIdleAnimation(); + } + break; + default: + setSprite("idle", 0); + return; + } + idleAnimationFrame += 1; + } + + function frame() { + frameCount += 1; + const diffX = nekoPosX - mousePosX; + const diffY = nekoPosY - mousePosY; + const distance = Math.sqrt(diffX ** 2 + diffY ** 2); + + if (distance < nekoSpeed || distance < 48) { + idle(); + return; + } + + idleAnimation = null; + idleAnimationFrame = 0; + + if (idleTime > 1) { + setSprite("alert", 0); + // count down after being alerted before moving + idleTime = Math.min(idleTime, 7); + idleTime -= 1; + return; + } + + let direction; + direction = diffY / distance > 0.5 ? "N" : ""; + direction += diffY / distance < -0.5 ? "S" : ""; + direction += diffX / distance > 0.5 ? "W" : ""; + direction += diffX / distance < -0.5 ? "E" : ""; + setSprite(direction, frameCount); + + nekoPosX -= (diffX / distance) * nekoSpeed; + nekoPosY -= (diffY / distance) * nekoSpeed; + + nekoPosX = Math.min(Math.max(16, nekoPosX), window.innerWidth - 16); + nekoPosY = Math.min(Math.max(16, nekoPosY), window.innerHeight - 16); + + nekoEl.style.left = `${nekoPosX - 16}px`; + nekoEl.style.top = `${nekoPosY - 16}px`; + } + + init(); +})(); diff --git a/server.js b/server.js new file mode 100644 index 0000000..ebf28fb --- /dev/null +++ b/server.js @@ -0,0 +1,11 @@ +var express = require("express"); +var app = express(); + +app.set("view engine", "ejs"); + +app.get("/", function(req, res) { + res.render("pages/index"); +}); + +app.listen(8080); +console.log("Server is listening on port 8080"); \ No newline at end of file diff --git a/index.html b/templates/index.ejs similarity index 100% rename from index.html rename to templates/index.ejs diff --git a/wallpaper.jpg b/wallpaper.jpg deleted file mode 100644 index 5c68af5559bc1366065e3567125dc3154beca8bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32984 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

%yt9E)7HWrGz~3%`Nqv zCWn)v`4H9dP)QzlJFDX%z9$ibKgYu5a>qi4k}|Z#plu@M4g3ucraqhr7YL=aLLfAr z%wG(-7}y-mAEHKvx&exy78l=)Mm70|-ibfAg(AGbwMkzrQqRS=D46Uu}S^8TZY>7mmE(Ha#evzA7nXct=duUPS z5i<|r0pkm5M2~@HQwLG*(Sw~w{k{!JLh7rvQ{7*ii}I!Uy|xG!1xL&kCsmF?Q5GagyU>am}vXNrz^l?(xEEwtQ|>@^d_w$(Zv zOY^NO#8M>596@0z!DQe1)^PO5Pp;duF?Lq5P28NGI(NhkCVbD)7WOtF$#p-qCZDFS zn$+=LcFp=6Ufwfme#x8}At)lmpa`vb)yr20o4y}Ti2%>e6US$xu9MSUd;Wa4rV{Ze zd15M@fZtRs z^jK52Ld-*E?#~S_Z~7d5gUfJ(%S@)n^xOI9ZY0U8NE_RlB(uN9T$ER}o*`3H7Vft# z`SzYzm|T5{WgTgQE9={x6|;vS9}dmBh8<3_{RBFEv^_g6SzpQU8cKUCRoW8$G%D7r z9=g;#Ta@w&F}A@~>-}d$qgy>SCHfJUoY)!*I~EZ^4ytE$IUQtJg4Lkz6rQ2kP8scd z-`ZWE-+FuIyI+ia73(G^Y3&rWlPx!K(1yNZTF%GI9A~?@7Iw5rx4j43 z9I#Y&EG4ECjhy~i?9w7U#jtvHx=nbG>!R)CnIiP$1U_FrTlv(qBZ zf7D;x;IgmiVuh}|I?WZsMTsOZ1gf&<=1pcWq#q+Gf4U8Nix|MS%QwBg?OeP5IMdA_ z+=c(P$+O&)2(KtG#L<=}m$kdhtDlD}ho57~en!4H85-PJ%N9PPs21(E zZ^WwF`-8dYOA~Qa^5CMWPGVi~uh}zB3<%f7O75k?=m)DxM(E$qP&J0#GsJ7`Wc9xW`s# z``cAC`8eDUEs|SH+w`vkub7-LSVQgsO(HmJB@bZ9A8WtGG@o_STZSlKt-AO*dwnP5 zOqJc_vRsru1Gn2~c2@*hEXp~=HOaP)BrBTH7{glyR{P$Vwo!XqQr}nF6iky^6b+qF z=rC&7;Hrw0UWp_}R+mqP$}N>)zu?Du@2zElETQKBZ4J|>rtN975)g9dgAc@tZTKmc4>VuX~n9%%H5v@(du&P zIxXVLlje70{CfZDXXZApk2CT&WZ56S&|)Opt6Y@D;HNo_LFmK5Q*zrH)>v%V*0g^7e&wG z(>SEazBm`~>1X68L-%tc9$&<1T;SWA=o1}C{SkSk5OVHCT}6{}OVfPxJa~56HTdk$AHy$s#R%on5~qa_;3j z19@EdD3!!Y4e|Oxc9*v|_3vo9w;j(mgUb)s4c9f)kcAHpcNB5zpq74#(f<|`Sai1h z+)dDb6E11s)XYM@rr@S2`i0*qk}=KUc?QA($Lwx>4xr2B<;A2FgpYsP!SpCzQ`{*= zDtQ010nEEN&WCAnL$xEi$3H7m4Du$@<+UIX`#02|vJkn-3&vU|tHymlONW1s`?*T2 ZZ~r2sGG_L{BIAcCX<)8oC1!*4{{ZeH0Yv}+