From 5d0c4d7f5ec375cc4c1ef724573ef363e19b0823 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 13:56:05 +0000 Subject: [PATCH 001/315] ci(github-action): bump actions/setup-node from 3 to 4 Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-node dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7546d5a..f94e6d3 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: latest @@ -45,7 +45,7 @@ jobs: timeout-minutes: 10 steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: latest @@ -66,7 +66,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: latest @@ -92,7 +92,7 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: latest From 68c80834de141fe342372169b23f387cf43be747 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 13:56:11 +0000 Subject: [PATCH 002/315] build(devDep): bump @types/react from 18.2.34 to 18.2.35 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.34 to 18.2.35. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa0e601..899faf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.34", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.34.tgz", - "integrity": "sha512-U6eW/alrRk37FU/MS2RYMjx0Va2JGIVXELTODaTIYgvWGCV4Y4TfTUzG8DdmpDNIT0Xpj/R7GfyHOJJrDttcvg==", + "version": "18.2.35", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.35.tgz", + "integrity": "sha512-LG3xpFZ++rTndV+/XFyX5vUP7NI9yxyk+MQvBDq+CVs8I9DLSc3Ymwb1Vmw5YDoeNeHN4PDZa3HylMKJYT9PNQ==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From a949ff6a87a10d82808b8ee9e9d7cd54f5404c6b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 5 Nov 2023 14:24:09 +0000 Subject: [PATCH 003/315] chore(release): 1.0.0-development.1 [skip ci] ## 1.0.0-development.1 (2023-11-05) ### :sparkles: Features * **component:** add `darkmode-toggle` to main page ([8fa3a3b](https://github.com/Clumsy-Coder/uva-uhunt/commit/8fa3a3bc5c080fe8e79ccf27296947c0d4ad7471)) * **components:** add component `darkmode-toggle` ([a355c0f](https://github.com/Clumsy-Coder/uva-uhunt/commit/a355c0fd3f88e8a7dc97a0a760c3ce54d06ddfb4)) --- CHANGELOG.md | 7 ++ package-lock.json | 237 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 3 files changed, 242 insertions(+), 4 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a839662 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +## 1.0.0-development.1 (2023-11-05) + + +### :sparkles: Features + +* **component:** add `darkmode-toggle` to main page ([8fa3a3b](https://github.com/Clumsy-Coder/uva-uhunt/commit/8fa3a3bc5c080fe8e79ccf27296947c0d4ad7471)) +* **components:** add component `darkmode-toggle` ([a355c0f](https://github.com/Clumsy-Coder/uva-uhunt/commit/a355c0fd3f88e8a7dc97a0a760c3ce54d06ddfb4)) diff --git a/package-lock.json b/package-lock.json index 899faf7..e8ed0d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uva-uhunt", - "version": "0.1.0", + "version": "1.0.0-development.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uva-uhunt", - "version": "0.1.0", + "version": "1.0.0-development.1", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", @@ -5945,14 +5945,17 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -5969,6 +5972,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -5980,11 +5984,13 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6001,6 +6007,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6015,11 +6022,13 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6035,6 +6044,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6046,6 +6056,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6058,6 +6069,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6070,6 +6082,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6083,6 +6096,7 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6129,6 +6143,7 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6147,6 +6162,7 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6158,6 +6174,7 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6169,6 +6186,7 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6187,6 +6205,7 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6202,6 +6221,7 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6216,6 +6236,7 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6230,6 +6251,7 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6238,6 +6260,7 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6246,6 +6269,7 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6263,6 +6287,7 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6274,6 +6299,7 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6285,6 +6311,7 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6300,14 +6327,17 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6319,6 +6349,7 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", + "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6327,6 +6358,7 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6340,6 +6372,7 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6352,6 +6385,7 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6360,6 +6394,7 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6372,6 +6407,7 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6380,6 +6416,7 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6391,6 +6428,7 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6403,6 +6441,7 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6411,6 +6450,7 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6425,16 +6465,19 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6447,11 +6490,13 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", + "dev": true, "funding": [ { "type": "github", @@ -6471,6 +6516,7 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6485,6 +6531,7 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6493,6 +6540,7 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6501,6 +6549,7 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", + "dev": true, "funding": [ { "type": "github", @@ -6524,6 +6573,7 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6532,6 +6582,7 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6554,6 +6605,7 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6565,6 +6617,7 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6573,6 +6626,7 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", + "dev": true, "funding": [ { "type": "github", @@ -6587,6 +6641,7 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -6598,6 +6653,7 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6606,6 +6662,7 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6618,6 +6675,7 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6632,6 +6690,7 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6640,6 +6699,7 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6648,6 +6708,7 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6659,11 +6720,13 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -6672,6 +6735,7 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6684,16 +6748,19 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6707,6 +6774,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6721,6 +6789,7 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -6732,6 +6801,7 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6748,11 +6818,13 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6764,11 +6836,13 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", + "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -6777,24 +6851,29 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6803,11 +6882,13 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6816,6 +6897,7 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6824,11 +6906,13 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6837,6 +6921,7 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6852,6 +6937,7 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6863,11 +6949,13 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6886,6 +6974,7 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6907,11 +6996,13 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6923,11 +7014,13 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6939,13 +7032,16 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -6955,6 +7051,7 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", + "dev": true, "funding": [ { "type": "github", @@ -6974,6 +7071,7 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6985,6 +7083,7 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6993,6 +7092,7 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7001,6 +7101,7 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7009,6 +7110,7 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7026,11 +7128,13 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7039,6 +7143,7 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7050,6 +7155,7 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7061,6 +7167,7 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7069,16 +7176,19 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7096,6 +7206,7 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7104,6 +7215,7 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7112,6 +7224,7 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", + "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7120,16 +7233,19 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7142,6 +7258,7 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7161,6 +7278,7 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7182,6 +7300,7 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7193,6 +7312,7 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7205,6 +7325,7 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7217,6 +7338,7 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7231,6 +7353,7 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7249,6 +7372,7 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7260,6 +7384,7 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7272,6 +7397,7 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7287,6 +7413,7 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7295,6 +7422,7 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7316,6 +7444,7 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7330,6 +7459,7 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7338,6 +7468,7 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7349,6 +7480,7 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7360,6 +7492,7 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7376,6 +7509,7 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7387,6 +7521,7 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7398,6 +7533,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7407,6 +7543,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7418,6 +7555,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7429,6 +7567,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7440,6 +7579,7 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7451,6 +7591,7 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7462,6 +7603,7 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7474,6 +7616,7 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7485,6 +7628,7 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7496,11 +7640,13 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7509,6 +7655,7 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7517,6 +7664,7 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7540,6 +7688,7 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7554,6 +7703,7 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7568,6 +7718,7 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7576,6 +7727,7 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7587,6 +7739,7 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7598,6 +7751,7 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7606,6 +7760,7 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7620,6 +7775,7 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7631,6 +7787,7 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7645,6 +7802,7 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7657,6 +7815,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7674,6 +7833,7 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -7682,6 +7842,7 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7696,6 +7857,7 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7710,6 +7872,7 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7741,6 +7904,7 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7754,6 +7918,7 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7762,6 +7927,7 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7777,6 +7943,7 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7789,6 +7956,7 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7797,6 +7965,7 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7805,6 +7974,7 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7813,6 +7983,7 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7821,11 +7992,13 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7838,6 +8011,7 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7849,6 +8023,7 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", + "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -7856,6 +8031,7 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7867,6 +8043,7 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7875,6 +8052,7 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7889,6 +8067,7 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7901,6 +8080,7 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7916,6 +8096,7 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7924,6 +8105,7 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", + "dev": true, "funding": [ { "type": "github", @@ -7943,11 +8125,14 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", + "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7962,6 +8147,7 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7973,11 +8159,13 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7989,6 +8177,7 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7997,6 +8186,7 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8008,6 +8198,7 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8022,6 +8213,7 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8031,6 +8223,7 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8044,6 +8237,7 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8053,11 +8247,13 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", + "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8067,11 +8263,13 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", + "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8083,6 +8281,7 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8091,6 +8290,7 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8105,6 +8305,7 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8118,6 +8319,7 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8130,6 +8332,7 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8141,6 +8344,7 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8152,6 +8356,7 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8168,6 +8373,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8179,6 +8385,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8190,6 +8397,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8198,16 +8406,19 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8216,6 +8427,7 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8229,6 +8441,7 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8240,6 +8453,7 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8251,11 +8465,13 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8265,6 +8481,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8276,11 +8493,13 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8289,6 +8508,7 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8303,6 +8523,7 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8311,6 +8532,7 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8319,6 +8541,7 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8336,6 +8559,7 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8352,6 +8576,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8363,6 +8588,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8374,11 +8600,13 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8395,6 +8623,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8409,6 +8638,7 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8421,6 +8651,7 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index 141824e..19db694 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uva-uhunt", - "version": "0.1.0", + "version": "1.0.0-development.1", "private": true, "scripts": { "dev": "next dev", From ef865c1ae2f178768ee15fb1c6e87178a9c59938 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 15:18:36 +0000 Subject: [PATCH 004/315] build(devDep): bump @types/react from 18.2.35 to 18.2.36 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.35 to 18.2.36. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8ed0d6..4a1f0da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.35", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.35.tgz", - "integrity": "sha512-LG3xpFZ++rTndV+/XFyX5vUP7NI9yxyk+MQvBDq+CVs8I9DLSc3Ymwb1Vmw5YDoeNeHN4PDZa3HylMKJYT9PNQ==", + "version": "18.2.36", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.36.tgz", + "integrity": "sha512-o9XFsHYLLZ4+sb9CWUYwHqFVoG61SesydF353vFMMsQziiyRu8np4n2OYMUSDZ8XuImxDr9c5tR7gidlH29Vnw==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 2ea4b1d785800c9847ea9dd0f5807752b897a5f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 15:44:34 +0000 Subject: [PATCH 005/315] build(devDep): bump @types/react from 18.2.36 to 18.2.37 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.36 to 18.2.37. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a1f0da..3e9d3fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.36", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.36.tgz", - "integrity": "sha512-o9XFsHYLLZ4+sb9CWUYwHqFVoG61SesydF353vFMMsQziiyRu8np4n2OYMUSDZ8XuImxDr9c5tR7gidlH29Vnw==", + "version": "18.2.37", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", + "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 54ecb56bab326510899474724b66b002fa5396f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 15:46:53 +0000 Subject: [PATCH 006/315] build(devDep): bump @types/node from 20.8.10 to 20.9.0 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.8.10 to 20.9.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e9d3fd..d4c2636 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From e7325766c35aa0c1a9c48a569fe3ca2e5e031927 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 15:49:05 +0000 Subject: [PATCH 007/315] build(devDep): bump @types/react-dom from 18.2.14 to 18.2.15 Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.2.14 to 18.2.15. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) --- updated-dependencies: - dependency-name: "@types/react-dom" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d4c2636..4ed8a90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1802,9 +1802,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", - "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", + "version": "18.2.15", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", + "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", "devOptional": true, "dependencies": { "@types/react": "*" From 74a079b37b859e339c6542320f5418c4702a2d73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:28:11 +0000 Subject: [PATCH 008/315] build(deps): bump next from 14.0.1 to 14.0.2 Bumps [next](https://github.com/vercel/next.js) from 14.0.1 to 14.0.2. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v14.0.1...v14.0.2) --- updated-dependencies: - dependency-name: next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 88 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ed8a90..e8dfd04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.292.0", - "next": "14.0.1", + "next": "14.0.2", "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", @@ -461,9 +461,9 @@ } }, "node_modules/@next/env": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.1.tgz", - "integrity": "sha512-Ms8ZswqY65/YfcjrlcIwMPD7Rg/dVjdLapMcSHG26W6O67EJDF435ShW4H4LXi1xKO1oRc97tLXUpx8jpLe86A==" + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.2.tgz", + "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.0.1", @@ -475,9 +475,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.1.tgz", - "integrity": "sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.2.tgz", + "integrity": "sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ==", "cpu": [ "arm64" ], @@ -490,9 +490,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.1.tgz", - "integrity": "sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.2.tgz", + "integrity": "sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg==", "cpu": [ "x64" ], @@ -505,9 +505,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.1.tgz", - "integrity": "sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.2.tgz", + "integrity": "sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA==", "cpu": [ "arm64" ], @@ -520,9 +520,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.1.tgz", - "integrity": "sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.2.tgz", + "integrity": "sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA==", "cpu": [ "arm64" ], @@ -535,9 +535,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.1.tgz", - "integrity": "sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.2.tgz", + "integrity": "sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q==", "cpu": [ "x64" ], @@ -550,9 +550,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.1.tgz", - "integrity": "sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.2.tgz", + "integrity": "sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ==", "cpu": [ "x64" ], @@ -565,9 +565,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.1.tgz", - "integrity": "sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.2.tgz", + "integrity": "sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ==", "cpu": [ "arm64" ], @@ -580,9 +580,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.1.tgz", - "integrity": "sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.2.tgz", + "integrity": "sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q==", "cpu": [ "ia32" ], @@ -595,9 +595,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.1.tgz", - "integrity": "sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.2.tgz", + "integrity": "sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug==", "cpu": [ "x64" ], @@ -5641,11 +5641,11 @@ "dev": true }, "node_modules/next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.1.tgz", - "integrity": "sha512-s4YaLpE4b0gmb3ggtmpmV+wt+lPRuGtANzojMQ2+gmBpgX9w5fTbjsy6dXByBuENsdCX5pukZH/GxdFgO62+pA==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.2.tgz", + "integrity": "sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==", "dependencies": { - "@next/env": "14.0.1", + "@next/env": "14.0.2", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", @@ -5660,15 +5660,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.1", - "@next/swc-darwin-x64": "14.0.1", - "@next/swc-linux-arm64-gnu": "14.0.1", - "@next/swc-linux-arm64-musl": "14.0.1", - "@next/swc-linux-x64-gnu": "14.0.1", - "@next/swc-linux-x64-musl": "14.0.1", - "@next/swc-win32-arm64-msvc": "14.0.1", - "@next/swc-win32-ia32-msvc": "14.0.1", - "@next/swc-win32-x64-msvc": "14.0.1" + "@next/swc-darwin-arm64": "14.0.2", + "@next/swc-darwin-x64": "14.0.2", + "@next/swc-linux-arm64-gnu": "14.0.2", + "@next/swc-linux-arm64-musl": "14.0.2", + "@next/swc-linux-x64-gnu": "14.0.2", + "@next/swc-linux-x64-musl": "14.0.2", + "@next/swc-win32-arm64-msvc": "14.0.2", + "@next/swc-win32-ia32-msvc": "14.0.2", + "@next/swc-win32-x64-msvc": "14.0.2" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/package.json b/package.json index 19db694..83318bb 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.292.0", - "next": "14.0.1", + "next": "14.0.2", "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", From c3d4902ae546909ccaec39ebff7199a2953b459a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:30:17 +0000 Subject: [PATCH 009/315] build(devDep): bump eslint-config-next from 14.0.1 to 14.0.2 Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 14.0.1 to 14.0.2. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v14.0.2/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8dfd04..465509f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "autoprefixer": "^10.0.1", "conventional-changelog": "^5.1.0", "eslint": "^8", - "eslint-config-next": "14.0.1", + "eslint-config-next": "14.0.2", "postcss": "^8", "semantic-release": "^22.0.7", "semantic-release-export-data": "^1.0.1", @@ -466,9 +466,9 @@ "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.1.tgz", - "integrity": "sha512-bLjJMwXdzvhnQOnxvHoTTUh/+PYk6FF/DCgHi4BXwXCINer+o1ZYfL9aVeezj/oI7wqGJOqwGIXrlBvPbAId3w==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.2.tgz", + "integrity": "sha512-APrYFsXfAhnysycqxHcpg6Y4i7Ukp30GzVSZQRKT3OczbzkqGjt33vNhScmgoOXYBU1CfkwgtXmNxdiwv1jKmg==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -3526,12 +3526,12 @@ } }, "node_modules/eslint-config-next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.1.tgz", - "integrity": "sha512-QfIFK2WD39H4WOespjgf6PLv9Bpsd7KGGelCtmq4l67nGvnlsGpuvj0hIT+aIy6p5gKH+lAChYILsyDlxP52yg==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.2.tgz", + "integrity": "sha512-CasWThlsyIcg/a+clU6KVOMTieuDhTztsrqvniP6AsRki9v7FnojTa7vKQOYM8QSOsQdZ/aElLD1Y2Oc8/PsIg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.0.1", + "@next/eslint-plugin-next": "14.0.2", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", diff --git a/package.json b/package.json index 83318bb..78b0229 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "autoprefixer": "^10.0.1", "conventional-changelog": "^5.1.0", "eslint": "^8", - "eslint-config-next": "14.0.1", + "eslint-config-next": "14.0.2", "postcss": "^8", "semantic-release": "^22.0.7", "semantic-release-export-data": "^1.0.1", From 51b0a06e433765e6ec33f88a163d04b3f6ccf2ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 15:53:59 +0000 Subject: [PATCH 010/315] build(devDep): bump @types/node from 20.9.0 to 20.9.1 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.9.0 to 20.9.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 465509f..5cdf8d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", - "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "version": "20.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.1.tgz", + "integrity": "sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 485b5ee7e7b7a03009a93592f700026a75c9340f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 15:55:58 +0000 Subject: [PATCH 011/315] build(devDep): bump semantic-release from 22.0.7 to 22.0.8 Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 22.0.7 to 22.0.8. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v22.0.7...v22.0.8) --- updated-dependencies: - dependency-name: semantic-release dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 32 ++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5cdf8d9..7600ff5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "eslint": "^8", "eslint-config-next": "14.0.2", "postcss": "^8", - "semantic-release": "^22.0.7", + "semantic-release": "^22.0.8", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.0", "typescript": "^5" @@ -4623,6 +4623,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-from-esm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-1.3.1.tgz", + "integrity": "sha512-YltaeDglQ6wDZOC8ZAY2I8vK1Ag4XVbs4GhlvNALWz0ee5V+CMkcBhAKbs1iuJZ3fmfgrKFCDRwliM3OxyQMLA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "import-meta-resolve": "^4.0.0" + }, + "engines": { + "node": ">=16.20" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -9768,9 +9791,9 @@ } }, "node_modules/semantic-release": { - "version": "22.0.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.7.tgz", - "integrity": "sha512-Stx23Hjn7iU8GOAlhG3pHlR7AoNEahj9q7lKBP0rdK2BasGtJ4AWYh3zm1u3SCMuFiA8y4CE/Gu4RGKau1WiaQ==", + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.8.tgz", + "integrity": "sha512-55rb31jygqIYsGU/rY+gXXm2fnxBIWo9azOjxbqKsPnq7p70zwZ5v+xnD7TxJC+zvS3sy1eHLGXYWCaX3WI76A==", "dev": true, "dependencies": { "@semantic-release/commit-analyzer": "^11.0.0", @@ -9789,6 +9812,7 @@ "git-log-parser": "^1.2.0", "hook-std": "^3.0.0", "hosted-git-info": "^7.0.0", + "import-from-esm": "^1.3.1", "lodash-es": "^4.17.21", "marked": "^9.0.0", "marked-terminal": "^6.0.0", diff --git a/package.json b/package.json index 78b0229..11499d0 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "eslint": "^8", "eslint-config-next": "14.0.2", "postcss": "^8", - "semantic-release": "^22.0.7", + "semantic-release": "^22.0.8", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.0", "typescript": "^5" From 8de6ef4416bb183af32d38f8f2a997ddf1b7c7a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 15:59:38 +0000 Subject: [PATCH 012/315] build(devDep): bump eslint-config-next from 14.0.2 to 14.0.3 Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 14.0.2 to 14.0.3. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v14.0.3/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7600ff5..b96ebac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "autoprefixer": "^10.0.1", "conventional-changelog": "^5.1.0", "eslint": "^8", - "eslint-config-next": "14.0.2", + "eslint-config-next": "14.0.3", "postcss": "^8", "semantic-release": "^22.0.8", "semantic-release-export-data": "^1.0.1", @@ -466,9 +466,9 @@ "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.2.tgz", - "integrity": "sha512-APrYFsXfAhnysycqxHcpg6Y4i7Ukp30GzVSZQRKT3OczbzkqGjt33vNhScmgoOXYBU1CfkwgtXmNxdiwv1jKmg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.3.tgz", + "integrity": "sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -3526,12 +3526,12 @@ } }, "node_modules/eslint-config-next": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.2.tgz", - "integrity": "sha512-CasWThlsyIcg/a+clU6KVOMTieuDhTztsrqvniP6AsRki9v7FnojTa7vKQOYM8QSOsQdZ/aElLD1Y2Oc8/PsIg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.3.tgz", + "integrity": "sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.0.2", + "@next/eslint-plugin-next": "14.0.3", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", diff --git a/package.json b/package.json index 11499d0..0f65f4c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "autoprefixer": "^10.0.1", "conventional-changelog": "^5.1.0", "eslint": "^8", - "eslint-config-next": "14.0.2", + "eslint-config-next": "14.0.3", "postcss": "^8", "semantic-release": "^22.0.8", "semantic-release-export-data": "^1.0.1", From 4ce50420fc707fd10ff0b64cff7d3d41daeb230d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 16:01:41 +0000 Subject: [PATCH 013/315] build(deps): bump next from 14.0.2 to 14.0.3 Bumps [next](https://github.com/vercel/next.js) from 14.0.2 to 14.0.3. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v14.0.2...v14.0.3) --- updated-dependencies: - dependency-name: next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 88 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index b96ebac..8cc3004 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.292.0", - "next": "14.0.2", + "next": "14.0.3", "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", @@ -461,9 +461,9 @@ } }, "node_modules/@next/env": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.2.tgz", - "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA==" + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz", + "integrity": "sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.0.3", @@ -475,9 +475,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.2.tgz", - "integrity": "sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", + "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", "cpu": [ "arm64" ], @@ -490,9 +490,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.2.tgz", - "integrity": "sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", + "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", "cpu": [ "x64" ], @@ -505,9 +505,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.2.tgz", - "integrity": "sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", + "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", "cpu": [ "arm64" ], @@ -520,9 +520,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.2.tgz", - "integrity": "sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", + "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", "cpu": [ "arm64" ], @@ -535,9 +535,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.2.tgz", - "integrity": "sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz", + "integrity": "sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==", "cpu": [ "x64" ], @@ -550,9 +550,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.2.tgz", - "integrity": "sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz", + "integrity": "sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==", "cpu": [ "x64" ], @@ -565,9 +565,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.2.tgz", - "integrity": "sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", + "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", "cpu": [ "arm64" ], @@ -580,9 +580,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.2.tgz", - "integrity": "sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", + "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", "cpu": [ "ia32" ], @@ -595,9 +595,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.2.tgz", - "integrity": "sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", + "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", "cpu": [ "x64" ], @@ -5664,11 +5664,11 @@ "dev": true }, "node_modules/next": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.2.tgz", - "integrity": "sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz", + "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==", "dependencies": { - "@next/env": "14.0.2", + "@next/env": "14.0.3", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", @@ -5683,15 +5683,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.2", - "@next/swc-darwin-x64": "14.0.2", - "@next/swc-linux-arm64-gnu": "14.0.2", - "@next/swc-linux-arm64-musl": "14.0.2", - "@next/swc-linux-x64-gnu": "14.0.2", - "@next/swc-linux-x64-musl": "14.0.2", - "@next/swc-win32-arm64-msvc": "14.0.2", - "@next/swc-win32-ia32-msvc": "14.0.2", - "@next/swc-win32-x64-msvc": "14.0.2" + "@next/swc-darwin-arm64": "14.0.3", + "@next/swc-darwin-x64": "14.0.3", + "@next/swc-linux-arm64-gnu": "14.0.3", + "@next/swc-linux-arm64-musl": "14.0.3", + "@next/swc-linux-x64-gnu": "14.0.3", + "@next/swc-linux-x64-musl": "14.0.3", + "@next/swc-win32-arm64-msvc": "14.0.3", + "@next/swc-win32-ia32-msvc": "14.0.3", + "@next/swc-win32-x64-msvc": "14.0.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/package.json b/package.json index 0f65f4c..b4c20a4 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.292.0", - "next": "14.0.2", + "next": "14.0.3", "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", From 52764b23575f1a749bf374d0639670a689c274d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:21:40 +0000 Subject: [PATCH 014/315] build(devDep): bump eslint from 8.53.0 to 8.54.0 Bumps [eslint](https://github.com/eslint/eslint) from 8.53.0 to 8.54.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.53.0...v8.54.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8cc3004..c096d81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -324,9 +324,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3471,15 +3471,15 @@ } }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", + "@eslint/js": "8.54.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", From 75759df59968cf53a8b43a503814350edaed07d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:23:48 +0000 Subject: [PATCH 015/315] build(devDep): bump @types/node from 20.9.1 to 20.9.2 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.9.1 to 20.9.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c096d81..5218315 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.1.tgz", - "integrity": "sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA==", + "version": "20.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz", + "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From a3d3b06947f83a225540175b0e6dcb0cc4037c5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:36:35 +0000 Subject: [PATCH 016/315] build(devDep): bump @types/node from 20.9.2 to 20.9.3 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.9.2 to 20.9.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5218315..de9aae7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz", - "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", + "version": "20.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.3.tgz", + "integrity": "sha512-nk5wXLAXGBKfrhLB0cyHGbSqopS+nz0BUgZkUQqSHSSgdee0kssp1IAqlQOu333bW+gMNs2QREx7iynm19Abxw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 04d206aa2fb031f47cff61c5d059f99128713771 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:39:23 +0000 Subject: [PATCH 017/315] build(devDep): bump @types/react from 18.2.37 to 18.2.38 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.37 to 18.2.38. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index de9aae7..7ab39f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", - "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", + "version": "18.2.38", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.38.tgz", + "integrity": "sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 80fbc6d5fc4921ed35902532da62b6c274c5bdcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:41:23 +0000 Subject: [PATCH 018/315] build(devDep): bump @types/react-dom from 18.2.15 to 18.2.16 Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.2.15 to 18.2.16. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) --- updated-dependencies: - dependency-name: "@types/react-dom" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7ab39f7..12f12a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1802,9 +1802,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.15", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", - "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", + "version": "18.2.16", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.16.tgz", + "integrity": "sha512-766c37araZ9vxtYs25gvY2wNdFWsT2ZiUvOd0zMhTaoGj6B911N8CKQWgXXJoPMLF3J82thpRqQA7Rf3rBwyJw==", "devOptional": true, "dependencies": { "@types/react": "*" From 85fcae3773a91018ad4d6042a00a670ca5f5e13b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:44:00 +0000 Subject: [PATCH 019/315] build(devDep): bump typescript from 5.2.2 to 5.3.2 Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.2.2 to 5.3.2. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.2.2...v5.3.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12f12a8..6dbd424 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10719,9 +10719,9 @@ } }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", "dev": true, "bin": { "tsc": "bin/tsc", From 4e6a4227b0ae475d23e3d31f65a74ee98705d2f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Nov 2023 15:15:19 +0000 Subject: [PATCH 020/315] build(devDep): bump @types/node from 20.9.3 to 20.9.4 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.9.3 to 20.9.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6dbd424..587feee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.9.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.3.tgz", - "integrity": "sha512-nk5wXLAXGBKfrhLB0cyHGbSqopS+nz0BUgZkUQqSHSSgdee0kssp1IAqlQOu333bW+gMNs2QREx7iynm19Abxw==", + "version": "20.9.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz", + "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 0052554a1eb7bc829da772b30aa467b6fa2871ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Nov 2023 15:19:32 +0000 Subject: [PATCH 021/315] build(devDep): bump @types/node from 20.9.4 to 20.10.0 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.9.4 to 20.10.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 587feee..1b5e8eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.9.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz", - "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==", + "version": "20.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz", + "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From efb256c360544ca494488b1c6d8a2cd56009c1f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Nov 2023 15:21:33 +0000 Subject: [PATCH 022/315] build(deps): bump lucide-react from 0.292.0 to 0.293.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.292.0 to 0.293.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.293.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b5e8eb..dc20032 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.292.0", + "lucide-react": "^0.293.0", "next": "14.0.3", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.292.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.292.0.tgz", - "integrity": "sha512-rRgUkpEHWpa5VCT66YscInCQmQuPCB1RFRzkkxMxg4b+jaL0V12E3riWWR2Sh5OIiUhCwGW/ZExuEO4Az32E6Q==", + "version": "0.293.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.293.0.tgz", + "integrity": "sha512-g3AN0EYITCpAjNgLHrKrFWvIJzZy0Y9OPBaonyKw1cM+nZE6piOM+TiuQdYfha7oa76TMiDaWXQHE44CEqsrzw==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index b4c20a4..b8a47b9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.292.0", + "lucide-react": "^0.293.0", "next": "14.0.3", "next-themes": "^0.2.1", "react": "^18", From 34bda24bc880e1a9fb3f79488f6160ca7a0a4e49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Nov 2023 15:23:36 +0000 Subject: [PATCH 023/315] build(devDep): bump @types/react-dom from 18.2.16 to 18.2.17 Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.2.16 to 18.2.17. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) --- updated-dependencies: - dependency-name: "@types/react-dom" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index dc20032..2ba4041 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1802,9 +1802,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.16", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.16.tgz", - "integrity": "sha512-766c37araZ9vxtYs25gvY2wNdFWsT2ZiUvOd0zMhTaoGj6B911N8CKQWgXXJoPMLF3J82thpRqQA7Rf3rBwyJw==", + "version": "18.2.17", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", + "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", "devOptional": true, "dependencies": { "@types/react": "*" From f844319cc4e373b4c6c32d99222dfd83784d13a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 15:16:33 +0000 Subject: [PATCH 024/315] build(devDep): bump @types/react from 18.2.38 to 18.2.39 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.38 to 18.2.39. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ba4041..0baee89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.38", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.38.tgz", - "integrity": "sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==", + "version": "18.2.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.39.tgz", + "integrity": "sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 2f664774b086386a39020b5e91ebddae33ca528c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 15:45:45 +0000 Subject: [PATCH 025/315] build(deps): bump lucide-react from 0.293.0 to 0.294.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.293.0 to 0.294.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.294.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0baee89..89270dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.293.0", + "lucide-react": "^0.294.0", "next": "14.0.3", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.293.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.293.0.tgz", - "integrity": "sha512-g3AN0EYITCpAjNgLHrKrFWvIJzZy0Y9OPBaonyKw1cM+nZE6piOM+TiuQdYfha7oa76TMiDaWXQHE44CEqsrzw==", + "version": "0.294.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.294.0.tgz", + "integrity": "sha512-V7o0/VECSGbLHn3/1O67FUgBwWB+hmzshrgDVRJQhMh8uj5D3HBuIvhuAmQTtlupILSplwIZg5FTc4tTKMA2SA==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index b8a47b9..ddf6ba5 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.293.0", + "lucide-react": "^0.294.0", "next": "14.0.3", "next-themes": "^0.2.1", "react": "^18", From 3faa8fc8b626fcc92c7efa5e13719648beeeabc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:07:33 +0000 Subject: [PATCH 026/315] build(devDep): bump @types/node from 20.10.0 to 20.10.1 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.0 to 20.10.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89270dd..1c6cde8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz", - "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==", + "version": "20.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.1.tgz", + "integrity": "sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From b121d6ee7ce7effb26e3774812f8c003d350e30f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:23:10 +0000 Subject: [PATCH 027/315] build(devDep): bump @types/node from 20.10.1 to 20.10.3 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.1 to 20.10.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1c6cde8..7914211 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.1.tgz", - "integrity": "sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==", + "version": "20.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.3.tgz", + "integrity": "sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 98e4553fb19d9744ba22bed431034300cac0eb71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:25:34 +0000 Subject: [PATCH 028/315] build(devDep): bump @types/react from 18.2.39 to 18.2.41 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.39 to 18.2.41. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7914211..b1db822 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.39", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.39.tgz", - "integrity": "sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==", + "version": "18.2.41", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.41.tgz", + "integrity": "sha512-CwOGr/PiLiNBxEBqpJ7fO3kocP/2SSuC9fpH5K7tusrg4xPSRT/193rzolYwQnTN02We/ATXKnb6GqA5w4fRxw==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 18727f56bdeeee53ba8c9a67f10b924991de7923 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:28:23 +0000 Subject: [PATCH 029/315] build(deps): bump tailwind-merge from 2.0.0 to 2.1.0 Bumps [tailwind-merge](https://github.com/dcastil/tailwind-merge) from 2.0.0 to 2.1.0. - [Release notes](https://github.com/dcastil/tailwind-merge/releases) - [Commits](https://github.com/dcastil/tailwind-merge/compare/v2.0.0...v2.1.0) --- updated-dependencies: - dependency-name: tailwind-merge dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index b1db822..8d2632e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", - "tailwind-merge": "^2.0.0", + "tailwind-merge": "^2.1.0", "tailwindcss-animate": "^1.0.7" }, "devDependencies": { @@ -256,9 +256,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", + "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -10410,11 +10410,11 @@ } }, "node_modules/tailwind-merge": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.0.0.tgz", - "integrity": "sha512-WO8qghn9yhsldLSg80au+3/gY9E4hFxIvQ3qOmlpXnqpDKoMruKfi/56BbbMg6fHTQJ9QD3cc79PoWqlaQE4rw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.1.0.tgz", + "integrity": "sha512-l11VvI4nSwW7MtLSLYT4ldidDEUwQAMWuSHk7l4zcXZDgnCRa0V3OdCwFfM7DCzakVXMNRwAeje9maFFXT71dQ==", "dependencies": { - "@babel/runtime": "^7.23.1" + "@babel/runtime": "^7.23.5" }, "funding": { "type": "github", diff --git a/package.json b/package.json index ddf6ba5..8c19b98 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", - "tailwind-merge": "^2.0.0", + "tailwind-merge": "^2.1.0", "tailwindcss-animate": "^1.0.7" }, "devDependencies": { From 7a5658c89636a5791232b6baf1ab5a58cdbcbddd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:31:27 +0000 Subject: [PATCH 030/315] build(devDep): bump postcss from 8.4.31 to 8.4.32 Bumps [postcss](https://github.com/postcss/postcss) from 8.4.31 to 8.4.32. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.31...8.4.32) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d2632e..aab2d82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5629,9 +5629,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -5718,6 +5718,33 @@ "react-dom": "*" } }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/node-emoji": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.0.tgz", @@ -9162,9 +9189,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "funding": [ { "type": "opencollective", @@ -9180,7 +9207,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, From 7b90cb6da4363aa78c8171cf6422b5f9350a6a9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:33:44 +0000 Subject: [PATCH 031/315] build(devDep): bump eslint from 8.54.0 to 8.55.0 Bumps [eslint](https://github.com/eslint/eslint) from 8.54.0 to 8.55.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.54.0...v8.55.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index aab2d82..8d22d7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -301,9 +301,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -324,9 +324,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3471,15 +3471,15 @@ } }, "node_modules/eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", From 221e8bb236db7a97d34cd8d73acf13b4c64abb17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 15:42:55 +0000 Subject: [PATCH 032/315] build(devDep): bump semantic-release from 22.0.8 to 22.0.9 Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 22.0.8 to 22.0.9. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v22.0.8...v22.0.9) --- updated-dependencies: - dependency-name: semantic-release dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 29 +++++++++++++++++++---------- package.json | 2 +- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d22d7c..f73067f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "eslint": "^8", "eslint-config-next": "14.0.3", "postcss": "^8", - "semantic-release": "^22.0.8", + "semantic-release": "^22.0.9", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.0", "typescript": "^5" @@ -3042,15 +3042,15 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -3325,6 +3325,15 @@ "node": "^18.17 || >=20.6.1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9818,9 +9827,9 @@ } }, "node_modules/semantic-release": { - "version": "22.0.8", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.8.tgz", - "integrity": "sha512-55rb31jygqIYsGU/rY+gXXm2fnxBIWo9azOjxbqKsPnq7p70zwZ5v+xnD7TxJC+zvS3sy1eHLGXYWCaX3WI76A==", + "version": "22.0.9", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.9.tgz", + "integrity": "sha512-4uDzd0r57oqExHsVad4LS86CagqEblCsWBZ3cZSxsWex4nkfLX0L+e5ImBDjeuzot1Ad8K3eE+Cm2OLJE7TsvQ==", "dev": true, "dependencies": { "@semantic-release/commit-analyzer": "^11.0.0", @@ -9829,7 +9838,7 @@ "@semantic-release/npm": "^11.0.0", "@semantic-release/release-notes-generator": "^12.0.0", "aggregate-error": "^5.0.0", - "cosmiconfig": "^8.0.0", + "cosmiconfig": "^9.0.0", "debug": "^4.0.0", "env-ci": "^10.0.0", "execa": "^8.0.0", diff --git a/package.json b/package.json index 8c19b98..bbcb569 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "eslint": "^8", "eslint-config-next": "14.0.3", "postcss": "^8", - "semantic-release": "^22.0.8", + "semantic-release": "^22.0.9", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.0", "typescript": "^5" From 0bd6a9053a801a98c0000ec9bf4b5ce98cb69eb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 15:45:05 +0000 Subject: [PATCH 033/315] build(devDep): bump @types/react from 18.2.41 to 18.2.42 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.41 to 18.2.42. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f73067f..886ebad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.41", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.41.tgz", - "integrity": "sha512-CwOGr/PiLiNBxEBqpJ7fO3kocP/2SSuC9fpH5K7tusrg4xPSRT/193rzolYwQnTN02We/ATXKnb6GqA5w4fRxw==", + "version": "18.2.42", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.42.tgz", + "integrity": "sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 29256603d4b8673474961745edb3abab529ba6df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 15:47:22 +0000 Subject: [PATCH 034/315] build(devDep): bump tailwindcss from 3.3.5 to 3.3.6 Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.3.5 to 3.3.6. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.3.5...v3.3.6) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 886ebad..53e2768 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "postcss": "^8", "semantic-release": "^22.0.9", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.3.0", + "tailwindcss": "^3.3.6", "typescript": "^5" } }, @@ -10458,9 +10458,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", - "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", + "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", diff --git a/package.json b/package.json index bbcb569..55bb30a 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "postcss": "^8", "semantic-release": "^22.0.9", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.3.0", + "tailwindcss": "^3.3.6", "typescript": "^5" } } From b9d01ae5f9053d7365e0d65b9ce47a7919e24295 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 16:04:01 +0000 Subject: [PATCH 035/315] build(devDep): bump semantic-release from 22.0.9 to 22.0.10 Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 22.0.9 to 22.0.10. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v22.0.9...v22.0.10) --- updated-dependencies: - dependency-name: semantic-release dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 29 ++++++++++------------------- package.json | 2 +- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 53e2768..8a025f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "eslint": "^8", "eslint-config-next": "14.0.3", "postcss": "^8", - "semantic-release": "^22.0.9", + "semantic-release": "^22.0.10", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.6", "typescript": "^5" @@ -3042,15 +3042,15 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { - "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { "node": ">=14" @@ -3325,15 +3325,6 @@ "node": "^18.17 || >=20.6.1" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9827,9 +9818,9 @@ } }, "node_modules/semantic-release": { - "version": "22.0.9", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.9.tgz", - "integrity": "sha512-4uDzd0r57oqExHsVad4LS86CagqEblCsWBZ3cZSxsWex4nkfLX0L+e5ImBDjeuzot1Ad8K3eE+Cm2OLJE7TsvQ==", + "version": "22.0.10", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.10.tgz", + "integrity": "sha512-4ahPaOX+0UYpYlosjc/tfCzB/cqlnjN0/xSKGryEC4bOpuYSkoK+QHw7xDPmAuiMNBBvkFD+m3aVMENUr++CIg==", "dev": true, "dependencies": { "@semantic-release/commit-analyzer": "^11.0.0", @@ -9838,7 +9829,7 @@ "@semantic-release/npm": "^11.0.0", "@semantic-release/release-notes-generator": "^12.0.0", "aggregate-error": "^5.0.0", - "cosmiconfig": "^9.0.0", + "cosmiconfig": "^8.0.0", "debug": "^4.0.0", "env-ci": "^10.0.0", "execa": "^8.0.0", diff --git a/package.json b/package.json index 55bb30a..57aaf0a 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "eslint": "^8", "eslint-config-next": "14.0.3", "postcss": "^8", - "semantic-release": "^22.0.9", + "semantic-release": "^22.0.10", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.6", "typescript": "^5" From 719d649116d602555301941d1d627ee2eec98dc6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 15:40:39 +0000 Subject: [PATCH 036/315] build(devDep): bump typescript from 5.3.2 to 5.3.3 Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.3.2 to 5.3.3. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.3.2...v5.3.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a025f9..b2b7caa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10746,9 +10746,9 @@ } }, "node_modules/typescript": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", - "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "bin": { "tsc": "bin/tsc", From b823ff859c4c6b291a183dfd96787567554983de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 15:43:39 +0000 Subject: [PATCH 037/315] build(devDep): bump @types/node from 20.10.3 to 20.10.4 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.3 to 20.10.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2b7caa..bbf13c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.3.tgz", - "integrity": "sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==", + "version": "20.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", + "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 8cbe4f203583cb0a0275f28ae9fc5d2b99edbd77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Dec 2023 15:57:54 +0000 Subject: [PATCH 038/315] build(deps): bump next from 14.0.3 to 14.0.4 Bumps [next](https://github.com/vercel/next.js) from 14.0.3 to 14.0.4. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v14.0.3...v14.0.4) --- updated-dependencies: - dependency-name: next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 89 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 46 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbf13c8..59b688f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.294.0", - "next": "14.0.3", + "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", @@ -461,9 +461,9 @@ } }, "node_modules/@next/env": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz", - "integrity": "sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA==" + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", + "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.0.3", @@ -475,9 +475,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", - "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz", + "integrity": "sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==", "cpu": [ "arm64" ], @@ -490,9 +490,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", - "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz", + "integrity": "sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==", "cpu": [ "x64" ], @@ -505,9 +505,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", - "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.4.tgz", + "integrity": "sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==", "cpu": [ "arm64" ], @@ -520,9 +520,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", - "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.4.tgz", + "integrity": "sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==", "cpu": [ "arm64" ], @@ -535,9 +535,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz", - "integrity": "sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.4.tgz", + "integrity": "sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==", "cpu": [ "x64" ], @@ -550,9 +550,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz", - "integrity": "sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.4.tgz", + "integrity": "sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==", "cpu": [ "x64" ], @@ -565,9 +565,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", - "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.4.tgz", + "integrity": "sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==", "cpu": [ "arm64" ], @@ -580,9 +580,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", - "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.4.tgz", + "integrity": "sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==", "cpu": [ "ia32" ], @@ -595,9 +595,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", - "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.4.tgz", + "integrity": "sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==", "cpu": [ "x64" ], @@ -5664,14 +5664,15 @@ "dev": true }, "node_modules/next": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz", - "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", + "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", "dependencies": { - "@next/env": "14.0.3", + "@next/env": "14.0.4", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", + "graceful-fs": "^4.2.11", "postcss": "8.4.31", "styled-jsx": "5.1.1", "watchpack": "2.4.0" @@ -5683,15 +5684,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.3", - "@next/swc-darwin-x64": "14.0.3", - "@next/swc-linux-arm64-gnu": "14.0.3", - "@next/swc-linux-arm64-musl": "14.0.3", - "@next/swc-linux-x64-gnu": "14.0.3", - "@next/swc-linux-x64-musl": "14.0.3", - "@next/swc-win32-arm64-msvc": "14.0.3", - "@next/swc-win32-ia32-msvc": "14.0.3", - "@next/swc-win32-x64-msvc": "14.0.3" + "@next/swc-darwin-arm64": "14.0.4", + "@next/swc-darwin-x64": "14.0.4", + "@next/swc-linux-arm64-gnu": "14.0.4", + "@next/swc-linux-arm64-musl": "14.0.4", + "@next/swc-linux-x64-gnu": "14.0.4", + "@next/swc-linux-x64-musl": "14.0.4", + "@next/swc-win32-arm64-msvc": "14.0.4", + "@next/swc-win32-ia32-msvc": "14.0.4", + "@next/swc-win32-x64-msvc": "14.0.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/package.json b/package.json index 57aaf0a..b473233 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.294.0", - "next": "14.0.3", + "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", From c62ab832b776846b774ccc8c217827d748041c67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Dec 2023 15:59:55 +0000 Subject: [PATCH 039/315] build(devDep): bump eslint-config-next from 14.0.3 to 14.0.4 Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 14.0.3 to 14.0.4. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v14.0.4/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59b688f..2be9604 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "autoprefixer": "^10.0.1", "conventional-changelog": "^5.1.0", "eslint": "^8", - "eslint-config-next": "14.0.3", + "eslint-config-next": "14.0.4", "postcss": "^8", "semantic-release": "^22.0.10", "semantic-release-export-data": "^1.0.1", @@ -466,9 +466,9 @@ "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.3.tgz", - "integrity": "sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz", + "integrity": "sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -3526,12 +3526,12 @@ } }, "node_modules/eslint-config-next": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.3.tgz", - "integrity": "sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.4.tgz", + "integrity": "sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.0.3", + "@next/eslint-plugin-next": "14.0.4", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", diff --git a/package.json b/package.json index b473233..9481dbd 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "autoprefixer": "^10.0.1", "conventional-changelog": "^5.1.0", "eslint": "^8", - "eslint-config-next": "14.0.3", + "eslint-config-next": "14.0.4", "postcss": "^8", "semantic-release": "^22.0.10", "semantic-release-export-data": "^1.0.1", From 089809cd136075e3da580aec428d25e594586579 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 15:20:38 +0000 Subject: [PATCH 040/315] build(devDep): bump @types/react from 18.2.42 to 18.2.43 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.42 to 18.2.43. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2be9604..f6916ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.42", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.42.tgz", - "integrity": "sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==", + "version": "18.2.43", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.43.tgz", + "integrity": "sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From a50d54aed621903bb56b573cd177dadc1870ae6f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:41:24 +0000 Subject: [PATCH 041/315] build(devDep): bump semantic-release from 22.0.10 to 22.0.12 Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 22.0.10 to 22.0.12. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v22.0.10...v22.0.12) --- updated-dependencies: - dependency-name: semantic-release dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6916ca..0614c51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "eslint": "^8", "eslint-config-next": "14.0.4", "postcss": "^8", - "semantic-release": "^22.0.10", + "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.6", "typescript": "^5" @@ -9819,9 +9819,9 @@ } }, "node_modules/semantic-release": { - "version": "22.0.10", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.10.tgz", - "integrity": "sha512-4ahPaOX+0UYpYlosjc/tfCzB/cqlnjN0/xSKGryEC4bOpuYSkoK+QHw7xDPmAuiMNBBvkFD+m3aVMENUr++CIg==", + "version": "22.0.12", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.12.tgz", + "integrity": "sha512-0mhiCR/4sZb00RVFJIUlMuiBkW3NMpVIW2Gse7noqEMoFGkvfPPAImEQbkBV8xga4KOPP4FdTRYuLLy32R1fPw==", "dev": true, "dependencies": { "@semantic-release/commit-analyzer": "^11.0.0", diff --git a/package.json b/package.json index 9481dbd..fa4e70e 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "eslint": "^8", "eslint-config-next": "14.0.4", "postcss": "^8", - "semantic-release": "^22.0.10", + "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", "tailwindcss": "^3.3.6", "typescript": "^5" From a3c7b5468487b99909325aa2a1f46c14fda3bef2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 15:29:01 +0000 Subject: [PATCH 042/315] build(devDep): bump @types/react from 18.2.43 to 18.2.45 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.43 to 18.2.45. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0614c51..7ae9816 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.43.tgz", - "integrity": "sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA==", + "version": "18.2.45", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz", + "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 327337173a48212d2cce954ff9ec6e1fce585068 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 15:36:42 +0000 Subject: [PATCH 043/315] build(deps): bump lucide-react from 0.294.0 to 0.295.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.294.0 to 0.295.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.295.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7ae9816..b771682 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.294.0", + "lucide-react": "^0.295.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.294.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.294.0.tgz", - "integrity": "sha512-V7o0/VECSGbLHn3/1O67FUgBwWB+hmzshrgDVRJQhMh8uj5D3HBuIvhuAmQTtlupILSplwIZg5FTc4tTKMA2SA==", + "version": "0.295.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.295.0.tgz", + "integrity": "sha512-5tQQ8V4Qn9DZscW55OOk9i5z4R0TfJiMjLEwM1P1jqtY5aPD3AnY049Zfb+fyXAa1JcUS5o26Wsl/3dfvTue6w==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index fa4e70e..f13663c 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.294.0", + "lucide-react": "^0.295.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From 89b10cf44a28974c8ca77d8c8d2b15a485d5cc2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 15:24:54 +0000 Subject: [PATCH 044/315] build(deps): bump lucide-react from 0.295.0 to 0.297.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.295.0 to 0.297.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.297.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index b771682..230221f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.295.0", + "lucide-react": "^0.297.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.295.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.295.0.tgz", - "integrity": "sha512-5tQQ8V4Qn9DZscW55OOk9i5z4R0TfJiMjLEwM1P1jqtY5aPD3AnY049Zfb+fyXAa1JcUS5o26Wsl/3dfvTue6w==", + "version": "0.297.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.297.0.tgz", + "integrity": "sha512-PA3ddfQ1KXZbY8j4eBfd4gp5mDusacqVh/M1xNjHviQR+O0QVCmy2NazperLGm5zlU51p9amUB/apFqfsYa0zA==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index f13663c..3dc3516 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.295.0", + "lucide-react": "^0.297.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From cb5b1a8b36f445002d7f67a8f209b3f7a98f2fc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:36:08 +0000 Subject: [PATCH 045/315] build(devDep): bump @types/react-dom from 18.2.17 to 18.2.18 Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.2.17 to 18.2.18. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) --- updated-dependencies: - dependency-name: "@types/react-dom" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 230221f..a1e0bc7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1802,9 +1802,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", - "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", "devOptional": true, "dependencies": { "@types/react": "*" From a7923a9b61eef3c9982fb996b75ef2dc6909927f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:38:20 +0000 Subject: [PATCH 046/315] build(devDep): bump @types/node from 20.10.4 to 20.10.5 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.4 to 20.10.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1e0bc7..360eeec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1770,9 +1770,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", - "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 628dbdf82e013f544779fc36718374f1d9d45a54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:41:06 +0000 Subject: [PATCH 047/315] build(deps): bump lucide-react from 0.297.0 to 0.298.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.297.0 to 0.298.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.298.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 360eeec..4060760 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.297.0", + "lucide-react": "^0.298.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.297.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.297.0.tgz", - "integrity": "sha512-PA3ddfQ1KXZbY8j4eBfd4gp5mDusacqVh/M1xNjHviQR+O0QVCmy2NazperLGm5zlU51p9amUB/apFqfsYa0zA==", + "version": "0.298.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.298.0.tgz", + "integrity": "sha512-tWoxZ663Zf/n8VxXTHnTJsU/w1ysWT1LORnIL1pzqElFdSqBhWbZeJ3sLdCZ5FpzpbkpkYEtluhuTyG2BTDYNQ==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index 3dc3516..454ced2 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.297.0", + "lucide-react": "^0.298.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From a72452c9f7d99ec59d66aacb4ed06c8ce441c2a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:48:20 +0000 Subject: [PATCH 048/315] build(devDep): bump eslint from 8.55.0 to 8.56.0 Bumps [eslint](https://github.com/eslint/eslint) from 8.55.0 to 8.56.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.55.0...v8.56.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4060760..5361836 100644 --- a/package-lock.json +++ b/package-lock.json @@ -324,9 +324,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3471,15 +3471,15 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", From 356fbca15d023565aafe0e3a0e243232cb1d0914 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 15:10:13 +0000 Subject: [PATCH 049/315] build(devDep): bump tailwindcss from 3.3.6 to 3.3.7 Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.3.6 to 3.3.7. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.3.7/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.3.6...v3.3.7) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5361836..36e383a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "postcss": "^8", "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.3.6", + "tailwindcss": "^3.3.7", "typescript": "^5" } }, @@ -10450,9 +10450,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", - "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.7.tgz", + "integrity": "sha512-pjgQxDZPvyS/nG3ZYkyCvsbONJl7GdOejfm24iMt2ElYQQw8Jc4p0m8RdMp7mznPD0kUhfzwV3zAwa80qI0zmQ==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", diff --git a/package.json b/package.json index 454ced2..ad91e18 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "postcss": "^8", "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.3.6", + "tailwindcss": "^3.3.7", "typescript": "^5" } } From c59b3af37bd6d61049bcb942200e6e06affc2d7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 15:53:29 +0000 Subject: [PATCH 050/315] build(deps): bump lucide-react from 0.298.0 to 0.299.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.298.0 to 0.299.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.299.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36e383a..253c7df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.298.0", + "lucide-react": "^0.299.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.298.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.298.0.tgz", - "integrity": "sha512-tWoxZ663Zf/n8VxXTHnTJsU/w1ysWT1LORnIL1pzqElFdSqBhWbZeJ3sLdCZ5FpzpbkpkYEtluhuTyG2BTDYNQ==", + "version": "0.299.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.299.0.tgz", + "integrity": "sha512-59MiDzDzFI/efHhb4n0vGdXelMNwou7JlAFvVS4boA1G/7aYU7garPciYo73CODzkhrhz0JOgdtSTPSe5dMrlQ==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index ad91e18..c15246d 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.298.0", + "lucide-react": "^0.299.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From f21b37e28add6501a76813025bdca7eda5f3f859 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 15:55:33 +0000 Subject: [PATCH 051/315] build(devDep): bump tailwindcss from 3.3.7 to 3.4.0 Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.3.7 to 3.4.0. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.3.7...v3.4.0) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 253c7df..6ec81c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "postcss": "^8", "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.3.7", + "tailwindcss": "^3.4.0", "typescript": "^5" } }, @@ -10450,9 +10450,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.7.tgz", - "integrity": "sha512-pjgQxDZPvyS/nG3ZYkyCvsbONJl7GdOejfm24iMt2ElYQQw8Jc4p0m8RdMp7mznPD0kUhfzwV3zAwa80qI0zmQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", + "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", diff --git a/package.json b/package.json index c15246d..6151ccc 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "postcss": "^8", "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.3.7", + "tailwindcss": "^3.4.0", "typescript": "^5" } } From 3fea4ecd33764da70e2bbce01cef0e382b348605 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:11:11 +0000 Subject: [PATCH 052/315] build(deps): bump lucide-react from 0.299.0 to 0.300.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.299.0 to 0.300.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.300.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6ec81c5..520ba40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.299.0", + "lucide-react": "^0.300.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.299.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.299.0.tgz", - "integrity": "sha512-59MiDzDzFI/efHhb4n0vGdXelMNwou7JlAFvVS4boA1G/7aYU7garPciYo73CODzkhrhz0JOgdtSTPSe5dMrlQ==", + "version": "0.300.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.300.0.tgz", + "integrity": "sha512-rQxUUCmWAvNLoAsMZ5j04b2+OJv6UuNLYMY7VK0eVlm4aTwUEjEEHc09/DipkNIlhXUSDn2xoyIzVT0uh7dRsg==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index 6151ccc..0978fb3 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.299.0", + "lucide-react": "^0.300.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From bdfb3d8a3c91d7fd436823cdd6bd29e760204d4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:13:23 +0000 Subject: [PATCH 053/315] build(deps): bump tailwind-merge from 2.1.0 to 2.2.0 Bumps [tailwind-merge](https://github.com/dcastil/tailwind-merge) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/dcastil/tailwind-merge/releases) - [Commits](https://github.com/dcastil/tailwind-merge/compare/v2.1.0...v2.2.0) --- updated-dependencies: - dependency-name: tailwind-merge dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 520ba40..b52a7da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", - "tailwind-merge": "^2.1.0", + "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7" }, "devDependencies": { @@ -10438,9 +10438,9 @@ } }, "node_modules/tailwind-merge": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.1.0.tgz", - "integrity": "sha512-l11VvI4nSwW7MtLSLYT4ldidDEUwQAMWuSHk7l4zcXZDgnCRa0V3OdCwFfM7DCzakVXMNRwAeje9maFFXT71dQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.0.tgz", + "integrity": "sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==", "dependencies": { "@babel/runtime": "^7.23.5" }, diff --git a/package.json b/package.json index 0978fb3..4af3c6e 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", - "tailwind-merge": "^2.1.0", + "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7" }, "devDependencies": { From 6b534bfb8f19bba91bca969a0f615a8a4cc96095 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 15:55:34 +0000 Subject: [PATCH 054/315] build(deps): bump lucide-react from 0.300.0 to 0.302.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.300.0 to 0.302.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.302.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index b52a7da..25aa892 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.300.0", + "lucide-react": "^0.302.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.300.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.300.0.tgz", - "integrity": "sha512-rQxUUCmWAvNLoAsMZ5j04b2+OJv6UuNLYMY7VK0eVlm4aTwUEjEEHc09/DipkNIlhXUSDn2xoyIzVT0uh7dRsg==", + "version": "0.302.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.302.0.tgz", + "integrity": "sha512-JZX+1fjpqxvQmEgItvPOAwRlqf0Eg9dSZMxljA2/V2M6dluOhQCPBhewIlSJWgkNu0M36kViOgmTAMnDaAMOFw==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index 4af3c6e..14fe9da 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.300.0", + "lucide-react": "^0.302.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From fc543c674f77da482d6daf769b86050b7140fd20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Dec 2023 16:04:09 +0000 Subject: [PATCH 055/315] build(deps): bump lucide-react from 0.302.0 to 0.303.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.302.0 to 0.303.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.303.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 25aa892..6335e5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.302.0", + "lucide-react": "^0.303.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5479,9 +5479,9 @@ } }, "node_modules/lucide-react": { - "version": "0.302.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.302.0.tgz", - "integrity": "sha512-JZX+1fjpqxvQmEgItvPOAwRlqf0Eg9dSZMxljA2/V2M6dluOhQCPBhewIlSJWgkNu0M36kViOgmTAMnDaAMOFw==", + "version": "0.303.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.303.0.tgz", + "integrity": "sha512-B0B9T3dLEFBYPCUlnUS1mvAhW1craSbF9HO+JfBjAtpFUJ7gMIqmEwNSclikY3RiN2OnCkj/V1ReAQpaHae8Bg==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index 14fe9da..25f57f6 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", - "lucide-react": "^0.302.0", + "lucide-react": "^0.303.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From ccd098fd43632b8ef5a48337d9df6923edcf1faa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Dec 2023 16:06:58 +0000 Subject: [PATCH 056/315] build(devDep): bump @types/react from 18.2.45 to 18.2.46 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.45 to 18.2.46. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6335e5e..24b3ab6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1791,9 +1791,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz", - "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==", + "version": "18.2.46", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz", + "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 27c1b8ff379a5503f72c807feec90fa8447cbfdc Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 18:05:30 -0700 Subject: [PATCH 057/315] feat(components): add `Navbar` component ## what - add navbar - add links - add theme toggle - place navbar as `sticky` (will display on top when scrolling) ## how ## why ## where - ./src/components/navbar.tsx ## usage --- src/components/navbar.tsx | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/components/navbar.tsx diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx new file mode 100644 index 0000000..b8aaed9 --- /dev/null +++ b/src/components/navbar.tsx @@ -0,0 +1,33 @@ +import Link from "next/link"; + +import { cn } from "@/lib/utils"; +import { ModeToggle } from "@/components/darkmode-toggle"; + +const links = [{ label: "Uva uHunt", href: "/" }]; + +const Navbar = ({ className, ...props }: React.HTMLAttributes) => { + return ( +
+ +
+ ); +}; + +export default Navbar; From 87e909d8da3047999051c8d27f2e0ddcb0a6a74a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 18:08:35 -0700 Subject: [PATCH 058/315] chore(layout): render `Navbar` component ## what - render `Navbar` component ## how ## why ## where - ./src/app/layout.tsx ## usage --- src/app/layout.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index d498d66..6a87c05 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,6 +1,7 @@ import type { Metadata } from "next"; import { Inter as FontSans } from "next/font/google"; import { ThemeProvider } from "@/components/theme-provider"; +import Navbar from "@/components/navbar"; import "./globals.css"; import { cn } from "@/lib/utils"; @@ -31,10 +32,11 @@ export default function RootLayout({ > + {children} From 1b249ea900e4936e21e931548e808d8378d64c02 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 18:35:29 -0700 Subject: [PATCH 059/315] build(npm): add package `moment` ## what - add package `moment` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 242 ++-------------------------------------------- package.json | 1 + 2 files changed, 11 insertions(+), 232 deletions(-) diff --git a/package-lock.json b/package-lock.json index 24b3ab6..6e3cf40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.303.0", + "moment": "^2.30.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5612,6 +5613,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/moment": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.0.tgz", + "integrity": "sha512-8XSlYFhOSJvnEJOas6RpDCNU2PYeVC+oE33d3Z9tIsXpD8LIgBeqrHPjP8es4b3fcJpf07D1PJWGDUfdbqDLnQ==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5996,17 +6005,14 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6023,7 +6029,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6035,13 +6040,11 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6058,7 +6061,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6073,13 +6075,11 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6095,7 +6095,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6107,7 +6106,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6120,7 +6118,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6133,7 +6130,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6147,7 +6143,6 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6194,7 +6189,6 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6213,7 +6207,6 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6225,7 +6218,6 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6237,7 +6229,6 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6256,7 +6247,6 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6272,7 +6262,6 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6287,7 +6276,6 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6302,7 +6290,6 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6311,7 +6298,6 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6320,7 +6306,6 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6338,7 +6323,6 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6350,7 +6334,6 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6362,7 +6345,6 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6378,17 +6360,14 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6400,7 +6379,6 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", - "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6409,7 +6387,6 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6423,7 +6400,6 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6436,7 +6412,6 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6445,7 +6420,6 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6458,7 +6432,6 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6467,7 +6440,6 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6479,7 +6451,6 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6492,7 +6463,6 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6501,7 +6471,6 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6516,19 +6485,16 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6541,13 +6507,11 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -6567,7 +6531,6 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6582,7 +6545,6 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6591,7 +6553,6 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6600,7 +6561,6 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", - "dev": true, "funding": [ { "type": "github", @@ -6624,7 +6584,6 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6633,7 +6592,6 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6656,7 +6614,6 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6668,7 +6625,6 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6677,7 +6633,6 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", - "dev": true, "funding": [ { "type": "github", @@ -6692,7 +6647,6 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -6704,7 +6658,6 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6713,7 +6666,6 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6726,7 +6678,6 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6741,7 +6692,6 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6750,7 +6700,6 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6759,7 +6708,6 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6771,13 +6719,11 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", - "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -6786,7 +6732,6 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6799,19 +6744,16 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6825,7 +6767,6 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6840,7 +6781,6 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -6852,7 +6792,6 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6869,13 +6808,11 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6887,13 +6824,11 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", - "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -6902,29 +6837,24 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6933,13 +6863,11 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6948,7 +6876,6 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6957,13 +6884,11 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6972,7 +6897,6 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6988,7 +6912,6 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7000,13 +6923,11 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7025,7 +6946,6 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7047,13 +6967,11 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7065,13 +6983,11 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7083,16 +6999,13 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7102,7 +7015,6 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -7122,7 +7034,6 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7134,7 +7045,6 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7143,7 +7053,6 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7152,7 +7061,6 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7161,7 +7069,6 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7179,13 +7086,11 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7194,7 +7099,6 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7206,7 +7110,6 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7218,7 +7121,6 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7227,19 +7129,16 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7257,7 +7156,6 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7266,7 +7164,6 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7275,7 +7172,6 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", - "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7284,19 +7180,16 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7309,7 +7202,6 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7329,7 +7221,6 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7351,7 +7242,6 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7363,7 +7253,6 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7376,7 +7265,6 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7389,7 +7277,6 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7404,7 +7291,6 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7423,7 +7309,6 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7435,7 +7320,6 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7448,7 +7332,6 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7464,7 +7347,6 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7473,7 +7355,6 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7495,7 +7376,6 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7510,7 +7390,6 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7519,7 +7398,6 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7531,7 +7409,6 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7543,7 +7420,6 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7560,7 +7436,6 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7572,7 +7447,6 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7584,7 +7458,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7594,7 +7467,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7606,7 +7478,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7618,7 +7489,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7630,7 +7500,6 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7642,7 +7511,6 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7654,7 +7522,6 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7667,7 +7534,6 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7679,7 +7545,6 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7691,13 +7556,11 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7706,7 +7569,6 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7715,7 +7577,6 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7739,7 +7600,6 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7754,7 +7614,6 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7769,7 +7628,6 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7778,7 +7636,6 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7790,7 +7647,6 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7802,7 +7658,6 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7811,7 +7666,6 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7826,7 +7680,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7838,7 +7691,6 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7853,7 +7705,6 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7866,7 +7717,6 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7884,7 +7734,6 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -7893,7 +7742,6 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7908,7 +7756,6 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7923,7 +7770,6 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7955,7 +7801,6 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7969,7 +7814,6 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7978,7 +7822,6 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7994,7 +7837,6 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8007,7 +7849,6 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8016,7 +7857,6 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8025,7 +7865,6 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8034,7 +7873,6 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8043,13 +7881,11 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8062,7 +7898,6 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8074,7 +7909,6 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", - "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8082,7 +7916,6 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8094,7 +7927,6 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8103,7 +7935,6 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8118,7 +7949,6 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8131,7 +7961,6 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8147,7 +7976,6 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8156,7 +7984,6 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -8176,14 +8003,11 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "inBundle": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8198,7 +8022,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8210,13 +8033,11 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8228,7 +8049,6 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8237,7 +8057,6 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8249,7 +8068,6 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8264,7 +8082,6 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8274,7 +8091,6 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8288,7 +8104,6 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8298,13 +8113,11 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8314,13 +8127,11 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", - "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8332,7 +8143,6 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8341,7 +8151,6 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8356,7 +8165,6 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8370,7 +8178,6 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8383,7 +8190,6 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8395,7 +8201,6 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8407,7 +8212,6 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8424,7 +8228,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8436,7 +8239,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8448,7 +8250,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8457,19 +8258,16 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8478,7 +8276,6 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8492,7 +8289,6 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8504,7 +8300,6 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8516,13 +8311,11 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8532,7 +8325,6 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8544,13 +8336,11 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8559,7 +8349,6 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8574,7 +8363,6 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8583,7 +8371,6 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8592,7 +8379,6 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8610,7 +8396,6 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8627,7 +8412,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8639,7 +8423,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8651,13 +8434,11 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8674,7 +8455,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8689,7 +8469,6 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8702,7 +8481,6 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index 25f57f6..95764fe 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.303.0", + "moment": "^2.30.0", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From ff09ca08ca1716f181c4ee4c8b416ba5450aaf10 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 19:21:04 -0700 Subject: [PATCH 060/315] chore(utils): add file containing urls for fetching upstream ## what - add file containing urls for fetching upstream ## how ## why - this will be used by the server to fetch data ## where - ./src/utils/constants.ts ## usage --- src/utils/constants.ts | 95 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/utils/constants.ts diff --git a/src/utils/constants.ts b/src/utils/constants.ts new file mode 100644 index 0000000..618f01b --- /dev/null +++ b/src/utils/constants.ts @@ -0,0 +1,95 @@ +import moment from "moment"; + +/** + * Base uHunt APU URL + */ +export const uhuntBaseApiUrl = "https://uhunt.onlinejudge.org/api"; + +/** + * URL for viewing the problem. + * Need to provide pid. NOT problem number + * Just append the pid. + */ +export const viewProblemUrl = + "https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem="; + +/** + * URL for viewing the details of the problem PDF using problem ID + * @param {String} pid problem ID + */ +export const uhuntViewProblemUrl = (pid: string) => `${viewProblemUrl}${pid}`; + +/** + * URL for fetching all problems on uva-uhunt + */ +export const uhuntAllProblemsUrl = () => 'https://uhunt.onlinejudge.org/api/p'; + +/** + * URL for getting Problem data using Problem ID + * @param {String} pid - problem ID + */ +export const uhuntProblemIdUrl = (pid: string) => + `${uhuntBaseApiUrl}/p/id/${pid}`; + +/** + * URL for getting Problem data using Problem number + * @param {String} problemNumber - problem number + */ +export const uhuntProblemNumUrl = (problemNumber: string) => + `${uhuntBaseApiUrl}/p/num/${problemNumber}`; + +/** + * URL for getting Problem ranklist using Problem ID, starting rank and number of ranks to return + * @param {String} pid - Problem ID + * @param {Number} [start=1] - rank to start from. Default is 1 + * @param {Number} [count=100] - rank to go up to. Default is 100 + */ +export const uhuntProblemRankUrl = (pid: string, start = 1, count = 100) => + `${uhuntBaseApiUrl}/p/rank/${pid}/${start}/${count}`; + +/** + * URL for getting Submission count for a problem. + * By default it will return 20 years of data, + * represented in 20 array elements, each element represents 12 months. + * The submissionTime represents at what time should look back from, + * could be start from 5 years ago or now. + * @param {String} pid - problem ID + * @param {Number} [submissionTime=moment().unix()] - Unix timestamp. Default is current unix timestamp + * @param {Number} [back=20] - Number of years to look back. Default is 20 + * @param {Number} [jump=12] - Number of months each array element will represent. Default is 12 + */ +export const uhuntSubmissionCountUrl = ( + pid: string, + submissionTime = moment().unix(), + back = 20, + jump = 12, +) => `${uhuntBaseApiUrl}/p/count/${pid}/${submissionTime}/${back}/${jump}`; + +/** + * URL for getting User ID using username + * @param {String} username - username + */ +export const uhuntUsername2UidUrl = (username: string) => + `${uhuntBaseApiUrl}/uname2uid/${username}`; + +/** + * URL for getting Submission list of a problem using Problem ID + * @param {String} pid - problem ID + */ +export const uhuntProblemSubmissionListUrl = (pid: string) => + `${uhuntBaseApiUrl}/p/subs/${pid}/0/${moment().unix()}`; + +/** + * Get User submissions using UserID + * @param {Number} uid User ID + */ +export const uhuntUserSubmissionsUrl = (uid: string) => + `${uhuntBaseApiUrl}/subs-user/${uid}`; + +/** + * URL for fetching all uhunt problems + */ +export const fetchAllProblemsUrl = () => `${uhuntBaseApiUrl}/p`; + +export const fetchLiveSubmissionsUrl = (pollId = 0) => + `${uhuntBaseApiUrl}/poll/${pollId}`; From 14bb0a8169b477c32d481c605df51c2be819987d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 19:25:56 -0700 Subject: [PATCH 061/315] docs(types): add type for `problem` ## what - add type for `problem` ## how ## why - contains the data structure of a problem ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/types/index.ts diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..6d1ebc8 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,92 @@ +/** + * Data structure returned when querying from url `https://uhunt.onlinejudge.org/api/p/num/:num` + * + * Example `https://uhunt.onlinejudge.org/api/p/num/1760` + */ +export type Problem = { + /** + * Problem ID + */ + pid: number; + /** + * Problem number + */ + num: number; + /** + * Problem title + */ + title: string; + /** + * Number of Distinct Accepted User (DACU) + */ + dacu: number; + /** + * Best Runtime of an Accepted Submission + */ + mrun: number; + /** + * Best Memory used of an Accepted Submission + */ + mmem: number; + /** + * Number of No Verdict Given (can be ignored) + */ + nover: number; + /** + * Number of Submission Error + */ + sube: number; + /** + * Number of Can't be Judged + */ + noj: number; + /** + * Number of In Queue + */ + inq: number; + /** + * Number of Compilation Error + */ + ce: number; + /** + * Number of Restricted Function + */ + rf: number; + /** + * Number of Runtime Error + */ + re: number; + /** + * Number of Output Limit Exceeded + */ + ole: number; + /** + * Number of Time Limit Exceeded + */ + tle: number; + /** + * Number of Memory Limit Exceeded + */ + mle: number; + /** + * Number of Wrong Answer + */ + wa: number; + /** + * Number of Presentation Error + */ + pe: number; + /** + * Number of Accepted + */ + ac: number; + /** + * Problem Run-Time Limit (milliseconds) + */ + rtl: number; + /** + * Problem Status (0 = unavailable, 1 = normal, 2 = special judge) + */ + status: number; + rej: number; +}; From e65ce18a9dc4881759dd43eca4160cf09f10d24b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 19:33:15 -0700 Subject: [PATCH 062/315] feat(api): add endpoint `/api/problems` ## what - add endpoint `/api/problems` ## how ## why - this will fetch all problems from upstream ## where - ./src/app/api/problems/route.ts ## usage --- src/app/api/problems/route.ts | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/app/api/problems/route.ts diff --git a/src/app/api/problems/route.ts b/src/app/api/problems/route.ts new file mode 100644 index 0000000..cb9b73b --- /dev/null +++ b/src/app/api/problems/route.ts @@ -0,0 +1,73 @@ +import { uhuntAllProblemsUrl } from "@/utils/constants"; + +/** + * an array of keys that will be used to convert an array of arrays into array of objects + * + * check `https://uhunt.onlinejudge.org/api/p` to view raw data. (each problem stats are presented as an array element) + */ +const arrKey = [ + "pid", + "num", + "title", + "dacu", + "mrun", + "mmem", + "nover", + "sube", + "noj", + "inq", + "ce", + "rf", + "re", + "ole", + "tle", + "mle", + "wa", + "pe", + "ac", + "rtl", + "status", + "rej", +]; + +export const GET = async (_request: Request) => { + const url = uhuntAllProblemsUrl(); + + const response = await fetch(url); + // data returned is an array of array + // ex: + // [ + // [ + // 36, + // 100, + // "The 3n + 1 problem", + // ... + // ], + // ] + const data = await response.json(); + + // convert an array of array into array of problems + // ex: + // convert + // [ + // [1,2,3,...], + // [1,2,3,...], + // ] + // + // into + // [ + // {pid: 1, num: 2, title: 3, ...}, + // {pid: 1, num: 2, title: 3, ...}, + // ] + const converted = data.map((problem: number[]) => { + const initialValue = {}; + return problem.reduce((obj, item, index: number) => { + return { + ...obj, + [arrKey[index]]: item, + }; + }, initialValue); + }); + + return Response.json(converted); +}; From 7bb35f03f619674b35391aa855ff3cb8c469eea3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 19:36:20 -0700 Subject: [PATCH 063/315] build(npm): add package `zod` ## what - add package `zod` ## how ## why - this will be used for form validation - this will be used to validate params on api endpoints ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 11 ++++++++++- package.json | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e3cf40..e6b8772 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,8 @@ "react": "^18", "react-dom": "^18", "tailwind-merge": "^2.2.0", - "tailwindcss-animate": "^1.0.7" + "tailwindcss-animate": "^1.0.7", + "zod": "^3.22.4" }, "devDependencies": { "@semantic-release/changelog": "^6.0.3", @@ -10936,6 +10937,14 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index 95764fe..f775910 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "react": "^18", "react-dom": "^18", "tailwind-merge": "^2.2.0", - "tailwindcss-animate": "^1.0.7" + "tailwindcss-animate": "^1.0.7", + "zod": "^3.22.4" }, "devDependencies": { "@semantic-release/changelog": "^6.0.3", From 62ce762f1485825b5d2a4d8f714b504b68ab6484 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 20:04:43 -0700 Subject: [PATCH 064/315] feat(api): add endpoint `/api/problems/:problemNum` ## what - add endpoint `/api/problems/:problemNum` ## how ## why - this will fetch the stats using a problem number ## where - ./src/app/api/problems/[problemNum]/route.ts ## usage --- src/app/api/problems/[problemNum]/route.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/app/api/problems/[problemNum]/route.ts diff --git a/src/app/api/problems/[problemNum]/route.ts b/src/app/api/problems/[problemNum]/route.ts new file mode 100644 index 0000000..1f31864 --- /dev/null +++ b/src/app/api/problems/[problemNum]/route.ts @@ -0,0 +1,18 @@ +import { uhuntProblemNumUrl } from "@/utils/constants"; + +type getParamsType = { + params: { + problemNum: string; + }; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + const { problemNum } = params; + + const url = uhuntProblemNumUrl(problemNum); + + const response = await fetch(url); + const data = await response.json(); + + return Response.json(data); +}; From 94049cc303a633836c7e90e40c92a46d7e3f4f8c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 26 Dec 2023 20:07:07 -0700 Subject: [PATCH 065/315] feat(api): add some basic checks for endpoint `/api/problems/:problemNum` ## what - add some basic checks for endpoint `/api/problems/:problemNum` - check if param is a number - check if param is a number greater than 1 - return response if the check don't pass - return - status of 400 - message of error from schema check ## how - use `zod` to validate the params - build a schema to perform checks - check - https://giancarlobuomprisco.com/next/protect-next-api-zod ## why - provide basic checks to prevent major errors (ex: params contains a non number) ## where - ./src/app/api/problems/[problemNum]/route.ts ## usage --- src/app/api/problems/[problemNum]/route.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/app/api/problems/[problemNum]/route.ts b/src/app/api/problems/[problemNum]/route.ts index 1f31864..4fc0acc 100644 --- a/src/app/api/problems/[problemNum]/route.ts +++ b/src/app/api/problems/[problemNum]/route.ts @@ -1,3 +1,6 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + import { uhuntProblemNumUrl } from "@/utils/constants"; type getParamsType = { @@ -7,6 +10,23 @@ type getParamsType = { }; export const GET = async (_request: Request, { params }: getParamsType) => { + const schema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Must be a number" }) + .min(1, "Must be a number greater than 0"), + }); + + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + const { problemNum } = params; const url = uhuntProblemNumUrl(problemNum); From c60046ba354413e12cf0b870f0caa133690b8464 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 27 Dec 2023 10:28:24 -0700 Subject: [PATCH 066/315] feat(api): add api endpoint `/api/poll` ## what - add api endpoint `/api/poll` ## how ## why - this will be used get the latest problem submissions ## where - ./src/app/api/poll/route.ts ## usage --- src/app/api/poll/route.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/app/api/poll/route.ts diff --git a/src/app/api/poll/route.ts b/src/app/api/poll/route.ts new file mode 100644 index 0000000..e4bb9e5 --- /dev/null +++ b/src/app/api/poll/route.ts @@ -0,0 +1,10 @@ +import { fetchLiveSubmissionsUrl } from "@/utils/constants" + +export const GET = async () => { + const url = fetchLiveSubmissionsUrl() + + const response = await fetch(url) + const data = await response.json(); + + return Response.json(data) +} From 93148df5d2b60e19824245e4b45bbfde97c28f58 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 27 Dec 2023 12:23:45 -0700 Subject: [PATCH 067/315] refactor(types): change `Problem.status` type to `string` ## what - change `Problem.status` type to `string` ## how ## why - the upstream api will return as a number - the NextJS api will convert number to a string ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/index.ts b/src/types/index.ts index 6d1ebc8..642d63f 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -87,6 +87,6 @@ export type Problem = { /** * Problem Status (0 = unavailable, 1 = normal, 2 = special judge) */ - status: number; + status: string; rej: number; }; From 5ab3d8730daa3f1fe1eaecefbc3b5d340760f3f5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 27 Dec 2023 12:20:37 -0700 Subject: [PATCH 068/315] chore(types): add object `ProblemStatus` ## what - add object `ProblemStatus` ## how ## why - will be used to convert `Problem` property `status` from a number to a string ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index 642d63f..72f0b11 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,9 @@ +export const ProblemStatus = { + 0 : "Unavailable", + 1 : "Normal", + 2 : "Special judge" +} + /** * Data structure returned when querying from url `https://uhunt.onlinejudge.org/api/p/num/:num` * From ba8e197e86bf8839a00765e1b698de295f1f8f81 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 27 Dec 2023 12:17:06 -0700 Subject: [PATCH 069/315] chore(api): convert Problem `status` to a string ## what - convert Problem `status` to a string - number - 0: Unavailable - 1: Normal - 2: Special Judge ## how - use object `ProblemStatus` from `@/types/index.ts` to convert a number into a string ## why - don't need the client side to convert the data ## where - ./src/app/api/problems/[problemNum]/route.ts - ./src/app/api/problems/route.ts ## usage --- src/app/api/problems/[problemNum]/route.ts | 4 +++- src/app/api/problems/route.ts | 26 +++++++++++++--------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/app/api/problems/[problemNum]/route.ts b/src/app/api/problems/[problemNum]/route.ts index 4fc0acc..ebd4d4b 100644 --- a/src/app/api/problems/[problemNum]/route.ts +++ b/src/app/api/problems/[problemNum]/route.ts @@ -2,6 +2,7 @@ import { NextResponse } from "next/server"; import { z } from "zod"; import { uhuntProblemNumUrl } from "@/utils/constants"; +import { Problem, ProblemStatus } from "@/types"; type getParamsType = { params: { @@ -32,7 +33,8 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const url = uhuntProblemNumUrl(problemNum); const response = await fetch(url); - const data = await response.json(); + const data: Problem = await response.json(); + data.status = ProblemStatus[data.status as unknown as number] return Response.json(data); }; diff --git a/src/app/api/problems/route.ts b/src/app/api/problems/route.ts index cb9b73b..a5332ed 100644 --- a/src/app/api/problems/route.ts +++ b/src/app/api/problems/route.ts @@ -1,4 +1,5 @@ import { uhuntAllProblemsUrl } from "@/utils/constants"; +import { Problem, ProblemStatus } from "@/types"; /** * an array of keys that will be used to convert an array of arrays into array of objects @@ -47,7 +48,7 @@ export const GET = async (_request: Request) => { const data = await response.json(); // convert an array of array into array of problems - // ex: + // ex: // convert // [ // [1,2,3,...], @@ -59,15 +60,20 @@ export const GET = async (_request: Request) => { // {pid: 1, num: 2, title: 3, ...}, // {pid: 1, num: 2, title: 3, ...}, // ] - const converted = data.map((problem: number[]) => { - const initialValue = {}; - return problem.reduce((obj, item, index: number) => { - return { - ...obj, - [arrKey[index]]: item, - }; - }, initialValue); - }); + const converted = data + .map((problem: number[]) => { + const initialValue = {}; + return problem.reduce((obj, item, index: number) => { + return { + ...obj, + [arrKey[index]]: item, + }; + }, initialValue); + }) + .map((problem: Problem) => { + problem.status = ProblemStatus[problem.status]; + return problem; + }); return Response.json(converted); }; From f396536464bc75a8d75ee578731ee2fc935ec1bd Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 27 Dec 2023 12:28:41 -0700 Subject: [PATCH 070/315] docs(api): add docs on what the key is used for in endpoint `/api/problems/:problemNum` ## what - add docs on what the key is used for in endpoint `/api/problems/:problemNum` ## how - obtained from - https://uhunt.onlinejudge.org/api - `Problem List` section ## why - for better clarity ## where - ./src/app/api/problems/route.ts ## usage --- src/app/api/problems/route.ts | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/app/api/problems/route.ts b/src/app/api/problems/route.ts index a5332ed..9779e8d 100644 --- a/src/app/api/problems/route.ts +++ b/src/app/api/problems/route.ts @@ -7,27 +7,27 @@ import { Problem, ProblemStatus } from "@/types"; * check `https://uhunt.onlinejudge.org/api/p` to view raw data. (each problem stats are presented as an array element) */ const arrKey = [ - "pid", - "num", - "title", - "dacu", - "mrun", - "mmem", - "nover", - "sube", - "noj", - "inq", - "ce", - "rf", - "re", - "ole", - "tle", - "mle", - "wa", - "pe", - "ac", - "rtl", - "status", + "pid", // problem ID + "num", // problem number + "title", // problem title + "dacu", // Number of Distinct Accepted User (DACU) + "mrun", // Best Runtime of an Accepted Submission + "mmem", // Best Memory used of an Accepted Submission + "nover", // Number of No Verdict Given (can be ignored) + "sube", // Number of Submission Error + "noj", // Number of Can't be Judged + "inq", // Number of In Queue + "ce", // Number of Compilation Error + "rf", // Number of Restricted Function + "re", // Number of Runtime Error + "ole", // Number of Output Limit Exceeded + "tle", // Number of Time Limit Exceeded + "mle", // Number of Memory Limit Exceeded + "wa", // Number of Wrong Answer + "pe", // Number of Presentation Error + "ac", // Number of Accepted + "rtl", // Problem Run-Time Limit (milliseconds) + "status", // Problem Status (0 = unavailable, 1 = normal, 2 = special judge) "rej", ]; From c463a36ec9c9eb94a72285d143112ff126102f80 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 27 Dec 2023 17:34:56 -0700 Subject: [PATCH 071/315] chore(api): mutate the data returned from upstream for endpoint `/api/poll` ## what - mutate the data returned from upstream for endpoint `/api/poll` - convert `verdict ID` to a string - use object to map through the IDs - convert `language ID` to a string - use object to map through the IDs - convert `rank` to a string - return '-' if rank below 0. - return the provided value if rank is above 0 - add problem number as an object property - add problem title as an object property ## how - map through each element in the array ## why - better to do preprocessing server side than client side - ex: getting the `problem number` from `problem id` ## where - ./src/app/api/poll/route.ts ## usage --- src/app/api/poll/route.ts | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/app/api/poll/route.ts b/src/app/api/poll/route.ts index e4bb9e5..181ffea 100644 --- a/src/app/api/poll/route.ts +++ b/src/app/api/poll/route.ts @@ -1,10 +1,32 @@ -import { fetchLiveSubmissionsUrl } from "@/utils/constants" +import { Language, Problem, Submission, Verdict } from "@/types"; +import { fetchLiveSubmissionsUrl, uhuntProblemIdUrl } from "@/utils/constants"; export const GET = async () => { - const url = fetchLiveSubmissionsUrl() + const url = fetchLiveSubmissionsUrl(); - const response = await fetch(url) - const data = await response.json(); + const fetchResponse = await fetch(url); + const data: Submission[] = await fetchResponse.json(); - return Response.json(data) -} + const converted = data.map(async (submission: Submission) => { + submission.msg.ver = Verdict[submission.msg.ver]; + submission.msg.lan = Language[submission.msg.lan]; + + // add problem number to the object + const pidUrl = uhuntProblemIdUrl(`${submission.msg.pid}`); + const pidResponse = await fetch(pidUrl); + const pidData: Problem = await pidResponse.json(); + submission.msg.pnum = pidData.num; + submission.msg.pTitle = pidData.title; + + submission.msg.rank = +submission.msg.rank < 0 ? '-' : submission.msg.rank + + return submission; + }).reverse(); + + // using Promise.all because the map function is using an async function + // use Promise.all to resolver async operations + // obtained from: https://stackoverflow.com/a/68279968/3053548 + const response = await Promise.all(converted); + + return Response.json(response); +}; From fe9c7d9589a137da983e25c08c9f8f166eb7a410 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 27 Dec 2023 17:41:31 -0700 Subject: [PATCH 072/315] chore(api): move endpoint `/api/poll` to `/api/poll/:pollId` ## what - move endpoint `/api/poll` to `/api/poll/:pollId` ## how ## why - this required because of the way polling works in the upstream api - the first time when polling the polling ID would be 0 - after that the polling ID would be the latest `submission ID` ## where - ./src/app/api/poll/route.ts -> ./src/app/api/poll/[pollId]/route.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 63 ++++++++++++++++++++++++++++++ src/app/api/poll/route.ts | 32 --------------- 2 files changed, 63 insertions(+), 32 deletions(-) create mode 100644 src/app/api/poll/[pollId]/route.ts delete mode 100644 src/app/api/poll/route.ts diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts new file mode 100644 index 0000000..72f3b4a --- /dev/null +++ b/src/app/api/poll/[pollId]/route.ts @@ -0,0 +1,63 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { Language, Problem, Submission, Verdict } from "@/types"; +import { fetchLiveSubmissionsUrl, uhuntProblemIdUrl } from "@/utils/constants"; + +type getParamsType = { + params: { + pollId: string; + }; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + const schema = z.object({ + pollId: z.coerce + .number({ invalid_type_error: "Must be a number" }) + .min(0, "Must be a number greater than 0"), + }); + + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + const { pollId } = params; + + const url = fetchLiveSubmissionsUrl(+pollId); + + const fetchResponse = await fetch(url); + const data: Submission[] = await fetchResponse.json(); + + const converted = data + .map(async (submission: Submission) => { + submission.msg.ver = Verdict[submission.msg.ver]; + submission.msg.lan = Language[submission.msg.lan]; + + // add problem number to the object + const pidUrl = uhuntProblemIdUrl(`${submission.msg.pid}`); + const pidResponse = await fetch(pidUrl); + const pidData: Problem = await pidResponse.json(); + submission.msg.pnum = pidData.num; + submission.msg.pTitle = pidData.title; + + submission.msg.rank = + +submission.msg.rank < 0 ? "-" : submission.msg.rank; + + return submission; + }) + .reverse(); + + // using Promise.all because the map function is using an async function + // use Promise.all to resolver async operations + // obtained from: https://stackoverflow.com/a/68279968/3053548 + const response = await Promise.all(converted); + + return Response.json(response); +}; diff --git a/src/app/api/poll/route.ts b/src/app/api/poll/route.ts deleted file mode 100644 index 181ffea..0000000 --- a/src/app/api/poll/route.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Language, Problem, Submission, Verdict } from "@/types"; -import { fetchLiveSubmissionsUrl, uhuntProblemIdUrl } from "@/utils/constants"; - -export const GET = async () => { - const url = fetchLiveSubmissionsUrl(); - - const fetchResponse = await fetch(url); - const data: Submission[] = await fetchResponse.json(); - - const converted = data.map(async (submission: Submission) => { - submission.msg.ver = Verdict[submission.msg.ver]; - submission.msg.lan = Language[submission.msg.lan]; - - // add problem number to the object - const pidUrl = uhuntProblemIdUrl(`${submission.msg.pid}`); - const pidResponse = await fetch(pidUrl); - const pidData: Problem = await pidResponse.json(); - submission.msg.pnum = pidData.num; - submission.msg.pTitle = pidData.title; - - submission.msg.rank = +submission.msg.rank < 0 ? '-' : submission.msg.rank - - return submission; - }).reverse(); - - // using Promise.all because the map function is using an async function - // use Promise.all to resolver async operations - // obtained from: https://stackoverflow.com/a/68279968/3053548 - const response = await Promise.all(converted); - - return Response.json(response); -}; From 16b4ebd072208e5335d3abd312b20a3bc1f66d1f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:37:34 -0700 Subject: [PATCH 073/315] chore(types): add `Verdict` number to string map ## what - add `Verdict` number to string map ## how ## why ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index 72f0b11..c7e4891 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -96,3 +96,18 @@ export type Problem = { status: string; rej: number; }; + +export const Verdict = { + 10 : "Submission error", + 15 : "Can't be judged", + 20 : "In queue", + 30 : "Compile error", + 35 : "Restricted function", + 40 : "Runtime error", + 45 : "Output limit", + 50 : "Time limit", + 60 : "Memory limit", + 70 : "Wrong answer", + 80 : "Presentation error", + 90 : "Accepted", +} From c20ec80c7ec94c5f18200f5c0430a46aa7fe56c5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:38:30 -0700 Subject: [PATCH 074/315] chore(types): add `Language` number to string map ## what - add `Language` number to string map ## how ## why ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index c7e4891..c23fcd5 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -111,3 +111,12 @@ export const Verdict = { 80 : "Presentation error", 90 : "Accepted", } + +export const Language = { + 1 : "ANSI C", + 2 : "Java", + 3 : "C++", + 4 : "Pascal", + 5 : "C++11", +} + From d7f9e7c1eb744bbb0acc23c0d0115891236da327 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:40:58 -0700 Subject: [PATCH 075/315] chore(types): add type `Submission` ## what - add type `Submission` ## how ## why ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index c23fcd5..fc6744d 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -120,3 +120,73 @@ export const Language = { 5 : "C++11", } +/** + * Submission data structure + * + * Example `https://uhunt.onlinejudge.org/api/poll/0` + */ +export type Submission = { + /** + * Poll ID + */ + id: number; + type: string; + msg: { + /** + * Submission ID + */ + sid: number; + /** + * User ID + */ + uid: number; + /** + * Problem ID + */ + pid: number; + /** + * Problem number + */ + pnum: number; + /** + * Problem title + */ + pTitle: string; + /** + * Verdict ID + */ + ver: number; + /** + * Verdict string. Ex: `Accepted`, or `Compile error` + */ + verdictStr: string; + /** + * Language ID + */ + lan: string; + /** + * Runtime in seconds + */ + run: number; + /** + * Memory used for the submission + */ + mem: number; + /** + * Submission rank of the problem + */ + rank: number | string; + /** + * Submission time in Unix timestamp + */ + sbt: number; + /** + * User's name for the submission + */ + name: string; + /** + * the username of the user + */ + uname: string; + }; +}; From 298de4756569a3d4ec4a30d1aedb7e28d7f5ed8d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:41:58 -0700 Subject: [PATCH 076/315] build(tsc): compile project to `ESNext` ## what - compile project to `ESNext` ## how ## why ## where - ./tsconfig.json ## usage --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index e59724b..af05591 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "ESNext", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, From 8515dc02a3346c46e9cb811b8dfc7559cdc809f5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:43:33 -0700 Subject: [PATCH 077/315] refactor(api:poll): convert `ver` number into string into property `verdictStr` ## what - convert `ver` number into string into property `verdictStr` ## how ## why - the property `ver` will be used assigning bg-color depending on the value ## where - ./src/app/api/poll/[pollId]/route.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts index 72f3b4a..b3484da 100644 --- a/src/app/api/poll/[pollId]/route.ts +++ b/src/app/api/poll/[pollId]/route.ts @@ -37,7 +37,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const converted = data .map(async (submission: Submission) => { - submission.msg.ver = Verdict[submission.msg.ver]; + submission.msg.verdictStr = Verdict[submission.msg.ver] || "- In Queue -"; submission.msg.lan = Language[submission.msg.lan]; // add problem number to the object From ad53d2eaa94daf3c5df085a8c6bfb57ae5d746b4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:49:00 -0700 Subject: [PATCH 078/315] feat(api:poll): process submissions from endpoint `/api/poll/[pollId]` ## what - process submissions from endpoint `/api/poll/[pollId]` - reverse the array - group submissions by submission id (`sid`) - flatten the array of array - pick only the latest submission after grouping by `sid` - sort the array by submission time ## how ## why - the submissions contain duplicate entries - the first submission is in status of `In Queue` - the second submission is the processed submission with verdict ## where - ./src/app/api/poll/[pollId]/route.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 34 ++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts index b3484da..6b20075 100644 --- a/src/app/api/poll/[pollId]/route.ts +++ b/src/app/api/poll/[pollId]/route.ts @@ -57,7 +57,37 @@ export const GET = async (_request: Request, { params }: getParamsType) => { // using Promise.all because the map function is using an async function // use Promise.all to resolver async operations // obtained from: https://stackoverflow.com/a/68279968/3053548 - const response = await Promise.all(converted); + await Promise.all(converted); - return Response.json(response); + // the latest submission is the last element. so reversing it will give the latest submission first + let processedSubmission = data.reverse(); + // group by submission id + // there are multiple elements with the same submission ID. + // The first one is usually indicating `in queue`. + // the second one is a verdict of the submission + processedSubmission = Array.from( + data + .reduce( + (entryMap, submission) => + entryMap.set(submission.msg.sid, [ + ...(entryMap.get(submission.msg.sid) || []), + submission, + ]), + new Map(), + ) + .values(), + ); + // take the latest submission from grouped array elements + // the grouped submissions will have one element with the verdict of `in queue` and the other final verdict + processedSubmission = processedSubmission.reduce( + (result: Submission[], value, key) => [ + ...result, + { ...value[0], msg: value[0].msg }, + ], + [], + ); + //sort submission by submission time in descending order + processedSubmission.sort((a, b) => b.msg.sbt - a.msg.sbt); + + return Response.json(processedSubmission); }; From ab3331857475d5c123de4b05ac094f5b9fd9065f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 10:56:53 -0700 Subject: [PATCH 079/315] style(layout): add padding to the main content ## what - add padding to the main content ## how ## why ## where - ./src/app/layout.tsx ## usage --- src/app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 6a87c05..0f9c599 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -37,7 +37,7 @@ export default function RootLayout({ disableTransitionOnChange > - {children} +
{children}
From b65d0e78d3aff846c193e6008e3e43134b5c8eef Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:06:01 -0700 Subject: [PATCH 080/315] build(npm): add package `react-query` ## what - add package `react-query` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 25 +++++++++++++++++++++++++ package.json | 1 + 2 files changed, 26 insertions(+) diff --git a/package-lock.json b/package-lock.json index e6b8772..0a73b97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", + "@tanstack/react-query": "^5.15.5", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.303.0", @@ -1765,6 +1766,30 @@ "tslib": "^2.4.0" } }, + "node_modules/@tanstack/query-core": { + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.15.5.tgz", + "integrity": "sha512-GDwVfu8RPswqVu27+zuIkZINru6CN++zzBbBK+OnAgzxK8N4Obdi+sG2P0EO8rJAOw0fLyQTsO4GCZ1djwaUCg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.15.5.tgz", + "integrity": "sha512-JSPpzsJPqpNySgjMhAvBpF3gVhtlI/0bZrBmwmcD/ewYYOExll+tIz13gkgnCfNA1qTJQnbv7vdc2gw594vq9Q==", + "dependencies": { + "@tanstack/query-core": "5.15.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", diff --git a/package.json b/package.json index f775910..16fbe12 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", + "@tanstack/react-query": "^5.15.5", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.303.0", From cac914edeb24dff7278857084ee51edbddff5ce7 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:15:11 -0700 Subject: [PATCH 081/315] chore(provider): add Provider for `react-query` ## what - add Provider for `react-query` ## how - obtained from - https://tanstack.com/query/latest/docs/react/guides/advanced-ssr#server-components--nextjs-app-router ## why ## where - ./src/provider/ReactQuery.tsx ## usage --- src/provider/ReactQuery.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/provider/ReactQuery.tsx diff --git a/src/provider/ReactQuery.tsx b/src/provider/ReactQuery.tsx new file mode 100644 index 0000000..48fec7e --- /dev/null +++ b/src/provider/ReactQuery.tsx @@ -0,0 +1,16 @@ +"use client"; + +import { QueryClientProvider, QueryClient } from "@tanstack/react-query"; +import { PropsWithChildren, useState } from "react"; + +const ReactQueryProvider = ({ children }: PropsWithChildren) => { + const [queryClient] = useState(() => new QueryClient()); + + return ( + + {children} + + ); +}; + +export default ReactQueryProvider; From 7c892c7ec70f4019c958cee92bd77d963c74ed49 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:16:42 -0700 Subject: [PATCH 082/315] chore(layout): use `react-query` provider ## what - use `react-query` provider ## how - obtained from - https://tanstack.com/query/latest/docs/react/guides/advanced-ssr#server-components--nextjs-app-router ## why ## where - ./src/app/layout.tsx ## usage --- src/app/layout.tsx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0f9c599..91ac519 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,6 +2,7 @@ import type { Metadata } from "next"; import { Inter as FontSans } from "next/font/google"; import { ThemeProvider } from "@/components/theme-provider"; import Navbar from "@/components/navbar"; +import ReactQueryProvider from "@/provider/ReactQuery"; import "./globals.css"; import { cn } from "@/lib/utils"; @@ -30,15 +31,17 @@ export default function RootLayout({ inter.variable, )} > - - -
{children}
-
+ + + +
{children}
+
+
); From e9ff9fb45a049103417a484ec57ba61951d57e40 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:20:50 -0700 Subject: [PATCH 083/315] build(npm): add package `axios` ## what - add package `axios` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 91 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 92 insertions(+) diff --git a/package-lock.json b/package-lock.json index 0a73b97..32b0c0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.15.5", + "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.303.0", @@ -2284,6 +2285,11 @@ "has-symbols": "^1.0.3" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "10.4.16", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", @@ -2342,6 +2348,16 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", + "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -2662,6 +2678,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "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==", + "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", @@ -3233,6 +3260,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -4108,6 +4143,25 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -4117,6 +4171,19 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -5607,6 +5674,25 @@ "node": ">=10.0.0" } }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -9149,6 +9235,11 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, + "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==" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", diff --git a/package.json b/package.json index 16fbe12..36e7559 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.15.5", + "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "lucide-react": "^0.303.0", From 820badba02f65dc66c5b32a5f35b8349d09e59b0 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:44:32 -0700 Subject: [PATCH 084/315] build(shadcn): add component `Table` ## what - add component `Table` ## how - run command npx shadcn-ui@latest add table ## why ## where - ./src/components/ui/table.tsx ## usage --- src/components/ui/table.tsx | 117 ++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/components/ui/table.tsx diff --git a/src/components/ui/table.tsx b/src/components/ui/table.tsx new file mode 100644 index 0000000..7f3502f --- /dev/null +++ b/src/components/ui/table.tsx @@ -0,0 +1,117 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)) +Table.displayName = "Table" + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableHeader.displayName = "TableHeader" + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableBody.displayName = "TableBody" + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0", + className + )} + {...props} + /> +)) +TableFooter.displayName = "TableFooter" + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableRow.displayName = "TableRow" + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableHead.displayName = "TableHead" + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableCell.displayName = "TableCell" + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableCaption.displayName = "TableCaption" + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +} From dbaaa5bf19507a6a1aced3c8b740c8b9a4e83b05 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:46:05 -0700 Subject: [PATCH 085/315] chore: add ReactQuery devtools to be removed --- package-lock.json | 26 ++++++++++++++++++++++++++ package.json | 1 + src/provider/ReactQuery.tsx | 2 ++ 3 files changed, 29 insertions(+) diff --git a/package-lock.json b/package-lock.json index 32b0c0c..b6449a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.15.5", + "@tanstack/react-query-devtools": "^5.15.5", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", @@ -1776,6 +1777,15 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@tanstack/query-devtools": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.15.0.tgz", + "integrity": "sha512-oz+xBIf+fanmAQ3CZrV4t+1VZiK2nyTcH3zY3G8ukzw+LwX2QGa04ZfF+OCOVF6tPZ2dn1cekMibUb4tevf/aw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tanstack/react-query": { "version": "5.15.5", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.15.5.tgz", @@ -1791,6 +1801,22 @@ "react": "^18.0.0" } }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.15.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.15.5.tgz", + "integrity": "sha512-AixLsTYGB52Ou7snhbW4QlTHZ347VJOl+wjXqiLlK9/oENxpaVI92Nl4VIsGiVRrscwv5lRMYUGucM+UYShyEQ==", + "dependencies": { + "@tanstack/query-devtools": "5.15.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.15.5", + "react": "^18.0.0" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", diff --git a/package.json b/package.json index 36e7559..eab472a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.15.5", + "@tanstack/react-query-devtools": "^5.15.5", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", diff --git a/src/provider/ReactQuery.tsx b/src/provider/ReactQuery.tsx index 48fec7e..3051fdc 100644 --- a/src/provider/ReactQuery.tsx +++ b/src/provider/ReactQuery.tsx @@ -1,6 +1,7 @@ "use client"; import { QueryClientProvider, QueryClient } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { PropsWithChildren, useState } from "react"; const ReactQueryProvider = ({ children }: PropsWithChildren) => { @@ -9,6 +10,7 @@ const ReactQueryProvider = ({ children }: PropsWithChildren) => { return ( {children} + ); }; From cb2dc975a72939c10f9d52441ce58ab97a65f23b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 15:34:08 -0700 Subject: [PATCH 086/315] refactor(api:poll): use `axios` to fetch data ## what - use `axios` to fetch data ## how ## why ## where - ./src/app/api/poll/[pollId]/route.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts index 6b20075..3498e00 100644 --- a/src/app/api/poll/[pollId]/route.ts +++ b/src/app/api/poll/[pollId]/route.ts @@ -1,5 +1,6 @@ import { NextResponse } from "next/server"; import { z } from "zod"; +import axios from "axios"; import { Language, Problem, Submission, Verdict } from "@/types"; import { fetchLiveSubmissionsUrl, uhuntProblemIdUrl } from "@/utils/constants"; @@ -32,8 +33,8 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const url = fetchLiveSubmissionsUrl(+pollId); - const fetchResponse = await fetch(url); - const data: Submission[] = await fetchResponse.json(); + const fetchResponse = await axios.get(url) + const data = fetchResponse.data const converted = data .map(async (submission: Submission) => { From 29be0f6df795b827bb0441ca9beb669ca0921d3f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 17:08:06 -0700 Subject: [PATCH 087/315] chore(tailwind): merge duplicate `tailwind.config` files ## what - merge duplicate `tailwind.config` files ## how ## why ## where - ./components.json - ./tailwind.config.js - ./tailwind.config.ts ## usage --- components.json | 4 +-- tailwind.config.js | 76 ---------------------------------------------- tailwind.config.ts | 76 ++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 72 insertions(+), 84 deletions(-) delete mode 100644 tailwind.config.js diff --git a/components.json b/components.json index 4cfd645..4268381 100644 --- a/components.json +++ b/components.json @@ -4,7 +4,7 @@ "rsc": true, "tsx": true, "tailwind": { - "config": "tailwind.config.js", + "config": "tailwind.config.ts", "css": "src/app/globals.css", "baseColor": "zinc", "cssVariables": true @@ -13,4 +13,4 @@ "components": "@/components", "utils": "@/lib/utils" } -} \ No newline at end of file +} diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 0377ea1..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,76 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - darkMode: ["class"], - content: [ - './pages/**/*.{ts,tsx}', - './components/**/*.{ts,tsx}', - './app/**/*.{ts,tsx}', - './src/**/*.{ts,tsx}', - ], - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - keyframes: { - "accordion-down": { - from: { height: 0 }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: 0 }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - }, - }, - }, - plugins: [require("tailwindcss-animate")], -} \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts index a9c22b5..5a7ed2d 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -2,14 +2,77 @@ import type { Config } from 'tailwindcss' import { fontFamily } from "tailwindcss/defaultTheme" const config: Config = { + darkMode: ["class"], content: [ - './src/pages/**/*.{js,ts,jsx,tsx,mdx}', - './src/components/**/*.{js,ts,jsx,tsx,mdx}', - './src/app/**/*.{js,ts,jsx,tsx,mdx}', - ], + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, extend: { - backgroundImage: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: 0 }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + backgroundImage: { 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', @@ -19,6 +82,7 @@ const config: Config = { }, }, }, - plugins: [], + plugins: [require("tailwindcss-animate")], } + export default config From 19f0d72402db6d3fa10f4aa32b2ea96afc754ce7 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 19:34:52 -0700 Subject: [PATCH 088/315] feat(hooks): add react-query hook to fetch live submissions ## what - add react-query hook to fetch live submissions - provide - pollId - fetchInterval ## how ## why - this will be used to fetch live submissions in an interval ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/hooks/index.ts diff --git a/src/hooks/index.ts b/src/hooks/index.ts new file mode 100644 index 0000000..cd8907b --- /dev/null +++ b/src/hooks/index.ts @@ -0,0 +1,26 @@ +import axios from "axios"; +import { useQuery } from "@tanstack/react-query"; + +import { Submission } from "@/types"; + +/** + * Enum for React Query Keys when using React-query + */ +export enum queryKey { + polling = "live-polling", +} + +/** + * Fetch live submission (polling) + */ +export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { + return useQuery({ + queryKey: [queryKey.polling], + queryFn: async () => { + const { data } = await axios.get(`/api/poll/${pollId}`); + + return data; + }, + refetchInterval: fetchInterval, + }); +}; From e2ca82f300c992737b1e62200da155bf6bc3e9cf Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 19:38:01 -0700 Subject: [PATCH 089/315] style(types): format code --- src/types/index.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/types/index.ts b/src/types/index.ts index fc6744d..295108a 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,8 +1,8 @@ export const ProblemStatus = { - 0 : "Unavailable", - 1 : "Normal", - 2 : "Special judge" -} + 0: "Unavailable", + 1: "Normal", + 2: "Special judge", +}; /** * Data structure returned when querying from url `https://uhunt.onlinejudge.org/api/p/num/:num` @@ -113,12 +113,12 @@ export const Verdict = { } export const Language = { - 1 : "ANSI C", - 2 : "Java", - 3 : "C++", - 4 : "Pascal", - 5 : "C++11", -} + 1: "ANSI C", + 2: "Java", + 3: "C++", + 4: "Pascal", + 5: "C++11", +}; /** * Submission data structure From 9bc0c1fedb324824ea841175e140d86c6f6de21f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 19:41:43 -0700 Subject: [PATCH 090/315] refactor(types): add `fgColor`, `bgColor` and `title` to Verdict object ## what - add fgColor, bgColor and title to Verdict object ## how ## why - this will be used in api endpoint `/api/poll/pollId` - it will be used for filling in the necessary data needed for the front end ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 48 ++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/types/index.ts b/src/types/index.ts index 295108a..3f9b010 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -97,20 +97,27 @@ export type Problem = { rej: number; }; -export const Verdict = { - 10 : "Submission error", - 15 : "Can't be judged", - 20 : "In queue", - 30 : "Compile error", - 35 : "Restricted function", - 40 : "Runtime error", - 45 : "Output limit", - 50 : "Time limit", - 60 : "Memory limit", - 70 : "Wrong answer", - 80 : "Presentation error", - 90 : "Accepted", -} +export type VerdictType = { + fgColor: string; + bgColor: string; + title: string; +}; + +export const Verdict: Record = { + 0 : { fgColor: "", bgColor: "bg-gray-500", title: "- In Queue -" }, + 10: { fgColor: "", bgColor: "bg-gray-500", title: "Submission error" }, + 15: { fgColor: "", bgColor: "bg-gray-500", title: "Can't be judged" }, + 20: { fgColor: "", bgColor: "bg-gray-500", title: "- In Queue -" }, + 30: { fgColor: "", bgColor: "bg-orange-600", title: "Compile error" }, + 35: { fgColor: "", bgColor: "bg-gray-500", title: "Restricted function" }, + 40: { fgColor: "", bgColor: "bg-[#00AAAA]", title: "Runtime error" }, + 45: { fgColor: "", bgColor: "bg-[#000066]", title: "Output limit" }, + 50: { fgColor: "", bgColor: "bg-[#0000FF]", title: "Time limit" }, + 60: { fgColor: "", bgColor: "bg-[#0000AA]", title: "Memory limit" }, + 70: { fgColor: "", bgColor: "bg-[#FF0000]", title: "Wrong answer" }, + 80: { fgColor: "", bgColor: "bg-[#666600]", title: "Presentation error" }, + 90: { fgColor: "", bgColor: "bg-[#00AA00]", title: "Accepted" }, +}; export const Language = { 1: "ANSI C", @@ -157,9 +164,18 @@ export type Submission = { */ ver: number; /** - * Verdict string. Ex: `Accepted`, or `Compile error` + * Verdict properties + * + * contains + * - verdict title Ex: `Accepted`, or `Compile error` + * - fgColor: tailwindcss class to use for foreground color + * - bgColor: tailwindcss class to use for background color */ - verdictStr: string; + verdict: { + title: string; + fgColor: string; + bgColor: string; + }; /** * Language ID */ From 8480c2d4811d0161ffb8882dbe1721448f7c7802 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 30 Dec 2023 19:48:43 -0700 Subject: [PATCH 091/315] chore(api:poll): update setting `verdict` properties ## what - update setting `verdict` properties ## how ## why - to work with the change in commit 98090f4 ## where - ./src/app/api/poll/[pollId]/route.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts index 3498e00..6b52f10 100644 --- a/src/app/api/poll/[pollId]/route.ts +++ b/src/app/api/poll/[pollId]/route.ts @@ -38,8 +38,12 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const converted = data .map(async (submission: Submission) => { - submission.msg.verdictStr = Verdict[submission.msg.ver] || "- In Queue -"; - submission.msg.lan = Language[submission.msg.lan]; + submission.msg.verdict = Verdict[submission.msg.ver] || { + fgColor: "", + bgColor: "", + title: "- In Queue -", + }; + submission.msg.lan = Language[submission.msg.lan] || "--"; // add problem number to the object const pidUrl = uhuntProblemIdUrl(`${submission.msg.pid}`); @@ -78,6 +82,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { ) .values(), ); + // take the latest submission from grouped array elements // the grouped submissions will have one element with the verdict of `in queue` and the other final verdict processedSubmission = processedSubmission.reduce( From f809eded0f3ea18976d13afe17d34ea3cb79ceef Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:16:54 -0700 Subject: [PATCH 092/315] docs(types): add types to `Verdict` and `Language` ## what - add types to `Verdict` and `Language` ## how ## why - to be able to dynamically use the object using `[]` notation - typescript complains about object index type compatibility issues ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/types/index.ts b/src/types/index.ts index 3f9b010..e321e0d 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,4 +1,4 @@ -export const ProblemStatus = { +export const ProblemStatus: Record = { 0: "Unavailable", 1: "Normal", 2: "Special judge", @@ -119,7 +119,7 @@ export const Verdict: Record = { 90: { fgColor: "", bgColor: "bg-[#00AA00]", title: "Accepted" }, }; -export const Language = { +export const Language: Record = { 1: "ANSI C", 2: "Java", 3: "C++", From a4e7c8fdc82d4fc4613ecfd48f84013059afba7b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:24:19 -0700 Subject: [PATCH 093/315] refactor(api:poll): reword the variables being used ## what - reword the variables being used ## how ## why - code is more readable ## where - ./src/app/api/poll/[pollId]/route.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts index 6b52f10..d346249 100644 --- a/src/app/api/poll/[pollId]/route.ts +++ b/src/app/api/poll/[pollId]/route.ts @@ -70,7 +70,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { // there are multiple elements with the same submission ID. // The first one is usually indicating `in queue`. // the second one is a verdict of the submission - processedSubmission = Array.from( + const groupBySubmission = Array.from( data .reduce( (entryMap, submission) => @@ -85,7 +85,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { // take the latest submission from grouped array elements // the grouped submissions will have one element with the verdict of `in queue` and the other final verdict - processedSubmission = processedSubmission.reduce( + const flattenedSubmission = groupBySubmission.reduce( (result: Submission[], value, key) => [ ...result, { ...value[0], msg: value[0].msg }, @@ -93,7 +93,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { [], ); //sort submission by submission time in descending order - processedSubmission.sort((a, b) => b.msg.sbt - a.msg.sbt); + flattenedSubmission.sort((a, b) => b.msg.sbt - a.msg.sbt); - return Response.json(processedSubmission); + return Response.json(flattenedSubmission); }; From 0278c98c88c1647db38ac38193a0d21258e459ac Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:28:35 -0700 Subject: [PATCH 094/315] feat(components): add component `LiveSubmissionTable` ## what - add component `LiveSubmissionTable` ## how ## why - will be used for displaying live submissions ## where - ./src/app/LiveSubmissionTable.tsx ## usage --- src/app/LiveSubmissionTable.tsx | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/app/LiveSubmissionTable.tsx diff --git a/src/app/LiveSubmissionTable.tsx b/src/app/LiveSubmissionTable.tsx new file mode 100644 index 0000000..0290cdb --- /dev/null +++ b/src/app/LiveSubmissionTable.tsx @@ -0,0 +1,66 @@ +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { cn } from "@/lib/utils"; +import { Submission } from "@/types"; +import moment from "moment"; + +type LiveSubmissionTableProps = { + data: Submission[]; +}; + +const LiveSubmissionTable = ({ data }: LiveSubmissionTableProps) => { + return ( + + + Submission ID + Problem number + Problem title + User (username) + Verdict + Language + Time + Rank + Submit time + + + {data.map(({ msg }) => { + const { sid, pnum, pTitle, uname, name, verdict, lan, run, rank, ver, sbt, } = msg; + return ( + + {sid} + {pnum} + {pTitle} + {name} ({uname}) + +

+ {verdict.title} +

+
+ {lan} + {(run / 1000).toFixed(3)} + {rank} + + {moment.unix(sbt).fromNow()} + +
+ ); + })} +
+
+ ); +}; + +export default LiveSubmissionTable; From b3050a9e77c0ace3cf583f97b5f9bb1dc1415f50 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:31:19 -0700 Subject: [PATCH 095/315] docs(types): add docs to `VerdictType` ## what - add docs to `VerdictType` ## how ## why ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index e321e0d..03032d9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -98,8 +98,17 @@ export type Problem = { }; export type VerdictType = { + /** + * Tailwindcss styles for foreground + */ fgColor: string; + /** + * Tailwindcss styles for background + */ bgColor: string; + /** + * Title to be displayed on the front end + */ title: string; }; From be5f6b26b0caa1de87b3bf044a994772d1ce40d3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:45:48 -0700 Subject: [PATCH 096/315] chore(page:home): remove template code ## what - remove template code ## how ## why ## where - ./src/app/page.tsx ## usage --- src/app/page.tsx | 115 +---------------------------------------------- 1 file changed, 1 insertion(+), 114 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index e50120b..529e1c1 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,116 +1,3 @@ -import Image from 'next/image' - -import {ModeToggle} from "@/components/darkmode-toggle" - export default function Home() { - return ( -
-
-

- Get started by editing  - src/app/page.tsx -

- -
- -
- Next.js Logo -
- - -
- ) + return
home page
; } From eaa3140820b8ebb826d3d53a94184baef90b90d9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:49:10 -0700 Subject: [PATCH 097/315] docs(hooks): add docs for `useFetchLiveSubmission` hook ## what - add docs for `useFetchLiveSubmission` hook ## how ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index cd8907b..21eba89 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -12,6 +12,9 @@ export enum queryKey { /** * Fetch live submission (polling) + * + * @param pollId - pollId to retrieve the live submission + * @param fetchInterval - time in milliseconds to refetch from the server */ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { return useQuery({ From d2ca3b8c9dae761b754a4e1aa8234f721cb9a785 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:49:55 -0700 Subject: [PATCH 098/315] chore(hooks): add `staleTime` for `useFetchLiveSubmission` hook ## what - add `staleTime` for `useFetchLiveSubmission` hook ## how ## why - this will set the data to be stale after the `fetchInterval` time ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 21eba89..0a84ef8 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -25,5 +25,6 @@ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { return data; }, refetchInterval: fetchInterval, + staleTime: fetchInterval }); }; From 1d671374c2864a1fa3726da841c42cc11d7b2536 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 10:53:20 -0700 Subject: [PATCH 099/315] feat(page:home): fetch live submissions and display it ## what - fetch live submissions and display it - fetch data - display `loading` when fetching data - display `error` when fetching has failed - display live submissions after fetching data - refetch data after `5000ms` ## how - store the initial pollId to 0 using React `useRef` - fetch the data using hook `useFetchLiveSubmission` - requires pollId - refetch data after `5000ms` - store the pollId to the latest submission ID after a successfully fetching data - display `Loading data` when initially fetching data - display `Error fetching data` when there's an error fetching data - display the fetched data using `LiveSubmissionTable` component ## why - to display live submissions data ## where - ./src/app/page.tsx ## usage --- src/app/page.tsx | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 529e1c1..e4d3e13 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,3 +1,33 @@ +"use client"; + +import { useRef } from "react"; + +import { useFetchLiveSubmission } from "@/hooks"; +import LiveSubmissionTable from "./LiveSubmissionTable"; + export default function Home() { - return
home page
; + // used for setting the pollId. + // not using useState, because that will force a re-render every time it's set + // then it will fetch the new data, which will set the state, which will render the page + // which will refetch the from the server. Causing an infinite loop + let pollIdRef = useRef(0); + const { data, isLoading, isError, isSuccess } = useFetchLiveSubmission(pollIdRef.current); + + if (isLoading || !data) { + return
Fetching data
; + } + + if (isError) { + return
Error fetching data
; + } + + if (isSuccess) { + pollIdRef.current = data[0].msg.sid; + } + + return ( +
+ +
+ ); } From 9b7c385d00a134617021b8594213019abdd4394a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 11:29:09 -0700 Subject: [PATCH 100/315] docs(docs:images): add a screenshot of home page ## what - add a screenshot of home page ## how ## why - will be used to display screenshot of `README.md` ## where - ./docs/images/page-home.png ## usage --- docs/images/page-home.png | Bin 0 -> 126080 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/page-home.png diff --git a/docs/images/page-home.png b/docs/images/page-home.png new file mode 100644 index 0000000000000000000000000000000000000000..302686d3fe17c43419b154b6cd61cc3203c5c6aa GIT binary patch literal 126080 zcmeEubyQW~7VhCt2auMKZj=rIX{3=x>F$(byynTzZ zCjHhP7wxII-@fP!{05#*ZUNuk?%n>yGIJm#vc6frl77L@*L#-9XVUr_f2Xu07J_!y zm!v$D^C3jK+i6KE?ykQIz{`eok_IBl2K@aihZ6xkV8FxC)0$2UddC++?8#l1hoDKC zLhnO9?9J}~zUvmU0Z^(P1U#xczQWs)z(XuFFXi6(5D;XsX~a7g2c^S_LQ{c6wg-31 z)826lD)5YTsCTZ9iUdC!LL7yflq7wZ3BWUYV&C;1VgnSRd-H7xNN9M^3bab?GUujR zC`5c7`d_)}Zco?S)|#LPd{^BQyTb&5dGEv`iD@1^|CA^bL-7T2GTV%pl^sql_?_6J$VZyR28kUp!th{dwxzUC(BI#r?Cc}PSSIy#4&7-fhO!Vee7VUgr=_3ox+&7$ zLsoHdvF~~T9;s+_vaw<&9exJarwgfu#6YQbCD3%rfhMWOM~z zXwMRHxxjplIvJQi=h^&$fC^d6zxKlz8|&Gih&?VlU96gljm?B;>#momvn~(sHk9LxZ^%<)b8if2>qHLTHNLCaC>M_0C`-G zCXvbiu}g01$z}>w)BBzumYH{JRJ&~?W;_?7Fuh%mu*o9AUEZ$D4Q!z+>qB*pNg*Wr z>>bn6laHz&;AUt01O`umfedgV3mq}+P7Cet{!}`2UtOGJt@`{*=A_pyGuvMspglY2 z6Rmf4nl5S`k1M`^%Vdu+J zr$=fZwIqv~)p}1{G12fD-X5&yODynt;a=c7R=eu3uJmqzx*U{(^p98_IOP$`7U&%oVGz!1|$`qDwxIQPf z{_{PfavOEzE_cSkg1SrcuGrwNI2VNn z7aF;Ey2PzNaM>)8tgfSt(F#h_4nOLhhCgEiqb*@E$=R{pQO|_vYJ>&rDE_`}VKAsM z0mNadh8mwi;qCU6_miSNXEeXBdI6e+I@E0uL`gQoHl5(TlXIY8ZL+_dC|5PM-yACq z^6(IJw@Ywc``wkoZMoPK7|dY%OwMyIlqfQ7lgxS`$2^?xS*`oaT!)#yk1{ctOsCq& zTRB%!5rpyy42mtRkXO0a$QaA=ZEpz7t}oBjzNpckZB-^fOYzavj(0?jt~KOtV{Ml2 zh|EOgP2U#0C$&QQ^Q6(aC^Z!Y%su|^p(2Mguml#+d0uPYZ9#BD1=T^eZ`S>87yr$& z@4?Iba$U(M%ivMYW2QiW5OG29+o^{~nNJg+?RR(m&Xw2f;2{@q6~i}L{FNe)Z}j5p z3stX^?Lr!@VuPn6UY$=aH;Nl&)1Nr~DqUOJX}odorelF-m?KmfHA8!T&g=9u_*7&h z1cc=J$wMY9Y%7NfwB8>bAmfW;BC zOQhk#{?i{b%0z zdBpF$I26I8RT5CMB)*xip05;6^k%4QW3+g1q5B;(yZ7;*xNnI?0vBYpZyGxfL(LHO5Nwt{t$^UtBbQVtA% zH4J@uE(h)&)omxz6-)iWtT$b50h;roNN>0bw&U1M!$Rnlh)g9}HJq<0s!GWMX*^rr zfayXK+4QBSk_&(5w8?O}uHvkX7B@zc@jvtb1X*1hS)TcOilAD*O(p5x3v4La2QzaF zlO@IyU1@wVUFhjrSmXk9Aa>o?!hXdgot@F(DFxXa%&T-=?Vqk%KaS%xZSV*ZVY4_` zR%G&d3iYUsy59@rW;u0DI-*%SqR9sjyTJdNqegVY zuo#F|jwG6PwX^5PHi)Zc;}TQ>fn%LQ>AU3LEj>+TBxB}ckID%d%$2uAYPkHqaMo;t zGZOq7j~?xL($--QGt_AKt9oSHv>ol&!gv%+5|M!}Y*9P5mN0B@n(3KueIm?^N@PhF zCp#OSX}mArdLAtEm)+#hz}#?#cHu(~@6HZZzQBl6Ay(R>)Ce%VK&@P-1-QbexzaL^ zJv`5ydWLfsk1|MDt{-}UaShy)FuF>=xX4eC$E4Vb@erbCY8t z=zH)660T5h*_SyI`Tgae?+FjM8{G7?wkNBB3$?|wXmgoPjCG!h72k6oz(JwLv7adK z(n3wt(42AG7!iyfuXd?5>rPZ$K%#jBdj_JX*~zxP4atMsMbGQkdB~v?vC+V{C*weo zMm*;bSGWJ{Jq!Z`OHmf6QMGgNgN@eEGS@XO>&a977(TQ+i=}X(+Z-`E5~o1;WBPOt zU*WXUm|6#_Ge48asylSWSJ0+3Q%3{IF|Dv2P3%fwlmi7}r1}in!nU`VfggYHVqcbW zruR0#qT@id3y~+th$R~VIFX1kx_DuB9+r-d#eJ;;yKWT;+cK?Ou{Qgq6losTk{FN~-gjy|=-{o2C<|4RK z(o(l3F|M1nR!3IHUAfdF@HS;tJfLgJ;4rRhKN9plE>K8+BA4K2H&vsKgUA8Q_WQG{ zgdzmGS8Ut@x2wevtTYFu20mnfWB$l(bId@BR|{Fh>rghDjNfL`YlSrFj}!I$^f$|- z*B43S4|AIJ-JHZhJiM2^r}oW4v4Z1rCClGz=<`5(9cR50hM(XI1e}$X&bSs>f+5qG z?PyU~5b{i#KcN-j-2co26^3(82w49-o~lDnszdTeDq1>_Uu}5MHslEZp0TI`KQn@@ zf$>EX2SSY`j^nENW8rv1F9vK_bx1i$m@q9j*<2X>hwZep!JMvScV3k@1XQQRUcLRDEkP$GtGH3nG0Ffq;2WFtFJ>ML(oE)u7xYxPt~ju`6|DC zSPFXbjt@ta0`eGQjl^8;ceP?oS!k`{)bU*AHfJX@{_04F?*utmaH+4`A|E_2GN@;X zq4fR)IuveNil=`M>YxyRMrBav5l{70{51h{qH?&9&#B7w`NnsdO2d_2@W@>%rK)%O zR5;0PQ~ruum-^0*I148mvWmZH_xA4v60l~@D+qGa=eb`RcUe}pi4nB!=SYI2^mpAR z@H4d-0*B3$Zv=O)br%hE=OWF$(tl6Hpn;>Zfq@2}q}ML=&b9i82SBrxOTPWzU=kCM zhYm`Wbu2#I)lPxm$0-F62E;`tW8UR_u>m{asSnA$zboA7BH$uWqmQ%}cVi>7g1`}c zJ2F}C3jVQTA8)~rweayfVhLE^X*2*}W=bu)?|dGdwOb5Fz=Zcs3<=smD~8Yy-yG+< zBf0@3NdP#)e@*i54)I@;{BK_QUz7aBB!K~V5PbS)bYGq~J_Owz^=Q!*1;dlq_>6I5 zrKa7WANt{HV1=3|pJY&G+4snHOD}Zri#wi4odjS;8=y*>vEPtS=6K&4lcmC@UxPDutcCFRy?n|X7=ZH+4AqnB zO9whlcgH%Pvv`Hn$GtGGq?e_>JN4LfrtJ#9^OWJb9e?;g8`PhxeYZnio2c*&kz|G$ zNrXiwX8GwbV-WtT7<4V?M_B-H#%rU|V9pGFmsgkP8+(q1mcKuCnawuMalM>KDzhEM zsyrI{tor<`y0?T*g$?1hy9do3ixa$ETpFLlBLGJvtPL`DkAKSpFkI47{YmN6gEO(f6Gr)0(dYOg5&8fXPLtcMGBAYE7N;i=09o1%a%B{EAtn#{IBB}6jReo z-Ma%3FAj;TFu>bOv>PjF4}WDDX+&&>@Wl8Bks1I6JdejMm-^o$mce)IWimdSuJpc) zr|ZIye*3d1o+5Cc}9?8TPs_m;~P zt~*k6rE1a|Zq4$vTOL$$-=hd(D!W0r$S(cH{=D5kM*k6daEl2O+&HiFS|Zh5v`={j=)A0n zHVlM@e)K%hV49q+JIlk>G#owv5bk@0ff&#|cV1m!M?Umc-(O~Zn8a?Fn9ONP;y|Oxg7S}?Uz6=&*soLH3oa)8Oh-?7;Yu=!pwybaSIj@ z&V$N{y7Hm!!k)XL6Lf;PZzMl2bjC?=xo9GbgJ`Aijku_NQlQWBo6szjPGZ$1 zv%934k0RkQV7(?}H^}bDQ@)8mT-{5V#;#)T$Ah>efI9_vkU=;F8GWuZ5rRr z$L-nhr7D|Y=MG^U4#ei@zjk_(x=;jah|Zy**P8hwm01F}`p{5Hy{9WZX}SL2X(0d% zoYCs7aJt7(fd1$E7F{svi8`P0P^s%04M3N^P&}{P)?Hs8FJ0(3zezMtT}oZIc{=j_ zr3}EUmsHZGhTmTN&Areo(28#=?hiiC86x{aUjx;@#Vb#qlX^0s#YwYw)%_~Jq3raqH^POjGxU!+!* ztlys`ks}t^{SBO8Y#ghsKY>e;3c-@O$p_Ei?%6;Ou^j`D>}FjBuMM zGdd78ObD1>@a8BIEkt{6p&{VdfAc-RcW)V*&Z_H9&|eTwEg`+o`={HOV3mo6rkg#4 zrxr?O0!e(RI?=k#oa1zMi`I(AnmfUWR1f*RkI6_Z`^U{kt6zq{06`+bX+c`>JeAv$ zEii(!^`};8rsi$DC7gRWqyzj>nr06`rjt5(O=d*XU)3 z5`nv~p7 zxTOpRn%M}!u$O=Jlrj3*6X+}kJKeiPR#DZ;pY`5w{-TX{nr}K$Da$!%lquaxLob%+ zT2K|zo4ULd-isI82vv3^bmaG=y#Hb~Fi+Ch=S(a0Bl`S^R4$3_t9 zUJxW`m8UdC?sRQ5{HiJ-u>_fD6hMrmxDF+_drC;Q7d?EWR+rV8!h(W$DlhVnYrwx( zHOwtPIRwxGisZ!f91P&lY)0u4x)8|epz?-!Z#tC|E_5pZfj08b5ye%HHl)=fii}_5 zlTwBm%VW4e4UVXvk4z3BdVsqjvrzQkQf^Zg?6e*N)2jD6N&pyLDjnqvY2|oC`xRdl zz}iQvMz22*20Sc@?oQ{AXrHZh+j#Z5PeXB`f*&IQ2icf2?9?H=dGzyucl*>qK}#+- z4V0=3i*^k*=}oOcgQ6cn_%iaLr^+Ygtenz$Bl0KKzn@Sbae4eNE%<6r8U|nOSDaEEExb@Iu5?;pXh+|&OyPH_p+zxrErr~R0Z4ls0U}P~TMVM! z1ecXwSup-m*ndZp>VZ6-qOV^yrx9t!TtX5;Kows_MYz!a{%V*h4w@}mUo%GZ*T%XQ z2`UZ=F`ug4X<+}S&?qiloNEcQ;R)07kwp&*lB6!VAF>MHn@3h$?Ej>AVZ_!XOIK<; zs^qy4HQ|MY=c$mwrON#yM^X~fdKNwiMm(6H+;O$34vTE$wop*t5H~vxjj#uJAH7m~ z)%l+ssROf%<3jsC(skl=Sj|UG?}#;QWqAXUC^hh6^RyvI<^9CkU=N{*dmzh9GRyV{ zg^)iif>Pnd&Wdzr2o^`v#%<|+IhX$^*nX+m!@KTM%c6!*Dp6vl!`q|Vzb@O%8DddGqmrMDNwev*Q;@* z{&jQ^vicMu^{4LP3wVG<1g{6aCzlL~;C;~HKWAuh&CbM33`g5CRtuWbY5e<@b zF{>H+vNr-y4voMtHQA+!ihK)wvOf!Y-0NOsZmh=SyT7>mY=Xo4{I(`|iu+FZWw1&5 z!1#6jg4mXzJL31Y>;gqJ82K|iKhk)lk{wGmA}SQ!pOvT(v3x zJcvab-r4JfEK%ziiED5U5a&09K0a=^8YUzw$DrmnXV_(qGT&H-x!Lw-HG zSE7qi3FcL54?{vTQpz}2jCmy%wK;{)5E%!ONg7-e51+F9GXvTW!Fz4$A>Rk?VZXLO zD(FFHPOCats=qoGBncxNpZZXSWG=X4TQK4MIaEL%C(xwrne5ht!vo%o`i6cgQ@mYE z=q>l5!51|}(i1~5r_Q{&2Hgp3CjyN9eojY+ZF*x z&RcaOs$j{q=Xpv)J@O83^L(SD;TJNL6{@t%`9{xAH;VH>d82HPRBalKWA}jDg3I$k zjkl?6c{GKv$e=$q$^AnI!5!~W(`@p4X3Vc>#dt!o@1>>xVJ& z3>!0>bqe%rGhY;Fsn@`FW-FqegE|G%q}jrA)1zk5eM=xev~zW!MTq=oV=chq`bF(A zeo-3>hpK&jp^Zt2Jg@);lp`}GDfdhhN{IPSJKjmv5ow|7RXG}f`hlL)wEcy0apknl zXTla(@lw=&dEY=7)|FmMqVL7lXnXi_B4{#37hhO0kn$BJRl78P3w^?cB<2&QGK>4h zWW{%9JGsQ?xt+cpgj^DVBLF2rpFU8G#t1E7?8u4tih^s=Wr4z9i`#6a&rrpA`4=lG zZ^7`r@zdmm#yNW=+iFmZlkDwc^E(<9w;Pwgp@*0-qSt;X8JYaHV%fpD%>tRji+qyJ zUVm8TgxO%iLZBg7AU+VYIqvf1NW9vaVCigSfmm}7(}pnmMmg)6-n0!ahL2mVbDUG` zP(R#RDqm~b!CRrw+G{ral_yfGWT@(lA@*eEMg=}FD;{oYBsXX8jPRbr|N3(I(#%Hj zHa(Gb1wgGY$2Gl?e$YUEc#(JI;~)~SwNx?U_6;%h_F)pjV1@yf=*WaZRg{3XlY7FX z7lHeHq{4_gP+wKytJBW=7hlx$3%8w$)MLdqex(eSxvcPBJ(75(pjPFmT9GN@G*9G9 z5f?SZ^nPmeGbKL1P*Ph&QX&}HCtDt{Z|&?aMJTEjX#R3Zd#e9_0JXc2GQlszqcf4U zwg!5&-_2QXaY%qXg1<^BgzCKXv#^i5SEgVzM@l}K_n($9$lMQmOE^#f^uJ$xOXsow zkeX9SK?9W`GvX{I)DVF%dSVWvWF7RF2i)T9zXvNvruZoBO~PyMY0l613BKQnw&)RY z)`HBFX0RI~U|yLLgop6EEI$@ER5*e)38LoOPgTB%m29qbzd9dgz&adnq6~Og2Ni@; zH9Ru^S@-FH#3u%4dvU%kdnbw~?|d$7>AdGz>f^3+J^Ry|!wg zZhJBG!+UZn8C1~*v5VN8bE>;NExswdFTD;#{IiWS!60_l3US&1SSY?g``elx-U+mz z3WPR0UX$R4jQ75LA8@KWJ~=8cOmFwUuaJPW%8gW#yC{a#H=i6f2cwc;VT}5LF4{a| z1?h4(Y6i>@&kQIqM?M`1314h-GaPn^G-A62xGK_-f~Q910rLVfGIckpJR2z$?Q$|t9>pLMWutyny2_b*(iHM6&1|~xhQ7n+ zXxPLe>i!?6t7OZqKb3z929MX?1>t6vVv>%0mij~w0o`4w_KN!NkaQ2}j461FfTl}k z!i48cm}{iVOiL}+z4Ddz8uCXFl-1xa`-Ff-e3%?$bJQVRNulA=Io(e$t_0Odf#p4R zmpy13O&H#F9R|k>xRL0WD1)|9iAr^ME(}A|T{?zbkS2x8d_Zn>bwENL$&~<7O11Vo zH|%>L8X_T8=Wb-^JwlRIR6UP47L*RLd#zabdR}{_Z*Uh%U(clITJ&9Oz#GyrCfUDg z`nULueO>Lt!NnEaUrOTUFLS#&=tHy~D|wC1cS?1Ad7xB5<(#2s#1*-@gyU{Mefj)b zpsDyv)`CmlU*nA>_^=2_xS6K);3w{gi9)7X<1!2kBCWS3?}JxRFsxw<9`-nVqtCp| zgz>Aga5Uz@crBHxs{%~^)w##8DJC^{)bGPn#=0IVPBN*~+LZ15%_!{-k zZvfuW3iBdWuakVLH^Xh&n+$Iw|JLMFKtnYaFb5E}b?&HD68+lmgA2m-jE?u>;mtf3 z3Cbe-#P)QXaKt_;gd2K@lRs#`_gk=;T@f+pC0<1?pRMJRdWBnWtvzr)=?NR_FVtoK z_SwgP=oOgd4#N>LpEIjwZdBrl)3M}~@P`xs37@)GiY9km@7S@~7V0;ajt7vyXrDTJ3!rLjYU3B@CuMH%3G+9WU8?Mqo=LZ+`^#Ob{cG)J>4aI#Tq=P;!5nuTt@@xHv^b1!KC&5)VumoL@3LfA{ z;Lx~d3Z3y-@cqa#dj9*Y9?`Zmn!NT4E@XrxjzId?!8@5LTtrkX&8HNk>^MnN1f!Q| z;XUCWKaaS;5I8i8gkEX(*Ws5I;`R}6o)u%L9jAEU z619nbB)Q--Rx+&|N(9hq5;6gF6n)tOD}tEiyV1DD7d3T)K|s$~b8L|?DFD2^7r!yUlGJ$BMsFnJ#pg$#PUBj4-eKWpvrwh6}{Y=%dV#wj>WN*YKvt3sT7Bp7DpAgwf_ z0FJZy5(ckxtD`T_UWinrg87WpVbVbTTGF=;`WQ(f>dCS4d+o-ZQxyw(1=zpQLQL?9 z(msY^Q@YY+1sVk^8l-3O*t$>Em9<(QBFItYt9!RlL%h!I&j*F^2oX3QMmrGsGB`!K zt=HvdK9UWxY7^0|u&I9IGjed)Mnp@Nwh0ImoEmy=JuX+TXVCQ%shi5J6JAV$b|}h| zvOd=Zr;e{=xrAFLU^dbX5nWP+E|^Tjr-XsD0!i%G%ZZAOuNyEjQZ*A%{~E)(0is`d zCF4OCYanS0WKGn0nsOAgfm}Gx*b<9?Li(`ecSwh9tvjn*-477wGj8L2tzf%4q;+C& zTYy6)i*%y_%xI$+L)^ejNa$%3KN?IDz4d+s`Gsc%$q!Ug@pM6=v44=5AGb)%y5y^u zRnteS19FUBr@JizXo3nFU$nnPqo6s=Gz{ZIsSNf{jf!w8 zJOKc%wa@eH&lR?(ufCh_)|}`R1md!<+<)m55%dGC6pYl z8S*B|bn)Oko>VSqSg1CvagD2)`_P1mgnt=LE;@44q4by~wWPM*_ku7ZGQLb&@TA;*%ty_GnF4`P$#G-GZ^~D}qsDeuwT4eMvaF!Klkwdfdc0P$t(E{R*@c^%vYb>%z!J;mJwKNhEBY1_JX6K+z z_xtc!QaIc-8sxN|0h*B#A9hB|&MAIObFhq!2lfgyzwY|V8@XG0+d3M8dq1(|;fSxO z@A-X9N)xnkm^@?$wo)A?S{lCDV6?yu-}X6=G-XAtv<;Cgn?6g17wHhZCHt9yOx3$H zRvPsoZA{1tu&-JM=?YvbIzd$7H|n7jE<{8;sxCzdgc_NN@)TqtWvW3(Ovs@V@0gRK z{>%w4M8mnXG*sacfxQ{ttI-QpP9Mk@K|OCS8F?c@hy%g3yqEI1AV^$lfb?My$AHv-7(&^7}1B^n&y1|&r zm!=enPyw)hc;+Vwwsg}w0^l`(sx2I|a0y~OqlGw6R6>L+osydve3$(e1qA1uZ z0Lkq)vYKq0j+xlwawtnJ5v0TF7b`Q)V?vGag%n|Ltc{Ham`GoNq9Idzm3#1RSWm>Q4V+@sb2SiN<*N- zFwzgsP#lhwNe8Lyo@?nyRv{*RTr2zoc~%#bnMLbS*pY4op-M+EDt1rx4Lx~K8*JJi zTm}@3U#$Y+FJwcZMy=Zhz|VdNJhmMXH_Zi1N3~FTdC8#R@3qzX3+;;P1;K#KwqpE& z$e5xasG7VrF_r~VihC~*!GsX0@p!A2glIN-o%dc$92D7LzyT3SOzWWO1JVgvfw(FT z6AC9YtGtx*j3V>2U8|MX$|m5ymi#Oi@6bxz25H?R6USlH%`eixVJzS@Wu?vq!Jr8F z1l;P(&Eeo4D8uH3ICrp0UX1Put4+zqj&t zBafAptPSU<`B4JqGDY@6M0M8EQ6PK|jIWM%c5?y<_>jby^$;h2P&4IdQM0ii^bf+h zY3|kg+MA&Tj2wh$RfShZ1f8MkSrsaZIT%Lpt-C}aSZQPGQim4wbd>zU6~}{!UY|<1 zG!74|Fq*bU`p^Wv;VbHxS#RRNExP-Qy-6xGlx{c2PnGaW?)qwx&YuNC!YwfpUnej`aoZn_4y{9JvMW4JTn%qM3W{ffhy^2jAWpOMjq0thfw+n*8p`d@aFo$;Xtw2pKP zCs4pc%LMtSY-6B-8fA;{AprDml9ZjwY_%B?>uD2H$*ZOv7CNIO2*m`QT>RH=Vir>^ znlLdBWU)gO!Ai%KHW{Q(C!n$)fV7Wz%(cYW1Vn~V|{ML*nb#qw#T)&n1v zgcrpj*f$4_pU+I=K#ZFq@9`q=H(hgOQCflAa)d>_w43as1eoL;QA*2)U?ZY@p58^WvEGVDi^+D4_|?JTWZM zv8N}FHgCFeY(T%B zESg#s9*UGH4K2AxBIHr7-HA+3>>PzlnCMX0R&3Vwn_>DT>y^lYwsf{PQQM5^&~=8w}t8qOWD4i&U=TdFyWxYz8;Up z;8+jM4kGRVI2Gs2H<_AJDFQiG+c&|Qc`vC5I9$OPmxaev2I}5nX zQ(kL2>!vFs^X#zjzzbXx8WR!I7NVRSddPfTe?yw_5@AY*3~+uCM&-;Ou(BRkM3R|{ zd`-aGiXB?AURo%zEVG$BZ$~PALTFUP)ytI zo*Yo^OFU`0xZlS-LO1qVnns5C`Y{U}w}YS~03)9GyY-+*G6qL{-PT0Kb3PT-*)mb{ zpOS^x^f}P%jFb9WQyLlw%DRi`lna6}!s=yg?Zrc5r(p6N&jSlVdj^01&tsx9xFsQv zEM4F;N3U4Jq#^e7IA;=8jb>%INM#t6a*P8lDMqAM81 z!RTvtI3^wx=WP*J`Oq49TGeiQu$6SbRBY0FFt=0H_=B_&hQW3jJmtT#f+U_vpfEL6 zHQS&FMh_CPuEGpl+qQ>jzv{N4H@1ZloJ?k$aBa*N$tu^aYh^s^>5RZ8XsCd>7=_}M z45C0QB3k=T-q+5rdE4b-Qs8qT!0bwhF=Fx`A|Y$7X&=yEp7g)}5OrGnwBg1t^Mfi` z7~b!6%sECNj-2Ctfqw0Nb1mFaJt94Jx|fCeM^EAk_sU*6>;fsxGyK2;jeB4rmBum} zhkR_T9!2ngMfpIY9NFnXhg71}cVNT}(@p2nXpGhs1|#IArEa2p<`;DyXhRCsK4(8| zmUhopTF6R4RTdz0y+$R5u)9WVX+Vz_D|QMq3gR_ta_kYotTardf;u!_MLSW-FTskG z*#0$ro}=wAHRX#U$EY-hg~L4e*Yl+mS(>SBsP7L1MZItE4f`Ajn;$lDLDz6CF_7FW z-3?E~-NNri@Z}Ql&ZP$hT=Zb6W#CW%VT(4-pBWZE9DZFQ;WzsM`qC-uP^zv z>%HEkmeGFdYzaFVo*MjFV1pI_^ivWWfoEKL9Y$>1cAN=9p3g8X(D7Gi{2OyhtqU@& zKZ^IIa91iZ#h&2>p6|`D+&&@>Im~D; ze=P9qJq$H2$}e4A#PpZpGr`@%=vfUq@R0s;9m$!V%SyQAsoG=jb1 zZ79YHspbsj(AVAGj7GDm8lGrBf=6l!-@>0-x%N!2(~}jv`rAN00I5!iN(U_fCn5HI ze;Lw&0ISBT8QSBILvN^;K9Z1hC1iC#SR_KwYLp^4N;(7qUlJd?|z(b+0L}S&PoLPrv$K~*GHt+7mHm9T(%>8(ah0A>d9Qu^%r}osyiJPT@3V=t?Ti-W)&prjR8<|J$h4WCwqj4gz>rgROIE z+2e4{B0Yv%#VjB+rTR0zDS>z#t($9?7!_IINi&qSzD`I!4X&?XZH+H@zQTH2&jMgd zmK%ZZ<@tM{L6QXA8G2-~of-6kxWBz2s(2Vu0mN!AK+9!+(V^Y^kZ8QbxRAll2#pL1 znhHHRKp|8ZnK_{Yq6Fu|Rb1LjibTK$ks3qx`1$trr|I@j)2GgBzonx1Jpextwa#XE zI#wiV`3rVGEP>G5PsVUDl*5m3aQtW5M`Ls&; z%hSE#cTYaXKUAeLB{(H&Gj|BSL!_)K4yf>NjVx&Y`r2=QIZJv=g>T6y{L9V%MX42g z3p5eL^vUC}zf(tVsqjD(AvWV^nSbYPaOiKT@Mspi;(y~E{=<)NxShlDO^!3&c^k=F zO@wMtO4PrT!T;mu0Eb(304DtVvpa9|Uz7ZAYJ~rq*Uk0G!=L9( zul}WA5@+nM+7rB0#seMx>&w%H^*j_JhPuAIogH|h5MC2 zxBDjW8~=Y0v>at1g#P>ogz=MS260-YCb(*kX?J($B>3z6lgNb2lL!L`?Cd=G!Eyp6 zjMj&`oVO+@f7g4*G_92(E?b&lKfDWZLc(WR0^{?lwkT%gBJAvZqZn|}Th4C) z$@VQC{WIB>UVXBcRTK-wXpZ_O!oyVga-G*~UmA5Q?gDdG5bu)bY7GBH?mbu5>=$ z)LxtM&juBMf&EMaD`==5Qd{k9yjRRsOM`)Twk3SUcGDz@QVjiL@)#X^4MzkJ1&8)d{=z#ZH{f{ z+N}ceTSbjx16IIRN&uAfRG0i`Q6vth$ssGtk04$at+f9k%xl^}!Z|2bi}H%6p`Y@r z$Kn%Xy1e>nu3c|}UzwCFgpQ>@= z^1DR330W9o22if3d8n8xol1$LTvx))@T!M(-6sy5CuVrTn^&Il#J#isbK6lt zk_@X38}@%Pmw`c6)Ssj=tsy`y@BIz|Rf7+hO_w`SUo#L7d7o^{?M(X~R#N(DS?dKh zz6(OeAUTH~HEC00+ z;CBpcPk1~9@nv=3X7NJ%x#H!Q#uj&)7zWUP1?HuTHTZa%1F~K`t1cE$z+@+XW!3Td zDED+z2XeeV{2Xw+AHAIL+01@zMsss9b3=A>)5SEU%F$G+r_eKSa75itYJitA^gHna zmiD`mh}S*Ejn@o7gS}@XSP+RMJ1Ylmlh=%A8F#_OM0*%$7)|k(Tz4c6WuraezK*L>3girgDvcJ_}RkSNfU%aMy>ngB0ggu0~)rU(77!C!V`4g zWK?Pn+62d3YS0=m5v?H3|PljYe$kSQ=_N*B|HfVlp znKenT+HbYL*oB!!w3uY*=b6J3DHBikdTF*>0p=4iSk+c2z{&G;M;nakL7RA8X zmH0sisED&^-m8NXCs=@F1LG)Xwx-0r@IuNQNY(-8u|gqW;iLj<)4t(AiS}$Zc$vDv zC4c7rdLJKys)@sZmLS*HS-2UkeV*f>Vg^6FJC)e_742AH1lD)9{)owYVb13daDr(1sHa6qq z2VLNGJp$x~v~iV#UIP2@z!7KeNuREwx0i`roU;{HM3VJa&Rc^*|uFF2IvMVtTWF6F`AnM|-9g@Egr>IZTIoac?;G!`W* zCkHZq=T?rwJky{c$zDFLz{IQC=vXDmy4S#P0@wG9Q2=NcDE?Frjrq?D z4-y%4FFOMe&mRlr9gvCA1z6^IpV&`uhdb4}Z;kYPP|x>^1zb0|(V{6=KKzcY$!h(X zxZX6~Q>AKqgY2RwPV=jLs5k8=cr!}yrLD>h`SCLIsC-HJj;x6Lk8)-PYusjrR(Q(y z2V^KycQkbdHTt)$tdMs+t7HLv`Pblk>gy@e9mwcUVP6>z5u@G}w#k-u{3#sSgk$qB zT7}wDACR-An-omdbtax;Crg+`<$>%e5GnZA@;v#b8zxFggae)ZtV$b|oT$@A zsRfXvlhj`sf*r8H2d<95wZI`9))R-mZl*t!t~Cu6x$&b>8FF1*mSXHU056rBy&gVP z1C96ul!*?6np07oXsN~mX3^>4=p0t?*s!{{#w*T)n08)xCBIw<)cOKrBX~- zyngO8f=B9K%SC5o=C=Q&^M7;O3oqaYDI1dk@?-sn=cKVoM5M?qsWOql-DA#Rtja0) zLC4wt*^22{DHq#iHa_5o1FcaXlH64O zCH0egWKWvR6u%NIXW%)oTF^OnmhfZ!(78*=$rK z>H&AV-4jK=kuMifFb{31#%dSK4L)$b&6^thnfDSMDi_!hLJHf!m2Dbmxr5EQTVCUw zq(1iSQ$?M80IEeR_tO)k{F4+*lhn}j#`7XfIhGE=)22XQru#HlZ!&^hXiT2YN5KPJ zM7MlocB95>+#<%we#wkl2?qZ%wZna=Q&wlzoiaL7s_Ll%jwte}c9H#XUfkWI>)$nf zC9~M8&#l~-qRwS5%ZQ47L&Lqo_PYNE3zPO~4y(T_A~^UbLXi5iqOvXZO6Ius!I(Do z=$GdmTJ3Z z!~>hcv`sJh8YZ%c@%zfu@-@giX7+*r9u@N@1jh}WgjJlAwX__9D0*2^jY~lK;OUnF zoj>4cBWWToLHM<0Gq>kH-4xo^z``Kob~;e5ehHPnzC<2k-Fc^po)S8t3sR$IM`?+@ zgqKw~c@gr}crCorvs8m4F-YdIt|BPpBP$ksIu>Dj$$po6s0-)m0y;{`O{f~GJhmf` zi(Y2&BQ;UUm%7}Ni^ERQ)o+>tuPhKIpB9>K?tay&c!PT_!iTY$j&*`xWd+oUiiK>( zM`6gEArr1^2J?TKBan<(YhV5$e57Afpi{`71P;OgB`D7?vz)irkz$2;N*QY1lOX() zG|%C?y(?6CUq^w;c?J3)(&mP4e8K<^EaS4MP@zn6OHG+gqj{n5SoZq2)8RBd<*Zsf zpdJ@jY>AsE@ACntnpI>}yR4-21ZI&`2R)9)&XB~3zbG(w{L zYn?2F&beFV9 zNq2WkiHd?WNY?;Emm=LEp&%jM|AYH^?ss{u^<1CcwOl$MaF}z><2+*Dx9ztrmxC^u zyjZ;X&bRLN4!Qa*`EY{YM-APQn;3-hkT#F(b6y_LX2z`om5TNGsH`E&Uh{I6;EOSvE79B$uD0xw=^1rU z3NtI&#9UadeXH%fogXqCu_8Sv;=~DG&TIwz|Gq zYpL-C_6sbeXxfgR)1X?TaF-IbDU)+BHyzWaps$Okawu3eTustUH=37U+Dd<}Cm$@h zII;hE0kLbZJ&o+J%zo3#)~kryC+9Y)?o1tI^p^tT})9 zgyjgte>&p+HCw;Wc0hA;>jYabyv}lJ6?EM==;kh<2#*Ai5X7ycce9_e3?X^b+zG#4 zdq!a#fddrU0@{SJ)ZrZlcNrOw;>h!$E_(8rG*K=Bq%@!=TFO(ZeDYg>X0vM+QV!0O zbT!=d}@QChLCo1a)RFwVW-)$c>J`Jl;qYlW|V|P4a{}9wgcKLPjb+KQ- z;){F_x@2r?6sURd*vxblhHf_;V->sYqSAc6DWLJs`Kh_ZRv#PiSv;Z2X!AJzy^$5#nU7dk6~>!e)g92XB*|7 z^8J(A3wQv~K4)#5SLm&XMB6wUBPE@u!LV!4yP7D{nEhg?yNjO!6w#k4!v*QdrQU{g zk?-WSc%Otm>C1r#`=0Y3?DRW??A~qM|Jvxr!4wgb)R+9p#?aXRDpjuwn2uFTqg+%g zq{F5*=RB}EK+i~uQ#bvg;rjj@HUXPjJTq$j%_9#2T)99w;#N+$tSL{3C*yr^j}rzn z`7*uBt9p#2AU?~X%P`Muud;U)LL3r=xYr~z^Ci8BeGRHAA%sYp| zm|_9w+t9)zD-tCOStoxEAf#C^nEv1rtoQQQAcj(=*!?iKW>1%xDR&L|*sCYBjmRsX zZy~L=ljq{o4Hs`=aOxCzFFUx#J#p2=w7lBw6f((6X6^an3HziYs=6&xOJ(xJUt0bB zgCfd55X-AcymBvX=bQ8C-<^a;>oCtp7ok^@NYdTJ;`-Hm)=40ie@ktR?5^GjPGW0W ztj~?|^~H+kn+W&NV)kh=!Y3mHJ}yqKwiIo@Hh05rmCJ6f`9!D8sqfJn{=aqVLW?1% z*B7b+uLvh3oohPfnb+@Qw}ed90P!sEVnTlaYZW~wi`@-Foz#P$G6>Sm1)YGZO$VgJ zuLSjGN8^(p-(9F{VGU7GQRnaes8IBLBF7HkvG#F3XO;76+ZS9;sETr>eTB+o1r7 zL)M3NIc`ljP*+L-&-pSPo-=j;wqoqYk8z!7VWggz zD-@mAnjmT%2gUhE@3-|jmpBQaPNBR2ZWU41T*Zyn7vt>7QzrFZtp~R9g&m>M!nvk% z#S!1nX6)8FfZfUC@<-p|p<(bS*q_``&~E*@$rJb1>%0ppUypC-ND$vYjTBD4z6ykNm3DRZ)64+&sfi--Aqby0B2|$$2=&A~ zq%vTDx8%Sy$72QQV!LoDL$Yq_n}H#vwhIv*VMBKllk~kf{w^VHBG;P$iZYTe4*9+w zmESTr^|fmltr$?8pf-C(9LbO$eaM#!g|jsT@T@u~8s;&5%aa8e_U;C9uv{SP_LHqY zLnoV+eBCy3gx%7JFoW5&IJD~n#=PDq!Hilb;5e9s9MF;G4T&vaOo=4<1k0vi=aom6kqaAA)v8k%C?Tq~q`U4a6_AsZ3 z1Po=rl$@p@!Sl-^dZONKC)QJq^j8|ABAE2+#uZQM1fMJ`ReSDB3lu`kFHe9^$&EG? z^!z-24F#WYw?0!;4|GDs72~QP52nz0i~cqKb34wKUhnXm9&k#TbiX{UWb0rA07i{f zTnhHX7n+6=vjEE#!HkN+26>t#*oCxLHaC#B!*W&rHGQCADCPjle&&sa_0He6`Pat! z9`Ukv=n+Z>xIV{Hh71ByN24A?12(x7{40VHd&limis8Wd_smTLg*i%~$#z9dMTxsX z4_5SXfpYq0$3{4vpO4w;UQ(CK}b^~gpSwoEy|!qkjP z|4T|xv)Op*O+X&-&jaz%{(6xi$`5rHgD@sXnj2KP1507t+#iY$YgqV0Vk?O<2|mMv`z8YQs~cB;u11#*Tc=;4k8oC`dGv*^jbgHfKrqY%+;MNjM;$=s1xKcm z7m2Y>1QRl8LcwhEY6FX%jpS9;>-%45G4%&?I9Dk*c9}Z%;0GAS@hCeFHiATWq%&_B z_nxd!b>I(2V<6BO|2(c$;mSFc$gcM#qWeVJ$|!@o^AYyV&F?zCv8$da@eo&{3%pF< z{q`!{64>6eC%}lp^US!Ijt5;SoFz$XDGmL*2mGcXIyObb)r#r7bgZjE^yC3{tRh3K z1$kNJH-mBpi2N0NQa}rTlaDYR ztC=v{aL=^J6WGl0DWKXECa?}r6PT#)ZZ_N5#ea0S`v)aT8knGc3jy1j=w?xn+_+$j z^Il&JbOhhGCj^S4wWO_EW)RAjL>%(U@l-z1S`H|2mchJbw2QV~(RmMga*t#18iP&W}J8nmvi4wm{99*QaeC^h5Y8bw{Brj>+ zJ=v}IFxs)E~{B#Vt|Vb2EmS zw!C(d@8WD1%tb{F{DHc?{ZYSJk)i17HAd#a)syM!UG<8@Cy8R2uLQ|oUl7nH>vl^M z@|-NiUCb7_Cc$jYY|oz>Rw8BV9wG{&o*eaCj$u%4Ak3f`eKOetl2!}c*6n|wK<}cO zb$1*?cy+*bJapQSCIX}0R3l-lQp>~?&h1}j()L?u^5qZ`HU2X(_CrL5zuV7I-B@Om z>2NplJ5+$(f=Y*eZ!jN^9QJmR)b8K|09Lc^?AJ9Gg@)(=Ht(eR(}q}kL{wmNI`z;B}gH93!4R^;!3!C zNKhm&CG#V)#tmF&fON%DalxHEU>$sx{gg1U5TqIPgfgZ61}dH*$B{R%6{)y`((IEizX;y@ zP+|I%kRDWS2j0i_42}|Ry9=u3W3~3v>{FhMe0!hrj`^tsNCe{Y zS>TPh0YH>HzB>>0X-7WTZ}BMn%6F~A&~g`0+;i3Hk2>y+ig<;)vO0?{5*^~FbxqN~ zs*%`;Rk^*}*h*4!k+1S`0!+RY+u23Zah0j$O6VAdNb*1IEPBqGesgspsbo=-+;;gQ zj_71Kij2hhCV%x$PT!rF(Lz7fzC5-jfCV{;;~abKgrv9$Wt1{NhxKYZ<=*V3z|Gmd+keDG*P&PdFdo@F;h_1%9yEKs-PRA(aCU0gc6f&*k7Th=B__%)kKk-(54lf)BI{CS)Jp z$^!#cZv{P|ey_9o+f)d6cj?dw%$`FX%ob3v4%Ag}-v|sU5(h16VD`Upp(VBVD6#=H8M=W=O>@ zU66NRE-0ZoPiP_%MPCQ?1qHj`5t0;!4GPC@4BijtY8f!;MV(%n(|oOWF(2C2uQX#B z!VF(whv>C2kTZ4DMZTi%XWZjwrGr8$JDXirF=?1$SXc`(rcyX`hA%aYwqgq**mjag zYPkzf50L&bHAlfY80X&ZtP7Ez6LH@z#LcT{4k|vlJag5G2!mixnj@{xek9kv`FT%? z$b<&-8_6!G_0vMU=_sH}F3F;M&wh2Ul_8{QQEQKy zb$g^Jk*);ATJ=QwU0M)XpH|?Hq}uAKeSsqe2fc03f&0p_Y--o?ryKU5&EXX7-L}^Y*V@I-oCbazaKTc3T;GI ztprni&lYiY+d&zjvOhLK8_v4;8DbN7k;eQCv4tZv=vK6S42?U zl6++8oj+uHaKf2&E5q3}?{l3N(yMby@V-}w_hQt54Gx3Gcu};61w4eRsQQAw#GyN$ zu6P9tbQy8M5aMG}S#d@re zh?P}dyT&YN)(I5uRpd+AR==FCghiGJ&f^4Rh%r(z87MIvOJ&Q9qS=Xkr4Vhdh>#O^ zrVBT@V>djU(}X^79ab4EcYnpHJryO0*sP*bHXFi901u&H*HoO>5(2RD62CBvYWA0G zkd7J54p=w-ekc7C6Ce5%xNZQ00nnGok{vR{WlQ+#VfY})WFre95s&D%JI4zE0{#ug z7hq$3qec2K$sxEwGtb{nOZNjIqh0?Ba}`rG7r|S=uXJd!~hXnaOHmHZ4oHkWXd9qhrH7zj6Gb9x6hrr_C(CmrLXo74Kn~ruCgwjyR zZ?Q~6m)BaQcyXHY<;j9Clk9b)ZPQ4lLa;WMK0WB`;eW4P76m*|?0MlL>m-qORf+{_ zxM;q~a8Sm!Fo8Mlgc)~S1qH-~x@4AzuKGk1(d=-%O()=Pg2`8xC32uJf1lm9^@bFJ zw&?C*$KZ);GH=$Ea$+&G>L?zgjeuZK`6wd7kM;skKtER3^xXN+3iBQvN=fotLU=bb z`l?8vGw_ft&=76g*GCcB7-PX;uyi&ZH}k6at|`!y$=w(=5+}!_gFS`S$&_o;4zqVI zg6Y|=GoE3V?8|A{rpr8_m>Jt`w>|rX2{+Ow4^*o8z|i1WDq&=D(_mAk%wqI zgE|W@P~0xhfQ5s^53<6&Kw(cm-*$r#W19*IQr7Q^N*(`vmiD_NqH?T2+4{ht*r=sZ z34vngse_S4Q!xfCMLvWK9kz}J)s^534Ix=2xC?p4Yd!ofjm{W@3Qm=!2NpD~=<`g+ z$0mGuj;+T^HO|BfhF@3;iRXltycX2pLq<*R;=NAl>Z^(%HtH40`^?vO_+QQ{&`P1^ z5=Vp}sa0p&zNjE_YX`D=Os~nsU+_1aEVZVvYb)YX44Ru^<%(|zyGvWV6q;aoMbH{q zw(eX{(39I@p< zj4eK${jc+eB#W#5*JnagM;T3zE`Of9osd3lD)#6|7Km>;;y!)-GDdP9>v-G)8=*l$ zRe$U<9R>qn5OrP47)ki@XE3!4-i;W7Fr|)GnaK05n1Rylq zz7~eLBzqVq#v}RzOt(Nx`fZ@w^>H~Sg&1ekj4%WIKN_m@)$hsj_#Ytu08VGW*eYY# z>)lA|a0$U`QbY~JMo2@*588DX>BTUmz33yuggBjzx-TN#XY~#K5YeMJ5k=hPs~vL~ z)04ZtzwkNfC`1F*+3EVMN9hH=uTb`Jz!1azqj0} z;z{mVNDm`O>S4HUXgM(k8)y}H5GbJ7+}R*w4XbX!pr09U_4OW_PZ$Z|kcub(yijy6 zWw30OFL1jJ%>ji*3!r%lulkyk9fI=vXIAR(V@2Op{Uzs-2_R7<`MR`?bMB5A9HcF^Gs9%>b0X^`Jonyq8#`JL z-)vW3v;JHM7bHL`V{iKnRfz^`c35HX`1>b+p}vWPwHA=o#j4#*Cdm)vG3?Ey+zW6l z0_ub}0(SSxOYkTj&VYmTbF9iDHq|#JrfEr;g21wGG@OH{C~s*DeTn4|v>D;7VnY~L zZDz~(b891yQ1I$8b_l?M6hSHHLz*gAzBX+oQ#i#>7QcgRx_u}~_)EbSfIdeOLCo@5 zvrtbhiPeATs$Gmxnz-KmsH#NoPjc8Z&+CjfB4TV&IaKDo=Q#8duYS)|>=oOT;S~!b z-^*9YDEn{#xEu~&FvwAotI4>~OFpyUy@{2z1*pV{ke3HT{!B*apYr@l_KTX{+}v!H zZ}C?eJWDPiDzN$Xjx~}Ysdc`^dy?591S2Gu4(JLa!cTd7Y}a02u@7+KS=fgb=b(Svcg&~ z_)|`CNW6-lOprXqp3~k+vW&LwyD}kW2u&`l$OMOx1?F3;+ zSirU`@C!WQ5k&lF zGM6MSuq>SIR5<*tr6tOhYCgp&Fj#v;Y|P08zYIp?%+^^RRpqS>|8Bc_-?HFMi#6%so@^$q{`sX+Zf9z{pMiuCHs75~(DX7n}WRr&`&@gsO=w7Wo8 zlxl1g4nqKqV;aC?KZzvnip6_btnFa09eqrpkR@?h@hMWq69nD3#sdA?T@-HBH)Ai( z>X2}{nRFl@wB2rBlZPAvK(hDy8q@#da{V4d(gF$w?Cjr9f`!!osv&u@%plE;gW_}7 zptyfGqV-mOi;Yr0F5z?f^~*=?(l_j{V$)*o@@2_V0RhqE4{E1JU-&_3kF`%hg{F>v z0w~aApXNNWjEkfesbXF2=sbeyL`nC0{LfxS12L;)mwEhSpCN!cjH&Za=1@87eInW1E1X2i|8>c7^wtZ~NlYGok+kBC z#z(Vsk1jwcq{tVb5ua=7q-z|I04A0YG*t1|uXLUjhv@wj;Ndv~;~TcyGHGP!Q%&iy z2#8`-%Hr52r&oYYC72cjy2S!5Ss>u&!;{qKATEyu2y7F9__0XY$(8AR*#|kG59FqI zXwD0W?f{j3QifpRewNI!1Fx5jBs3%fZ=N_o(F3YGV)m>|;Xb1mMV zYA<|sTYWE!*yyrbv=<=b4;qIfl>+X{XHpJr&3CeqjG#EA z^Q}0!8{q*zJ3%P05YP_~d6TyX3yf zNB*N9aM-ced9{Oqkd&9_%F&JzT@77|n$LL&l59vhDa~q9zq>w=K4OJ}{j9=iQBCzu z8zqlf?_9&dZKU0K3%?Ofj#dBD~+B(5X5nx-3w7c#JN$ZoZenZJN}4@Kna( zL|&iVgd3+!t@TnExO>)`I&1&V#60ChvB2?Ta(kqdBN*I`rNYdkNf~pODNVNE{$}+E zl8NkMXTGgCQhcX>5$Mw!_}JEx8nbx@%10J>1%Yr_3P%bWEHDpv^FNcYV2kwR*GH4a z5B3yO2|>&ZR*;dgQg=0P_20I1RajU$^cEjgGM}&F84^T{kX&t- zPlOz4vr5{;y^j-sSn?jl#-7oANZ5&J@9{t8`2R6y{patH2&rFVMX>`s2JcMwJ%98P z#d=RExNk>LR_Z^1gl+CG_5D3j{^Rx1>}^)f@s;V;zkM`CdRg!zVc2wPw+it8`_CdP zux{1u66*g;C?EKh42&T0M)uV6--Aw01%bP()z^RO(ZBr~Vn9W}4PfZ#N&Y_}>i^m8 z)PdC7!`~O36Mqkpe|W^CBEVkr4v|FezbDAFss^CGby}pm-8BDom;Qb&Eeo7=5qtX< z|N3F~9B!R;7uOYT|Mv<#Iya|olOXE0y#9BvnS!De{cH!aT@}mM8KcN z=p&Z-uOHSY>(-ywDrryimj&Uk0R+CEkO&ZK1YKVJ|2tHq4IwJ2>~0bFdjI_<(KC{q zuEx9O&$OshKxAr;O0xg;lPl80!B=z^@Q*wA_a~P^2V;*LbulfTN}3T{p**b4*9|N_kH{4YoZMB)nWU%P7D0&Sa=KRwf>iZ1O^o&HyGAL zr|VUA|2k5nP!dM|zU+U#mNfxi64Tz0<>cQ(^q;R$>GS@+?0>$FK-}6hm$C-R{`Ii| zBS_-k6P2KW;JJ%I2&EhT>o^71=!5ys&-B+Fqes0BTnco0*!1_(1{NzM)GPZUQEd1I zp3CabsJ1GR`e{EmN|vz4H)>PWpPu;VQ|8D+$*YYg7LipPQL@u?T0i_`cZDzhXDV9S zx}D$7Y0NJE{>_(B5ZP9RBf8%A9r3c7=oUB|=$e<&jpCnWb13E`f^W<8w|}7Iw=*Ax zn-Qou{&n}VaSAOL-#;N-GffR=tQ;GSXE7tHr&4;y8O!=iN1o)F^5g$T?|Ei|H)vIv zX(s>2(5k10oGf4&?)D|esP(c1kwo|~M#<9Abk^fk|L-_Q41no!&oXh{?eAZ#h)6w6 zUx}RCbyv%6eNrsx?i0x-+kY;Y_4a~s+>QQ@KSS)|*bKH^wCwaJ-yyxZ zJkpKuc_N3%ucRdTYD@j2OY)qpf(3yYgb$0 zpRJ{{0Iv++WGCqL^#N(oZPJWazWV_)c()N8F&i&q+H@cA9%8)GBoU1dKg(W7$cOAO ziT=-cg4UvUq(U+zd|xZ2!7{h!n{+_v0ab*-;pR6Mpd18=Ar2xwrx9Yl_k@%6fJ2W3 zP?BGQ6}eryPfID2x8Q?v`qSH>R8aPtSjuhGwTlzuQ>N1pHVMwz%fA^{n-~=ZiPj8-Ik= z;&8-?iOSdCE?`~cuFUrW`hP2y0?>QgEn`Z5|ET%_1fN#{V+#AR<@{YikpC6V7yD^xiPN{mzZu`l$AXN{PraZj0xU{bydXqk)(N@+boOju zcg^FUCGMSeHgL(U?jmatq=1IPJueOfW>Q*U6p0GhF6kr(tkTE(mY#{wf`PpLC}@39+iak$CzXSeM|>IV$-DL^F%4uJv;KZvHu2j);hebJyt zfPD)~lJI>5(o3fCWK?q=)ex~U#J#RYKgvNBZSJ|PePpGZ8#2=qYyH@nJkRYqE-h(u zLcW$EmQ!ZF5xZ9KyV*Fw_Wkq{Il@4gE0#cVBf3m-74u3c3As(GkL=-J23k#Ja2Oua z>zZ9OvfgVi#j3Iz`n+m2?O;ccwvA80RMB#OAQ>NcOIe{F!+`8uL5 zO9Qsm>xE_!`IIKVt40%)uVseb<_#vPK=s<2!Sj9)5zvmdVtBB=+Yj3A4n6!Y4&(0J z<5ve6<*c65*294VJHJF?Gq4PN;BNE!U=|XBSO*gHUPlg zp;N8#^jv{nd!-K0Kl?%AYu?3rSUL#^CSd_gmBl-o)72Ya1gNCvF3%)?2Jy7$_JW{P zfYNd_lYLg40@DRP!n5IQJnecq&@94#4g)^SpysRN+2?hR;vh1)R9QBcn#5=-%uO`d zo9?S%1Quu!C4$`dOb=G`?mHmiM~qCiv4M22{7fku9Hl_#gZ-YCqqD5f z!82yQlZ05G9lyQ9kaxaq_WrH|lZY}feaXDE&7}&&Hd)2pMZpb0fckKz^>+}raWGM4 zs82)qYjb_n($xn%W9X~*y1M}1M!Tnwg&i_6c5?rHoZQi%w8Q9!-P_oQ+n~!V2pq@< z#Qm~C9ZA>L9vF*f;8LFC zOUupCQjMWVUh%5|zhvR+)g+fe_(5d5?L=jkl-oKua3Fz;O3rz0cL{K>{)&f0dHwdF#W7emLfTC9J}X}X8u z0(5+JDEU2M^n+&v^7~e)Tm}@~>1q;ZaG=d+^uKb`nA9oH;92{wb`cWgBCWoKQgXqq zgUpx&kdd?H@Jz0`PkZj~*z6cCB--iC)(7cgc+e*RV3Kaa?U^`MvELw91rESp*j9IU zyso#KB&6PX5Z5k-YG*YTe6$xYIsE6YPp%Ex&IG+lv=>fp6ChIEa|rCZK;OeJ(yxmv z3;*L?@KS6QXzjEd?prMSm-Dk`YZE_2M-VZE6=xj3A@VmN)A^`k>-)^Q7@9Ewe*j9x zhTvW?0Rseo8g2!47O!Phl>CVs&-d=RH=uy|S-no1LRr-Un5gCFE{-PMMvHZv$THWn z%t0CJbFhIKS;W12c%5|%ua&zZreBCZlTZ{Y0p3u`fq?y0Hbt;{9LjhrQV45VfHGb; z@9L+#^?s+e-zkA;SPee1t>?d##km^z9cBhEuVSUS(lht$`MJ_@i&tYS~s5b1yM41F)AO zr6{^x`5fnjl@eEK=z+2{E;2!gk@V48-^JG=4K@H553JM+ie{8Oz^4){g#LLPQ4$ig zMId_#dN_qzwnvUTz>3QX)X?d(^8@Js}cF*iUy^aly_ubwY<*z=p#(RT2aV1QWkhoN|F zmT|=zpWey!=KLTN9~z2J0H3RG@UC0P z6EM2Z#Y?$>7U*EpeJMKuPVA`NFAz>qR_LF?}R zda|gN43^%XKK4a`fVAkzcD2`ehlCZ?mFfaDx+;l9xljSQVzR4LswXg>wuKlSYd z8a#UFjev$wX?O8sIT_%9H1%VFH0t9`cXpq9bcP*SG0_}g!`mL;2}z|BoOm|##kSNn zz_Bs+Gwak+CuPJ?XL%cK@#@vdI^`hA`N=K^z$kMYiByE-NnCjw#-};&+2eg1py)`R zw?*6OcK6JAj5SqlU7o4%SPg83JF(J zJQiizRGJR#M(W>68ti9lRTuo*qEj9kJ^}3m^9!1w#f6rpSVipUs9UK2x7~RU{h2u1 z+1l8ss8}}yyJbnw_33JfZtwO~WvBZfGIDiDdJ}9yaAfO24}{mEcO!{S&4`bCeI#!L zp6+{U$~9X#rB(RsedDzT$Ja9(Li8Z83wxZvFX;VYHRSI<79Kk|4E zs2~@E4DBbu6b;rqJIrk`r3%jt9RHsES?${X_!SkuO@IWO!DyMa)Tr<_{H*yve-q7K?6FC;Gy^i` zt_<7d?-()&Zte!ybC?VE196Z^_eU0G@~uVJzF*@Uz_a$^&%8%+Oej_fimA)h!H8s2 zvmkjyXP9q+_CdqY?rE+$ESqN)Yjz)?ekWW`49yMILGcVfKC#EjG(zHO2KTe4+1So) z!EO&1N>3JdUsS*8@+Q!+Jj9!*ZF%jxX@U}=#6ljLfhLteC;s}2-m!-ec~F{u^3lW2 zc^v7rdY8p1gI=+-r>5;QZT^xpTWBGAYoW)YXJ`=U)-{}1aR2iuLubF1t;hMrxqXstKQuZfFpUi&_{ ze&TX=aGh7R`G-;0<7(Px;JgLN!SZ9GQ=fM={%+M#dFjWZGvf8+r$0sew(+Xh#y88K zjQ`Mz4P7AI@aLXGs0)|nVArNIwU5k5k^gC78gnUAZkqcnOZ+9CkM|vWJ0Qr zc7F+8^^cJ?|;7$>MdL1ERQT!TM#v*ds!*A!yZ$h2{pU98voz=h-4`>+iJ=`dRzPF#NV( z!V)qYsL2i>K%#qni7oFCXP{@)-2v?Snks29u>ggF*X$VBaan-Q%#RbYBGR5sShfz0 zVW?kSEW@49g&)wvsF0>1hEyUiQ*bIVi%mn!vLvpsX3yvSc23T>9=xKR94N_p+j&bo z2%W+g+`l`C=jaGhzubHuvc0h~y$U^B2gjiye=MO%*Kxv-Hn7T;?fbP`U4S{78fH0= z&h<&!ON;L&MCkrR+-9ACu|iIJseajN&DR4Q zI5IPJ{v+57$3bmwsB^d6k%F5N!HH(*8{inQgSilietCWL!is_#wG$B-tZE>5;hA5E zl^hMWqo38M9*1rRv9jLpAfM{F@VPtag%74c9ZZ!e22y!NpzL(Ec zLiVUZ3wV|~%$f@I-BI?@&+iIdb!CmtxTo{%i+&feIGH>q2&tSOSB?wm1T+iZ_wAF2 z#?oNA@Af(IvXl(e|D&cYkP5u){sk>CYI(gbnhOvevu@m#aa2NaQNa$eczg>vFUDVF z-1=EcwWEjZ$-^k^K+DTwE_FY*-Pd~aD?|6%9pE?g+MvNdfKJ9VrQz*ORT^gv3Bgy) zH41&s{xqKUnUzpgRLA$h7S;eNBNN96v;g^26y#S&?RMWdjdY)hhI-sx#S~1V75l20 z1B7fCs3)!U9BRhiX#qWWT4D83=48k6T>D#u&`0H=Sxw1_-=RsvldNYI3gWCQW$rq83; zo_s=SAawlgW<)r3(z%F^*f7LvuV-*tnCsR@w1OzM_LxYZQ{$uZ<9>&b&(JdYdfRZb z5|05#Yp;1YY!&K<>(D7rwcRaP@bKnf%uS})C^LEJ`^x9mFC+R1BG?14J1C+1u1pZV^jI$IHqy?n+LZ=cwN!h@E+S$_dQ)u4oB?#!F3yP_ z>;zz(keP92Or-;&kc~ml7pugHlIbP_5^{L6)Mi%@VI_?rfF@I~hMo+S7h~`E+Khgv zZ1wo;!Sk{8uz-0}&)Wb$eWU5c4*4~ap!451fByy#;G zz2M&V9DhKgYV32KxuaKxyW+Kyg}U_^J3fLFm%V&IoaS$b1=0t2n~2yj8W&f+o$1{LT5`HKp*E5}o6F%j5%y!sqQ zT3%dO2)(RnGH$+cws^^Xh=j~_vmHZ7ae#GMQjWXh|M+y}@I&5?Ie2My0<~Xo3;rgx-$` zL>oNm{FC;oPGq|u8^mGK1^GS_IbuH#cpaQwuMN4i7 z9REVSC0z>uf8-#FHw>~*dt_f-=g&)e?4n5^g)!4!g0J@b{D(OC4CjYX-2HghIjjf* zY@7gY6hQtaq?52&S)ixQ*D|?B=;7z%tq!K5vJ5lnSfl`y4Xy}5hn5pIW%}RHK#xs< zjE_~D5Lp9Cq#0eLN$Mt5j;h@}B9*wXv%Q@;ATC6H{!U6#c_O!*%T2?P%OznuN z(pob{U0=c-(NL#5t;#?_w;ZgDYQ(T)hq}~jz*Jz~7&p39hgr2WirPmenZC_lt(<18 z`%s{6GG#OI{Xpysp%}|WeX3lq0t7puW9{kUFSBBdvKFN@=ENKE^SotrJF&~%$ZIF_ z$k^w?E~a<={$yS-7=RLZFH@1u2f-jl7(^lW-h&nbjF9hv5uPo-+@|+7FwJc@pMdaG zI@qPQfuSk7cuI^5-;>zM7nEBa94F-&wXqTcdar456+6fzU-+C=&*YIp48?{f>Zr;- z?BK%MD-*g|+17X9^zWzQX-=C`Wr?-~;Hls!qGB>cpd)i3jk0$)7A%gBV?sSw?U_+f zoO=_vRD9$wC9H>GHDe==RTpMV4r~2dR*tdG8WFKrDBZkqm3qLN$sk;TvTMh3-vND+0}KI@(q6S@4jZLZxZK)d*G zP*Pks{(Q#UY%$lF1;Qu@UAY7$zHw~#VGKs;<&IF5OD>D`P#o7lRFoTWz>HtLHqV=f zifZ+4+ub0{*wDEkE4=OeWIR_(Y1ka-#RyIua?*-x*ENEW3{~jv(sN4yzIa3@%``Zb zIM`7&Q?ZLT*JdIT;x2}f!}z+ud9 zX_AZ!R1c69tswmq2Jt-mBS&VyE)s$!l^qV`HpMKqJl{(wh#=p%B19fMZzlS1VQMpv zHL;b2zSq*@frr6!1ZtMHNjlTkDBT~Z%<;`irYK@GG7xVO{SA6GziRUm)zQf-wbS^4 zAQ#(gl6Yqm4p|cQ1TJwBm1*{fa62w;#$<7`ANA}N5@Nu4HPlGZLvJF=8U&C%0-0f^ zhE5J<;_;9OoK3)(ijfQQ)vdLUoTltVzw=Ouvi!G<1VZ}qHeRHW=-md$CQ$Xs01+pT z#)AFY9j4fKS~aHdYu&4T50uP`JE%~MU!urgHa7|E&Or5C4(R9dKfu#EE-#*^Dz~#P zPU*Pkxy-9p2nP~fW)DREVPjU!=I6aJllmim@n=6VJ{F3N;=EKDxK5X1llZRh_r1DU z^>lw$?0-E8illi8=}8oi|4 zAS&mi?{=$-4KXY-_B)d!QKhb+LDOMCW>u3*o!Us-2aMEnoG>79 zfmx^^QXx!5s|?qS9N6n7$%Xo^Desi@hJ>P?tR+||`-sFRc$BTcARRuGcn|B9!P5B6 z03D5VP~M z`lo+Qy*FJ#Ea}PQf;iC*gW|SEp?abe!bCh=n1!3KPBsek3bW>)+@U@VSiS1-Mz2#K zjW`E2ULH~1_Y^aL-$Gzw=?Al%;{0&S1j$R4w{pXlw-N^f-&obV|Q?Y=~&aNTTEv*6K!feV6Y z0eF)P1el+=NHzqOl8~(E^1+x+b}tiDtp;V1ik(`|ChSw{*+Kiu!mLbh_l?^fUNoll z_0#>u&rqHAb?I#wn1t9`7t;nPgOo<{ZmL~26lNj%*^Pfjh}6@ML*8DPr8 z>-LMZ`Yu)-8!2|eW|k#N#2z%6O--xaHLet|u;)oqkYwYy==HPmmcX<#!nICQchPSleVg(h%fK1kZW3;04 z%e!2+uzmBnh;&|E(|zHNGtE|VK|FIzntCJM_Ct+7s)?)*vK0H*9<2SkDqcVN;xgL5 z`YB%3pmpZK3o4*5tPyx_X(#nA-b^W~uW@Bdg)t$mNq+_%aWpxp+{H;Y#51HJkgnwP zG)cZqASv%5hUak+j2c22k6gm!jRE7#LFfH>{eX|E(un~*-XHi?VD7iKOA@)p1q95USwav|HF&N}s{Vb!1St$!-BqqTdOj zhjj4Xb>U0Ipz>l?e>+PrFOalha{aUK_1F~&wYx$H9!doWvS3}Hb!QsR_DZuQaf#>t zsURjU2J6*}!0-la^cXTI?;spy%yhKb_d>8n@pJ;)15^#aNyUBFvaqu^$WRAARLUsr zSe?-xg!Ri2v_*$dk$Nyh7in41Y5gPpoAv?OQS)DR8shca0C-6!+jjMrKE5qtJvl*I+m>_ia3=I zANKH*7Sts7&R6@763Jjy3F;K1#cyH;(6yOsy{IW!41Ow*z|!=M)CJMQ+CU0AAv}w) z2oV%GM-!?GJ$3|>v5w)hd`C|y{6Ixq!E>B z9HPM^DP9SCH#E;^C>h!O4S$z#m$Ks!6_YS0)!vK9=1U1!Z~0wIxc!g^H%!jxEvyO+ zXkWMIv&`K_EtOl5@pAAV^d-^qYh&3dI`Q#%vJ$WQe1vdoeLKscgBVGg%S_O8q!UxAk8Nj5j=84}`d1b^AP)XcMYp z`W*8@XWh1t;Xxrgf4HPkI1IaCAlA>mAW|z}>VbVyR{Z<>jSLsd+wy*t3k2ixKc&hn zZL;&3d$>x<+E5Vx(E{LYHd$*X=muN;KE^18Qj<{RStC5{8UtaY@ zvwW@dkjOSaAU6FN^H7wGDDKrvLsJU%24|js09)8WFdRpU$v6|ch(Qd1QCclavsz=9 z@O7Xrn9_0p-Clix2@7l26|{=H#^iAjdNCc;CndTL`Ue}Iz9|sN&wb-6GuZ%kFJF2w zxdeWIW(vh<-FMzpqpdO&)ehIlGH`ialUVWOdWoDxVZiCFG}qTKPaWOTOk!GX9oRrIE57`xts87M0=WTNh29_hl**Nj@Iz)jp3 z44IZE-+InKqjaMs7!oEquT>^OYQ|Y+f)A?9W63-8&cq~&U}uB(@-_)`fzO$*H3^1- z9j?HmGcsSYIwSojpnb)_yg6AapZ`lIrH$a$F(p*8g}&vL4QI)GlSxZ;Q^LY4O=w=f zkzI%udDeKfMUPG9OKPhgDB4~-*9o-mjF>z`O zGiI)UO-~`lp0AH6mL{RKA)VAk364aCR%FlCIafXQ#G6XcTkJupxo-<=R^LpkC5CtF zb1rnj6i9`c_XT2_mp|A|xmL7s!j!PbWj;hSx^C8F=elhhbkKKWtzbz(Ua-O-QsxUG zF7zfJrI1aKKq*KuV?OZyXmjcc;KeF$gMjLKno>T99((>GtJiH}fxy(`zdi(_m~iR5ol%<`c)IrdkmG z?UKL5`{JMyWK~pDg-+bG{`x7pEtYoRnpfG7m`j-xceiXW1bH<)!f@-B^($2lKJywF=Z&?-zdqcByC zlo1itkTE0{5xt-(fvd2d5>=_lU9yxNyOs1cJkj0uRyQVxRuc1Pxq@%~02Zccq zQ_pwc+_}RHX5i~mEyO9?dy}WMN$D}?w^0v6OR4GBeYb(Lmk=@^Ev4{hT=$bDNUb12 z2(o*K5okjvY$sM(S#$D7{iqQZGKO&`KX^VHeVf$AJ3v-qOodFqnDK^nznH(vRscsgqE?JM>Eco>knAtYhC(HI1#V+!rcXO6YVjlB zkX?bWNElfRd$iUX9Sv4Pb@H!y;fdscE}9Ydu!`0QNK1WfKp%P4$v2kK7NO$?j3b)G zGdwk-#VqG$FI$K9NU~Z-ss7izZisR7uul^=iwt4aHoU&_^Q#>CHG)AHyUU_9_n^&$ zVXV&_@*K>ezG)(f>~cKSu2(6_$IjvcPQTiotu9b|9RJdOBY0-Ib5`GZv^>{|vUPSV z5i+r=KuhjvlI3(1++`IWdAQ0TPR9@HdBFq64KZruS43S>mw#jXFh@r_0 zpq1L#Y|Y47n!mLYa?DIOR=)qH|7$hP%By6})_}1|N}M^-GqTTuuG_OS9cMVHLx=4% zp1;g__J8RRs6c*|Es6d|1@7%H=?_KYV{>?7ns13|9Oi@-DQZbDYx@ZFAj!2Tus@#j(g<0xHGg#_S2szg-ED`<>sZwOq? zxobZsQkG7AnV~|W^~X?8Ma6|5hXSW;b(EPD;Dv>sF%Hi|R5an{Ps)F!+?U`$#G|MOFOA`_z7smQPX!4XkLA zoHxw>DVU$f^bft3>RK1fn28Cccgo;E)skdhSnX$_%17098(d3fk=ukoCSQ9La_3L^ zaab4Xll|(sjRMi`9Y*@21Rv}W$>qoKOdW$-^wwxy|FaMkj^qE?DgDcZ_|fvyXA#KD z!wi|4oW(h0GT{%u=NAW+UIUlckvWoD*XcMUBOc0spV8k!^W)g2uV$*tzWBr_FT|OM zB4xUq$$_LQDQj1R1ml)qCgC$0Okfw~(wOG+tFMaqYd; z32CzfZ|z?)RB?I0Ck)IG-VOUhnA~KDDVnqUkVa#u4N+``OSX{aUmMT(t;CAZ#iV>mr)zdeERSvZ=s^dTO)(TCu*KgQa+b{laoWwCM z&>#Cc=T55q<6HPc^zX+A5Ea^O;j@3EKIR3kmEwK*7V`fFmz>7~4ZL67#!udVsJZ|C zHm^tF92g600+lJ$O#hVE|JQNs$OEDN#co0Az&}LKe@LeP@5%Vb$v}*tHGy#PGhC&A z9UVy2w4^3lzc*g9kJC1e0a22k%P*Sz$He$^C|wWVT<}GE60@-Vxm5huH}uzoIiS8D ztlYxT1-#rJhx6xS119j4TtRK}e;Esaz9a!-vcW}Sg5uxCB;gJ#c#1)L_m_Vx0Dm5D zQzd|ve&wGvkNx*B`zQMmht#~D9jq!Ee}WVLJn9BnFvA>X@GJf$h7P=a-F@&BO{Wr` ze?QneVC?#A_!ja1c^>}pcwQYmr9R@tt3MZpe;hc{0l-RYx<`Te!0hp#C;h+vS$Msc ztG~HU_4xBt{PEa363oQ88d}?bhW`BdPVTS3QwkT&%>QwKf1Z|k-RlWIc41`mZ*TMe z#ZU?3LIolu1h+|><77Gz26SJi@&Ks{p@gru5OC-U`f(Kb{DbWz&$Fct+{sFZtH?K( zEvs!ns||__Oe`vI;(+j0cx1nW(joaQ^sMdoMGh{9`b*?o(2c|6jYOlUa+*?FM>L!2 z!PFg)Ca)Igu3d>rBO0gRwx#gl>Oz%XznWFebu;1C8GhJwMwIkU!-~t_Fi%Le8U)CDU~$l|Y|(M`qIy zlp~rXP$!h1&YvvaC7cY3^e&7B5 z?sSZh_-(a|n!PMXk_*lo+);GuqKebASq^y14yNd|yzb9i58kkqcQg6o@Q6vBs zC9rfI=mP|Vq@ih{ZYYk|0aEKDPsv4(_u(@`x70Gp#EsRiofx3=I364MCf|}Ce*z3i zR1(0Y?@yL|Uk2ZS@euoO4Cwp?Qs+=C=ZPAPMm9Ym+b2Jsu&(+BFV)OD`mAc21%&@+ z{O9;KiW}6Z(f8sb@RKIwG|&SPh3|lO`m{f|VK4vSee#Tu-}=dG0f#iuj2~m_9ye5_ z1Lgw>1PpTbL-Dqs`s|v4BQEi~^8GPU9Jt*3`d%WZ;cZ~6Fye7^Y27;qSQ683iGoh_z(wUfKovCSTh4!cPFDas!d`B$XN?D4h%X@8 zrq>T+d=_LbfZ(UcAAK)86NFt@pAKcd0`5X89C}pWX!tlXzpTOKpx#(H7-Q0J;1b7y{0n9BxKTZ(@nbmqg(7-tB)Q)C?#Mz9nu)H(>}&uUTIdTMa=yeyzn5Tmovux~+wR-+Fx)qdb3d z!`E)}tZ@os@7JiNVLzJ3D=rqeq5!Vx+ByAj`vc=y zlDogx)+UMTi%slVuR(%jG9gR_62zqcNlE*!Fra8aAq-Sy`uA^s8DJFdSQAVPox2@v&0JGNte2w#0gK%) zI@OJAj24fZpKY~;o3dV(tNGj47t`nIQ;vla_f=yOGRA>EEpS!v>hlw+g?J4cz>t7t z9}$l#=btfv*na&~ehnMle|gLNLGLaQAbwDKJH@$-6N{u=&P z7;Lq`FQaEP7lorz!^xbw();95d6us20}C}kpDi_D$77oVZAZt)O0OfDjvNQTh$V=5 z;SrsI`|0PbH18Q>;@jZ7;eg&KYR)K@;+SK&H^jSOo%>ZJ7(Y$FaT zs&ZN?T)#{mX4G)9L=m*;wPGLxQStRUTm^Vz7vt7#7_`q{0plH>7Q^O%U}*8dHcN8- zb%?V6L;4Jjxg)QGmn`HwLBnWT`GrJbd8ujKA-?U&$Ohl{6XMsG;xGvK;Bv^+E{-^4 zA(12LjX`m2M*$aq)`uBL0!Xc^kD>TkUZc(@Wvr2Qpt+<-nvKIk0>f=yj#6;qUpX{V zf8MIrjEXE)Pso;)yY}38$i@JC;JEEe!q~zZ;dSmgIB?1<~uaT zc5&FsE@-h-ww3-3U-}O+?L53EDw?Cg|D3bsn@^hLlV}twyIEE7IhDJ=y<-sG*T`wZ zHm$BIbRnQA5(^0?eCBq%OdWx(H z1(i8YAm!7@Z7l;P;7ZCQJgTxy#-Hqp(5K6uzEBhgH4hSH8Xg&7m|=%1X$A*YyPqo# ze3X?+T3{g{SubfQ#m*6cQ&4UjAdM-v{<#XbB+y85>;sn-m??@J(v2+KEDo|V=Xd2Y znc5ak^Z+!izSnLu%Oht?uo>aLFwsHx!dRCmV<5Q;%js^;^r01OCjasGo)9?V1OcfB zh=NF9*XEh5bt~+VyF#T4Xi6rO=6Rc!Y0j$!ysU-S3hcdK;eEBwYgnbpQuO3qC&WK4h$x{z&42bG6s#3 zCm5ZyY)%*7pL1kC$D+QKeq?sP;%IWul@67`|%z`cC85-;gj`WFx?nvU(h>_w&zoJ89LAf0}MM zfW(-n^2OZ32KvU!8mZF5f;fx5lu34o&3M5b&{|+E%yPkO(1zoC{aSl!Lj5i2W{S(R z&X`RKqT<-@5?f*|To5y8X&YBP+3mSo9vO6Gg)s^liT(KX_cD^kWHRYZT ztg8sJXyK!~c9Z2cN!|T+uK=TxY&&(ht)ej1ynhjf?3ds66_aChWiNCQj%n!mvDj8T zdZZwbqw>`CH1u>kNiAjl{KVzruFtz|f}VY%un$W$?2*XG@ z(>w{k-|fI_?%Oc z^$Bm))QJWJS?SAs;PI26>xiL#?^JtVp)=;~awx4u$QIH3jq*zSnJ;Y~ffK;OMnyML z)ELDVFgM(*jLIp~RpvTqW7=RlJB&7?=;Jz^Lp*Z->0CqLlxz+@!k9=8-UOvKX$9#h z-(AFyX(W|Eg)_D1lrCld3_j9EI+q1VOQEtJ%FSS8C<^gdNCB3+V5H|^r*R9O!C_|b z_(E|DoB){>&E3R0nyX24{?SZJsjdR^^doO!hfE{-mUV zJ)me2h@E=h-F4P;;|?$LWNhGs6~KczMeTWctQcM^J^Tp5Cgo5!zJ4y865f3)PvW4J z*kC0Ur38Bo@=h)?)lr2D-FFu)rrX^h_J@GlEvM%7KISsl8tA3us%&~Q5B$Ae&+X1K zC_V)4S%K3Jf9Wu2s|7LaXsxE;dp_T{Zj4}2q_;WnsNg*MFk4fp4g!RgCB&*)LpZD_gh!HQIc7=NZzXA_m=ul{M+%1aAaZ;=?<((RZ%z;ru zzZt&Nm>rNJLf1j=kQA4PQ8zbfF{cy-7_qq$cxP z;_1&_B9d8*dWF4@i*%01c{d*B0x#92s`(CaL*rIgca;o~8ge@8n}^Q*nF&n1b>h9y zk$l|&n-IBc@#cn|JFUliM2ryXPe4I>ycZr@kU{9dkPLD-n%tZG`^~M$z@Lf0_3bXo z?!s_TvN~8khK|+mn1h{jz_F$lj+ndS9BPAnbN}V(flV~q93a7?tB!z+T9kU*`N@7C zchN7fgDtMRaJ^^h64?HAy1Mj6J8G$AnC+X13t9=^0FQTgwBlwwDPZsXRcrSA*H=Aa z64xC50Ynl$?V=}>YMNeYz+K+)z}&gYxfso%qIXV5k!#TTpOdA%i%!6%=~1D9ekx?` zc4ULknN?;W`ik#2Y-CZKw08x-{wOz;*ge4@wlm4-OWwU9fy!vafZSFDx}Wa>945kU zV{hF^2;I9;#jm{MoR~Ug#O%I3@3@ag{u#tH<}ImeQ_HWsCMgF2JhmiagIa2dkT56s zcQ9Yp1RQdFSI1so$vsO=6RUjy5+L;t(MhQ5`S!2rXXr%?8V36^2L7d}7GV)$qS3EV zg?^)_*tAnLGsIb%UcpNj(pEbMl0td!HoclPfaC$VvZnLs6~N_^^Cl)1DIbf}? zfmREjC0m!+1J0I}rVZ1PtRagu2sb=cr)Woh*G%kZ_XMe$hkTpw_wE;<+;)f86J7Kb z7k=PR$5%rC(E?<7uMHZX951QX4V$|sNIpN*a8fB*%lFh)gZL>>|{ zzjLQCcC(-Qil7=%s39Ss*MI;PjKH2jTywmw&cX;p#imDuI`o9n9+v3esMQ9y>f?Ua zXr3#B*RVVJ23}ndkQ0oe>?Tf*Ui*9P@5Zb_5ywq6AHemL$4Jr-3_eWkDzodX<$Tt; z(N)uTThEzzu}xnBl7}~u`Ea^3=0fN4a{(7{3QXOWzyvLTUHKT5z*jimAN1Le}jhUyJDSMR*l^O z;j6XV4Y?P`O^n^$sRFTg$Z^?mn3a;PrtQ_{Yj6m*z#0C=t~(S9VAI#Qe+Lalful&6?Eye6!SWacy8FmmLc(chDhYwih*Dx!|V zHf%MWcB(?YJpDw&F@A8ywekxj28{Td`aL0))w-p_6dnG}CLf?EMs+)4^hRc_39pH3Xln%;}F$FzuUZIoLsMf`QFRt3r zP-M}%;iUqZWpt?9ts$7r59m`RlN>3yP!cIFB-rQGI-{p?U+I1QoXDu!)3l$+T~8zH zp-Ou5jSk9|y(sIshPT`wv@$1qxyM^S-Tn0v*sr`k0STVYeR|kv&QoAz7Vee6CT9K6 zjnk77ZP{kNJ;~d2&lxzaceJ7!klh+I_>#nFDWg|+GyygxMzHb6AxdcIUh3S4x==!-d~htmx-g^ zKNx?UQl)U*mB^+!OVkeE4=l0bMD6W;h;&u9`RkPlV? zjMF|tRLR^Wca%*uNiRf!7V-*EzX#t9tk5OH>JOnAOn4><{_RY8ynxKezhU8KaThn$ z0k`lzupvT4QOaUf&zUDkAIqQm=BmAr7>ow=Pi!Lrby-f2(}i6kvRR}8jyvo&j^=JG z4$h9q=3dC)lOT&S@N$|ccJ~KDQKvp#hhK{}pR?|ib9G87wYrJwR!~*!1Ao=qpdzW} zRFtoB_>JOd&l#*##+Aae@@SHYI7giTeG1k#BQV7SrWGzFZvGO~bxx z?EeVlfxjU83|>~#T%idUczUp|zD`}#tF)8zBs;TUlstN>p#Ds>0|Wu?EVl21svmi% zmQXSu1G5z%l$2@V>r24lmm>X`e+vDjyg&lRiI~3^tETkc1YcBjEO zeuRkVPv_Y1D$*f+qJC8h>n+^w*Eo2SoW<=bvN^~3{<+GG)atiXepK1}(LXTWafH~v zy!x=e^>WH=2cAfSV?36Kb7}Mso_uf>6WdH}0G09iKta?t`AheCn7^3%ZUr5MEWS zkG~|N3buL6?RP!o5Cy)C0BJBH#6>4oLEA5VT(c19Xd_6Y2&b!P4!ofVyS9aNeor*~ zNm;~M&0W5!W+#%fsF;dt?w(*7Q_T<5LUCJG&8&w*qJagA<)$>#*^lLkdZ=2a!Ta_x zb0ko67&c6k?flvp*F-!sZ3q>-whtd}JQ%mZU{nE0$cSB5;Nw!FeYE7JC8m?weE3|) z8p;v$(LW?m@HKGj;OeCFroyVjmbmgRvbzkIiRU(v5eU&H;eBJ6ucKbS^*o%2r6SvO zXTG`O(A`y_WhKiIc;?r6bSJc1nBYfJ-_+u18m*8HzTXjyg;r2rv~$l^yb6t>NrHy( z)>jQoEvmP}RfY;xPVHLppxCB8x^&b_2d7wI#v#oHcc{YCbT|*gSgf?Ks%w0TB+s^L z6)Co}95YaFf*d_%P#P*PpKQPbZo5`hCPSZ;ZA|OKm5PcMpOHYE?y_^Ts9yG0SuZ3H zh*KJ|OK4rUl$yq2P4zdIq#e^;hc_s@#m$~^vZt3H#4#m#XA32yuHek z@$Jt0Cu`jyNa{XIguvqR7;*F(b%oTT0K*wK_8Gz3FYDyzJX}-T+w$< zfOX3CM5F=}u@WC0e@6%k{~;d()O7L|yjRV2x3b8V;E+&UN_$-ahFwJ6V>mO~N2BHd zW(R3dhl^sXDTRbhynD@KUTjwe$~^rr4**oW(nWzEfa!#}tVhQ&dK?;m4rw}b8Mnw~hq|2=0Cm}4qwqKc2QvLzNNw71eAIL<@hV$uct zTMmxKM^d&k@nj}{Nm+dy3uq*_sR#EVDY5D5>?mAz-+nPa6u0NlyI-8)Z~c~YF4bZv zpttofktlg*d!o3n3T@I7r@V2Gv3bS-dx;mrSy4vHh8^St!^?2dk*8 z>D8h)caIUjCOaF?bV^f9Y~=#(l#z2(gS$2^qMTI%h;cjqgRAB4$AWD_!1Cq2(^(TL z4*AQ4Z#IDEi~kSLr`;JKTcJo3<4?Q@Y=dmM<97r=7_O5kH%i4_*c}KQvJeubn68fS zbX^-%+wP=rQ#cX9oPY&^9PTLcG3%m;Km`l!6%Trd#zdXA?*-@5VL(gp$DEElu+F@4 z@;?CO+F-r*s|G34QKqW=n#&d4%KoaGtvc|n?nLtiIpSYf8?^${9Q*Ft#9aGXR>?YO zO+Bu!f6{eb6v`p_i!XNjM)^riOz|#UwV{Xt2ZwA76t2h!jondb$CtP|ouyALn}YFJ zZ>}y$d%h4dI$fd=p93<1wIs^^Q;^0k8p`0QYwN2KeSaoFl3|4m*a95e>?X`RaR}|w zo=L6Eb8|J_Z)`4>JeQ_TtdjF4Bz*`XptY_`sWQe1hj1Gf;R^-NAv#Q=+(^(tg1B1c zvo_1;l{9i zKNYK9Fj%5Q@XLRBdAl?`9zZZHE@VOkc~BeSUR@EF^>b+`LNC1W#Ny38GEQ61R@Oo5 zR$!18t;;JNnQu@ptaW5qhP~ea(AO+vvcZ-91jxne#jE4pO*6WDN?S@%uzT!kd^ric z&i7+|Xw_KK9ypfb>#jx)m{k!%2q@;aNynq!fr8H4(@hj9zeN3y?(zd*@3 zjb;^Mp0h;@T{Nec5u}_J!!ryp5tCE%kz+)WbP?8cg3%%7hJ+Wv@Tu6n5FFOiJG>S} zaLl*ZL2_X_uz4(JZOvdX4OsixcjBeUg?~NRcR=m!ya?t;yz~vL1~ngBcD7C4$1U_X zYvbIRe_wTyV3LqFX{$h;wG2eXrc|`L`KDR_TanH-7AF8IQtqq`nLeM^Ei~=1f7@&J zFt@s$`7r}Kl;E_9Rf`HSjpk|rJpYIo1N^S)bGJ%f^#$Fzg|bt-JumFkY@r|eWqzF- z1RuXOvKYOL;w6a$S$7^ZC~*54M>VNw`m++-Ny5_X5KOY^w_FAchXBVVM)4V5cgdp%^jiSeKWYjN5rX*>mWX?x;!2Q%G7X&mx1 zs`OVhGN%(Gl;eVafw?iRyI~vSIy35OdYDMG5f|4;4xG38$Omg7H}qW9EJz0@GITVV zi6H~xp%5!hKESyd5U=9dh?d~6LTHMKAgWo|5+=m`ZVOvy#r;Wsl|5#sIles{8U?oB zR=h=d;ElN?eu)sPIeaQG8LVaseXNC&Rb~Q+vLIweEVqX5tzM;X=)5cTy#fC`IO+23 ztJj5S=ScuI7fI7+)%1}ARg2W}=ur&Rv(N+VmW>IPcNy3_`_twFG3~;{nC$V(gAGP~ zfze`&8D*Sg>8x2F0d?a-eTm17L20f<>QO>-`26R79_c&hn-ddBY?=jG{Fl*#)mo@| z#L|eopF1(N_h%QVGQWGENuD`!0&VFFP*CUbj1VC;qT04afj!W&;w-=^G#Z8BtK96> zr37J`X{qgfR21Dt`N#f;l>`UC!AaG0%>|f1z9()L#7=n#JglSL6eDgr2u^!giR`ep zpA)UNVhxL*Q{i=V@Dn!bq_H)et_4w|6nP!lQ&?tIv*y3LQTH5PsBEl5x^(|^ivxqvi*YCJ~^d0h_6E|Yi3x=DbkQY9TV@DMr6<^{?cj0iPyvF@@ zujEJ!HPKdbc0N}wGFJWHySgvHI?*@bj`HUh1-iEZ@ecD&u<`Qi4z zq$~|GO~4*OFfeKl6sLH|Ez|;tAa_WOawTACICMB$loKZd>5Un70iiVu8bO{C$Mdhx z;3g+@)9nXW(Agz7TchUaajg7>-rP!NZiSCycem?T*9t;5E(WBz5%-Ep zAyp1@G)s6U)lmzS(S4LvKvx~EELuh_m84d*6ZC+)O+~2*(YBBp(YQJc#-iNfAIV^Q3;}ydRmapsN6*%4SCx!a8nI_gq78Gnu_xtna zj40tbG;C)h-*BaMeP}Ra>Zz<{5($A*^qiz=6g@C$;KK5 zmfHzl()gHEo$>HiUSfiVNo@MaoxBi>hy9sjj0y^SJgAa}iqL>^Jd)aeN=Y(_5FGM6 zdZW7-3qTk4*`Z;zlP(YaZgO14@VE2UM6iy>PMVgIapyKHR@Kco1csO%?X8X?9o9$ z92TmiyQvOIy8=7Uv*jI0%<=hGPpi2Z_+rX$qijendq|=?do6Kp7|hp~9AO1zTvN>q zzd^a4q(Y-Tg$&6`kfAhqH7SD4bvySkS^}GWCX+saFkqN&hI*Ja43SCCnh}6RBA+WT zU?tGQ6mID!Bt!%S!EQw(hu@w7o3(9f3kyp(3s<*^*E46{q~llH{gkU0^-lfH=`7C; zqEA?6%RzNEnc^mz9hzH)GLo|81Kq7tXKWbC&cV2@RfAYw8?6wbH7rBF-cy<7qAL~k z9&{EDK6{-|Uy!u}Pvu?`nIS320euc`8cf4%N6kT{=bu#5E%c01pTdYJ^yJl;;2k)G z($X`s!}qKP7gUFuryvohk+FjtsLgIH< znJ%!RlHH(^E}!+@zms2tv$dquK+V|ZrhYJ-ZusaBcw-|Di2#dAFdGP;06o}A4StYd zfQEIG&lvj_R>H7*Vc`fpDOqRHe9$W=8$x0l#pNd1m?ux@56hbG(a>P*G*mdi(c=T* zO9sH9%1%NE8`(9G1cVDqo5%hk+Bh_#3TUFaFj$AvP2Oe!%J#B2FZ}RSH6}bFuCO;< zm{D_F6`$|F`WCcUF{Jl65yL2wq_6xT*$O_KhuZ)l4_bQZSxz?mn$V0_hGfPgaA>N4 zpE4Ux61(;n=0hn#*%IqB1*qzYQ*D*<{MJU__cVgl%+hLB=x~?&W*^_IS66oEw5L^9 zd+3)2N+oyBi031`^rR6c?n@{W;-Ell-6HNM>Z8M)91#gW&18jW@Xgh?GZzZ%ZA9}K zH$CkY!Nae6ELU~QRz^JR)nR^Z`1ud>mf?qr?rA^dxt*1}=*Wg#jQlidkgzL#>jsG( z9xC&MIf+mz{}l?&)Qy~{kJzgA-bD3#SyHq4W5(iLGV^8oDBX4ck*8IxL>d5UV!2B& z)<#or=~>NH#|LE7MU6%`WJluI;J3+sMsiI$48V=#J!$=>)gJ2`QHcUcQ#c3ZT3iZN z+D?^#LbQK~Yz{ExdTQT3KObb_Zx^C*FWAw4CH$}2`HKPOflX?ZCppyo)6jvi30v;!|bQ+TExs21>r8b0C` z&o^w;5Zl;cXXvD{y|{0I(@u4Bk&-ItTjiBxWT3QJ+YvT)M*&qu#+{57t~Z@=!sysz zUAfWKRBijd7pKW#UsEg^!hQ95oO_P=`kF}%z2EJt{=yJ~a9f7Vq89rCYpH||_pc1f zZyPI-a7a9iiYeu-Zo0USoq^x2<|ymHtjhrPV<2`5&W;HhJ`nTr&FMh-a>}N6f*iH0REJO2$sD4Cngx0vPi*tO87F*!@X}(M@?*;+=!NiC z^OE#h^d@J&xXA|#PyQgeQ^FbW-CG})-!9Wli2`5R1Uv`-^!VQ0Ca2>009m0oU&Up* zwISZ8KX7yw;AspBq5eT5S@u?#NQG{0;LM_Y;ZGF+oS%okbnG;h=78)oTw^M8rArQX z&cm%4-Q3HuJnaYfkVEr7jt@Z~;gN7~M99v3D2h$``8QB5^NAOR(z9U28L13@R+UI) zLHCuIJ*}a0cY$<#{#u1|NLEGTb#~pHle-& zG#&0+VsUPin5|` zy}LaIpZhgOOA&++yoVSCP}mNRyeC6XbqlFaRD{@k|G(~ z0J;=J6X8+YxNFv^2q4Z2m%Yv)nL$$DI;X$s)<`rcbCt zE_r>=QTtM1s(Ln;;gvyruWN%e~I~;y^|}zmh_9y7)A(xD|>e`KaCb z8Mu2lGnkw#E%~Q0U1zoNp2c=_ELAN`sz0d^=_&b5;KQ1r+m>O{iT(6}Se?g>1ZhAE z&Dxbbb?aQ+c8Wt{cGn!VuUQqM{=`*$GAXM*l~uO9BD|G3Ty;YF_D;S>rNiq6Z8V{2 zYLWVr7)0L5>=oNZ&6IfNoRd8)Ok;FDi>fErM|o?MvE!Bio0!4o%0{#?DIIFR@4L?N z)#Y7kOvw*TT2DXL7WuZ%6-%y6BS=j2Tnw4cWBExeX z1+D^bOqhR;*l@2XHgxyIe-yYNa0aC*D8Svn-&?#OwLvxdlvX9mr}z$5Ov@C0eTWgOqpk|Ikkj{i!b8p&rvu;9Y(ah6Y>5+TWEXLf~xii<`zlkyKqM;_oC`OYuR|VCqegQI~p%fdp0NoFD(1t(6vVz75l0Weq*FG7Nitoprg; z&goSqCP0s332lJgVE*33G|#!v=>H&2>@THX7LjBzm0%>DDu3G}nVa;DuHbi-Rq1C4 zU?Keh1m;J$15)t{n5!Da6Vz#n>=({t1d>oT0Vy^8(`pFe0X(_Zrp~0l1-6a`fPp|)#*b{ zwm3{R4NSF^%?+z|KEAv}x;IobDpe$)T7x1Fg)=R1JJ3Gb=!N~@E=rgJ`s}1M?|Acw z!8u@ul&q+2Kr9YwKNby?Z*8lI7`*gU4_mSL>e$|B#)wTOO~pZALCJ2bV?_h)ZFB?* zdMrj*NsL<)iUIUt42~&%D|o-ZHbvgQ!AkCsENvo zVqmsOL3cj1N<4AWsdF!8K9W}h7Ku5O0_*zsQPtDq3>U!q|9Yo`G36>xvv8m+S+(3+ zoxl1L>;w4}fATyghM$n!wbioB9S&m6=+Y0tN(UYWL#8b@J7tRKG5Gv3(QsKRT8>#z zTjWhsIRkNKT}{pd--jOUUPmSom#ni3c^JcQMR!)$$A!!U}rSVjy!_5go9m zA8))AHq$HDO@3pQy1cUx$jqsuNkk*4>J}0Nqs@U62WkX35%x{>!Hr zrr^us1Y+wFH8QS@#uYA`sfxED?NS~1|Iq@VwTf)NP_6mq8%m0(gVL?M1v;eqlQ(FR zFC*jycjaka9uA29yc*Rs{phhz(xEI8o_)&qpu}<@dp6(}=GDk!Rgs`I;O?aj+B1jFwV0<={_~JY|^CPS2$(yalxV)SH(nq zU9FNS?!(k28_yuI$y56~@&bOHpn|^BXF9Ifl#W@&`e~@q&k#g|Mb};V>YnVh;(u`4 z9#9(nifPPY+7?ET(%SP1q6KxFWfn<^8gO}`N%*>5Aq@GSPX*=#2;02*(gTk$ED#kKrQI3>xCz&7t)ikE)K6r~ zBQPZ)GI-5kUpG}DwGi8QCC(0VSoszWU7t?w;a-y+yR6=ZKsi(JN)9L|{5>(##C;y! zi&9%_wYC|{yPLT*t|Q1Oic+NZK7<*=7}t4L{1cf1_2ZA_3Bd32Hr}kP!S58PruXy^ z)g}?zvLuX83H-W0nc>@mbc%w{_{6SEj_g)OuRjuU?iv_!s|=#1_n(kzdJ9SBd-`a} zymIX3q!v5y*nE*H;9%X~bZ!0b_lg)QimrBY?PrGvonG!HQcvC(eD_{sHF%YF??Q?y zNPfQjDs&i7CH+B=&q;1`KC1noSRktiint8GntQM=Z~+skL2R^qQ?FJmQ@wK9L9K5$YnM53_WUXLq4eL>3~2|90yV3Jq;dRpODxq*a@N`1ImB@vcIR{fAAylPx0%du}-9i z``<75{lY*04*S2qYbAek6@Wpti^S{x_aY#cVLErOa)w5M+ zl)=yStIhw07=tB-9)QYm_^`j1kUx>e-;di&t|!TE-}jII3Rwd3@qdcyiUho9RJ%Y@ z(!T?vAaV`oe}C)0emSrMeHd(i|51aYcz^y#0-EQWtw;lILu-$rdluVm|*-l#uf?vJEI22PlV!YR3jNbPLS?YUWO2$k){!nml!VB z5ui{0XV=Mmz3^kMi?aOVs}&?rFcH0+{lYQKEFZ@xkmhS!9NEObM1DNF0Dt`}sY}@t zwWA=lC-)la^@jjk11^X?A;{_e&zA`4Y40Y>C|2+wh1VYZQ&c zc5^Q@J*!_i`0IKvaecj4bqnHPIdq3c)1hzL9O~lnN4ykjzewlj^IN9RT z6QacbI9pn%;@q!%=lZ&f=Bh4byj^a|pufgy{?GPn{sDL|AH}53f97eDqVg~ipJXQ} zEFRy4ES=tXw&5H0(tv4iZnH`yVElKG+yC>W{tECcfY<({lkJYzh z!-a-^u}94zs$#DUDDK+c0)XC+QQv7m#UrdyLvG&mV8U*1%uP3<7^9nWX|yAC+0D z@#ldK`r=-U*_W4!X&x)&*L=+z3BTD2WdMmXs%6R;A69!F?eEQUu9$<0OL`4o#kSVzrQ-b0?H%_AaEw=TfY zfVJZTAevonyy_RJBbrU2PO0Zh;{M?^xW?Nyc;mz zMn5KYO{+nxEy(dYB5bl$f&oys(Z7_#VjPec-80b}0A_4BKiwz<07Iip&A@a#svdy? znW~w5G(wT!r--=J?XQaGy&g=<=eMh`2I%JAc11F;2QO7OXnI)^@W&7T&b6A1nfn`@gt*3$LoSzU_Y# z!bZB0E&*u-=>`drP)b5lLZx%lAe(LxK~Y)(=?3XW>F(~_bjNRU&V8Pr=XuBd{sHe8 z4hL*Dti9HnbFMkR^ZHyDp!ITnR6%|p&~=ZJDUL7qe63#b_t5_Q$U_+j>o#3+Rh^vI z@+xLN0DdwSY)m!t#hC^~0V&Lij!XUicv~X)kf&)9FpxuX>|^E^LO`+Rus!jp%6aqSwe`l3Z3b{H zixEeZzMfrMXibswznz4y`Jm!Zo;E|>a5W*}Zl_7c_?tjxYtCM2x_LO)DD&#_wBV>7 zuw?0`Xe4dGMc=F~l7^Bq-)5TB46wSa3APiZS)8D375JN9LGH-Um>phMMkH<2 z-x72W^D=B}ZWbieU%ams(p@lnh=F!9yF)Y0A;9ECdlGd;oi4!G>f23l6T?+bXue8QD(uEE+4(z#WEMOZP9(%k&AJ1nz}vk>3K}l49cR$sHu=tt>`XhDoa4~ zysh_PQSc9ql|~Gk2X3Q!oK_>u#eZV1eoBjz1a-8C?O|ooputR^=Rmr|307BH7ed0i zPLo}73K17Og#!=WRp z8zXrIh!6n|;cy=qL*VND4P`^o@#B+O*H4dwkXFtvW@5XiZDhbQIL&tkLhV2$?3rbX zR%iOcmqk1O3%=J4x9P+yD#R8A2^THVf?hB}f3kc#Jm`{h8kM>NBy&~)dj#cnWxma- zAi&k^fDup&X|I#3edFCH$J^L;cEh@d`bc=I(*P&^BwNRbjw9%f6X?oNsH!2VkhVxM zw?kJ%Gg`C_M0~7>x(o4I$h6-g!T^8GP;#j(x1S5r*14OTu~zru9RYK!2!+M3+IsKU zQ=NUKv?sO-9c5t-WfpF3c0Bt@YX&bf!Xo^ii!w=ty#MWgqoUAc;`{(2%(LIl4Gip_ zd2KM%*Nf2c+Lvk~-AqlAh726&fJ{ z1MBRKdv^2OoryG2|i|yu3 z#(z5JZ1Yo!d-esJ7vwy=Y((GwX3}~WxIoKHB2F8&r_K^X;dssYiW-*N8a#7&T}Rk; z$3z6ZW^yh7si?UsRRRRi3vj(6_QH^qc7 zFshj!{e+Jif;>^ptnLpFlyVm-Vo6bL$GZ~+$dS_D;RqgYgR&o4)MsJyhtITbroMNJ zu*x;?R)A`4+h$g6;BR_d@^b$KabUC0Fy@N0h!lKM2-qXxlzE-g^~~XNb>lmP7gF%9 z_xDS57-8zYceq->0G5D|dwkF(R)FvX%UR`4e9s;LLO`F;V2zf^|?#<`n0dG;|K%A>7SU1J} zWHKg#Yx3@f8gPJp~6dd;3$L~+$dY49~yve=8NF-!9F*tSQ7tDH?aU&6N)sv*1 zSA(h9FBUA=SVDf(GPv@0MZ=;j;^sW#hCFsh26$E~q~B**sbf@Gi+&hQgofQ92=&j+ z#7?&FG&5Gp%7n!8L`_Lt=GYKA@bYb|EVLy*sTorJ9TBpvf7e&)*Wi<;1#CvCodNUY zPKQ+s1`}#`K`vJ&lAG)=1Xl1Cn9hMxN0q6A$1u#zNII!M_j*cK^!MSY>;@y0enKeFaD&X6EYJ$md8YJ9;a-qPWJdF zcHs;k#K+u5NX-t*AxAl9n4d3%6_M-sS1AMZA)=yRrofKqjs4>WA*H_XTJ0cYcI48m^2k@BezCt+FHQ)_lveXSg=$J<~@ zqWj=eO;KKwx3K@=*0_4QP#&5d<$;(d1DI}9J8ck=rwRdUQs={>=QNLB9k{(k2{^$n zIftL!a+1URvV1HgBRsAKRRbDt&wbwZrT86FU>+8(g5WDcJXLu~sBaG={#_vL){9s* z6vy5RNQjp3@m`#^KwG#GsAQ92gjWXX8}5>|L=-i-72U&%0p-Da#@w+O^-r=E^gvb= zRg?T4vSilVfsAY!fjKuME+op{yX_9n?R2yTAYfShx>7wMd44W*$#PHWx9&(zC3Y10^4v{7T8=mDS87AgS4%}6_%W=9164^D ze{HZKyumS8X>YnXG4nV=ddX(0#3JhQbP;()Cu~6mMYaB9#-kVNyWC8PLAL{q3xI}2 zF~RdzlRDG4_Hx1eO|^9zSRHIYP)%!rYlR%6YChr%G4d2Jg&}sE55PpJ1?2ER&Zxx- zY<5E^itzv0pr=m(PW`9isQ}(zv>UJI2e#te%j5`S6s;Lxj4Ae;QIz2kLcNcx)5umTV-Lo#zT!kL&jc& zGTno@f(byDk3ZyeDOMH!DSEN$&G^3a%PGsjm6t)Dl?gC_Ui7&<;-2BYrmGFiDF;+3 z_Lco`G)=*aqO=u#+qK@)j|(D^+&noEltR)V6w*AO=kTS+UaK&F5k6w|Z9y6L{I5hO z$M7MF*Ipeb zwq@n5r)T;GMTDV_Xxx3j^&su$w|ayKJ#Kzde9qTUVMx>SlCLg|eZuYTAwsMi5K$4VqTkQ=3#TO9Bo`z;DZ5Q2>?S=tfTPRyoyv`Q+O2=l zU)PXbnrSA&?zb1X`N{hHb%YP5Z=P;#YPN^b4Q&BG2|bUzAG1(f0>F6^+y*htZHPaI zkvLw~d3kKoOQe;94ca)l6F$Bfw^%FSUk}Y zvuZeW5C)mXKTw~5N-87YdvIX`WmHX?8mp2Zn>04Ad=SSiAp#ij?|RM03ARm*$oP~X zRK3K$>5WZNl)t&nVdTT3wsL6$MN1Yifi0TGg@##A))nA;;;j@yBW<66J%g&bC6NGRu%R(;xr0kI0w5rU;wYMv;YL)m%9`o*slk3<0a?30MS z(Tl6sfZ@BFq*DV+C7=2D4CLS{9?kvG$_rd^m1zzY6TOU1#5Hb&&iipg3TSfZ@Xu#` zX!vLF+=eDC=bLEC7U;2<_@EI`LXaf=f(#$U|K2`^?u<{q%|iz&jx6uLdu5t-99N@--HFXy*F>eC|uek1}jrsLszmA%j(9M*RX z04A4>99x2fiQAAW6ZAHi3d;fJF&w+YWGnEdeJgJ-vKY7`pVSe1N*AXG}EtN$rcG1^yxu1SP5;=vj`=CJ><8 zg`Z85mWvDGKCe8fa#$``76ro5bpP&Xy5z)@YG0irT`Q){R%--zlIGG^ATWELfhw6B znNI7kIeoMkC30;Dv&!%ib=eC3&ReLp!HpyeB-f$9@CRt=Ohi#uH=B@K-sC(kwO!hw zKXKPU1uHgdEm;X{$Dg1s^XX2$r@5a=?w+jcB^6;Ya}sQ7<+Wc;3EtJ5R2Z@x8Sn0t z(ZZ`o;i*-Q5;->*xEjG7F9IGvx76MSP&&@z{H=;c36 z|93BTF+!MO=899> zL)(i5LOsSfiZ&7p%chS1zz{Crera@dRfoZ$GGbnX8t<-{PhpSPLF8D!oBX;Rw$!%P z*Sh_RrYCx?>Cy6eu=es!&ocg9-w+Dd_!ei8iAd(gko#t~i^H}x$OWaidPZz+QDy`Z zUN}_~&G1Ktg4Pb0=7XC-%nY(JO3^jdX8HOw7B$M!)KF0@I>_&@i4JA9%6clYs&0~k zHT)@&7@2i=R8dk1rYU#|GvBT`ASTywe6I;6r606?1qPM{IK&D2Hc$aG52vP%>)Fu;c zG3r@HZBZWB3l^+%gcdUMCkyaLSKE$-5VmXJ7Ke_cUZYZKvr`bo@bv{h`N(dK8P=|E z-}sKk34cDVQ&*IWUSFk{J~$B{opOyBNsqor}KMUriRs!W2f8gg>Qs9cNB< zDx;!)$DkE#lqFNs3JKIe0{V_p>qSw8##$;jk-R`+8X{Eb%2^8A(xE=7i(LgaMuuW! z+8%#Dlvz?Z6MZ}L4C48>-nD<}N8?pT-iC8eXL z5XJffyri%uMHn-_cbJ_+hTLuj9Sse<&bV2+8KeI;48)Z8u9Yz{DILfiPS(EIiGV;E z`lkgNVowgX#(lb6z5Tk?9@ESRoUSILTe}(URRp&=KPAemJH5#0iM?pEzV!Fy0usQk zZ6~^b^eaE&BV~5x(V%VC2a7^9 z;hksirgR@pjAYK$5c37mp*En$Z;`OtVXI5uOnP6)E*r$5cQ}uItIU%aMH`OwxbPXV z=0Mt=NlskWy%A1b-3x4wl35zLloIy{MwWuKv@%Gi%7(l*Z+ujJR)3%GtL#W_@7e<4 z03BVjbqK+?p^?TWyqf$xC$KNasaGBjEOwN{if=W_+jMN78!hZmwi;$8r2n4N(>6_w zJ46;mH}*)AQ$wk*`*xp>3v`9V><4jp0+LBhl#s4A!O;8qOfBdG$FYa-q-vI;Z=Y9= zInqkfSX*%gn7q?7K-^9KGdGuUVwxcwOF0(G!6%P0aW9nOsc4h%xWK>M)oU|{%V(?U=gL2HfCs@aX1fC8kePGEyt5y3%%GtGx)8ylGvCW5lQ{;eaY`AnSeMb`O zg_evs6V?+|(LK1m^OYic5#aEDFuxzh`-obh3cDHCwkY-P1x{%AS08`a+ayago>NIP zye~{I4Dzz!J46q7k_4l#ZT^;ufW}Ct#*9sTxzo^5>??>8MF_V`b9m@LK>L9RE&m`0 zJ1ugVXQPWakQGit)?*dJ;QI?14Qr{?$!6pVJkip<^}pVcgikezP5+3r-mZ6AHz6L{ z+Y31LJL!vqMiFzu#)N{%76g0zKX@t7d&_%&7|I@86N!pO_r%SOcDTe*ZRNF4dHWM$ zE8|PI@ih554P)4B-?2h- zay7C;{av+XFXVPO9SRcYeM9)eS(p5=dI|5H*%yrk#Oa6YXgSN(7~-MsbxC%p0E?PE zc-=alN%*ENurbxarp`tXHF53M!V4qNq}XfXjKhAlgg|eEUmxT*&*IBTSWjs1Hg=ir z3rA=o++nlnZU9(daXP`?UAn6AJWJz*q(p~$O@h6Wz#~15G<&L?6~O)U{i3D7kR?S* z4uC|R4GR98j%A|}Mf7PB%|baXLyIww6XT+r-qqV}ZQRCrXXK<-c{Xa|JQQzH!&K%VNZ6LOn%(9MgChdgf<&%0W}iOB%^4wz8jk88!?L&S>C?3U-pReLn( z&jZc6KR-^dH%gxnuoMYqEwfUCNlj!XH=js-@m!$u4}Xyz|_bLCUkJ4H-MI0>+(8Yn4;?$VsSzZ%`rOi9z0QN!X2 zJtDyI6wiiFy3mM)7X97_XKie{(BRC9eI}hrTF<+jnJlu!#?5F~yft3Yop^5V=a%vH z62U_W0~78eHB};w#m?_>yv3j7QQIYU@l0FTD4c}-#hCf!LO{SSCh0T)MY08;O#q2@Y)oANi>ih&v zI82P52c*#g6C*t3%E5F$l>HC%OQd0>b520Q|5D$VER-_qIJPMG_-NQ`#XemQl9U4F za<;(>oPQLg4?DI7RkCsfL6hEU?~T+!u_Qa#7c5@EfX9=!F)wwtFrEQ9rRCT=uS!Ab z@>?O)k{CytG)>I}Iu==$K|kII9aG@yyv zV>*zjvbRCr^)U+M*wUxKJ?d~W+_mAaCl%pqWYE(WcD-ElwN`CF9V>dj*-(@w?YPC> z)`xB`hn`k(QspC@Ybajt0IehM4(@8Iq5;LLQ1{Z0iGva`lWg_;N$*6Iuj?}$s?vWY zS~M9yni{!O-kFVKqgi&Z|KhSUCU6Xy2UA)N7!p-nUo{z0;79SN{QS_Bji3 z&q0Wf>jA3N5{{?c^{WKEc!yJ)n90%QC!^2HXQN5ETb7P6tIm_#k!f8bv2YDVm9EuL zQM2Rbo<%}g`PkplirpnK5K0Wc>w0ET4A0>=!LMt10pW-H6T_ zCv8aW4#l%KmVMUI>Ey=!g;IO@5mX{=o)nl9X^wbeXg1K;wzOc0TdKp*r#3*Pu87=z zNg<2O*9FX)9{r9{#SLu9Og>hd=dkFZe8YlEE!v{>lJI{ZsC8P6LL;fg5Z>;}2L3@j zCcetZv?sLT_ZZ6pgu~xK@aVYl(&$=zv$MQ1Jc0s$Ff#(uj404fofxnJ8IWD~hcPvmi;F*Pij?M}mA{;doBrz_ajD5(zc9SYaac?z7WV zlK{7?^D_4+J1(9Ftu5byMfZxKnV1bwox(0am8K`kRvzf-x*hx5axF+dG-ZamI9xZOSt4uk|ZqMYg6f;c(erqS?t5?NKxiY=k}7n>t_y!73pKTqdvX62oG z-KY`3in~>|t4fM2@YEv2bOb?mz%8C?J#|{LxBE87SOXN@hb_=yMu(OrLDoqN6T*x>zJdpdp1-cO9Rc*$UXtl^omA<^ zlbj%o7`1C_+%Z9I8Fz>f1_Ea`q%4V%8V{)ZZ>Nle3&J%@+&;eT0uC4Sf5BaAPdIgD z7lpms6M!ovehJ>_RCQu!o+2$W@|E)5)@U)>V-W^e+iN;(bt+N=+mokdlVA_#wdV8% z^D#!ve2WG``Eo)2{pmMqCf8Y2-7$u-;J{tHnnxA&*#x5OPmql|j>1?Urrpm!@PpIN z8k`h=&g4qNn?vo5i(C4-@&-Rfue0rmS~1`Ir8oluhdr9Afo?dpiL~`7yZzqIcZBjx z^Bty4W8-eRV7piF`+7oSvnMvLF%e;-C{X}$sw?ekDL}l*F)=a0 zhURmRnXlcedDu%k6e9(OG=%oLgJWOTM(=aH`NU-?-u=LKJS9OsU5)yXsjDgohl(C} z?)LLJU(X;*LuBdgG+3Q%Iy7G`Q@@Mxm%1~|%hM4~#>4t_SikZs!!O}**AI#E3VF3b zC|EpMRd~#_Ogc#4@UkD zr3u=@;z|I8ERjml#hFG1qCg%E59pJQ>Q)kGs%|U6it#3aNu}`G^<+_@&gilEj1>er3BWArO)3W zW@^iRu!Oe2D3HS!rJnk#h3KcBqVtfm>3u|}MSJ6!8SRfu-H`Pm$QB|iZK0BoA=Tvz zR)QnJ#}VgWm+-0YBeC_RIcpyMn*gYZe6^BdVkeH`)BmwyR**D+hn$`TVwguc^wz89vvcu zIpB?NscQ>j`tB0QmAS&=X{pc%o~KKv-iNsF-%cxAL{0z|mP2>9ACLNyMIYH_r_EWP z@JBx#O{Pdxhy0o6uD+jYO3fz{6}Ed<$g~|P!nOnqJFUIyBO3F{Ty$+pIGRqjJ^YHZ z5f)#D2?W;CjBEA=%%joeUR9UOEN$=#-Sp+MHdL$}#_5I0t<8!aL288ZN*I4!`K`AP zlG}J5B&z88k#f)@sr6n+iz#ZnC zn#j>93G5+kk4jE)Bg9XAZR@Y{9}vuwz{G8HBsJ{huU>YDMz6)Mzl>fgfu^w#Y=fh( zkh#H{B+Hq*kx_qyU1Qd^+khPOD8El7xc&Jnh^6qg$0^lh!CUa0g-VW z*-88U_oGAh$_l)bEw)d>h%k?^lh)~K#JbRSMKkKCfux_{JG^$!v%6!WMKxlak)Oo9 z+@~dKMBjF-2W}RrN^Y*Zr4<)suFkpC(LuPhGiWSFazA~_bsm5>=abj)a%-hZQ;3d5 zYZC+%Twfq+LVQMz}o#MgkHyZ?<0q`MZ;VXGrU3<*UxO<4Q8rR_%Aqj zXTEWx{JDWnQpRsPVpl431nF>-3e0uS8mHj#A@=Ud6?}B7%JIhi2)pTv z$t_$tUuX&Ua`M=l@Ms`7?`ta~;V2j+)+#^daEV*NIA&;p>f7}`0 znAblMFArWy!iv$cTNSDG9|<))t+dn7bK2W2r(uCShq(n$xy@}S)s0gx&`8hb29sZu z7#RdY*~3Zm_fxAk@$1@03ud8E)A8vt(a_oEl7L-TZI_6@OXs7@zxbmT&fOx{=pZ7b zh?0u(7l&WOww_IO-^@W=&i2iMsHVp~lO`lVt$V9E#NNTG+Huu(V;en)=mPD6q{jfi z+tjO-tGGSF8QJKSl%2$_aL|s)R|>7FpSHLwQNU2U2kf=yYHq4cM}m@Pq9g!2N~I}C z=xG-oGeYzTnKk5P`YGUX9wxz!C5J$VHsSmft!QldjReu6pMbM$EIHAy&q9uYL|oLL zd0A@$FXMsn;>hqIwHWpHj^MlX@_XL&T-Z#V&}It;zcr@09PYWboy^R3M`DM~^}4AZ zi6$R6np^oNZT|n@Vk_lYr<2)(?e7I_#W`$9*CLROQf8%&lYyyKCMw?fWR5oOL4R)! zbvRg}@cK(K6YJk%OVVPfwDfWskI4RmbHzhz-D;QDH%|!Js-eSC9gb6z;*K5!h0qKo z#^UTBd+#C;iE4B5%H(vVjo%F3QyA9JokVTB4Q1l49ZdhEq5q~Gdg;oX!sY+r_1B%&{M#k=%l#$&O7|D-ulM27(FJ4|llH1p z(3nyFppO2{n$>F;+cBEkw+H6|?P=SHNarT~AHNPIL*7NbJP&|9-zxH5e<(t(h&-u0 zhS1ZKSz34*>JuZ|G5xpFmtM*j*@!X4p7j4e^zCQ5(V!7BzpG z_@1kvY#U|xFN58wzt7YjgzGd^y05xT|9R%#igQJ9`mf3XbGIU6Wl1ic`Wi(8r;WB+ zJRR7RSHanb9@mkiA`a^RIb^UL5W=S8GvWSCQ2j%B^gpJ}&L+^`Q;hk1Pd16?vGf3$ zF?Yls)>G+c+&}T;FYIl|ix6phht-zwI*Ec{b_tICgL-;_7s~<@ItRXgf1sIL5iu2) z&3^|;kU%7ok>oU|%f~+&&EGK?|NLLW09X?dgQ?H|^&QBe;5zvJe7VK`M+^FQJQM6T zs?D{g^3i{N2PzQ=t3h(E9@F{Pt@xi7aeG@LK~q7%fHA|Lum1Tplm%Q%lns}nl0War zzrLQM0>_!zTNwG*tN&c}+ZXZFZW*?rZ4-+>wd4O$hW~w48brWxY8PAc{_8tvQ-FdT zD{Hc~=g)k(f58O4uHZQC?O}TV6_}8e1UHaOts?B}e@jxMMM8k%97d8>{98u-#})GP z1uReayw3onKdJC-)hzP%sp!>FFLw%MzgNK59MApT)=c zNzN!W+EvfH$9R2wO5o#)95Y#T)#T>&celJ&0pmseEZuR`A2*j)1>d*B74c2Pp`b+! zp8>h}jvx}l_5HEWk_26fSqq?G{CEFqK?V1PN9yb9-#o-WSKI=*tps5ZQSDGM@-l|8 zZ7_<%1;6qhW24f$`;DPS_=^uZ{vm;)-h%;6UNLd?&u0oP5-BR)jK^xT-ahRr%6`Z) z>H<|b7l!=(0dC`e&^?$2Xw~AZ1ERS98s{nrZXSw8Pg2<^b}SyAhq2)*^i|O+@;xj< z{TfQD&G~6m@vokV*L>S2cCqKy{~T5pIFVr2(>t$Q>Y3NiNJo>9i7*t0MuUA1QN!O> zB#r*nsd=P9Qw}#;Rs7d4iXz1xAY9@T_i52v>nqRMTSTm68yXc82)XkCx?ywM#{Vn2 z0n7<(snmD|B{k>ZrKAu7$lOL*2Y;gF0x>$n+D)JLZ7ciC=JzI(`c3f2f z@l)nxEI=sqf&Ou52Z%^`1@ssM1O(;pb>E?4WLWm6-NuIjNkOPmAz10Yw@7l61C}Ce ztG&q;*0BuoIEo)wwi-Nvh)u}*veLTxKb*!A$YKKC$oTQA9Y9u}v`knMk9f)KeIfe=SuB0GEitp=SHBnmI$VxfS})-T8`dd)6$28yI(=@gn1Q_FJsS2# zXT_{aJkS@(Uo69Z_f*jU)%=L$v_{bw)}5J$ z-b$cLwtaBwfqktC4wW#G%?(I*VFw0%A0w$Ga1N}UXE1s#j<G5To|nu~&>4XglLU&{OCm;1l>ToR{2XFs+15R7;=E=sUMSJJ~bw zY#+_5?gYm43=9>9QG{W9eZdV?4nl6`gWGbCzlg)`gj9WHPfDWH`%3HQ_!5I~o>lLK z5awG>rcWrEE3x9(m+N9dwLQ@KGeBlc1$Oqb^meQ$RJZ1L+r*=U=b9t>xOVM^ug^ER zZpndd<}td$3s6H@F05ky?1#%mCx`noL&4Zo-H@a(G(YeRk1rMg$?~IgZj>|xP$&|f z+zzNh4j1~-p`grtb)D!)dmLtMX#g_%?uof)+y+XWUK;iOMZCu`l8Xidg3*fg?eF-a~{5ESIVnS2zJg#Ck* zKN|YfFtAyazw@C#y-wd#QQeO3%86;!N}@?o z&^ZraeJVQHZ|GSRIcEqG=$vZKHgdSWfrNM*i*^Cbcf&M3Td|^UNu#q&s!5Ch!|%J3 z5BLxTfO&_XYCmabys*bZ%mYIJ(YntO6av47vS;DdSAezA!q1hDO0tOxL3l=x4}XL0 zy|<~rwne!(;T}M@pC|$%Vc`)YQBJj#Xi72nq4L&3V;St`wsWdxLBG9oz)ox+5)!SZ zDy6`-7{$&z6Q`q?_7E@Boz-eCS8;F4tn*G{n}W)h`+zEd;0**s3Z5bvS%-{!hH9+)` zc}r>Lp??rk=Iu6#S&|vN!D?guy#V5%*!@U#zl|dA)%t)L0VQQ_Tin&BUNAg1t5b4H9Z1oZ;Q#>p04zu>DSb^wN?48!-{Ls2uV z*{k^6LR=KK8S~6eALmdJ3EXP4@msMN22tV-5qMbNgpZ(nW z(T3#!BZ4syiE_}5$!27_fQ5T@eT6OyMe3c|nHKr>EIr=o zazEqoQEi9~QXv?}%$p{(0&!`KNtn=tp}t_G|IjPG`2bX~VgcXy$>W*gcjb$=LJo_A z9hygPGB{bmJEmegSNTB#jNQr6q(i}bpDOod#Ta=P?HLYSX=;U<6xe{#TNE7!^AN-7 zM=<83JTEP+WIc{Y0;A#2XD^>Y4&%9vg4t(1c{M>`TAsb{3wmIPL;{O5&OO^}zhk^& z2mC!g0&rlR-c~jbkb@xgae_OHDW(WL&FKK;)ha$ipvYK5Ap`JmF?*qnwdjlpv0nVk z>21~abXOmwL3M=B-_gAEkEl0oSCN9Flp-rZ4rO_FE8d3nT;KZ5rAy9bYiB=SwiMwL zl(&!_`tTqY*tpbB^~j`eBQK2kf$~1wzVt7U0bJq4v^{EU5;IIbXyq2 z-}xEj#I`8010+@!{78jP>jUNvb~@UX<+eAE9}9P)6atSL)?Ay~$yl+y}z)||5<8x&lHRumS+4!&3u6Q;I-s+1NA#Y}+JGln^K6CHW~T?kK| zLG8I5%WS?+pdgfsB6xAN*D!i-v3}$PX?s1Bmn=0cjC>7Idy?OxLiGjM|= z@1DgntMYiQSsg%Hcz_!6b)uT&kZdx~1GX21DWP;AW6uTJ8qk0eBLa+GCJbRj^R|Yb zdymQbl8PO7f`HvO!YEx1yBnV6d;EH9jLSOpaF@E}tZ}bw^mF#+^;nTFeGF$uPlvupDCc7Y*Un9No^I8A&C;4syu#Ubnk#t}9h)C*HjH>70xnR8eJmfbZ4sYYthM~KwOYTB;hRkA(b5-1e}9K{<2=sR4{iim=_z@ zn7FS!YFInnDlu58<)W;neqs>Oi!rt1u0*{Qc}+y{Y#oLWt^KxH^3tp?*?%e4LLz3I z*+S`HyPFE<%qrC4TcbL5hT4X-!`cMh*>Ow7{_1ehx*oOCX+q86q0)2ympW&NW1r%= z%V_3SH~|;F3$d5!Av}=pwA9dnB1~98~LTP4{K`w=5juz(&kBD9?-4$ zXubWI{Yk^8_@{o2<1;iGO7@^1RQn>h4KVZtr8K{gbO(xbGeb{Yx~vz^)JCN6_h7b~P_^U`G~;11Sy>WfFA02DeVPIl?g}n7B*A5H=y#3Sq_aTC8~ppzq7`BL z?w;~`RRy8JADV10*#k)}<5-8AY9kVo8z)KEBa^)N<8@G9n5XfqLTi|FG;`9Z;lY80 z&yh=CA4Ixoss3JQRdUKlzd&|>0`RFHRChd(9Xa?cChzz(Up0B+V)iC`PfT}t$T08$ zDlreANsI4ZX*@_}S)0PWI=h9k-Zso~BLb*Vf|6*wPo*yI8RTf?{V0kdf6a$J(CM|; z`XY!$@=K=6_QZsbCpyr8GJ*v`MXr9;ZCPEs72P4NWUylMUEieY>72ejq`H6X`DEBpDd z)R$&V$b6wd z+#EQruhkxZ_xUT+<-!zf%W;qWblFZbL37~P884BS*dJ*}x@cl!(ERbCO?}sQuj{F8 zjd(?Z=C3>aeozA%&~>oBD&#yt4T2_LR3oK|>gkUo0RBS{v)ENN3A8N!+ zT?eQ4sL9mf%3Jb90}uDOLL6&^0S{aNezgb#N^}8)D;seEFkMQmU;JFS5qK?W*9<|6 zA$WjEJ0S?Bxm6oM#K_^7EZ|P^8T2bT8-Zr?5#vEO*w5{VLS`Z>jNu}_3JiWP>UOup z$U#v@=0m_K96^j$vsQ=esY6ZB0RJHuvCC|7oIB&5Q)V4UOwWM@CuaLd5p^`+-V3=qsq`On&}>_fP|)OHi8DSoUM27KhoGLeYc8k! ziz3%kj&9Z$#`|AI-5wsOl#W>7%y$E{x~x{2yN9Knq1_dWD;G zx+|HjTlPa|>{s5beeQL&2X1a;lmDy^MAUf$?j5w{NNcjiqW-<~6RJS}OJhqTW89>k z5oFY4Yl2;PL!Okt{iW*`Z8ujN*9F_?HT9%~jqSfQe{ zLsYdq)UE#9T;^Vg#dSr>60+2ecxm#@g^u{;mCU%KSyVV1pNg*8>-!>{+tIWK63`EZ zG-tXKJ2p9!$6eFv;@wx-`n9f_DpSzzGc2BihG7(MVr0rgRZ+!D#rIiLZ7hhejxV(y zKBEeWyZhfnk{N-<%vscS%a6q{E13r3vH{qr@T-K$)Xc)yF-fLfWbNE9{+_(6Ed3f= zRb8WP!XoRNU5PfG1t|&K`4i&_i(rj1&c4GxpkcwG%NL~vfxmP--8ELOK&$@Yb>YHV zE>&=PwwfH_H8|B3f%ALPwm!WQpUUt2uEHL?iu$^d^VZQ%PQ&C`m2TO_8$*#v&M}&U zxpM1Sfk@irE*DJ@L0HSV0QS>nEtxyRt(}ztK=b-})^Oh$wd~6=?^<`S@8vWTL)o#9 ze%Lj^70Kg5X7O9sSv3i_#Noj*&3?6~Z4{t&DbNIsWc*?~f2!j$ms23!@iePPp%A6N z&hu1j)7f|b6E!)Bl9q5x9_frPi%UF`bjc~pSF3k9 z{{~#LCjJ6kSQmiXhw;$zTRGyJRyfgDO$22y0n|_qR>C~GfWXy!b-vo|J6pWG`8gK# zuBgMKraAv2y%KW{>_KUnncRVIO6x)B`aFVj>Hee?oWJp)sUv#5(Zd!n2za(keN^Ip zINIbTjUmfuaXLGR-tv5>VG@Jw(Tg&jI?n**7eNh`K(V&r_KFIZt*`!aKWt~V!j@+7EOvHf57pLa z>1*kJIK2QF2^9z}rOAf`$1$*B;Uztr^%m(44!c)|3$^wOHg_Xf6d_@Ko^+@SDYYPt zfdu>ECA9)rs{d_E+MVb3Z_yHTJ}j^_cYQcpzseVmDkRWIJX;TzMC;;sZ|0GpxKp=d zk18bwZ4F;d#>mLWTlsv^UF=>wxE=h`X0m*EDtXme8jheQXR=6;olgw1o!g#tbs7j< zh0Hi4l>@m>P$COC<|_p=d;>`3>zI8HAy=yer^|kc#JDKmVG><#KRWr38sP;~J``CAe z6)$YvRV0uIvEr=PsYT}H>a`+-L>Wl1wvG_1<2K?533sH__`h13j~Q^Ywct=&phVVR z4q+`W9eRFtIk!6Cb1J>~&FtgH=SI#*XR9L;4*ADILT-y0L^^u17lYy+9``=m zW^Gj$_tv9I5+T1fz3bOvl%rjc@6J!ks?lQ2HK!OEz|xgEcVxP((0cjX;pc69J0B}L zc9MKTRC)@O0MxfX$;ynL|!_9(8D;HWykrezmcAbfj z1Ze$X9bQq7t+ZR;TrGcB%B ze6!T7XE9cYkJA)+A7bA5ahkEBHU*7a^w6kJvP>?Hl8hru)CwWw7u5}XeEHbdHVc?5 zYm!0C4yS%fATAur2NS1tMH3&>dhV<-+!WOLFuL$-_1nEnbe5mz1aU|-ax1_U`Dxa! z?L1RjJ8#kJK{>Ba_~t=CwM@U-NO)p0*C1u%m>@gq+`h6X%Lt*j!aKn>_9N54I|hY0 zQv#iuQ_S;J*RtpE6CyWr_9(HZT6;4_9#@5*T#0BL;pi5fA2qc;1y!}`<1l`6kcY|5=4@t# z`2eO$%V&H6I(*UDcvM%J6rdPH94CVP!cE`RT6M^Eh)znKQrac3(zKaRtDbXB(y z4YS4!)OUBm6?A)bvM|e!@^r$l1D@(2r&OOb{Nx6`z4dt^vJD5G?xYk%Rv7a1JQuB> zFbse9ix~rwD#mFdM3DXl>UQ(#WI4{zAcjWehW1Q-C4M`uytA0MGh=21xDFXe3mLA~ zxF5&q(){f6MJo`6k1zP-{LUqSAB&ft@>IDXbl1lAZ*Ih*(Th{3&>qB;!?8s8y2>S_ zT`<41vgmxYcqWBU?aP1@70u}(qfR3!ds%T@UwmB;o`h>pAaDyB(aVp?FZ16~>-H=O zecMrY9g+V#88co%XY+#qQNgoUI zneU0_k6^G`DDei_?pBw@_+vR|6vZqYM;1H>~A$ z6f=Go(2#>~xT|nS(Gh5$A z^ICs;sR}9|iR`DxMAu>dMl;%JvWg6}=A#R#cGOazsbnqZ#r&u&lQ*eSK@diF$hZc;-@hu%Df30I3N%)Lno&$tQL z8jX75fe=dKx-buTV?Qgz*RBa{>_|CEO;mhSBF#ylNrG6?{D!)^dHSdglh4vz-f-2u z&=z~28#v6fv~s|YI+pZO7I|*Dlhk=`rv3&uXj9V6p|V#bj0aCST^-`&O0%$EJ-;yl zqSx?>WnV32OSz-Gy?+2aaNc?oXd~19Kw?;3nkakgOowXP2S%T==M19AB2H_TBKJ`x zGpZYYTiu$M*J2CUOz|01J#ua$NrDL4(@Qg}Ow>HJ=Z3pKP2?YjvoG_E@@k2Z%zH(x z0Q-77XIBJW6G$SOte4ph^=$}oqK3`hK5HS`bPe)R*VZ+$hW%*Ox_p32c6MMhQvG`KXPf};|Hs~0M^&}`?S9jn-Zat;5&{C!wE+o{knU0m z>5%RYNdu*%1Oy31y1Tm+*rb4TcihQ2zjN<7@B5x{|Gj_QF>sGP9DA?5)?9P0wdVXj zpXXVm)(^|Qb9j?p>?YE(NLkCiGcq)*iLG&`n%manp!qWf^NX)V_ir?<_QWqH?ED2u zkm(`E;zK$&nP?bjy>DuCH1j!XD)Jv8Il2Z8kFXd};-X2o9>uphB}noJ8JG6?nN_qp z5uq{+Cn}CT}*OcU-NX{gZF4IN$3AR}J!kL9Y7{vR0#k+xeQ**fw zRD%xjM4Rnr%B_>^2xk0zoGqsTNaHPX?CHnc@PqK|Vj(^_|Lrc7GcXxgdu&+tO?{a# z{Y4VXV{Hs_erP~RBLd!PL9h}%(?8HJoL5ze{L#0DjEYhPA1q|4i?E>bVGXb;0=3vqfY9Ob8zXny^ z@EG?eUY3#>hPl6ow8$hyQ;UErI!92SpsL?k90d6pC`5D^gUF1 zz5G;b63;-hh~;eU2-XK7jzLU0r%*U7C;=;uJB04zf?OCK&ZN<@f<-h%;4Z3^PijIQ z&KrLEu0=$1FKHoM`&$XiFYsJ2ZngX&01`m*gkRZX{(L(U5<$WYeJK~+@X@T+Y7HNL zhyJVVLx}9pAYd{qLVPLJgS0Gu_z>dy{PuBm)psQ4F5XV0xQ+>S!1lJxSbFhPWo13E zJ3=Sqz^h zt{V+GT&#_omN64wkaIa7FPtcbvML_*_2(X*kL+)>t1Z;YZ_^}-2z_^*8C7Q?d(T<& z%zn13BRo5ToGw#RB-NKD_$D~TbWJGn(NxEPde6{ zQ^Wu}Y=S_%%ucKQ?3SR>Y)UE~^#M?mOmd@!FVb^ush3)78b6TU!aW#xxjL?AoA zX=wXD;LW8^Rh-sm&0(qlD;R{}m9-}^!~1vc2#5!fUd!dRAlZ%>Ax# z)B?7K(R&J~N}-~f>!}jHAG!&qlx32K=0&jLsL1&gpqOrC@Sys=keqnO&M?R2O`90h zWgfBkJRB1E7j)c~CmHGjvfjWv1@OWR2wZ=9m8N{(gFZLh_>lK#&XzD_~`c zzmh~uJRzR?AsxJwvz!>rdyx7^@p$C3UZ4%k-ZRluuZF77+<&;CwZLW zUXwRT6X5Z7-X>NWb%$Km4?LE6fyh$XjNL0KV?{AZwndbL5q4t2J4i744&aJ~;8Z#k zi2QzHovaMnqQ7$S#1TzObqc6)%|r3KWA|o50)kUNbv;HxPaeC_zrDF-U5B(6GfrU# zK*yz^wxHH$TlircwFwyw>q99TF`A-v-K5UX2Dh#_kOg&Tnu%S^29}es(XLN_9CA-= zd4T{FY@UVp)8jB;&?6eLNZ5b+x%jQbXK;HTQ?1P2NVRgJi-s=qd=LE^O`Bjs_YrpSJ~HTuVHr$6bKaA zf4uuD`;)Ba$y>bv_nV#H;s{}v=PP|e76W}}l9RvA8&>Kzc6<>hp4&Gr+-QTtP9N)k zeQ*|ojC$dxMjx<3M5=>e4fyoC*B1tQp$lLg*Rx#$nx~+>70Uz-p{}G4oWf91Fr2N5 zhb%zd-Tj>^wYJ`RXf6BNwp!f( zeWCc|VCKWus&jLqgNNI9tPufek6u<#1$8m&u3n0KEnSEIaI^}p`?^7L_jO@BPR+~s zOV>-*f?X#xQ5w`HBFwjf(asPE9Yj%9T9bA26t)U`Yj{|cHDYVWr+2u)fGr%x${==% z?kn0g5N#Or;>DLYYh6~qztzWGQlC^}#tBI}<1czmj2T;Kg{ixFjAlOGcPtCf9s7~{ zv@?O4{udH?y_mi^qATs!74iW#F?TC`2=Gs~RMLJHF{%**QUe0+!OgfAz1`!fBe--F zSOp4C^sQ9m#N&U(4>X~PUAgK+JGS_^-dxji>bIwTz{11#c%Yz86k$gcAx_mb<&JJI zKCWTPOO$R0d>jVpJAeGpf#B$fPUG?o!A#wsYVe3doVcKGl7N=XJ|}WjC=D-exy}l^6ac$U?xWRh5wf8RGSjB*G;fE!Be|Rp1rrT+NJQTnB}n+lB42y4 zd)XZUiMR-He8v7G+2E6c_0 z)gKJpQF?-$T&G#2JN)@=<|4oL<(!Ab=g{Aa(;->%yH+pv6HG6FY)dbY6l#fqf1SI8 zfMRbXOZbLOP7}i!SnjS}Y%}OKToNqCMn3UEm5QkZ5~**FCY?zXom|FsRa`v_sVeCz zm$Q|FMqa;}wQtj<@@c|@1oG9^paItP;X*8=2v~~#@&})NywmJ z9&q8lntvjk9)I}Z!Cd)|&%atW@DZ-Q#p@RB0{8m83rI%E>n+PeCq&Fz^Ov#rwtgZ{ zeu%GJdnY$yFC$vm5dCsB*IlV(q<(oFS!Y@|#HMLWu%c4UFb`{Y*Qk|C$Mm~PVYfr4 zf6_bmdd}?QnEfo@(zW3Gb(@aD9Os&F}fUgC83A+4NO22TrdpJ5(DOfiHl)aWW6>mNJPS(s?^ z*$ih@a}8X$bUB%%G{WW`%fHPk!=)i1ub{(Qmj{ER!s|-kqV+57w@4toalq6zEYyba z1CfjDRK!w8y}gQ|Bj*o5{|nm*8+);xVy0o-#WB5LoD@Ki_($XJvdJ1@PCfMK{K(qe z+)Dsy#>V4NAV9maoTw1G=K0s|bqkBHv6$>w^7Kr8m#2{{k(>O`4&5vHDJ?{u zXWs^Lx>vHRsem&ua(>&2idL$Yn&q))j?jb-@Tv`A(S!l7Dy0X-3suni_BQlJQL~*u zXKBfY3k1uD%7t#5Q^Nzl?tKpR2beu!@CDz3}F~Q|D3|3g+*wZE`2qU8+$0mSEPTFhnaQ?8fJ2doy~G zR>(4ymA{TV$?-xEzAuqU5+JiVVoGLqZ_9X1QPpIjB2N{VChs=${oCmh`~1iqZn+CohzX?!U!a&u1T+U_(~V|$#|YD~E&TeJpG z2!0-=zD=jv3d1!?siaMX&-@Wj)uZye)j1WCd}Q=q=MQGf_OTsrj?*X|?6g zuGYB08r;^zeTojP*L=^FE7zU3ebgE{rKcwI)w6An%5_RK?%p5qmN+?1MrA+}LLGLW zODi-}C(9Q!b?0()&RrQ5*UCL~9Z2}u0OJEf$da97@%JD@M=+cSn#(hwW=!vpdJokP4z5YIUWB<<-SuaS`%gOFe;r=iv>clZFA>&0u2gB^=z#q5pkUU zDi!o5MnZuQG8G7-g%mHxEk_w!}QxP#bpZLzTEUg8TLaJVgUv z*88t2^1vIY$35kEBGp2uM_{;eONdk(EkWYNGm;xk)W5=<0{H+{H2?l%pUa=RAeJjRS`~=S}s=TKEe{eaXz(J*}8T8m+HFZJ)Gl0$o|Zq`4iHB6{9ZN z$Gw?)s87zsU615qNGn82&r92;aCn(a<^H0M{*RUk9AX8S$6*FRN&Md>^D$75eQzc_ zlAyx2$Ys22%E5w4FF2EzUAgRw+_?zGzLR$vw0t|!w_ky$ftFVDhu2B`t*HZdnLaL> z_*4r;mJmD0!C@>oPHN>|JO&YjLpBYtGqowk#ZHAteKIcf>8$b@mk48S?msrBKxcak zz@*3nW7dBGAfWO9qG{bLI7t7yYW;8Q1Zqnd*rQUVtpbI=CoNBzeINVMw-r_TYC{K=qvdUjH$A5bh z_z?ubk!z-kk^h6e`1=qHAq7J^^GM7?;P02Af4qljf=(G6m4xxHSW@87El*XRj!_c! zFMTcmHAo5Y7-~-YrvKRXpTqe-gIXWJ5MdJs^W%Tt!GFA$QUeJ!IP5AkG5`8I@MthV zhP-I%DE?b>{54FV?BJNC+q;8rFEIb(pOn?@RY!j?SV!hx0WoQi;l-0LciR*hfe*$(X0g-@XlCMtaC#gNjqx2=fE&{pfHXXYxQsLi$#7 z^X2h1^1!_ReGf~$4e}afvP=K-vijF?Uc%UljQw3yXx_17VlF4OVirZlBzn92s`x)J zl8^>y?)1C=6-GLxSJOYZsP|v2BGw{^=MsZ%YVGY5&v-r!U%~vp+`$59k=fSwBBT77 z!Oaev8@X2NvM`&0P8_Lqqx!)9_9{+S2%5f+eP8U4Tj+oKo0Kk*)Iei9Yi#!`oD1A( zzg@YfIs83o?}U+BD=>CDZofC*2l}ALitd5(Kl;Qx^N{3mj_Y_9t?j~N(_~V#-y}&K zb@aR2f8H_f-`=s5<@<>K(XpkTAa|WqE}S+dhMTseH#spoYNh+^i$({9_?pl`Zcjp& zGH6r2qdi(m2Z!hW@*9vj z_XI3VG5KE|>D0uwz5@G!%({EtO|&oNV>mDB*h}@;)ZDe)HL5!;dnZBg&oH9+@2Fov z%wd)+W;IZ#J!=ia1Q=+nmqA1|Q0CUWT6ticX(KPPmk&=4;J-HR-u-RByqn`o`bF z#yk~VMm6QH?-?nr44S}VT64W(MyvgOTz0p9RM@4YEqyL5{<_l-Fr$>>4T+?aXlxEJ zNuL)D3v<{5BK|}p7q6XPKVOu*0Xp?=kSQ|iwv*Yw+Yt;5vva-P15L?0UW<;?*_9yd zd+{X==kV?7yz2Sdh#QkSk4WOUO7nJS%16V1RA5OHmAqT1zurBk2`i5<`qV^z&gMS)AScDnoD6=MNiQ(AOJ88%TM;q`Mbc zZsnA5MU6gISQ4wrxG7qFx){AFqF-)hjgC!$3c6OO5*PzVKmERMGzoXaQm=~JgJh#$ zN0Xh&1lsv(X5N{OGa&SWxis%Xe+307K!_a<$pE(Ro^MC{v)?1RBMrV7d@Ph8A~jpS z@xyW~gMi+?r^v$9+>K2^W`*8>$Oh-{=@T^1(}nP-6GiSt4yB=Zf$xmH)OWYr+uJeI zje;nsKp#)6oJ)7=xJQ_-j4w8%Z|wOj=Ok6!ON`qc@k2SZTj{+Qb)NSPj9KF5l8?Fy z`-j{1Y^^*XW4JPWkM(MbFO+9XT-1Rw;_dxsJ;`g~tFe})&-*ES@$kLKv`1XHVe0ra zml|Y__WT4qtOC2YBmcF=>&WGXXdNIpO~98pl>&k3zfUT7KQ+B5aofPyoL=LANL-&T z?SoeLX7vJ7#U!A`>%|q+Onlz|;kWl*)ZxaYPUzVZ`-6A!ZW|Nt1Aw8h3A;!G3()5( z6P#qnNiZbq93&g^!BG zVqcXzYt^ihYt6PDx2sowdN_gs*A2Y;?eM~@4NECk_Q+Z3lnuS@^mZ1^PF~T7E3IDL zBz4m6usPHVh)?C={a9-5crWT6doTUXQ2U^6+M`Y-km>Oh{PQcRw*7J6X09RELa*+X zwXT@`#OA#c>Zr6Qi>U~gP)>eh-TTM~EA^JKF?Q5Nd=d_D!+g6Ybj1L z5rfvY@ZpHLG}|bs;2g?$!b5XkzWm1XT)XIWisgt0PQUHD-|g(V@_zNORb;Z_y@*>B zo^xn_G%}46h)hUwN4&o)IIB6hqeOfhXm;H}IjY@!)1Nc&3S+T%SAtppt5bHLSDVgp9p7|dG{5P=ShwCPLd zN0hG8qCMv*;Cb?_rG6JqOH#7)_4@K?a$~DyyJ`uKsEU4w+vt4ZPPH!d1SW??A|lwG zLlPtw(%om%TyP*I*(j4-GgC6VBpjXa;dQrE*lOwaQ35)`J@(zwQ$4ru#R@ zC(=rsJq>l;xsLJtb@qUh93-X4bSBoUU->bCigEk5Nn^_FxpDXd2@z~_7=)6)N=|%* zBN;N4H;BDr?Ys0!uxqPw&b}jU6!v6ukf`;yD##sCqrch?5Fb~q#D5+Jf$lt#B^A5z zQKfXr@cdL;4uo5{L-(J{8aa2jvsaZ&v^P6DAFd7eog3~}nLRYs+{E-0B41KP)Daf$ z6!<}y9MU|>~_XEP!<#TG}-Bt(xv^O&Ng z7ID?Yh>%+$!7ce(iSW|cdh0n->z={1JD~0`s{j3(6-M&pMRF^U=riaMPk@nV%ljMj zA#KXvDkTu8fo(_3ZxIKoLOhawkct!@_67pQcdf+55#66KpnN~Oyy1p_;SS3BHnjs4 z)nv9x5rK|up6dnoj&+|b#>|bl6c2g3c*qqH=r;PL)qle#`$S`xs2)|?%xi+B9sHma zP`7u49Mwwkx|gb;PqC34hdv@ve5zENC^p)tKb);~?*Z{Hrag|pw3J`Dpn~7-XCH{7 z>&K;Rc#yCQ7D9gpo~Nu$etK-M^B_)aL`AOs?K#00I~sPtAoIzrL~}Rn+M^6cN#2OX z_tCYY^VAvpIK_vp8#|y_-5OfpJ%A$7<~1+jKb!z8^}9_!vs7u< zG?61*BBO<8dezR)Qex`%d!XHgL}p-OH~g5c=8N7peI45u23_^FX2=@fZAhxODp(Mb zGURn#^G*>^%z;wsF1K5mIPf=)qfg%Hj>kQ-k+bHdH(CMZNuTnqp>yrhoCT-1@{)c zvL{wI^UOWsb1&4{dEQ%s?nIm3EW|Q!u@K&yD6Kkp)p|h=ze@_%nuU^=jYkO~yzd)+ zy*1dRMBUNj3_5+WebK&yr=iT0U=P8Df$^inTTV{YJMm>_@zx|AEYvrR9I&{^M)Wp2) zt;)QOpfT?W)!8lZL^ouq+1#e#-Z~Z3eouMrXSwH)A1HDHWGs7e&Pvp{(eElrxsM00 zxfj=(Z)k8y0OO9>9Fc|z(>3~zYtahG(V^>}T9=UQD9)5Id0>WvyF`7S>Am;K=ggVq zlla-Ph9W}PomTmGeaC}SmU+*mv=lMVs7M!ke5sg19xPsrQ!oU+pVoT` zgBa(}AgFy}aAABc2O*^^tld#k{V7JUoXVGaE*m`a4AstpdeWE>ML~4jwoDMn@TpW|pa*#9)XPTGL6|q@; z_B?WZRG!e)@59FecZN#a1O@Sm;&g8Uk1+!d>D9KHCmab&ohgD@@|_>@RnnA;lqU{T zXl}X~7l(J$LZaR!IMmS--1J|dh~!04W3t<@SYgpjn}p^>w2RPuUXt=@^vgo2m;JqW z6wI2wKF%yH&d4~HBIMljy6s|p{E?Ulx}4h@ok$ss`YDriC#Puor-Mieaee;u`}AH%#{8$ zaLT9PN3rEGX5NnN4>;too|*iviC?w$tG2Hz!@HZ`2G>51xvkGmj?~_rNv9`-&&Y_0 zh@qR6)?nNxzX1@|P^?Gw9r$S%!pEhai5tTh0uAp^sZ?;j6AKGnl1^4Akd_kjIgO~E zYB3GXlWva^oWdaQyxROGFd+%D^ZC|_Do-A`*2jZoR(@Jsk-MWFzA^z5Y(h;! zA`jfnx?IbCCQ|Bl#PNAvj*{Q%qmHZF9Leo!Pe*^sTp>p%HK!(U)Q^wrc;ztOJ;(o@ zWWS(tBv=HB^V)h8QEucLYAKTQ_Ae~}L!Bsip46Jo$^XKjnsOX==geRX8hElLellZM zfDF4Am3mi*20iI`i&mrAz64hZYE-vX(cy)d=DK0heoP+*T2+31&n2?lF8T%eGVWmK z)yEw(sSppxIbZTI=O40TCPL;PPw>l-jGKVr-%x1m+1sU^W{l}%c{0Ss7-~~EjZNX) z+dQpga&B9Cl*2ec_hOpoO%3vNr60m@+oOGIcUn(h-vpHZBx$xOitl^yqYn zT2qX=_%1HX=`2DA(kAFKlG6r+tiD1&T-p!xD>h|%6~ircOyM^hw=Lgc}J||BP$v(@=EV0;+ZP>Pl+3)qs+{nziqe>|kRoKs(Cw&Da zc%5`wW^V}?q)@Zqb2O{q`a#2-7|Og}I4>cC5Jerj#Es7vm58ym$C>oy19(uptbM7sVF9@EC6F)z8;CcF)a^aO^^5J|8WORTDAQF(Yfp8tFaS7X*5B3 z@|e+Gzc?&pUNR#l8eg4xT=FufY>zSBQ7kxNcB6E8bcT?+=9S<=Z#J??NbHwk!C9u7 ztb2RxJo8g9bn&j?qRx?KH3lBbaVLWQSaEJAs{7JU$cXtdkP@eqVq!~TlhvTN+sMdYFI&EXi4j*t!V%x3%`j0Sh`#$NMx9aXRkX$= z%1eq5cQPkwzL=Zw{2Yi-xLb0U`s>$bB8QEMeqg6tMtqQaVLbO6D_~&HG`<#1>cq3< zF(f2SL}PAvB)3Ec6xm(VFQ$789_#8Z@~7?c*7_f(prEA_sKx=PG7oqsGb3cjM}e7SjAHPCsT zH$AT5v_oyswl(MfaUC_fzvK64UgamX+V&N1$5YS6$XL?m#i=MzxP8FA2;6Mmrw80} zSDfgzJ0uTiY*np^F0d!GP>R%MyUweIFp{DDUW$PSWzRm846g&cJXH2zvf5}%RV-f4d!K<6B@4zUzI zfjR*6-%R2D!02(Q!{!oXe;>W%68ZMJ->ApiE`kiBCz7=lWDDN<_V_9;fDEV zae#u8*JtxkBtprdnx7d;!SkUfMKh%8~as zLqW$`%L|_R#Zr{R0)gj9d$5Srr8+3s*|U%0uHPF5szw92#n^KTxV#AEaCpsurN7z z-_CepUhbk)#JK2AodvzdE}PF@`@6B=eK&52-46ECV0;N;eOi6v#}&-G8%|u1#XMc3 zFna~EWQ&E+JYONDxk(|CPjsK;3c5)0f^>inwBqu#!=s{=?pU=Y+?EeSctzSNZBjEb z!=gtM(V>&yy`0;m4o5t#;I%IaOVA?bw@8mJ4~+LX_P=u~j)1uuV)77DkFY#ctWP5G5rVtpvg7GZqtwICtrfWn~w6C`) zhWHU>k3XWtZON+%f3%$95G7w9vBW=%Urc*KfGweKh@I{YO*yt|gQt4s$=WoGvt5P3 zW7_7-?W>w~^9@qkY@9wS^ygwVAU4#USd?((JxI_CGhtnF`cNhggCv&97Yo@E>@3!_ z3fX4G!DnPEk9NgW<)4^-6pK zT7|r@eEA%?gGnAqS`pXeNg7(wW4GuTcAagnX(~9wI*Xx`oFcZ|2?-=Yv|O{Guud3* zU=~X6&=vn~lo;aVGY2yjQU?Z6ghsB#n@8v&13_}89*o)ap%g1E3cLa6>XZkP{oh+lU zO7O1S4w-As*}>}jg>O&0pD^M(FfI=?VN7Fk$!c-=BvYech9Q7a(RjqqFO%oR1BCN+iJh-A2@yx-0>x$LGY^+n`5MBr=+;_$?haJu+*F%9A`q3jnCiLil>tx z&G|-b7xhfJm+5YNLb%pp$mO#kYt}N8PJjrz?RHqCUsQbn$# zAj3sWwh+ap@cN0lz5gQi69yqP8dz8i5E?|Ad-T}s()&a zCTjGTi!!ti)!h|$O~k9s*Z?FO=VW~CJZhUdCv4t(2O0oVnnhEK4@1J1X;ylgTJ0d$ zBOmS&_NI4?0$xi0xf+)xLs%Q8w7+k|s|X*u`$<-7pts zyL%(MskGr{<(UByjWhRlDME%;Bf6@Nbxf$A%~=vpwXolVJ10ECzq&6D#@8wR@j{x* zs&I?0-9X)7UMp?e;HyIB@}bxi5_J_@=Zfp6t@o`y=5K(5Bd3hM7=%P+}lqI;ho4W3bBvQzXb1=K%rwYm8Q*fhvm)WQ7+*p$H-VpQ6XvG3izvo> zJcE77?1zfRUU5%a=6Gp|a3OgTA2pbd5h1+A^#hoZ(}SdKGwC2AbM_&LpT_4g@nk5n zkV9lTA5kD@EV%|Yipmk2m6#zy(4>V#=qfX6)gfYXC^KFs+s_g#w$YJb2i)#GcQ5gH zNiAwhc%Y(0(fZq$F%7As-o@qTa?fw@D4S;;{T*Ru*f9{)YyBFj;OfN2urp!X(sA9Y z;jppCP*(S>kW$AOJFr~%1@CbqD-nc1WV2!eCXFVVZPCekAApOm$%Vhn{%)Rsid-VK zN&!OttXo+4Njc;5NUx*4gWl0)nWNTRyX% z+SMl7^r0LxBp->84yTW)Q{?%$H@9mmeTu*DD~$W_0sFK-6!DmFebXnrF;l(sVe(UL5R;f-nSO-jDt`zS+%>fGp%Q&KsPL`cd3Kl&W9BiX zbB}Zg9>U#2%A(d5EK6L*Tj)IIxmFj$Ku88c17bI-UG7D=lr&z~{E7oIS6B9}MRG^J zPC<-9BiQE!Yt$Vf_f~H_d<%b?fIx(#EHTr-alasRP~Jm3_YDf{Y@cSh?&0?rllPtW z%Q|UP6FbMM5#?=URi{fSkv-n0&ub_VlAOkxBSZNlHk)*Yw8n42;;*0<(vT4dcO%b(C$5r{z~`bHOT!jX*Y0f-a@jfxJ5!wnISkVu z0OEa8G)51jb8Vz!-<#c3dSZB2J1Ul(SLsj)R-7)Ij7&ZW!e|*s>296ZqHKuD<=Rnk zs~_|z`GMVMuU;d&cE9;h=#F=J`T56b6qs2JP%Wna;&QIUm(aChxQ`GH5jCr8SOt+h zDNP)Upz2iNO0x?Qb6w+3X|kV7=O24k7=;F94BW#a7#3eyG+j%{*L~#^Y^9qVM0R83 zZoSR_fDnotXc`7ta$Y3ZF0_z-jpe`hVep>5j46Q%WeJ)jp=&1OO#lIV3~Vx@Kcybo z^tC;uuuxgccX@HEB{lxGBSE91x4K7TBXJdNRyEWmr@0JiN!j?BZM$qS>h!o~Ei4tk zy)l}Hterk24Q8h=U!zJbFSQ=EViR=6Ncq8!jFnj+pIlW)gw+>>jCb%oFI?41XZ%-& z^Qy6i7y0Fj<#)uf7Dm{^I`ZY6IP0!=-H&!Sv>fY6(Wap?g2>FB?F_QY} znjAIr(G)$L9+ez@7g$XaTUeJ=zH;#=w=5-(@C@*F3ZrjoUPsD{MG+-I<4hn!%$f?C z(-T(@&Ek4a#Y^PsealI>Lq1rlwj$eYMr(q^Q@@IJJ^N`VqRQC)LW_(hRUz__`mR`I zm|Y;0VoG4UrwI?&q?V%|`D2oKw=j(jZ>oz5{iwzW7E*^q15H3FNoM`&C?p;olOWY9 zpJt}c)8*Ank+pTEn(I(E?V8_+knzd(Y~L_;1=}W##}J%|UAxHY!vhn#iWh7rMYaGu zQ7(9#g25?C*kV14``HdGz$bbD*enzSuLWy(o*>X}UVM=s#61aP3B+)C$W@V8gkaGx z_jMPb$&k08!qw;>o;_&$0X&tSM9a(Pvb*21W^9#tNPgjLLh7wFrTE0oRISv{L*kj1 zS!E?!U-vYGJF`C8`Z?dvD@Vjrt7AvU4$RDc)N!YV%|O)7Gzg8#sKLUqu@OSl6wSvR8=^8Cb+-`LL_-s2^nrEI9P=kKFr+B_h^2LxdAi;L)IR z58sflVPSWyBcz!Ck}x@7*=%fz?%Gn z=({flkTyRR0$3#mUEKshOB9Lo;d|eUhHpC@9g@pV&E64Z7-ooVbbJJv@mh+x+{@)u z*|q!oJyn#l2pVy(&rbU_SWZXv-3Z?cQ=1(DoJY_%T}!{0Wo2ol6nNncdjriD1Quu= zXd&X6(g7i?jUe_tJ^`5cFx^Eg_%$}og9#s>%p_)g2QnIY^G1uXUnDh-I1VE3s?A^B##U3}z7nNP$A7ao%rBK(B7_o*4EM36Gu^v4+BjhS7mWM2>w zP&*Z=({HiOq!KY%%skuMyDj_0FJO?6#?%nJ3CPC)&0 zI*%{mLB{YD1ra+R=;Hw$l`XCv1K0gRse9BR{^pX3|+Ri5WSolphRjp|xq(Gb5@sAwC{bpySu%jP*L!+sn6nn!55>R;Hn?OEFSi z6qDkbsw6$QD}}sZ;WOq3Y#!-K`9Kn4{cdF>$E;7DYs5*Sy7dgLoy{{S1!A!7keP40 zr7fqggsHQLd|J8899yrQz1J>8g-MAMf|@fX2`Vh1j!$eNf&$)&bTnUG_?LDOyW6mX zoT(pl0_YU%ycV%hn)JN9)kX14QIE~be$HMxscabD*;bz6eS}Gu+Y?JYtqcjlpmwHd z-0L8YetXzY_S?|vIaYuW2E2;5Qa%Bn*j}bl!gZ}w2NKdrCo7!84#$(65@MTxiemcS zQGYT7TmSq{c*SPuk=jls&=_b_Q!+3%nCS8x=TX!3pb?lWn4w^Baq2RDCqR{oShfD) z6F60@cRn;Kl|92&UTB3j10p9;$<*t*cl(jC~H$==57FemvskHkBp3( zb8VveZV)RW+|kUoc(TW2%|k_k^AZ+{_d-%;5pD!-YusQu- z^9ct;ptcTXtgWv|Bk}NicV3-T-d8P)`k+QN=sjCgVrRZcJl&+#8g11Q;-uYA$st^* z?Q6pz{JAl!IR)>{P-zQ}swC54_^QrFWV%=+0!R`i`PHt6QVAr&;v*I*Ja~_bT+luU zGgbG^V?{`tMBt1hsvj{m5=I0?{!G;3T{dXK2S@}@s_af~B1>xVC{|oo^%`YM^o9^M z66`|qXe{Z$6ay>8wHZ8;q#9fhJS;_Vv8htVrDUpZ?j7++AEcSmp|t>g%;&iaWNju) za}F%NkHW}w?9lA{oFRP5Uc>Kpm0i4KB%9d%#y^iI5-;zPKFWH(Vb8U4%H2gx2TpkzKUG@#4;X^03mVa4O z0L(ORr((3ugv}=C1e@lP$23jLf|#s%DozfK6HltDpU}r*EO0JVOt)ogRb6Q#O_U*e*!%$bReppwi_wAD z0U~*-YJ=sdSI;vEdGte~d|{%Dny2m*SfOjn`dMzg-0)DvnT*I!Y${pU1|q}9_R*;U zm@xJ6_z?Nr$b@ydwc-$}Ei6U6iD27AjyTRy;fHMe#Cjoos86`&y<^6xVFWYAr_Bv2 zSOJQW=7^Y36`@B>VIfw*shzQQQ3?WmXQ}JCFbP7khc8l+a2Te5|8F{HT#4j>bsERi z;D=687gQd33W0T!l#J$zp!~Rqu-E%xmKBf)Ill;d1@U0>ye_#}{l>~z47y^MiK06q zjhuGFsmb2W4=Dt<-CP!17P+FrTdaE{``|z6*2E%00`oZ6S?7)RDyJY9Xl~3rtg?;a z>8Kdo@{qP9#om=iy)VUGR0Xdr{~*omvD5vo_fcx%klsuYkX}+#Ci#+&cKN>6`wweo zI@L7va&@Y!Xah5J$vhMpoyuTe>9^R^fjJjm{R zWZhWafM)97jJ9g9xR5$S_tBgoE)1(&fg@1O!~K8+vPaoc5KYSUTuyhWxGJm4v$EL& z1-?z+KYVmD7tXoLDJDWcc1CjmT;0@mdc6fo>;)RnG*Y(`UfjQ-@DQS^KYUuL1 z&`u>V1`;qQnYlmX*e`VLZ;f={hssjku;gCHZ#wUv;Yu5jZ~>((1%!|D{V%wKyF1A@ zro;X9LoQ+5^qZ;}3CI??N!u+*L5&wgPIRQ^VviK(6>+VUR@2^YyJ>K;(-;UrN&ZIbCoxQ+YjW_@s@fF-hCGiivqsPOKS8bJ_f#cNR$N}R`3 zWM&fL`)VX!%%iU+S|SaPPZ?RA%BC-Ql3&cLI84syBgfBKftgDsqI<#PKn!bRc7NCS zIrx1-s28~-5BD~IEQ#dHBBpY?7xdo=*2^}A#k_ZiqEiJPW$}wcQv89I>AH9I5B2|o zGF{%Z58!gD-477A>Sh**G^$yRfQ@G58`i39P^#^9XrB$h@4;21!+-^>Qi-i-7^pw= z!YNv2SZ>Q;HF?NOSCp%oVf*K3qSy`p68P8>ijK9l}#;-58%5ew@`KRepF;M(0G0xnkZL{B#h>T{6RqMiZ{(YG>bk$!hr{#U z=w86+r#U>L~(FMSEnm`tN=4&z|_7SGpuX@AN%w5)=E! z$@@F0@borFMNctf_209blvx0GlZ14z`)@n){~P6hI!B4Rzq-DzIV`&U#8_@5p9muLD1Pjrp7 zG=lcAG8f#X^{?<6NaE&=|ILTLK8g0fuCtB!2^GJ0RKHbwaNljn1jgU5^FMh(ivdiz z68&koZ2#^-{`Xc^NHPBJt>7PjOX6Kucnk?`IQhRe8)b+w&Hrb+z5dXb^4ir4&#Mx~ z|9`XRKi~NTX&3+JOZ}cB!ik^@p***9wfz0li3G_y)|iK6VSF%|rLYoN?Bzl4`}D3^ z48;hA$qnwRp}Wo*D@l+u0xnNrGQZ`FZ;HYv zh^?3GbF($a4V8WGAdpi;Nr>|A?$aTMcNIZA)d-H1gAUUs1?OI^^ z`SuV!;Jak?3rMldkJzqhvhRPQh(fb{K&5W-|h1< z`3l;tDZB=XYfnjEUf?}9cQ>F%^&joXM|uu04rk->fI&l2@1Al+!9e`_#9tMZmiM~q zKd%-Q`0Y^;tYbPmSMivr^{}PTOvs&WswEeg+z)QzlYN=WxVeiz2bup%nfnqj^_Q9x zPn4RMY|hjO$`nK=$f61-H$?BzBT2s;CzPZ+%sC@R#iI_!Zyz5`$Ntrd2IXnBuzZ-F zy^qELwgUoIe9DxLDmy6kM$@5=LT0Is_6jY;5d)=I25{cas1+2)5Og8%ecp_Z}n zXKl~J5jN^;rQp3T?t0VXQWrAC6d^hQj=2X#HBw1OLH>fm4E}<`7^l7hyRW^qtf;S* z2%t4A4_59MmzTXFCB}P89l%%V#n}Zgw~vwMuI1|}2SR-xz!{f#>*DHvSuoC`qN4Bc zW;G2RCZ=cFbm63)(euFs5w?;RED{^JB?nq+jVpKMqAZ-etU(k*rN`lj#@=#*p6PLQ z6$92WQ9B7+@#P214w^VuD|+k{78TjfkktkyqN}d_ZV{D-ktsQkp`jcep_J(o+Vp#* z(INX>#C;jFtx%!GMYo5FG=s_114?fKnW%+761+|bJ-NTqk(kxi+8Q|88rU)N*#zgr z@JY`~W4Z5mGdlL|Xv_Sn$D?^#ZL4WLXLnaVf~~^m4rKi_UZ=mleVW!Zom78RB}vVQ z^$*_b@>p6QB6|A9U9(U>18KTli`2af7Rdbh-h?4f2@upSpWdCHZrH-Dw`&RlucgN$ zRt;OjIu3r>CWBKlk2Scbb9vZPldV7>x`Y4Wy&&Dc^IjL*HHZ%&T!78}$b*GU&m%@h z4lFYjO6|le7u%xZuho^xE-c1;p%GLfTyxN+QgL9KgAYQ&xDyH7w#rOuD=?(3wx@+H zcs@kOu^2h-gvNuVOb7T^J2m`6O&)hVw4A$zOf<^0XZtxlsT5_3_ys5N%>hAxPJW%5 zUiM@rzyrnz8YGcXjD+~8Wa^X7`d7Pjl@RRbMY2O!1kZZ0OQNb3+we^L1Q5M zdsiG$YHm9Yd>^=Rdw1?v8m$pFRBSZiaQEB3de5cJ#Ha-$e_$NqvD1k0!02bUF&V!7 zjPq_L2%gy+H`-dRnDvSS8~y8s!`$$TomvXfW2Q4i5U%aOWoa{79k587ob5MD9W7d1 z+-o6DHQAahW0UfK6B24tpj$hH7LGXo9qmF}q==sEV0nIr1vw3kns!~)*#otH>MOtH z=zFuYU(D|)X4B?3Rw5baR{Wr4^mympY`JxK z*dr4^<~sq{2<7@nNh>;}*k_Y{{i)JT11nyuapf{|#DnC!<-}GafVLxCuXOQbBS;iP zh-po~-6XUEj@TZqr@w3-8IW2{{ZPpYS}ENJV)huzr!LW-(TW2hLLSFFBtu*RyDW5c zkJd-?7)nfgUeXm-o&&7)#nt&v6-_r%*CE$ zU3@f3mmT;(y$f|u_bAq8Iqdu1&i5ygmEvw=ka{jCh~ErE+dD)M-S0t%v^vI%d**R@ zVg?MY0F_mTI;F1jbPnGsiJSMTZy9hR{@BTJU!H6CNbcW!-0*4rCgjPP&Uhb;yN`pgw2ItZ| zPdnuK#Kwr)%Yk#nux#+7$tyUP@jhP#2#8|Nw5olSz@_vNf;`_Bi=A#`NzaYmo=JbY z;2Y$novoZyd*_GT&IqPfq(5(j-VUb(dZRjKS2%P8#F7!Aue6~!fybVg=SY+O zPYEw>Lw0fDrRM%&CeGi4yiRm!kA$i4WA#05yjW*U)N1G=GV%kbqDOk(7x7^~qK0sI zwCW8q9CvSYg_hnU^+4g-iye%uZ<7jbhki)W7E@g~^59gFEr^?Tq`BQUP`~s9@j7-# zKavl5(I?Vd}LR%w!(^VcAy zXlBK5j)oo?k++6OWxoEUX4cOuMfNb3#oLvuzlg3ms)OwrIa03YVv~$nt61gM{3e}@ zfRgSr7gjJn&}}lP2ShC%IiDnMOyJXq=>ITOJW`(kZOjRbL-xgaJ?5^r?PR1v9^Sw> z5*#Q{NG^w4Q@egn4GZH`Q~qHMH~O2PQgq#E(84ze2XdZxgQe!GuDh*|Ueui*l70Yk zh_d^XJ{c=~E)_FgXV%P44LcKcp2^sNpxRZo?Eh5frHuTpG1zPD*^2~qP1O${mYKw7 zPJeM)J4XT`7Hd7~dMBv98&-h13rZpjI7!JiFMq&<GmEBwsVS#&bctx5iSqNMlzD*>s_Jgn>GI*<}1D38E^7Xvk=4_6lj z<*s>EQ-I9Mg7dv|e4sLPIbC;=wFi_|KgwBwV})Ung1Ep=030fmQ?(p)#C^-wpB4Lv zK?{#@JG3cB;&?XhPBz*X`GsE4N|AEDmLbEUE`~PZ5c=x_!M@Ty9ZQ5q*9YW;t7(s$ z92tiAt}a*PRHiKS>?dGK(pOZ#iKxcD)N@WgB8(jth@szT_2I>eS^x?Z_&%+?+vH0r z@H{&@67yBQfV(3!(**eRPznuOvE7vL*K6X|CQ>HrG$-%6?D=5AE{@*nM7wc+T-{ZY zxcIdA9G&=AO3+Rkn<_Jlhz%TeaxnF(A2vT@J@P}zdf>(d{;VROOHJ*?(Q_S2tqdGf z7IeDmNTHC~`;P(7%_fUNU^LdB!JRV(yLWf;+AZpMCE3YO-b~<-KDQE+8-t_;36*b?RntqV~;@crE=F&xr$6T*S@~_%>-V6t@(HHv}-cUyS z{_dhwx;Xb*`@VUsyWWA zMyH&=lHGhNmkGE4nj^Gs2u-if{y5*+qJB|(pUU~DwjTi2Y8h-Nx^yo?;n6Jge&dIx
+Show screenshots + +### Home page (live submissions) +![Home page 1](docs/images/page-home.png) + +
From 36f42b0aeaf2120db89e93bdb4ac99952f719206 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 12:58:18 -0700 Subject: [PATCH 102/315] chore(tailwind): fix eslint error ## what - fix eslint error - set `config.theme.extend.keyframes.accordion-down.from.height` to a string value - set `config.theme.extend.keyframes.accordion-up.from.height` to a string value ## how ## why ## where - ./tailwind.config.ts ## usage --- tailwind.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tailwind.config.ts b/tailwind.config.ts index 5a7ed2d..a9d9eae 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -60,12 +60,12 @@ const config: Config = { }, keyframes: { "accordion-down": { - from: { height: 0 }, + from: { height: "0" }, to: { height: "var(--radix-accordion-content-height)" }, }, "accordion-up": { from: { height: "var(--radix-accordion-content-height)" }, - to: { height: 0 }, + to: { height: "0" }, }, }, animation: { From dc7808b78dcdc7c323e5b5388c8860fd4fcb93ae Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 14:42:07 -0700 Subject: [PATCH 103/315] build(shadcn): add component `Skeleton` ## what - add component `Skeleton` ## how - run command npx shadcn-ui@latest add skeleton ## why ## where - ./src/components/ui/skeleton.tsx ## usage --- src/components/ui/skeleton.tsx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/components/ui/skeleton.tsx diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 0000000..01b8b6d --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export { Skeleton } From 31af5a303969bc0298a3f4e5e02cd59fd65e0f10 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 15:20:59 -0700 Subject: [PATCH 104/315] chore(components): add `TableRow` in TableHeader section of `LiveSubmissionTable` component ## what - add `TableRow` in TableHeader section of `LiveSubmissionTable` component ## how ## why - web browser is complaining `TableHeader` doesn't have `TableRow` ## where - ./src/app/LiveSubmissionTable.tsx ## usage --- src/app/LiveSubmissionTable.tsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/app/LiveSubmissionTable.tsx b/src/app/LiveSubmissionTable.tsx index 0290cdb..07b825b 100644 --- a/src/app/LiveSubmissionTable.tsx +++ b/src/app/LiveSubmissionTable.tsx @@ -18,15 +18,17 @@ const LiveSubmissionTable = ({ data }: LiveSubmissionTableProps) => { return ( - Submission ID - Problem number - Problem title - User (username) - Verdict - Language - Time - Rank - Submit time + + Submission ID + Problem number + Problem title + User (username) + Verdict + Language + Time + Rank + Submit time + {data.map(({ msg }) => { From dd8b5b4ea3513e94aabfd5f2c7237e0b0ebfa2ab Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 15:23:32 -0700 Subject: [PATCH 105/315] feat(page:home): add `Skeleton` when fetching data ## what - add `Skeleton` when fetching data ## how - use shadcn-ui components - `Table` - `Skeleton` ## why - add better user experience when the data is being fetched ## where - ./src/app/page.tsx ## usage --- src/app/page.tsx | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index e4d3e13..9a6c820 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,10 +1,54 @@ "use client"; import { useRef } from "react"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { Skeleton } from '@/components/ui/skeleton' import { useFetchLiveSubmission } from "@/hooks"; import LiveSubmissionTable from "./LiveSubmissionTable"; +const Loading = () => { + return ( +
+ + + Submission ID + Problem number + Problem title + User (username) + Verdict + Language + Time + Rank + Submit time + + + + {[...Array(10)].map((_, i) => { + return ( + + {[...Array(9)].map((_, k) => ( + + + + ))} + + ); + })} + +
+ ); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + export default function Home() { // used for setting the pollId. // not using useState, because that will force a re-render every time it's set @@ -14,7 +58,8 @@ export default function Home() { const { data, isLoading, isError, isSuccess } = useFetchLiveSubmission(pollIdRef.current); if (isLoading || !data) { - return
Fetching data
; + return +; } if (isError) { From afec254d6638bda5743cecd142e7febb0c0ce02f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 15:46:41 -0700 Subject: [PATCH 106/315] docs(docs:images): add a screenshot of home page when loading ## what - add a screenshot of home page when loading ## how ## why - will be used to display screenshot on `README.md` ## where - ./docs/images/page-home-loading.png ## usage --- docs/images/page-home-loading.png | Bin 0 -> 45798 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/page-home-loading.png diff --git a/docs/images/page-home-loading.png b/docs/images/page-home-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..b632d7063b541d701265fa463896d3fbb47918d6 GIT binary patch literal 45798 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

~dk3pX^5;WbDW8r#r2!nQMTgV|aJYUKnS}m~E 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 literal 0 HcmV?d00001 From f9009372cebf85b777774e5b474745c107feb78e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 15:49:34 -0700 Subject: [PATCH 107/315] docs(readme): display screenshot of `loading home` page ## what - display screenshot of `loading home` page ## how ## why ## where - ./README.md ## usage --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 050e8b8..1d983e1 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,8 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym

Show screenshots ### Home page (live submissions) -![Home page 1](docs/images/page-home.png) +![Home page 1](docs/images/page-home-loading.png) + +![Home page 2](docs/images/page-home.png) From 63fc4db194c577d903bc9bed2ab7088c2556715e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 15:58:34 -0700 Subject: [PATCH 108/315] chore(query): display `react-query-devtools` on development env ## what - display `react-query-devtools` on development env ## how ## why ## where - ./src/provider/ReactQuery.tsx ## usage --- src/provider/ReactQuery.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/provider/ReactQuery.tsx b/src/provider/ReactQuery.tsx index 3051fdc..c7c808e 100644 --- a/src/provider/ReactQuery.tsx +++ b/src/provider/ReactQuery.tsx @@ -10,7 +10,9 @@ const ReactQueryProvider = ({ children }: PropsWithChildren) => { return ( {children} - + {process.env.NODE_ENV !== "production" && ( + + )} ); }; From cda657a686956eab1824787cddc94db5c5e305d5 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 31 Dec 2023 23:10:08 +0000 Subject: [PATCH 109/315] chore(release): 1.0.0-development.2 [skip ci] ## [1.0.0-development.2](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.1...1.0.0-development.2) (2023-12-31) ### :sparkles: Features * **api:poll:** process submissions from endpoint `/api/poll/[pollId]` ([ad53d2e](https://github.com/Clumsy-Coder/uva-uhunt/commit/ad53d2eaa94daf3c5df085a8c6bfb57ae5d746b4)) * **api:** add api endpoint `/api/poll` ([c60046b](https://github.com/Clumsy-Coder/uva-uhunt/commit/c60046ba354413e12cf0b870f0caa133690b8464)) * **api:** add endpoint `/api/problems/:problemNum` ([62ce762](https://github.com/Clumsy-Coder/uva-uhunt/commit/62ce762f1485825b5d2a4d8f714b504b68ab6484)) * **api:** add endpoint `/api/problems` ([e65ce18](https://github.com/Clumsy-Coder/uva-uhunt/commit/e65ce18a9dc4881759dd43eca4160cf09f10d24b)) * **api:** add some basic checks for endpoint `/api/problems/:problemNum` ([94049cc](https://github.com/Clumsy-Coder/uva-uhunt/commit/94049cc303a633836c7e90e40c92a46d7e3f4f8c)) * **components:** add `Navbar` component ([27c1b8f](https://github.com/Clumsy-Coder/uva-uhunt/commit/27c1b8ff379a5503f72c807feec90fa8447cbfdc)) * **components:** add component `LiveSubmissionTable` ([0278c98](https://github.com/Clumsy-Coder/uva-uhunt/commit/0278c98c88c1647db38ac38193a0d21258e459ac)) * **hooks:** add react-query hook to fetch live submissions ([19f0d72](https://github.com/Clumsy-Coder/uva-uhunt/commit/19f0d72402db6d3fa10f4aa32b2ea96afc754ce7)) * **page:home:** add `Skeleton` when fetching data ([dd8b5b4](https://github.com/Clumsy-Coder/uva-uhunt/commit/dd8b5b4ea3513e94aabfd5f2c7237e0b0ebfa2ab)) * **page:home:** fetch live submissions and display it ([1d67137](https://github.com/Clumsy-Coder/uva-uhunt/commit/1d671374c2864a1fa3726da841c42cc11d7b2536)) --- CHANGELOG.md | 16 ++++ package-lock.json | 237 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 3 files changed, 251 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a839662..8bc0aea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## [1.0.0-development.2](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.1...1.0.0-development.2) (2023-12-31) + + +### :sparkles: Features + +* **api:poll:** process submissions from endpoint `/api/poll/[pollId]` ([ad53d2e](https://github.com/Clumsy-Coder/uva-uhunt/commit/ad53d2eaa94daf3c5df085a8c6bfb57ae5d746b4)) +* **api:** add api endpoint `/api/poll` ([c60046b](https://github.com/Clumsy-Coder/uva-uhunt/commit/c60046ba354413e12cf0b870f0caa133690b8464)) +* **api:** add endpoint `/api/problems/:problemNum` ([62ce762](https://github.com/Clumsy-Coder/uva-uhunt/commit/62ce762f1485825b5d2a4d8f714b504b68ab6484)) +* **api:** add endpoint `/api/problems` ([e65ce18](https://github.com/Clumsy-Coder/uva-uhunt/commit/e65ce18a9dc4881759dd43eca4160cf09f10d24b)) +* **api:** add some basic checks for endpoint `/api/problems/:problemNum` ([94049cc](https://github.com/Clumsy-Coder/uva-uhunt/commit/94049cc303a633836c7e90e40c92a46d7e3f4f8c)) +* **components:** add `Navbar` component ([27c1b8f](https://github.com/Clumsy-Coder/uva-uhunt/commit/27c1b8ff379a5503f72c807feec90fa8447cbfdc)) +* **components:** add component `LiveSubmissionTable` ([0278c98](https://github.com/Clumsy-Coder/uva-uhunt/commit/0278c98c88c1647db38ac38193a0d21258e459ac)) +* **hooks:** add react-query hook to fetch live submissions ([19f0d72](https://github.com/Clumsy-Coder/uva-uhunt/commit/19f0d72402db6d3fa10f4aa32b2ea96afc754ce7)) +* **page:home:** add `Skeleton` when fetching data ([dd8b5b4](https://github.com/Clumsy-Coder/uva-uhunt/commit/dd8b5b4ea3513e94aabfd5f2c7237e0b0ebfa2ab)) +* **page:home:** fetch live submissions and display it ([1d67137](https://github.com/Clumsy-Coder/uva-uhunt/commit/1d671374c2864a1fa3726da841c42cc11d7b2536)) + ## 1.0.0-development.1 (2023-11-05) diff --git a/package-lock.json b/package-lock.json index b6449a1..21fd980 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.1", + "version": "1.0.0-development.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uva-uhunt", - "version": "1.0.0-development.1", + "version": "1.0.0-development.2", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", @@ -6143,14 +6143,17 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6167,6 +6170,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6178,11 +6182,13 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6199,6 +6205,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6213,11 +6220,13 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6233,6 +6242,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6244,6 +6254,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6256,6 +6267,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6268,6 +6280,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6281,6 +6294,7 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6327,6 +6341,7 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6345,6 +6360,7 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6356,6 +6372,7 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6367,6 +6384,7 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6385,6 +6403,7 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6400,6 +6419,7 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6414,6 +6434,7 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6428,6 +6449,7 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6436,6 +6458,7 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6444,6 +6467,7 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6461,6 +6485,7 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6472,6 +6497,7 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6483,6 +6509,7 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6498,14 +6525,17 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6517,6 +6547,7 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", + "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6525,6 +6556,7 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6538,6 +6570,7 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6550,6 +6583,7 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6558,6 +6592,7 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6570,6 +6605,7 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6578,6 +6614,7 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6589,6 +6626,7 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6601,6 +6639,7 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6609,6 +6648,7 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6623,16 +6663,19 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6645,11 +6688,13 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", + "dev": true, "funding": [ { "type": "github", @@ -6669,6 +6714,7 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6683,6 +6729,7 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6691,6 +6738,7 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6699,6 +6747,7 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", + "dev": true, "funding": [ { "type": "github", @@ -6722,6 +6771,7 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6730,6 +6780,7 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6752,6 +6803,7 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6763,6 +6815,7 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6771,6 +6824,7 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", + "dev": true, "funding": [ { "type": "github", @@ -6785,6 +6839,7 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -6796,6 +6851,7 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6804,6 +6860,7 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6816,6 +6873,7 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6830,6 +6888,7 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6838,6 +6897,7 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6846,6 +6906,7 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6857,11 +6918,13 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -6870,6 +6933,7 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6882,16 +6946,19 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6905,6 +6972,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6919,6 +6987,7 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -6930,6 +6999,7 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6946,11 +7016,13 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6962,11 +7034,13 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", + "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -6975,24 +7049,29 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7001,11 +7080,13 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7014,6 +7095,7 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7022,11 +7104,13 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7035,6 +7119,7 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7050,6 +7135,7 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7061,11 +7147,13 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7084,6 +7172,7 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7105,11 +7194,13 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7121,11 +7212,13 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7137,13 +7230,16 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7153,6 +7249,7 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", + "dev": true, "funding": [ { "type": "github", @@ -7172,6 +7269,7 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7183,6 +7281,7 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7191,6 +7290,7 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7199,6 +7299,7 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7207,6 +7308,7 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7224,11 +7326,13 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7237,6 +7341,7 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7248,6 +7353,7 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7259,6 +7365,7 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7267,16 +7374,19 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7294,6 +7404,7 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7302,6 +7413,7 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7310,6 +7422,7 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", + "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7318,16 +7431,19 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7340,6 +7456,7 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7359,6 +7476,7 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7380,6 +7498,7 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7391,6 +7510,7 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7403,6 +7523,7 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7415,6 +7536,7 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7429,6 +7551,7 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7447,6 +7570,7 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7458,6 +7582,7 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7470,6 +7595,7 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7485,6 +7611,7 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7493,6 +7620,7 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7514,6 +7642,7 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7528,6 +7657,7 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7536,6 +7666,7 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7547,6 +7678,7 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7558,6 +7690,7 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7574,6 +7707,7 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7585,6 +7719,7 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7596,6 +7731,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7605,6 +7741,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7616,6 +7753,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7627,6 +7765,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7638,6 +7777,7 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7649,6 +7789,7 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7660,6 +7801,7 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7672,6 +7814,7 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7683,6 +7826,7 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7694,11 +7838,13 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7707,6 +7853,7 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7715,6 +7862,7 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7738,6 +7886,7 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7752,6 +7901,7 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7766,6 +7916,7 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7774,6 +7925,7 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7785,6 +7937,7 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7796,6 +7949,7 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7804,6 +7958,7 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7818,6 +7973,7 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7829,6 +7985,7 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7843,6 +8000,7 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7855,6 +8013,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7872,6 +8031,7 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -7880,6 +8040,7 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7894,6 +8055,7 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7908,6 +8070,7 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7939,6 +8102,7 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7952,6 +8116,7 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7960,6 +8125,7 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7975,6 +8141,7 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7987,6 +8154,7 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7995,6 +8163,7 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8003,6 +8172,7 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8011,6 +8181,7 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8019,11 +8190,13 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8036,6 +8209,7 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8047,6 +8221,7 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", + "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8054,6 +8229,7 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8065,6 +8241,7 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8073,6 +8250,7 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8087,6 +8265,7 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8099,6 +8278,7 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8114,6 +8294,7 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8122,6 +8303,7 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", + "dev": true, "funding": [ { "type": "github", @@ -8141,11 +8323,14 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", + "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8160,6 +8345,7 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8171,11 +8357,13 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8187,6 +8375,7 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8195,6 +8384,7 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8206,6 +8396,7 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8220,6 +8411,7 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8229,6 +8421,7 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8242,6 +8435,7 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8251,11 +8445,13 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", + "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8265,11 +8461,13 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", + "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8281,6 +8479,7 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8289,6 +8488,7 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8303,6 +8503,7 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8316,6 +8517,7 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8328,6 +8530,7 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8339,6 +8542,7 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8350,6 +8554,7 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8366,6 +8571,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8377,6 +8583,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8388,6 +8595,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8396,16 +8604,19 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8414,6 +8625,7 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8427,6 +8639,7 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8438,6 +8651,7 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8449,11 +8663,13 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8463,6 +8679,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8474,11 +8691,13 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8487,6 +8706,7 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8501,6 +8721,7 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8509,6 +8730,7 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8517,6 +8739,7 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8534,6 +8757,7 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8550,6 +8774,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8561,6 +8786,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8572,11 +8798,13 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8593,6 +8821,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8607,6 +8836,7 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8619,6 +8849,7 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index eab472a..a7c8fd6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.1", + "version": "1.0.0-development.2", "private": true, "scripts": { "dev": "next dev", From 7c561453888b9c990e99c5163c9b3a9bd9d34a28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:32:24 +0000 Subject: [PATCH 110/315] build(deps): bump @tanstack/react-query from 5.15.5 to 5.17.0 Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.15.5 to 5.17.0. - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.17.0/packages/react-query) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 21fd980..31e7364 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", - "@tanstack/react-query": "^5.15.5", + "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.15.5", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", @@ -1769,9 +1769,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.15.5.tgz", - "integrity": "sha512-GDwVfu8RPswqVu27+zuIkZINru6CN++zzBbBK+OnAgzxK8N4Obdi+sG2P0EO8rJAOw0fLyQTsO4GCZ1djwaUCg==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.0.tgz", + "integrity": "sha512-LoBaPtbMY26kRS+ohII4thTsWkJJsXKGitOLikTo2aqPA4yy7cfFJITs8DRnuERT7tLF5xfG9Lnm33Vp/38Vmw==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -1787,11 +1787,11 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.15.5.tgz", - "integrity": "sha512-JSPpzsJPqpNySgjMhAvBpF3gVhtlI/0bZrBmwmcD/ewYYOExll+tIz13gkgnCfNA1qTJQnbv7vdc2gw594vq9Q==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.0.tgz", + "integrity": "sha512-iNSn6ZA7mHUjrT0a271eKoa1oR1HznlrGbb475awft1kuP3zrhyUCrI8tlGowOr7zRoAxJholjwxO+gfz1IObw==", "dependencies": { - "@tanstack/query-core": "5.15.5" + "@tanstack/query-core": "5.17.0" }, "funding": { "type": "github", diff --git a/package.json b/package.json index a7c8fd6..d071857 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", - "@tanstack/react-query": "^5.15.5", + "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.15.5", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", From 83b2c02b520d91cfd8633a41ce072ed83bd30fab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:34:27 +0000 Subject: [PATCH 111/315] build(deps): bump clsx from 2.0.0 to 2.1.0 Bumps [clsx](https://github.com/lukeed/clsx) from 2.0.0 to 2.1.0. - [Release notes](https://github.com/lukeed/clsx/releases) - [Commits](https://github.com/lukeed/clsx/compare/v2.0.0...v2.1.0) --- updated-dependencies: - dependency-name: clsx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++++++---- package.json | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31e7364..3bae73d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@tanstack/react-query-devtools": "^5.15.5", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", - "clsx": "^2.0.0", + "clsx": "^2.1.0", "lucide-react": "^0.303.0", "moment": "^2.30.0", "next": "14.0.4", @@ -2617,6 +2617,14 @@ "url": "https://joebell.co.uk" } }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/clean-stack": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", @@ -2679,9 +2687,9 @@ } }, "node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", "engines": { "node": ">=6" } diff --git a/package.json b/package.json index d071857..1ef20de 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@tanstack/react-query-devtools": "^5.15.5", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", - "clsx": "^2.0.0", + "clsx": "^2.1.0", "lucide-react": "^0.303.0", "moment": "^2.30.0", "next": "14.0.4", From 7e6d6cbfacefdb4f2e6d046f8d092b15fb79cafd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:37:22 +0000 Subject: [PATCH 112/315] build(deps): bump moment from 2.30.0 to 2.30.1 Bumps [moment](https://github.com/moment/moment) from 2.30.0 to 2.30.1. - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.30.0...2.30.1) --- updated-dependencies: - dependency-name: moment dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bae73d..5a4c811 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.303.0", - "moment": "^2.30.0", + "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", @@ -5760,9 +5760,9 @@ } }, "node_modules/moment": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.0.tgz", - "integrity": "sha512-8XSlYFhOSJvnEJOas6RpDCNU2PYeVC+oE33d3Z9tIsXpD8LIgBeqrHPjP8es4b3fcJpf07D1PJWGDUfdbqDLnQ==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { "node": "*" } diff --git a/package.json b/package.json index 1ef20de..ab3d7da 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.303.0", - "moment": "^2.30.0", + "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", "react": "^18", From 82d61466569df868c61fd3dd3b1fddcd35b85f37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:39:48 +0000 Subject: [PATCH 113/315] build(devDep): bump @types/node from 20.10.5 to 20.10.6 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.5 to 20.10.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a4c811..e01d1fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1824,9 +1824,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "version": "20.10.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", + "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 4057d4549ab4e65bb47e36e8bdfe6977ce789747 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:42:29 +0000 Subject: [PATCH 114/315] build(deps): bump @tanstack/react-query-devtools from 5.15.5 to 5.17.0 Bumps [@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools) from 5.15.5 to 5.17.0. - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.17.0/packages/react-query-devtools) --- updated-dependencies: - dependency-name: "@tanstack/react-query-devtools" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index e01d1fa..b82ce73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", - "@tanstack/react-query-devtools": "^5.15.5", + "@tanstack/react-query-devtools": "^5.17.0", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1802,9 +1802,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.15.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.15.5.tgz", - "integrity": "sha512-AixLsTYGB52Ou7snhbW4QlTHZ347VJOl+wjXqiLlK9/oENxpaVI92Nl4VIsGiVRrscwv5lRMYUGucM+UYShyEQ==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.0.tgz", + "integrity": "sha512-G8sDsK83Zzjr6Nqm4t+8ILi9VWDhg/XjkDD4UYDWqDZHnh/iv4bbQotPLB3PfX7eQtdzgXjGaV8omf1UniyK8w==", "dependencies": { "@tanstack/query-devtools": "5.15.0" }, @@ -1813,7 +1813,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.15.5", + "@tanstack/react-query": "^5.17.0", "react": "^18.0.0" } }, diff --git a/package.json b/package.json index ab3d7da..c7dcb01 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", - "@tanstack/react-query-devtools": "^5.15.5", + "@tanstack/react-query-devtools": "^5.17.0", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", From d69f54a109235a8bbb9080fed42ecd011ef48469 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 17:02:32 -0700 Subject: [PATCH 115/315] build(npm): add package `@tanstack/react-table` ## what - add package `@tanstack/react-table` ## how ## why - will be used shadcn-ui `Table` to make a more complex table ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 265 ++++++---------------------------------------- package.json | 1 + 2 files changed, 34 insertions(+), 232 deletions(-) diff --git a/package-lock.json b/package-lock.json index b82ce73..6dd80e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.17.0", + "@tanstack/react-table": "^8.11.2", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1817,6 +1818,37 @@ "react": "^18.0.0" } }, + "node_modules/@tanstack/react-table": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.11.2.tgz", + "integrity": "sha512-ztLg2OpM3HZIWzkQYjQER1inZuhbt79fBwZxc9bPXzsvqY+7RYI3dCZLw3CynYd9s4YltdrTbmSyh4xQSHexDQ==", + "dependencies": { + "@tanstack/table-core": "8.11.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.2.tgz", + "integrity": "sha512-rR0VEQOtr0ARLvaNLaSQnt2BVwOp0OavOUA0LcZ3N45tLYXc4sXruNv8kJ7R7+5W1CrzGha217tzjBG83CpoMQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -6151,17 +6183,14 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6178,7 +6207,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6190,13 +6218,11 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6213,7 +6239,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6228,13 +6253,11 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6250,7 +6273,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6262,7 +6284,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6275,7 +6296,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6288,7 +6308,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6302,7 +6321,6 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6349,7 +6367,6 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6368,7 +6385,6 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6380,7 +6396,6 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6392,7 +6407,6 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6411,7 +6425,6 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6427,7 +6440,6 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6442,7 +6454,6 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6457,7 +6468,6 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6466,7 +6476,6 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6475,7 +6484,6 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6493,7 +6501,6 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6505,7 +6512,6 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6517,7 +6523,6 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6533,17 +6538,14 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6555,7 +6557,6 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", - "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6564,7 +6565,6 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6578,7 +6578,6 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6591,7 +6590,6 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6600,7 +6598,6 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6613,7 +6610,6 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6622,7 +6618,6 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6634,7 +6629,6 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6647,7 +6641,6 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6656,7 +6649,6 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6671,19 +6663,16 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6696,13 +6685,11 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -6722,7 +6709,6 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6737,7 +6723,6 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6746,7 +6731,6 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6755,7 +6739,6 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", - "dev": true, "funding": [ { "type": "github", @@ -6779,7 +6762,6 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6788,7 +6770,6 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6811,7 +6792,6 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6823,7 +6803,6 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6832,7 +6811,6 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", - "dev": true, "funding": [ { "type": "github", @@ -6847,7 +6825,6 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -6859,7 +6836,6 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6868,7 +6844,6 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6881,7 +6856,6 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6896,7 +6870,6 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6905,7 +6878,6 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6914,7 +6886,6 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6926,13 +6897,11 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", - "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -6941,7 +6910,6 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6954,19 +6922,16 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6980,7 +6945,6 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6995,7 +6959,6 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7007,7 +6970,6 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7024,13 +6986,11 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7042,13 +7002,11 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", - "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7057,29 +7015,24 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7088,13 +7041,11 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7103,7 +7054,6 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7112,13 +7062,11 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7127,7 +7075,6 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7143,7 +7090,6 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7155,13 +7101,11 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7180,7 +7124,6 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7202,13 +7145,11 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7220,13 +7161,11 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7238,16 +7177,13 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7257,7 +7193,6 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -7277,7 +7212,6 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7289,7 +7223,6 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7298,7 +7231,6 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7307,7 +7239,6 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7316,7 +7247,6 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7334,13 +7264,11 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7349,7 +7277,6 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7361,7 +7288,6 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7373,7 +7299,6 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7382,19 +7307,16 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7412,7 +7334,6 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7421,7 +7342,6 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7430,7 +7350,6 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", - "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7439,19 +7358,16 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7464,7 +7380,6 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7484,7 +7399,6 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7506,7 +7420,6 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7518,7 +7431,6 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7531,7 +7443,6 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7544,7 +7455,6 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7559,7 +7469,6 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7578,7 +7487,6 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7590,7 +7498,6 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7603,7 +7510,6 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7619,7 +7525,6 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7628,7 +7533,6 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7650,7 +7554,6 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7665,7 +7568,6 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7674,7 +7576,6 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7686,7 +7587,6 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7698,7 +7598,6 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7715,7 +7614,6 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7727,7 +7625,6 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7739,7 +7636,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7749,7 +7645,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7761,7 +7656,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7773,7 +7667,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7785,7 +7678,6 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7797,7 +7689,6 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7809,7 +7700,6 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7822,7 +7712,6 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7834,7 +7723,6 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7846,13 +7734,11 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7861,7 +7747,6 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7870,7 +7755,6 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7894,7 +7778,6 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7909,7 +7792,6 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7924,7 +7806,6 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7933,7 +7814,6 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7945,7 +7825,6 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7957,7 +7836,6 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7966,7 +7844,6 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7981,7 +7858,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7993,7 +7869,6 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8008,7 +7883,6 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8021,7 +7895,6 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8039,7 +7912,6 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -8048,7 +7920,6 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8063,7 +7934,6 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8078,7 +7948,6 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8110,7 +7979,6 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8124,7 +7992,6 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8133,7 +8000,6 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8149,7 +8015,6 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8162,7 +8027,6 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8171,7 +8035,6 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8180,7 +8043,6 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8189,7 +8051,6 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8198,13 +8059,11 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8217,7 +8076,6 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8229,7 +8087,6 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", - "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8237,7 +8094,6 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8249,7 +8105,6 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8258,7 +8113,6 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8273,7 +8127,6 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8286,7 +8139,6 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8302,7 +8154,6 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8311,7 +8162,6 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -8331,14 +8181,11 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "inBundle": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8353,7 +8200,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8365,13 +8211,11 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8383,7 +8227,6 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8392,7 +8235,6 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8404,7 +8246,6 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8419,7 +8260,6 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8429,7 +8269,6 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8443,7 +8282,6 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8453,13 +8291,11 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8469,13 +8305,11 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", - "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8487,7 +8321,6 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8496,7 +8329,6 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8511,7 +8343,6 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8525,7 +8356,6 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8538,7 +8368,6 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8550,7 +8379,6 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8562,7 +8390,6 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8579,7 +8406,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8591,7 +8417,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8603,7 +8428,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8612,19 +8436,16 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8633,7 +8454,6 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8647,7 +8467,6 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8659,7 +8478,6 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8671,13 +8489,11 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8687,7 +8503,6 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8699,13 +8514,11 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8714,7 +8527,6 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8729,7 +8541,6 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8738,7 +8549,6 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8747,7 +8557,6 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8765,7 +8574,6 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8782,7 +8590,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8794,7 +8601,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8806,13 +8612,11 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8829,7 +8633,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8844,7 +8647,6 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8857,7 +8659,6 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index c7dcb01..88d7d41 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.17.0", + "@tanstack/react-table": "^8.11.2", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", From 4ef568152dada4d8164726c37bbc4db09b5906a0 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 17:14:08 -0700 Subject: [PATCH 116/315] build(shadcn): add component `DataTable` ## what - add component `DataTable` ## how - obtained from - https://ui.shadcn.com/docs/components/data-table#datatable--component ## why - this component was designed for one use, but this component will be used in multiple pages, so it makes sense to place it `src/components/ui/` - check end of section of the link above ## where - ./src/components/ui/data-table.tsx ## usage --- src/components/ui/data-table.tsx | 81 ++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/components/ui/data-table.tsx diff --git a/src/components/ui/data-table.tsx b/src/components/ui/data-table.tsx new file mode 100644 index 0000000..f175758 --- /dev/null +++ b/src/components/ui/data-table.tsx @@ -0,0 +1,81 @@ +"use client" + +import { + ColumnDef, + flexRender, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table" + +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table" + +interface DataTableProps { + columns: ColumnDef[] + data: TData[] +} + +export function DataTable({ + columns, + data, +}: DataTableProps) { + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + }) + + return ( +
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+ ) +} + From 730fbb3152cd8d9855d56baeef3dc485ad3bfc57 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 17:17:40 -0700 Subject: [PATCH 117/315] chore(shadcn): add columns properties for `DataTable` component ## what - add columns properties for `DataTable` component - define which columns to display on the DataTable ## how - check - https://ui.shadcn.com/docs/components/data-table#column-definitions ## why - this will determine which columns to display ## where - ./src/app/problems/components/data-table/columns.tsx ## usage --- .../components/data-table/columns.tsx | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/app/problems/components/data-table/columns.tsx diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx new file mode 100644 index 0000000..7e99ed8 --- /dev/null +++ b/src/app/problems/components/data-table/columns.tsx @@ -0,0 +1,22 @@ +"use client" + +import { ColumnDef } from "@tanstack/react-table" + +// This type is used to define the shape of our data. +// You can use a Zod schema here if you want. +export type Payment = { + num: string + title: string +} + +export const columns: ColumnDef[] = [ + { + accessorKey: "num", + header: "Problem number", + }, + { + accessorKey: "title", + header: "Problem title", + }, +] + From f6e0b1fd54af12d918ba04809c0843f7aab88767 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 17:23:33 -0700 Subject: [PATCH 118/315] chore(hooks): add react-query hook to fetch all problems ## what - add react-query hook to fetch all problems ## how - fetch from api endpoint `/api/problems` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 0a84ef8..4502133 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -8,6 +8,10 @@ import { Submission } from "@/types"; */ export enum queryKey { polling = "live-polling", + /** + * Reacy query key for fetching all problems + */ + allProblems = "all-problems", } /** @@ -28,3 +32,15 @@ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { staleTime: fetchInterval }); }; + +/** + * Fetch all problems + */ +export const useFetchProblems = () => { + return useQuery({ + queryKey: [queryKey.allProblems], + queryFn: async () => axios.get("/api/problems").then((res) => res.data), + refetchOnWindowFocus: false + }); +}; + From 401ae1c94c4c48299ed8b38e2d451b539f95a87e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 17:19:24 -0700 Subject: [PATCH 119/315] feat(page:problems): display all problems using `DataTable` component ## what - display all problems using `DataTable` component ## how - using component `DataTable` - check - https://ui.shadcn.com/docs/components/data-table ## why - the `DataTable` will later be changed to be able to - search by problem number or problem title - add problem to favourites - remove problem to favourites - view/hide columns - add pagination ## where - ./src/app/problems/page.tsx ## usage --- src/app/problems/page.tsx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/app/problems/page.tsx diff --git a/src/app/problems/page.tsx b/src/app/problems/page.tsx new file mode 100644 index 0000000..aa86dd8 --- /dev/null +++ b/src/app/problems/page.tsx @@ -0,0 +1,27 @@ +"use client"; + +import { DataTable } from "@/components/ui/data-table"; +import { columns } from "@/app/problems/components/data-table/columns"; +import { useFetchProblems } from "@/hooks"; + +const ProblemsPage = () => { + const { data, isLoading, isError } = useFetchProblems(); + + if (isLoading) { + return
Fetching data
; + } + + if (isError) { + return
Error fetching data
; + } + + console.log(data) + + return ( +
+ +
+ ) +}; + +export default ProblemsPage; From 2c7df8e66f51d9c1e567b61dfa745e96b64bacbd Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 20:05:11 -0700 Subject: [PATCH 120/315] feat(shadcn): add pagination to `DataTable` component ## what - add pagination to `DataTable` component ## how - check - https://ui.shadcn.com/docs/components/data-table#pagination ## why - to not load the a huge list of elements at once - lighter on memory ## where - ./src/components/ui/data-table.tsx ## usage --- src/components/ui/data-table.tsx | 107 +++++++++++++++++++------------ 1 file changed, 65 insertions(+), 42 deletions(-) diff --git a/src/components/ui/data-table.tsx b/src/components/ui/data-table.tsx index f175758..0e63685 100644 --- a/src/components/ui/data-table.tsx +++ b/src/components/ui/data-table.tsx @@ -4,9 +4,11 @@ import { ColumnDef, flexRender, getCoreRowModel, + getPaginationRowModel, useReactTable, } from "@tanstack/react-table" +import { Button } from "@/components/ui/button" import { Table, TableBody, @@ -29,52 +31,73 @@ export function DataTable({ data, columns, getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), }) return ( -
- - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - {header.isPlaceholder - ? null - : flexRender( - header.column.columnDef.header, - header.getContext() - )} - - ) - })} - - ))} - - - {table.getRowModel().rows?.length ? ( - table.getRowModel().rows.map((row) => ( - - {row.getVisibleCells().map((cell) => ( - - {flexRender(cell.column.columnDef.cell, cell.getContext())} - - ))} +
+
+
+ + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} - )) - ) : ( - - - No results. - - - )} - -
+ ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) + ) : ( + + + No results. + + + )} + +

_{hq^E7^Mpe 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 voBpz@zWYQ(rh)$jrSDc9 literal 0 HcmV?d00001 From f74b2ebfa2d0445236f19b026c419fe3c4f0f718 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 11:32:34 -0700 Subject: [PATCH 101/315] docs(readme): display screenshot of `home` page ## what - display screenshot of `home` page ## how ## why ## where - ./README.md ## usage --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index c403366..050e8b8 100644 --- a/README.md +++ b/README.md @@ -34,3 +34,13 @@ You can check out [the Next.js GitHub repository](https://github.com/vercel/next The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. + +## Screenshots + +

+
+
+ + +
) } From 55f98b40feea5fcc0651e41b32ae808f571fb8d3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 20:17:26 -0700 Subject: [PATCH 121/315] feat(shadcn): add column scrolling to `DataTable` component ## what - add column scrolling to `DataTable` component ## how - check - https://ui.shadcn.com/docs/components/data-table#sorting ## why - allows a column to be sorted ## where - ./src/components/ui/data-table.tsx ## usage --- src/components/ui/data-table.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/ui/data-table.tsx b/src/components/ui/data-table.tsx index 0e63685..a99dd1f 100644 --- a/src/components/ui/data-table.tsx +++ b/src/components/ui/data-table.tsx @@ -1,10 +1,13 @@ "use client" +import { useState } from "react" import { ColumnDef, + SortingState, flexRender, getCoreRowModel, getPaginationRowModel, + getSortedRowModel, useReactTable, } from "@tanstack/react-table" @@ -27,11 +30,18 @@ export function DataTable({ columns, data, }: DataTableProps) { + const [sorting, setSorting] = useState([]) + const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + state: { + sorting, + }, }) return ( From 9b1ab5ddbca663b0778f25c36a58ab54efaed41d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 20:20:32 -0700 Subject: [PATCH 122/315] feat(components): add column properties to be sortable `DataTable` component ## what - add column properties to be sortable `DataTable` component ## how - check - https://ui.shadcn.com/docs/components/data-table#make-header-cell-sortable ## why - to have the ability to sort the table as you please ## where - ./src/app/problems/components/data-table/columns.tsx ## usage --- .../components/data-table/columns.tsx | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx index 7e99ed8..9ad4912 100644 --- a/src/app/problems/components/data-table/columns.tsx +++ b/src/app/problems/components/data-table/columns.tsx @@ -1,6 +1,9 @@ "use client" import { ColumnDef } from "@tanstack/react-table" +import { ArrowUpDown, MoreHorizontal } from "lucide-react" + +import { Button } from "@/components/ui/button" // This type is used to define the shape of our data. // You can use a Zod schema here if you want. @@ -12,11 +15,31 @@ export type Payment = { export const columns: ColumnDef[] = [ { accessorKey: "num", - header: "Problem number", + header: ({ column }) => { + return ( + + ) + }, }, { accessorKey: "title", - header: "Problem title", + header: ({ column }) => { + return ( + + ) + }, }, ] From c623e43515f9ed918da1afd6537b81a26cb028f4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 20:59:20 -0700 Subject: [PATCH 123/315] feat(shadcn): add column visibility toggle for `DataTable` component ## what - add column visibility toggle for `DataTable` component ## how - check - https://ui.shadcn.com/docs/components/data-table#visibility ## why - this will allow the usage of toggling columns visibility ## where - ./src/components/ui/data-table.tsx ## usage --- src/components/ui/data-table.tsx | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/components/ui/data-table.tsx b/src/components/ui/data-table.tsx index a99dd1f..f66efb7 100644 --- a/src/components/ui/data-table.tsx +++ b/src/components/ui/data-table.tsx @@ -4,6 +4,7 @@ import { useState } from "react" import { ColumnDef, SortingState, + VisibilityState, flexRender, getCoreRowModel, getPaginationRowModel, @@ -12,6 +13,12 @@ import { } from "@tanstack/react-table" import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" import { Table, TableBody, @@ -31,6 +38,7 @@ export function DataTable({ data, }: DataTableProps) { const [sorting, setSorting] = useState([]) + const [columnVisibility, setColumnVisibility] = useState({}) const table = useReactTable({ data, @@ -39,13 +47,45 @@ export function DataTable({ getPaginationRowModel: getPaginationRowModel(), onSortingChange: setSorting, getSortedRowModel: getSortedRowModel(), + onColumnVisibilityChange: setColumnVisibility, state: { sorting, + columnVisibility, }, }) return (
+
+ + + + + + {table + .getAllColumns() + .filter( + (column) => column.getCanHide() + ) + .map((column) => { + return ( + + column.toggleVisibility(!!value) + } + > + {column.id} + + ) + })} + + +
From 2119ca730e8a77c01a16962d74e62d51c1f7b52a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 21:24:42 -0700 Subject: [PATCH 124/315] build(npm): add package `@radix-ui/react-icons` ## what - add package `@radix-ui/react-icons` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 9 +++++++++ package.json | 1 + 2 files changed, 10 insertions(+) diff --git a/package-lock.json b/package-lock.json index 6dd80e3..71407d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0-development.2", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.17.0", @@ -1042,6 +1043,14 @@ } } }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, "node_modules/@radix-ui/react-id": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", diff --git a/package.json b/package.json index 88d7d41..3d2b85b 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.17.0", From 08aad515d53d52fe415da7a37a9a8b9c1fda170e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 21:26:38 -0700 Subject: [PATCH 125/315] build(shadcn): add component `Select` ## what - add component `Select` ## how - run command npx shadcn-ui@latest add select ## why ## where - ./package-lock.json - ./package.json - ./src/components/ui/select.tsx ## usage --- package-lock.json | 92 ++++++++++++++++++++ package.json | 1 + src/components/ui/select.tsx | 160 +++++++++++++++++++++++++++++++++++ 3 files changed, 253 insertions(+) create mode 100644 src/components/ui/select.tsx diff --git a/package-lock.json b/package-lock.json index 71407d1..a8e4fd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.17.0", @@ -837,6 +838,14 @@ "node": ">=12" } }, + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, "node_modules/@radix-ui/primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", @@ -1242,6 +1251,49 @@ } } }, + "node_modules/@radix-ui/react-select": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", + "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", @@ -1330,6 +1382,23 @@ } } }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-rect": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", @@ -1366,6 +1435,29 @@ } } }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/rect": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", diff --git a/package.json b/package.json index 3d2b85b..c82bda5 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.0", "@tanstack/react-query-devtools": "^5.17.0", diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx new file mode 100644 index 0000000..cbe5a36 --- /dev/null +++ b/src/components/ui/select.tsx @@ -0,0 +1,160 @@ +"use client" + +import * as React from "react" +import * as SelectPrimitive from "@radix-ui/react-select" +import { Check, ChevronDown, ChevronUp } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Select = SelectPrimitive.Root + +const SelectGroup = SelectPrimitive.Group + +const SelectValue = SelectPrimitive.Value + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + span]:line-clamp-1", + className + )} + {...props} + > + {children} + + + + +)) +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollDownButton.displayName = + SelectPrimitive.ScrollDownButton.displayName + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = "popper", ...props }, ref) => ( + + + + + {children} + + + + +)) +SelectContent.displayName = SelectPrimitive.Content.displayName + +const SelectLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectLabel.displayName = SelectPrimitive.Label.displayName + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + + {children} + +)) +SelectItem.displayName = SelectPrimitive.Item.displayName + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectSeparator.displayName = SelectPrimitive.Separator.displayName + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, + SelectScrollUpButton, + SelectScrollDownButton, +} From 2500aa18a838a699d2a6b3e2314830e992bc31f2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 21:31:24 -0700 Subject: [PATCH 126/315] feat(shadcn): add `DataTablePagination` component ## what - add `DataTablePagination` component ## how - obtained from - https://github.com/shadcn-ui/ui/blob/main/apps/www/app/examples/tasks/components/data-table-pagination.tsx ## why - the table pagination is getting complicated, so it's better to move it to it's own file ## where - ./src/components/ui/data-table/pagination.tsx ## usage --- src/components/ui/data-table/pagination.tsx | 97 +++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/components/ui/data-table/pagination.tsx diff --git a/src/components/ui/data-table/pagination.tsx b/src/components/ui/data-table/pagination.tsx new file mode 100644 index 0000000..441ecf8 --- /dev/null +++ b/src/components/ui/data-table/pagination.tsx @@ -0,0 +1,97 @@ +import { + ChevronLeftIcon, + ChevronRightIcon, + DoubleArrowLeftIcon, + DoubleArrowRightIcon, +} from "@radix-ui/react-icons" +import { Table } from "@tanstack/react-table" + +import { Button } from "@/components/ui/button" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" + +interface DataTablePaginationProps { + table: Table +} + +export function DataTablePagination({ + table, +}: DataTablePaginationProps) { + return ( +
+ {/*
*/} + {/* {table.getFilteredSelectedRowModel().rows.length} of{" "} */} + {/* {table.getFilteredRowModel().rows.length} row(s) selected. */} + {/*
*/} +
+
+

Rows per page

+ +
+
+ Page {table.getState().pagination.pageIndex + 1} of{" "} + {table.getPageCount()} +
+
+ + + + +
+
+
+ ) +} From cc9afba547a57f0f8dec641642da3d99f7a00aea Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 21:33:07 -0700 Subject: [PATCH 127/315] refactor(shadcn): use component `DataTablePagination` in `DataTable` component ## what - use component `DataTablePagination` in `DataTable` component ## how - obtained from - https://github.com/shadcn-ui/ui/blob/main/apps/www/app/examples/tasks/components/data-table.tsx#L123 ## why - the table pagination is getting complicated, so it's better to move it to it's own file ## where - ./src/components/ui/data-table.tsx ## usage --- src/components/ui/data-table.tsx | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/components/ui/data-table.tsx b/src/components/ui/data-table.tsx index f66efb7..15c30a2 100644 --- a/src/components/ui/data-table.tsx +++ b/src/components/ui/data-table.tsx @@ -27,6 +27,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table" +import { DataTablePagination } from "@/components/ui/data-table/pagination" interface DataTableProps { columns: ColumnDef[] @@ -130,24 +131,7 @@ export function DataTable({
-
- - -
+
) } From 29fa0e2e377687c4e41f03e78670e1ad1d66b381 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 21:39:32 -0700 Subject: [PATCH 128/315] chore(shadcn): move `DataTable` to `./src/components/ui/data-table/index.tsx` ## what - move `DataTable` to `./src/components/ui/data-table/index.tsx` ## how ## why - place data-table related to it's own folder ## where - ./src/components/ui/data-table.tsx -> ./src/components/ui/data-table/index.tsx ## usage --- src/components/ui/{data-table.tsx => data-table/index.tsx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/components/ui/{data-table.tsx => data-table/index.tsx} (100%) diff --git a/src/components/ui/data-table.tsx b/src/components/ui/data-table/index.tsx similarity index 100% rename from src/components/ui/data-table.tsx rename to src/components/ui/data-table/index.tsx From e9c16f524f70fd656bab601f76c97f8e72eef0e2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 21:58:45 -0700 Subject: [PATCH 129/315] feat(components): add a Link to the problem page in `DataTable` for `/problems` ## what - add a Link to the problem page in `DataTable` for `/problems` ## how ## why - need to be able to go the problem page for a specific problem number ## where - ./src/app/problems/components/data-table/columns.tsx ## usage --- .../components/data-table/columns.tsx | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx index 9ad4912..6e73792 100644 --- a/src/app/problems/components/data-table/columns.tsx +++ b/src/app/problems/components/data-table/columns.tsx @@ -2,6 +2,7 @@ import { ColumnDef } from "@tanstack/react-table" import { ArrowUpDown, MoreHorizontal } from "lucide-react" +import Link from "next/link"; import { Button } from "@/components/ui/button" @@ -24,6 +25,18 @@ export const columns: ColumnDef[] = [ Problem number + ); + }, + cell: ({ row }) => { + return ( +
+ + {row.getValue("num")} + +
) }, }, @@ -38,6 +51,18 @@ export const columns: ColumnDef[] = [ Problem Title + ); + }, + cell: ({ row }) => { + return ( +
+ + {row.getValue("title")} + +
) }, }, From f126918a80e263a5d78d418960d9fc13c31587a1 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 22:03:01 -0700 Subject: [PATCH 130/315] chore(components): use `Problem` as a type in DataTable columns ## what - use `Problem` as a type in DataTable columns ## how ## why - was using incorrect type for the column ## where - ./src/app/problems/components/data-table/columns.tsx ## usage --- src/app/problems/components/data-table/columns.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx index 6e73792..f0fd0b4 100644 --- a/src/app/problems/components/data-table/columns.tsx +++ b/src/app/problems/components/data-table/columns.tsx @@ -5,15 +5,10 @@ import { ArrowUpDown, MoreHorizontal } from "lucide-react" import Link from "next/link"; import { Button } from "@/components/ui/button" +import { Problem } from "@/types"; -// This type is used to define the shape of our data. -// You can use a Zod schema here if you want. -export type Payment = { - num: string - title: string -} -export const columns: ColumnDef[] = [ +export const columns: ColumnDef[] = [ { accessorKey: "num", header: ({ column }) => { From 5e22c8a58c823046623e0a01a91ef40eb5b54770 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 31 Dec 2023 22:04:11 -0700 Subject: [PATCH 131/315] style(components): format code ## what - format code ## how ## why ## where - ./src/app/problems/components/data-table/columns.tsx ## usage --- .../components/data-table/columns.tsx | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx index f0fd0b4..1429150 100644 --- a/src/app/problems/components/data-table/columns.tsx +++ b/src/app/problems/components/data-table/columns.tsx @@ -1,13 +1,12 @@ -"use client" +"use client"; -import { ColumnDef } from "@tanstack/react-table" -import { ArrowUpDown, MoreHorizontal } from "lucide-react" +import { ColumnDef } from "@tanstack/react-table"; +import { ArrowUpDown, MoreHorizontal } from "lucide-react"; import Link from "next/link"; -import { Button } from "@/components/ui/button" +import { Button } from "@/components/ui/button"; import { Problem } from "@/types"; - export const columns: ColumnDef[] = [ { accessorKey: "num", @@ -25,14 +24,11 @@ export const columns: ColumnDef[] = [ cell: ({ row }) => { return (
- + {row.getValue("num")}
- ) + ); }, }, { @@ -51,15 +47,11 @@ export const columns: ColumnDef[] = [ cell: ({ row }) => { return (
- + {row.getValue("title")}
- ) + ); }, }, -] - +]; From ee772bc27f44d95f8970251c9578c453c0a8136c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 1 Jan 2024 09:48:03 -0700 Subject: [PATCH 132/315] build(shadcn): add component `Input` ## what - add component `Input` ## how - run command npx shadcn-ui@latest add input ## why ## where - ./src/components/ui/input.tsx ## usage --- src/components/ui/input.tsx | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/components/ui/input.tsx diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx new file mode 100644 index 0000000..677d05f --- /dev/null +++ b/src/components/ui/input.tsx @@ -0,0 +1,25 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } From 5ec2df1db765eba419fad4233dc14cf508c1ced5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 1 Jan 2024 09:55:37 -0700 Subject: [PATCH 133/315] feat(shadcn): add ability to filter any column in `DataTable` component ## what - add ability to filter any column in `DataTable` component ## how - obtained from - https://youtu.be/ZG2_vPlQA8Q?si=4AvVNavj5ih1A8tQ ## why - this will allow the ability to filter by any column ## where - ./src/components/ui/data-table/index.tsx ## usage --- src/components/ui/data-table/index.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/components/ui/data-table/index.tsx b/src/components/ui/data-table/index.tsx index 15c30a2..3383dc8 100644 --- a/src/components/ui/data-table/index.tsx +++ b/src/components/ui/data-table/index.tsx @@ -7,12 +7,14 @@ import { VisibilityState, flexRender, getCoreRowModel, + getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table" import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" import { DropdownMenu, DropdownMenuCheckboxItem, @@ -40,6 +42,7 @@ export function DataTable({ }: DataTableProps) { const [sorting, setSorting] = useState([]) const [columnVisibility, setColumnVisibility] = useState({}) + const [globalFilter, setGlobalFilter] = useState("") const table = useReactTable({ data, @@ -49,15 +52,24 @@ export function DataTable({ onSortingChange: setSorting, getSortedRowModel: getSortedRowModel(), onColumnVisibilityChange: setColumnVisibility, + getFilteredRowModel: getFilteredRowModel(), + onGlobalFilterChange: setGlobalFilter, state: { sorting, columnVisibility, + globalFilter }, }) return (
+ setGlobalFilter(event.target.value) } + className="max-w-sm" + /> + )} +
+ Toggle columns + {table .getAllColumns() .filter( From ae7cedc515d76ef34f79204a04fa32e842974413 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 1 Jan 2024 11:00:51 -0700 Subject: [PATCH 136/315] chore(shadcn:data-table): use custom string in DataTable dropdown ## what - use custom string in DataTable dropdown ## how - add custom property `meta` in columns.tsx - check https://tanstack.com/table/v8/docs/api/core/column-def#meta ## why - add better string to display in dropdown - before it was displaying the column ID ## where - ./src/app/problems/components/data-table/columns.tsx - ./src/components/ui/data-table/index.tsx ## usage --- src/app/problems/components/data-table/columns.tsx | 6 ++++++ src/components/ui/data-table/index.tsx | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx index 1429150..8c9d68f 100644 --- a/src/app/problems/components/data-table/columns.tsx +++ b/src/app/problems/components/data-table/columns.tsx @@ -10,6 +10,9 @@ import { Problem } from "@/types"; export const columns: ColumnDef[] = [ { accessorKey: "num", + meta: { + headerTitle: "Problem number" + }, header: ({ column }) => { return (
) } - From 0ac4e71ddb03f7addfdc981a6db3fff304e043e3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 1 Jan 2024 17:01:02 -0700 Subject: [PATCH 137/315] chore(components:data-table): display link as a button ## what - display link as a button ## how ## why - makes it more apparent that there is a link available ## where - ./src/app/problems/components/data-table/columns.tsx ## usage --- .../problems/components/data-table/columns.tsx | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx index 8c9d68f..7557777 100644 --- a/src/app/problems/components/data-table/columns.tsx +++ b/src/app/problems/components/data-table/columns.tsx @@ -4,7 +4,7 @@ import { ColumnDef } from "@tanstack/react-table"; import { ArrowUpDown, MoreHorizontal } from "lucide-react"; import Link from "next/link"; -import { Button } from "@/components/ui/button"; +import { Button, buttonVariants } from "@/components/ui/button"; import { Problem } from "@/types"; export const columns: ColumnDef[] = [ @@ -26,11 +26,9 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( -
- - {row.getValue("num")} - -
+ + {row.getValue("num")} + ); }, }, @@ -52,11 +50,9 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( -
- - {row.getValue("title")} - -
+ + {row.getValue("title")} + ); }, }, From ffbe8da714d033515d0ddfe5b06954b3bc2bfd94 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 12:33:23 -0700 Subject: [PATCH 138/315] chore(pages:problems): add page title ## what - add page title ## how ## why ## where - ./src/app/problems/page.tsx ## usage --- src/app/problems/page.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/problems/page.tsx b/src/app/problems/page.tsx index aa86dd8..7fa5c8c 100644 --- a/src/app/problems/page.tsx +++ b/src/app/problems/page.tsx @@ -19,6 +19,7 @@ const ProblemsPage = () => { return (
+

All Problems

) From dbc834fe5b2abda3487c6d4546e7973e2052400b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 12:36:12 -0700 Subject: [PATCH 139/315] chore(shadcn:data-table): display total number of items in the DataTable ## what - display total number of items in the DataTable ## how ## why - to give the user an idea how many items are there in a table ## where - ./src/components/ui/data-table/pagination.tsx ## usage --- src/components/ui/data-table/pagination.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/ui/data-table/pagination.tsx b/src/components/ui/data-table/pagination.tsx index 441ecf8..bd1181e 100644 --- a/src/components/ui/data-table/pagination.tsx +++ b/src/components/ui/data-table/pagination.tsx @@ -24,10 +24,10 @@ export function DataTablePagination({ }: DataTablePaginationProps) { return (
- {/*
*/} - {/* {table.getFilteredSelectedRowModel().rows.length} of{" "} */} - {/* {table.getFilteredRowModel().rows.length} row(s) selected. */} - {/*
*/} +
+ {/* {table.getFilteredSelectedRowModel().rows.length} of{" "} */} + Total {table.getFilteredRowModel().rows.length} item(s). +

Rows per page

From 165aa6cf119bc2264698be5088b78ee73a30946a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 13:18:37 -0700 Subject: [PATCH 140/315] feat(shadcn:data-table): add column header component for DataTable ## what - add column header component for DataTable - sort column - ascending - descending - default (sort by it's original order) - hide column ## how - obtained from - https://github.com/shadcn-ui/ui/blob/main/apps/www/app/examples/tasks/components/data-table-column-header.tsx ## why - this will be used by DataTable to render a more advanced column header - this is opt-in - this can only be used in a `column.tsx` file - check - https://github.com/shadcn-ui/ui/blob/fb614ac2921a84b916c56e9091aa0ae8e129c565/apps/www/app/examples/tasks/components/columns.tsx#L38-L46C4 ## where - ./src/components/ui/data-table/column-header.tsx ## usage --- .../ui/data-table/column-header.tsx | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/components/ui/data-table/column-header.tsx diff --git a/src/components/ui/data-table/column-header.tsx b/src/components/ui/data-table/column-header.tsx new file mode 100644 index 0000000..ff4f4b5 --- /dev/null +++ b/src/components/ui/data-table/column-header.tsx @@ -0,0 +1,78 @@ +import { + ArrowDownIcon, + ArrowUpIcon, + CaretSortIcon, + EyeNoneIcon, +} from "@radix-ui/react-icons" +import { SeparatorHorizontal } from "lucide-react"; +import { Column } from "@tanstack/react-table" + +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" + +interface DataTableColumnHeaderProps + extends React.HTMLAttributes { + column: Column + title: string +} + +export function DataTableColumnHeader({ + column, + title, + className, +}: DataTableColumnHeaderProps) { + if (!column.getCanSort()) { + return
{title}
+ } + + return ( +
+ + + + + + column.toggleSorting(false)}> + + Ascending + + column.toggleSorting(true)}> + + Descending + + column.clearSorting()}> + + Default + + + column.toggleVisibility(false)}> + + Hide Column + + + +
+ ) +} From 59b54441713d23944389b601340b1a2b9c77c589 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 13:22:21 -0700 Subject: [PATCH 141/315] refactor(components:data-table): use `DataTableColumnHeader` to render column header ## what - use `DataTableColumnHeader` to render column header ## how ## why - this will add a more advanced form of column header options - sort column - ascending - descending - default - hide column ## where - ./src/app/problems/components/data-table/columns.tsx ## usage --- .../problems/components/data-table/columns.tsx | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/app/problems/components/data-table/columns.tsx b/src/app/problems/components/data-table/columns.tsx index 7557777..e07f2a3 100644 --- a/src/app/problems/components/data-table/columns.tsx +++ b/src/app/problems/components/data-table/columns.tsx @@ -5,6 +5,7 @@ import { ArrowUpDown, MoreHorizontal } from "lucide-react"; import Link from "next/link"; import { Button, buttonVariants } from "@/components/ui/button"; +import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; import { Problem } from "@/types"; export const columns: ColumnDef[] = [ @@ -15,13 +16,7 @@ export const columns: ColumnDef[] = [ }, header: ({ column }) => { return ( - + ); }, cell: ({ row }) => { @@ -39,13 +34,7 @@ export const columns: ColumnDef[] = [ }, header: ({ column }) => { return ( - + ); }, cell: ({ row }) => { From f597394e26a579396c193e805e4186451ff4233e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 13:25:07 -0700 Subject: [PATCH 142/315] chore(pages:problems): remove unused code ## what - remove unused code ## how ## why ## where - ./src/app/problems/page.tsx ## usage --- src/app/problems/page.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/problems/page.tsx b/src/app/problems/page.tsx index 7fa5c8c..7ca9601 100644 --- a/src/app/problems/page.tsx +++ b/src/app/problems/page.tsx @@ -15,8 +15,6 @@ const ProblemsPage = () => { return
Error fetching data
; } - console.log(data) - return (

All Problems

From b745cc77d7e28d618c46b783d0d8ced28ec21b47 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 14:52:38 -0700 Subject: [PATCH 143/315] chore(shadcn:data-table): disable word-wrapping for pagination number ## what - disable word-wrapping for pagination number - show `Page 'i' of 'x'` in the same line ## how ## why ## where - ./src/components/ui/data-table/pagination.tsx ## usage --- src/components/ui/data-table/pagination.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ui/data-table/pagination.tsx b/src/components/ui/data-table/pagination.tsx index bd1181e..0833b20 100644 --- a/src/components/ui/data-table/pagination.tsx +++ b/src/components/ui/data-table/pagination.tsx @@ -49,7 +49,7 @@ export function DataTablePagination({
-
+
Page {table.getState().pagination.pageIndex + 1} of{" "} {table.getPageCount()}
From 3851747fdebe98852d772742ee3fc570fddc4da2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 14:55:46 -0700 Subject: [PATCH 144/315] feat(shadcn:data-table): add loading component for DataTable ## what - add loading component for DataTable ## how ## why - will be used to display when fetching data ## where - ./src/components/ui/data-table/loading.tsx ## usage --- src/components/ui/data-table/loading.tsx | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/components/ui/data-table/loading.tsx diff --git a/src/components/ui/data-table/loading.tsx b/src/components/ui/data-table/loading.tsx new file mode 100644 index 0000000..e4ee1da --- /dev/null +++ b/src/components/ui/data-table/loading.tsx @@ -0,0 +1,59 @@ +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { Skeleton } from "@/components/ui/skeleton"; +import { Input } from "../input"; + +type Props = { + numColumns?: number; + numRows?: number; +}; + +const DataTableLoading = ({ numColumns = 5, numRows = 5 }: Props) => { + return ( +
+
+
+ +
+ +
+ + + + {[...Array(numColumns)].map((_, tableColsIndex) => ( + + + + ))} + + + + {[...Array(numRows)].map((_, i) => { + return ( + + {[...Array(numColumns)].map((_, k) => ( + + + + ))} + + ); + })} + +
+
+ +
+ +
+
+ ); +}; + +export default DataTableLoading; From 7f94cfd7cbda07735701aa98cfc166ebeb890361 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 15:24:04 -0700 Subject: [PATCH 145/315] style(css): add css classnames ## what - add css classnames - nav-link - highlight the link on hover - active-nav-link - highlight the link. (used when the link and current page are the same) ## how ## why - these two nav-links will be used in `Navbar` component to - highlight a link on hover - highlight a link when the current path url is the same as the nav link url ## where - ./src/app/globals.css ## usage --- src/app/globals.css | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/app/globals.css b/src/app/globals.css index 0b46ea1..319770a 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -73,4 +73,12 @@ body { @apply bg-background text-foreground; } -} \ No newline at end of file +} + +.nav-link { + @apply rounded-lg p-2 hover:underline hover:dark:bg-zinc-800 hover:bg-zinc-200 +} + +.active-nav-link { + @apply rounded-lg p-2 underline dark:bg-zinc-800 bg-zinc-200 text-primary +} From b39fca515ba258534ab3eb0182e285db29c59d7c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 15:52:22 -0700 Subject: [PATCH 146/315] chore(components:navbar): add navbar link to `/problems` page ## what - add navbar link to `/problems` page ## how ## why ## where - ./src/components/navbar.tsx ## usage --- src/components/navbar.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index b8aaed9..43584c5 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -3,7 +3,10 @@ import Link from "next/link"; import { cn } from "@/lib/utils"; import { ModeToggle } from "@/components/darkmode-toggle"; -const links = [{ label: "Uva uHunt", href: "/" }]; +const links = [ + { label: "Uva uHunt", href: "/" }, + { label: "All problems", href: "/problems" }, +]; const Navbar = ({ className, ...props }: React.HTMLAttributes) => { return ( From 1c21c75854c6374195b82f45b6108a498897f553 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 16:17:35 -0700 Subject: [PATCH 147/315] feat(components:navbar): highlight active links ## what - highlight active links ## how - use css classname from `globals.css` - nav-link - highlight link on hover - active-nav-link - highlight link when link href is the same as the url pathname ## why ## where - ./src/components/navbar.tsx ## usage --- src/components/navbar.tsx | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 43584c5..a1d6941 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -1,4 +1,7 @@ +"use client"; + import Link from "next/link"; +import { usePathname } from "next/navigation"; import { cn } from "@/lib/utils"; import { ModeToggle } from "@/components/darkmode-toggle"; @@ -9,6 +12,8 @@ const links = [ ]; const Navbar = ({ className, ...props }: React.HTMLAttributes) => { + const pathname = usePathname(); + return (
From 8721f18695ff3796a0a58e1fbf79cf184490e368 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 16:23:51 -0700 Subject: [PATCH 148/315] chore(pages:problems): display a loading component for `/problems` page ## what - display a loading component for `/problems` page ## how ## why ## where - ./src/app/problems/page.tsx ## usage --- src/app/problems/page.tsx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/app/problems/page.tsx b/src/app/problems/page.tsx index 7ca9601..a1d05d6 100644 --- a/src/app/problems/page.tsx +++ b/src/app/problems/page.tsx @@ -1,6 +1,7 @@ "use client"; import { DataTable } from "@/components/ui/data-table"; +import DataTableLoading from "@/components/ui/data-table/loading"; import { columns } from "@/app/problems/components/data-table/columns"; import { useFetchProblems } from "@/hooks"; @@ -8,7 +9,12 @@ const ProblemsPage = () => { const { data, isLoading, isError } = useFetchProblems(); if (isLoading) { - return
Fetching data
; + return ( +
+

All Problems

+ +
+ ); } if (isError) { @@ -16,11 +22,11 @@ const ProblemsPage = () => { } return ( -
-

All Problems

- -
- ) +
+

All Problems

+ +
+ ); }; export default ProblemsPage; From 265d3d8030f094f93a4535461720e202d2d7f970 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 2 Jan 2024 16:47:44 -0700 Subject: [PATCH 149/315] docs(docs:images): add a screenshot of `/problems` page ## what - add a screenshot of `/problems` page - loading - data loaded ## how ## why ## where - ./docs/images/page-problems-loading.png - ./docs/images/page-problems.png ## usage --- docs/images/page-problems-loading.png | Bin 0 -> 32109 bytes docs/images/page-problems.png | Bin 0 -> 97233 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/page-problems-loading.png create mode 100644 docs/images/page-problems.png diff --git a/docs/images/page-problems-loading.png b/docs/images/page-problems-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..4f10aa33b5eac4d8598169b6fc8a65bd4414d4d4 GIT binary patch literal 32109 zcmeHwcT|&Gm;Otr(v_wn#R7;(u~4K&5fxNG5h5K0Md`hlL@6po6e)rbP{BeKq?aHF zh=?FaFQFqf^j>}^l6XOxwZ54(>&`dxyMNquUF3aFPT6Na`+4?0C-+sA&(cxvriLJh zPVwC7%Me5k{s~K=q5%IB-FE#H1aU)(r%zsS(i>@~4A)iY67Q@?(`?cW;@S3+>NK2u zpE~?7^GOB9OYjGm$xp}KyXX0U`H_&q%X`dmR0sFnI(;(Ek*1X5^>Ng_1E?#C4iz`I zVV?%$gd&a7=Pa6Bzveh%r=(>c7Ysx{bvEvNy6n*ZC8)o@LHv#%L;@qDV&sM+|M~|i zmwD$tD6!I`{@@>`kq3Tkkj4e|5q9?7K3>;K&Ul4}hF(Y5 zF*YO@6v$kNlH|#sC}Y2yIumhW^FW8>4L$`io(bH;k(--a3t4=9b|UAv*(`vF5Ckt@0*O9XB3aAD z&8?eg8GL{JZAH%+QAL3nHLrX{^MUtb#MR85BnFz#yRjl}^Y@HeElno`BtMx-m^LJe zn74dCnH;mQdDJnpWTDy?IjPgNm0tX6di+=V5L&m5(pa1{nn#OZMW^hw*94dlYXO`x zytMa+Rdu~t?`b3Xl->As4~^{m&7@4uawo4w%DQV=w0f}dv1E~^q!y>9B|zlJjAIQh zNw?dk3YI4;8=V9wRA!97KHGKk>$4+HyA$Jn>k&PfhOWI?xJZ}xsmzy;bGJb>&GsP( zlkcxDRphOOCNI;BeNm4|w^e@pS>2a(x32do%6FbB_7h%xC3Ywwbn_P@;fKJRp=|0r_DoQJy%gycixDG)`8H@4*pBa3 z_UZSf3y+~x3HM94FOnfclyV+!-U!U{`1VsGG%kyi80ZxogZEKGlvGDc%Bi4ZA2paa zcV;JqQaY8X^gz?G-Tv|1w&dNMPMse_Z2P|`6<(f=RvO}k4p&|sVJAbDj-fkD_@KlB zSvA8=dv#|UEX2#qkLf`yc9-!pPBE<8)R^{cn{A5KR8{W2C7%jY)n$@3p?*j1z(x!w`w)d!qkfu^x-V?C(d*gkuuQgFSTrs zEhun*G~hmy;OqVM>sPCZ(y;u#v@|EUCuvc^Y|H-qrFK)FU=>*&J9~RU)l$bo+kn)y z)g_)4C#@epeo(cVO}$I)k1+M25nk3~y*QZR-_X!t)n<*QlAHg~*OfC6t!*a5n(S)9 zk{n||VnBY*V((_dBHsZPP&+&K$g-cn8kk>{Rn1A?mtFeHQ?sqOpjES&WThc7Zj#QN z0S`X2+`;%Rd9Iek#$3#Ft)C)k^@TexX(->CpI?3!<

fV_(m5ZKSEb*nihCR_Cwt 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 SIQSWLNKrxgbn+>KJO2;FNOJiA literal 0 HcmV?d00001 diff --git a/docs/images/page-problems.png b/docs/images/page-problems.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7983dd1c44229f42a648280a7e86ee3cd8626c GIT binary patch literal 97233 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 Date: Tue, 2 Jan 2024 16:50:45 -0700 Subject: [PATCH 150/315] docs(readme): display screenshots of `/problems` page ## what - display screenshots of `/problems` page - loading - data loaded ## how ## why ## where - ./README.md ## usage --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 1d983e1..4ae3bd0 100644 --- a/README.md +++ b/README.md @@ -45,4 +45,10 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym ![Home page 2](docs/images/page-home.png) +### Problems page (`/problems`) +![Problems page 1](docs/images/page-problems-loading.png) + +![Problems page 2](docs/images/page-problems.png) + + From 2f06852c25cf7485b0743155dcf5323ebe28c2ac Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 2 Jan 2024 23:58:51 +0000 Subject: [PATCH 151/315] chore(release): 1.0.0-development.3 [skip ci] ## [1.0.0-development.3](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.2...1.0.0-development.3) (2024-1-2) ### :sparkles: Features * **components:navbar:** highlight active links ([1c21c75](https://github.com/Clumsy-Coder/uva-uhunt/commit/1c21c75854c6374195b82f45b6108a498897f553)) * **components:** add a Link to the problem page in `DataTable` for `/problems` ([e9c16f5](https://github.com/Clumsy-Coder/uva-uhunt/commit/e9c16f524f70fd656bab601f76c97f8e72eef0e2)) * **components:** add column properties to be sortable `DataTable` component ([9b1ab5d](https://github.com/Clumsy-Coder/uva-uhunt/commit/9b1ab5ddbca663b0778f25c36a58ab54efaed41d)) * **page:problems:** display all problems using `DataTable` component ([401ae1c](https://github.com/Clumsy-Coder/uva-uhunt/commit/401ae1c94c4c48299ed8b38e2d451b539f95a87e)) * **shadcn:data-table:** add button to clear filter ([5072674](https://github.com/Clumsy-Coder/uva-uhunt/commit/5072674429d13a38139811800640a996c3082b8a)) * **shadcn:data-table:** add column header component for DataTable ([165aa6c](https://github.com/Clumsy-Coder/uva-uhunt/commit/165aa6cf119bc2264698be5088b78ee73a30946a)), closes [/github.com/shadcn-ui/ui/blob/fb614ac2921a84b916c56e9091aa0ae8e129c565/apps/www/app/examples/tasks/components/columns.tsx#L38-L46C4](https://github.com/Clumsy-Coder//github.com/shadcn-ui/ui/blob/fb614ac2921a84b916c56e9091aa0ae8e129c565/apps/www/app/examples/tasks/components/columns.tsx/issues/L38-L46C4) * **shadcn:data-table:** add loading component for DataTable ([3851747](https://github.com/Clumsy-Coder/uva-uhunt/commit/3851747fdebe98852d772742ee3fc570fddc4da2)) * **shadcn:** add `DataTablePagination` component ([2500aa1](https://github.com/Clumsy-Coder/uva-uhunt/commit/2500aa18a838a699d2a6b3e2314830e992bc31f2)) * **shadcn:** add ability to filter any column in `DataTable` component ([5ec2df1](https://github.com/Clumsy-Coder/uva-uhunt/commit/5ec2df1db765eba419fad4233dc14cf508c1ced5)) * **shadcn:** add column scrolling to `DataTable` component ([55f98b4](https://github.com/Clumsy-Coder/uva-uhunt/commit/55f98b40feea5fcc0651e41b32ae808f571fb8d3)) * **shadcn:** add column visibility toggle for `DataTable` component ([c623e43](https://github.com/Clumsy-Coder/uva-uhunt/commit/c623e43515f9ed918da1afd6537b81a26cb028f4)) * **shadcn:** add pagination to `DataTable` component ([2c7df8e](https://github.com/Clumsy-Coder/uva-uhunt/commit/2c7df8e66f51d9c1e567b61dfa745e96b64bacbd)) --- CHANGELOG.md | 18 ++++ package-lock.json | 237 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 3 files changed, 253 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bc0aea..4cb699b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +## [1.0.0-development.3](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.2...1.0.0-development.3) (2024-1-2) + + +### :sparkles: Features + +* **components:navbar:** highlight active links ([1c21c75](https://github.com/Clumsy-Coder/uva-uhunt/commit/1c21c75854c6374195b82f45b6108a498897f553)) +* **components:** add a Link to the problem page in `DataTable` for `/problems` ([e9c16f5](https://github.com/Clumsy-Coder/uva-uhunt/commit/e9c16f524f70fd656bab601f76c97f8e72eef0e2)) +* **components:** add column properties to be sortable `DataTable` component ([9b1ab5d](https://github.com/Clumsy-Coder/uva-uhunt/commit/9b1ab5ddbca663b0778f25c36a58ab54efaed41d)) +* **page:problems:** display all problems using `DataTable` component ([401ae1c](https://github.com/Clumsy-Coder/uva-uhunt/commit/401ae1c94c4c48299ed8b38e2d451b539f95a87e)) +* **shadcn:data-table:** add button to clear filter ([5072674](https://github.com/Clumsy-Coder/uva-uhunt/commit/5072674429d13a38139811800640a996c3082b8a)) +* **shadcn:data-table:** add column header component for DataTable ([165aa6c](https://github.com/Clumsy-Coder/uva-uhunt/commit/165aa6cf119bc2264698be5088b78ee73a30946a)), closes [/github.com/shadcn-ui/ui/blob/fb614ac2921a84b916c56e9091aa0ae8e129c565/apps/www/app/examples/tasks/components/columns.tsx#L38-L46C4](https://github.com/Clumsy-Coder//github.com/shadcn-ui/ui/blob/fb614ac2921a84b916c56e9091aa0ae8e129c565/apps/www/app/examples/tasks/components/columns.tsx/issues/L38-L46C4) +* **shadcn:data-table:** add loading component for DataTable ([3851747](https://github.com/Clumsy-Coder/uva-uhunt/commit/3851747fdebe98852d772742ee3fc570fddc4da2)) +* **shadcn:** add `DataTablePagination` component ([2500aa1](https://github.com/Clumsy-Coder/uva-uhunt/commit/2500aa18a838a699d2a6b3e2314830e992bc31f2)) +* **shadcn:** add ability to filter any column in `DataTable` component ([5ec2df1](https://github.com/Clumsy-Coder/uva-uhunt/commit/5ec2df1db765eba419fad4233dc14cf508c1ced5)) +* **shadcn:** add column scrolling to `DataTable` component ([55f98b4](https://github.com/Clumsy-Coder/uva-uhunt/commit/55f98b40feea5fcc0651e41b32ae808f571fb8d3)) +* **shadcn:** add column visibility toggle for `DataTable` component ([c623e43](https://github.com/Clumsy-Coder/uva-uhunt/commit/c623e43515f9ed918da1afd6537b81a26cb028f4)) +* **shadcn:** add pagination to `DataTable` component ([2c7df8e](https://github.com/Clumsy-Coder/uva-uhunt/commit/2c7df8e66f51d9c1e567b61dfa745e96b64bacbd)) + ## [1.0.0-development.2](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.1...1.0.0-development.2) (2023-12-31) diff --git a/package-lock.json b/package-lock.json index a8e4fd4..d959a38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.2", + "version": "1.0.0-development.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uva-uhunt", - "version": "1.0.0-development.2", + "version": "1.0.0-development.3", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", @@ -6284,14 +6284,17 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6308,6 +6311,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6319,11 +6323,13 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6340,6 +6346,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6354,11 +6361,13 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6374,6 +6383,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6385,6 +6395,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6397,6 +6408,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6409,6 +6421,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6422,6 +6435,7 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6468,6 +6482,7 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6486,6 +6501,7 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6497,6 +6513,7 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6508,6 +6525,7 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6526,6 +6544,7 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6541,6 +6560,7 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6555,6 +6575,7 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6569,6 +6590,7 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6577,6 +6599,7 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6585,6 +6608,7 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6602,6 +6626,7 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6613,6 +6638,7 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6624,6 +6650,7 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6639,14 +6666,17 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6658,6 +6688,7 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", + "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6666,6 +6697,7 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6679,6 +6711,7 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6691,6 +6724,7 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6699,6 +6733,7 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6711,6 +6746,7 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6719,6 +6755,7 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6730,6 +6767,7 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6742,6 +6780,7 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6750,6 +6789,7 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6764,16 +6804,19 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6786,11 +6829,13 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", + "dev": true, "funding": [ { "type": "github", @@ -6810,6 +6855,7 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6824,6 +6870,7 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6832,6 +6879,7 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6840,6 +6888,7 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", + "dev": true, "funding": [ { "type": "github", @@ -6863,6 +6912,7 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6871,6 +6921,7 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6893,6 +6944,7 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6904,6 +6956,7 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6912,6 +6965,7 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", + "dev": true, "funding": [ { "type": "github", @@ -6926,6 +6980,7 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -6937,6 +6992,7 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6945,6 +7001,7 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6957,6 +7014,7 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6971,6 +7029,7 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6979,6 +7038,7 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6987,6 +7047,7 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6998,11 +7059,13 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -7011,6 +7074,7 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7023,16 +7087,19 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7046,6 +7113,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7060,6 +7128,7 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7071,6 +7140,7 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7087,11 +7157,13 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7103,11 +7175,13 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", + "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7116,24 +7190,29 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7142,11 +7221,13 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7155,6 +7236,7 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7163,11 +7245,13 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7176,6 +7260,7 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7191,6 +7276,7 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7202,11 +7288,13 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7225,6 +7313,7 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7246,11 +7335,13 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7262,11 +7353,13 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7278,13 +7371,16 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7294,6 +7390,7 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", + "dev": true, "funding": [ { "type": "github", @@ -7313,6 +7410,7 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7324,6 +7422,7 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7332,6 +7431,7 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7340,6 +7440,7 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7348,6 +7449,7 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7365,11 +7467,13 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7378,6 +7482,7 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7389,6 +7494,7 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7400,6 +7506,7 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7408,16 +7515,19 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7435,6 +7545,7 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7443,6 +7554,7 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7451,6 +7563,7 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", + "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7459,16 +7572,19 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7481,6 +7597,7 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7500,6 +7617,7 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7521,6 +7639,7 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7532,6 +7651,7 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7544,6 +7664,7 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7556,6 +7677,7 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7570,6 +7692,7 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7588,6 +7711,7 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7599,6 +7723,7 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7611,6 +7736,7 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7626,6 +7752,7 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7634,6 +7761,7 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7655,6 +7783,7 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7669,6 +7798,7 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7677,6 +7807,7 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7688,6 +7819,7 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7699,6 +7831,7 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7715,6 +7848,7 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7726,6 +7860,7 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7737,6 +7872,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7746,6 +7882,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7757,6 +7894,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7768,6 +7906,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7779,6 +7918,7 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7790,6 +7930,7 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7801,6 +7942,7 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7813,6 +7955,7 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7824,6 +7967,7 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7835,11 +7979,13 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7848,6 +7994,7 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7856,6 +8003,7 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7879,6 +8027,7 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7893,6 +8042,7 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7907,6 +8057,7 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7915,6 +8066,7 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7926,6 +8078,7 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7937,6 +8090,7 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7945,6 +8099,7 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7959,6 +8114,7 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7970,6 +8126,7 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7984,6 +8141,7 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7996,6 +8154,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8013,6 +8172,7 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -8021,6 +8181,7 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8035,6 +8196,7 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8049,6 +8211,7 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8080,6 +8243,7 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8093,6 +8257,7 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8101,6 +8266,7 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8116,6 +8282,7 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8128,6 +8295,7 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8136,6 +8304,7 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8144,6 +8313,7 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8152,6 +8322,7 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8160,11 +8331,13 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8177,6 +8350,7 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8188,6 +8362,7 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", + "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8195,6 +8370,7 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8206,6 +8382,7 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8214,6 +8391,7 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8228,6 +8406,7 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8240,6 +8419,7 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8255,6 +8435,7 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8263,6 +8444,7 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", + "dev": true, "funding": [ { "type": "github", @@ -8282,11 +8464,14 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", + "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8301,6 +8486,7 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8312,11 +8498,13 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8328,6 +8516,7 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8336,6 +8525,7 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8347,6 +8537,7 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8361,6 +8552,7 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8370,6 +8562,7 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8383,6 +8576,7 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8392,11 +8586,13 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", + "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8406,11 +8602,13 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", + "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8422,6 +8620,7 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8430,6 +8629,7 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8444,6 +8644,7 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8457,6 +8658,7 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8469,6 +8671,7 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8480,6 +8683,7 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8491,6 +8695,7 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8507,6 +8712,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8518,6 +8724,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8529,6 +8736,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8537,16 +8745,19 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8555,6 +8766,7 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8568,6 +8780,7 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8579,6 +8792,7 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8590,11 +8804,13 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8604,6 +8820,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8615,11 +8832,13 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8628,6 +8847,7 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8642,6 +8862,7 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8650,6 +8871,7 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8658,6 +8880,7 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8675,6 +8898,7 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8691,6 +8915,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8702,6 +8927,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8713,11 +8939,13 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8734,6 +8962,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8748,6 +8977,7 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8760,6 +8990,7 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index c82bda5..14dfc0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.2", + "version": "1.0.0-development.3", "private": true, "scripts": { "dev": "next dev", From 6ff279a7a0aaba1fccf3bc78c3db940956dd05d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:00:55 +0000 Subject: [PATCH 152/315] build(deps): bump @tanstack/react-query from 5.17.0 to 5.17.1 Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.17.0 to 5.17.1. - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.17.1/packages/react-query) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index d959a38..df9a6c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", - "@tanstack/react-query": "^5.17.0", + "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.0", "@tanstack/react-table": "^8.11.2", "axios": "^1.6.3", @@ -1871,9 +1871,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.0.tgz", - "integrity": "sha512-LoBaPtbMY26kRS+ohII4thTsWkJJsXKGitOLikTo2aqPA4yy7cfFJITs8DRnuERT7tLF5xfG9Lnm33Vp/38Vmw==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.1.tgz", + "integrity": "sha512-kUXozQmU7NBtzX5dM6qfFNZN+YK/9Ct37hnG/ogdgI4mExIx7VH/qRepsPhKfNrJz2w81/JykmM3Uug6sVpUSw==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -1889,11 +1889,11 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.0.tgz", - "integrity": "sha512-iNSn6ZA7mHUjrT0a271eKoa1oR1HznlrGbb475awft1kuP3zrhyUCrI8tlGowOr7zRoAxJholjwxO+gfz1IObw==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.1.tgz", + "integrity": "sha512-4JYgX0kU+pvwVQi5eRiHGvBK7WnahEl6lmaxd32ZVSKmByAxLgaewoxBR03cdDNse8lUD2zGOe0sx3M/EGRlmA==", "dependencies": { - "@tanstack/query-core": "5.17.0" + "@tanstack/query-core": "5.17.1" }, "funding": { "type": "github", diff --git a/package.json b/package.json index 14dfc0a..9468cc0 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", - "@tanstack/react-query": "^5.17.0", + "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.0", "@tanstack/react-table": "^8.11.2", "axios": "^1.6.3", From 15d5d13fe549cd345aa9a1cb0cfe17151623f48d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:03:12 +0000 Subject: [PATCH 153/315] build(deps): bump @tanstack/react-query-devtools from 5.17.0 to 5.17.1 Bumps [@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools) from 5.17.0 to 5.17.1. - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.17.1/packages/react-query-devtools) --- updated-dependencies: - dependency-name: "@tanstack/react-query-devtools" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index df9a6c1..f1180c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.1", - "@tanstack/react-query-devtools": "^5.17.0", + "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.2", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", @@ -1880,9 +1880,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.15.0.tgz", - "integrity": "sha512-oz+xBIf+fanmAQ3CZrV4t+1VZiK2nyTcH3zY3G8ukzw+LwX2QGa04ZfF+OCOVF6tPZ2dn1cekMibUb4tevf/aw==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.17.1.tgz", + "integrity": "sha512-gNdt6PYzYlyjtSAoO8Jt9GIFq5VSLLDV2qq0TCi1t/PGnpAIlIHqNZGYkQTPsy0FyGUTX3pCq4bd7v5z/wzf3A==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -1904,18 +1904,18 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.0.tgz", - "integrity": "sha512-G8sDsK83Zzjr6Nqm4t+8ILi9VWDhg/XjkDD4UYDWqDZHnh/iv4bbQotPLB3PfX7eQtdzgXjGaV8omf1UniyK8w==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.1.tgz", + "integrity": "sha512-QWHqdEN2TJpj76r0yzdOJEopmPvdAHOJHAKXaygubRASqCqfcWGkOHGD9pqqHOfTu5eQdV1Csx97EuSjnHMKcA==", "dependencies": { - "@tanstack/query-devtools": "5.15.0" + "@tanstack/query-devtools": "5.17.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.17.0", + "@tanstack/react-query": "^5.17.1", "react": "^18.0.0" } }, diff --git a/package.json b/package.json index 9468cc0..f127c59 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.1", - "@tanstack/react-query-devtools": "^5.17.0", + "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.2", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", From b1fecb79f4e44255658335fabccb0d4e859dbaf7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:06:13 +0000 Subject: [PATCH 154/315] build(deps): bump @tanstack/react-table from 8.11.2 to 8.11.3 Bumps [@tanstack/react-table](https://github.com/tanstack/table) from 8.11.2 to 8.11.3. - [Release notes](https://github.com/tanstack/table/releases) - [Commits](https://github.com/tanstack/table/compare/v8.11.2...v8.11.3) --- updated-dependencies: - dependency-name: "@tanstack/react-table" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1180c4..1979683 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", - "@tanstack/react-table": "^8.11.2", + "@tanstack/react-table": "^8.11.3", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1920,11 +1920,11 @@ } }, "node_modules/@tanstack/react-table": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.11.2.tgz", - "integrity": "sha512-ztLg2OpM3HZIWzkQYjQER1inZuhbt79fBwZxc9bPXzsvqY+7RYI3dCZLw3CynYd9s4YltdrTbmSyh4xQSHexDQ==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.11.3.tgz", + "integrity": "sha512-Gwwm7po1MaObBguw69L+UiACkaj+eOtThQEArj/3fmUwMPiWaJcXvNG2X5Te5z2hg0HMx8h0T0Q7p5YmQlTUfw==", "dependencies": { - "@tanstack/table-core": "8.11.2" + "@tanstack/table-core": "8.11.3" }, "engines": { "node": ">=12" @@ -1939,9 +1939,9 @@ } }, "node_modules/@tanstack/table-core": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.2.tgz", - "integrity": "sha512-rR0VEQOtr0ARLvaNLaSQnt2BVwOp0OavOUA0LcZ3N45tLYXc4sXruNv8kJ7R7+5W1CrzGha217tzjBG83CpoMQ==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.3.tgz", + "integrity": "sha512-nkcFIL696wTf1QMvhGR7dEg60OIRwEZm1OqFTYYDTRc4JOWspgrsJO3IennsOJ7ptumHWLDjV8e5BjPkZcSZAQ==", "engines": { "node": ">=12" }, diff --git a/package.json b/package.json index f127c59..2fe9a4b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@radix-ui/react-slot": "^1.0.2", "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", - "@tanstack/react-table": "^8.11.2", + "@tanstack/react-table": "^8.11.3", "axios": "^1.6.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", From c3f52d657f89bb5dba171f7f9b7265f88c177947 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 07:58:23 -0700 Subject: [PATCH 155/315] build(shadcn): add component `Badge` ## what - add component `Badge` ## how - run command npx shadcn-ui@latest add badge ## why - this component will be used to display the verdict in `LiveSubmissions` ## where - ./src/components/ui/badge.tsx ## usage --- src/components/ui/badge.tsx | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/components/ui/badge.tsx diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx new file mode 100644 index 0000000..f000e3e --- /dev/null +++ b/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +

+ ) +} + +export { Badge, badgeVariants } From ee89ec6b310cf575b418ae1dcb05d7138684bbdb Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:21:38 -0700 Subject: [PATCH 156/315] chore(components:data-table): add `columns.tsx` for home page ## what - add `columns.tsx` for home page - display the `Submission ID` column ## how ## why - this will be used to display live submissions on the home page ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/app/components/data-table/columns.tsx diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx new file mode 100644 index 0000000..bd471b7 --- /dev/null +++ b/src/app/components/data-table/columns.tsx @@ -0,0 +1,31 @@ +"use client" + +import { ColumnDef } from "@tanstack/react-table" +import Link from "next/link"; + +import { buttonVariants } from "@/components/ui/button"; +import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; +import { Submission } from "@/types" + +export const columns: ColumnDef[] = [ + { + accessorKey: "submissionId", + accessorFn: row => row.msg.sid, + // meta: { + // headerTitle: "Submission ID" + // }, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + {row.getValue("submissionId")} + + ); + }, + }, +] + From fc356b1569ece65edf57c9b5e4c715cf444c9128 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:25:38 -0700 Subject: [PATCH 157/315] feat(page:home): display the `DataTable` for live submissions ## what - display the `DataTable` for live submissions ## how ## why - using the `DataTable` will allow - filter the table - sort columns - show/hide columns - use pagination - reusing code to keep the code base lean ## where - ./src/app/page.tsx ## usage --- src/app/page.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 9a6c820..089ba6a 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -12,7 +12,8 @@ import { import { Skeleton } from '@/components/ui/skeleton' import { useFetchLiveSubmission } from "@/hooks"; -import LiveSubmissionTable from "./LiveSubmissionTable"; +import { DataTable } from "@/components/ui/data-table"; +import { columns } from "@/app/components/data-table/columns"; const Loading = () => { return ( @@ -72,7 +73,7 @@ export default function Home() { return (
- +
); } From c70af1497f0f16cee15cba0651fcc5697879177d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:30:17 -0700 Subject: [PATCH 158/315] refactor(page:home): use `DataTable` loading component ## what - use `DataTable` loading component ## how ## why - reusing code - easy way to display skeleton data table with varying columns and rows ## where - ./src/app/page.tsx ## usage --- src/app/page.tsx | 45 ++------------------------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 089ba6a..db55097 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,53 +1,12 @@ "use client"; import { useRef } from "react"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@/components/ui/table"; -import { Skeleton } from '@/components/ui/skeleton' import { useFetchLiveSubmission } from "@/hooks"; import { DataTable } from "@/components/ui/data-table"; +import DataTableLoading from "@/components/ui/data-table/loading"; import { columns } from "@/app/components/data-table/columns"; -const Loading = () => { - return ( - - - - Submission ID - Problem number - Problem title - User (username) - Verdict - Language - Time - Rank - Submit time - - - - {[...Array(10)].map((_, i) => { - return ( - - {[...Array(9)].map((_, k) => ( - - - - ))} - - ); - })} - -
- ); -} - /////////////////////////////////////////////////////////////////////////////////////////////////// export default function Home() { @@ -59,7 +18,7 @@ export default function Home() { const { data, isLoading, isError, isSuccess } = useFetchLiveSubmission(pollIdRef.current); if (isLoading || !data) { - return + return ; } From 44f75d5e7636f3155f022f4a11d0677df5c41cc1 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:33:19 -0700 Subject: [PATCH 159/315] feat(components:data-table): display `problem number` in live submissions data-table ## what - display `problem number` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index bd471b7..32d454a 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -27,5 +27,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "problemNum", + accessorFn: row => row.msg.pnum, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemNum")} + + ); + }, + }, ] From 6c131eb60bd4c94e8cd5d68d10d71cca1d3c1527 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:34:43 -0700 Subject: [PATCH 160/315] feat(components:data-table): display `problem title` in live submissions data-table ## what - display `problem title` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 32d454a..7643090 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -43,5 +43,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "problemTitle", + accessorFn: row => row.msg.pTitle, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemTitle")} + + ); + }, + }, ] From 3ad7c53efa4816d41bb288bcfa71284d1d8f06c6 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:36:54 -0700 Subject: [PATCH 161/315] feat(components:data-table): display `username` in live submissions data-table ## what - display `username` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 7643090..4bed118 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -59,5 +59,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "username", + accessorFn: row => `${row.msg.name} (${row.msg.uname})`, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + {row.getValue("username")} + + ); + }, + }, ] From 7b5718967bc0f16a9cfd4b423fda2a9410534369 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:39:29 -0700 Subject: [PATCH 162/315] feat(components:data-table): display `verdict` in live submissions data-table ## what - display `verdict` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 4bed118..6b48616 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -3,6 +3,7 @@ import { ColumnDef } from "@tanstack/react-table" import Link from "next/link"; +import { Badge } from "@/components/ui/badge"; import { buttonVariants } from "@/components/ui/button"; import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; import { Submission } from "@/types" @@ -75,5 +76,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "verdict", + accessorFn: row => row.msg.verdict.title, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + {row.getValue("verdict")} + + ); + }, + }, ] From dd6e3dbfc0e0d34d861bcb258fea359dcace996c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:41:38 -0700 Subject: [PATCH 163/315] feat(components:data-table): display `language` in live submissions data-table ## what - display `language` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 6b48616..18e4d75 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -92,5 +92,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "language", + accessorFn: row => row.msg.lan, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( +

+ {row.getValue("language")} +

+ ); + }, + }, ] From b319bfe872d7faa3b3bf79122bb4e878ee023eb4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:42:24 -0700 Subject: [PATCH 164/315] feat(components:data-table): display `runtime` in live submissions data-table ## what - display `runtime` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 18e4d75..4039893 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -108,5 +108,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "runtime", + accessorFn: row => row.msg.run, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( +

+ {(row.getValue('runtime') as number / 1000).toFixed(3)} +

+ ); + }, + }, ] From 293387bb1ca547ff5fedc386d810e2432f48b789 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:43:22 -0700 Subject: [PATCH 165/315] feat(components:data-table): display `rank` in live submissions data-table ## what - display `rank` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 4039893..bcc1a82 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -124,5 +124,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "rank", + accessorFn: row => row.msg.rank, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( +

+ {row.getValue('rank')} +

+ ); + }, + }, ] From 77e225efb8342ea390aae846eeb90d91ef695c01 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 08:44:41 -0700 Subject: [PATCH 166/315] feat(components:data-table): display `submit time` in live submissions data-table ## what - display `submit time` in live submissions data-table ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index bcc1a82..cb64934 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -1,6 +1,7 @@ "use client" import { ColumnDef } from "@tanstack/react-table" +import moment from "moment"; import Link from "next/link"; import { Badge } from "@/components/ui/badge"; @@ -140,5 +141,21 @@ export const columns: ColumnDef[] = [ ); }, }, + { + accessorKey: "submitTime", + accessorFn: row => row.msg.sbt, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( +

+ {moment.unix(row.getValue('submitTime')).fromNow()} +

+ ); + }, + }, ] From b9f53b8690eea72c17a7ebf34f104af9e45bb063 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 09:43:02 -0700 Subject: [PATCH 167/315] style(components:data-table): add styling to live submissions `DataTable` ## what - add styling to live submissions `DataTable` - show underline for `submission id` cells - show underline for `problem number` cells - show underline for `problem title` cells - show underline for `username` cells - align right `submit time` column - remove css classes for `buttonVariant` ## how ## why - to make it look better - to make the table fit in a laptop sized screen without overflowing ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index cb64934..dfb4a92 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -8,6 +8,7 @@ import { Badge } from "@/components/ui/badge"; import { buttonVariants } from "@/components/ui/button"; import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; import { Submission } from "@/types" +import { cn } from "@/lib/utils"; export const columns: ColumnDef[] = [ { @@ -23,7 +24,7 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( - + {row.getValue("submissionId")} ); @@ -39,7 +40,7 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( - + {row.getValue("problemNum")} ); @@ -55,7 +56,7 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( - + {row.getValue("problemTitle")} ); @@ -71,7 +72,7 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( - + {row.getValue("username")} ); @@ -87,7 +88,14 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( - + {row.getValue("verdict")} ); @@ -146,16 +154,15 @@ export const columns: ColumnDef[] = [ accessorFn: row => row.msg.sbt, header: ({ column }) => { return ( - + ); }, cell: ({ row }) => { return ( -

+

{moment.unix(row.getValue('submitTime')).fromNow()}

); }, }, ] - From 959f9b00bfc2a3fe1cc1207faa5411d80dfa4c2c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 09:47:22 -0700 Subject: [PATCH 168/315] chore(components:data-table): disable column sorting in live submissions ## what - disable column sorting in live submissions ## how ## why - they have no purpose in sorting - they take up space, causing the table to overflow in x-axis ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index dfb4a92..a596c93 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -116,6 +116,7 @@ export const columns: ColumnDef[] = [

); }, + enableSorting: false, }, { accessorKey: "runtime", @@ -132,6 +133,7 @@ export const columns: ColumnDef[] = [

); }, + enableSorting: false, }, { accessorKey: "rank", @@ -148,6 +150,7 @@ export const columns: ColumnDef[] = [

); }, + enableSorting: false, }, { accessorKey: "submitTime", @@ -164,5 +167,6 @@ export const columns: ColumnDef[] = [

); }, + enableSorting: false, }, ] From fa0b20d46752f960f659413e20202b3c940adbb6 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 09:53:12 -0700 Subject: [PATCH 169/315] chore(components:data-table): set string names in the column dropdown ## what - set string names in the column dropdown ## how ## why - before the dropdown would use the column `accessorKey` as a string to display - now it's manually set to have a better look ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 39 +++++++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index a596c93..4f850f3 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -14,9 +14,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "submissionId", accessorFn: row => row.msg.sid, - // meta: { - // headerTitle: "Submission ID" - // }, + meta: { + // for displaying the columns dropdown + headerTitle: "Submission ID" + }, header: ({ column }) => { return ( @@ -33,6 +34,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "problemNum", accessorFn: row => row.msg.pnum, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Number" + }, header: ({ column }) => { return ( @@ -49,6 +54,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "problemTitle", accessorFn: row => row.msg.pTitle, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Title" + }, header: ({ column }) => { return ( @@ -65,6 +74,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "username", accessorFn: row => `${row.msg.name} (${row.msg.uname})`, + meta: { + // for displaying the columns dropdown + headerTitle: "User (username)" + }, header: ({ column }) => { return ( @@ -81,6 +94,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "verdict", accessorFn: row => row.msg.verdict.title, + meta: { + // for displaying the columns dropdown + headerTitle: "Verdict" + }, header: ({ column }) => { return ( @@ -104,6 +121,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "language", accessorFn: row => row.msg.lan, + meta: { + // for displaying the columns dropdown + headerTitle: "Language" + }, header: ({ column }) => { return ( @@ -121,6 +142,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "runtime", accessorFn: row => row.msg.run, + meta: { + // for displaying the columns dropdown + headerTitle: "Runtime" + }, header: ({ column }) => { return ( @@ -138,6 +163,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "rank", accessorFn: row => row.msg.rank, + meta: { + // for displaying the columns dropdown + headerTitle: "Rank" + }, header: ({ column }) => { return ( @@ -155,6 +184,10 @@ export const columns: ColumnDef[] = [ { accessorKey: "submitTime", accessorFn: row => row.msg.sbt, + meta: { + // for displaying the columns dropdown + headerTitle: "Submit Time" + }, header: ({ column }) => { return ( From 566f0eab993335a0a083ca8c7955aa14f8e6139c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 10:01:02 -0700 Subject: [PATCH 170/315] build(shadcn): add component `Tooltip` ## what - add component `Tooltip` ## how - run command npx shadcn-ui@latest add tooltip ## why - will be used when hovering over `submit time` cell in live submissions ## where - ./package-lock.json - ./package.json - ./src/components/ui/tooltip.tsx ## usage --- package-lock.json | 268 +++++----------------------------- package.json | 1 + src/components/ui/tooltip.tsx | 30 ++++ 3 files changed, 67 insertions(+), 232 deletions(-) create mode 100644 src/components/ui/tooltip.tsx diff --git a/package-lock.json b/package-lock.json index 1979683..4c1279f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.3", @@ -1312,6 +1313,40 @@ } } }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", + "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", @@ -6284,17 +6319,14 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6311,7 +6343,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6323,13 +6354,11 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6346,7 +6375,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6361,13 +6389,11 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6383,7 +6409,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6395,7 +6420,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6408,7 +6432,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6421,7 +6444,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6435,7 +6457,6 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6482,7 +6503,6 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6501,7 +6521,6 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6513,7 +6532,6 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6525,7 +6543,6 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6544,7 +6561,6 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6560,7 +6576,6 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6575,7 +6590,6 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6590,7 +6604,6 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6599,7 +6612,6 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6608,7 +6620,6 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6626,7 +6637,6 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6638,7 +6648,6 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6650,7 +6659,6 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6666,17 +6674,14 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6688,7 +6693,6 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", - "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6697,7 +6701,6 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6711,7 +6714,6 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6724,7 +6726,6 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6733,7 +6734,6 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6746,7 +6746,6 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6755,7 +6754,6 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6767,7 +6765,6 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6780,7 +6777,6 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6789,7 +6785,6 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6804,19 +6799,16 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6829,13 +6821,11 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -6855,7 +6845,6 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6870,7 +6859,6 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6879,7 +6867,6 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6888,7 +6875,6 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", - "dev": true, "funding": [ { "type": "github", @@ -6912,7 +6898,6 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6921,7 +6906,6 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6944,7 +6928,6 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6956,7 +6939,6 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6965,7 +6947,6 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", - "dev": true, "funding": [ { "type": "github", @@ -6980,7 +6961,6 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -6992,7 +6972,6 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7001,7 +6980,6 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7014,7 +6992,6 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7029,7 +7006,6 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7038,7 +7014,6 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7047,7 +7022,6 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7059,13 +7033,11 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", - "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -7074,7 +7046,6 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7087,19 +7058,16 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7113,7 +7081,6 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7128,7 +7095,6 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7140,7 +7106,6 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7157,13 +7122,11 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7175,13 +7138,11 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", - "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7190,29 +7151,24 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7221,13 +7177,11 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7236,7 +7190,6 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7245,13 +7198,11 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7260,7 +7211,6 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7276,7 +7226,6 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7288,13 +7237,11 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7313,7 +7260,6 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7335,13 +7281,11 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7353,13 +7297,11 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7371,16 +7313,13 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7390,7 +7329,6 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -7410,7 +7348,6 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7422,7 +7359,6 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7431,7 +7367,6 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7440,7 +7375,6 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7449,7 +7383,6 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7467,13 +7400,11 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7482,7 +7413,6 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7494,7 +7424,6 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7506,7 +7435,6 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7515,19 +7443,16 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7545,7 +7470,6 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7554,7 +7478,6 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7563,7 +7486,6 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", - "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7572,19 +7494,16 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7597,7 +7516,6 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7617,7 +7535,6 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7639,7 +7556,6 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7651,7 +7567,6 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7664,7 +7579,6 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7677,7 +7591,6 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7692,7 +7605,6 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7711,7 +7623,6 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7723,7 +7634,6 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7736,7 +7646,6 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7752,7 +7661,6 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7761,7 +7669,6 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7783,7 +7690,6 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7798,7 +7704,6 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7807,7 +7712,6 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7819,7 +7723,6 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7831,7 +7734,6 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7848,7 +7750,6 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7860,7 +7761,6 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7872,7 +7772,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7882,7 +7781,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7894,7 +7792,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7906,7 +7803,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7918,7 +7814,6 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7930,7 +7825,6 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7942,7 +7836,6 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7955,7 +7848,6 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7967,7 +7859,6 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7979,13 +7870,11 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7994,7 +7883,6 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8003,7 +7891,6 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8027,7 +7914,6 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8042,7 +7928,6 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8057,7 +7942,6 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8066,7 +7950,6 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8078,7 +7961,6 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8090,7 +7972,6 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8099,7 +7980,6 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8114,7 +7994,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8126,7 +8005,6 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8141,7 +8019,6 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8154,7 +8031,6 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8172,7 +8048,6 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -8181,7 +8056,6 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8196,7 +8070,6 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8211,7 +8084,6 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8243,7 +8115,6 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8257,7 +8128,6 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8266,7 +8136,6 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8282,7 +8151,6 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8295,7 +8163,6 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8304,7 +8171,6 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8313,7 +8179,6 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8322,7 +8187,6 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8331,13 +8195,11 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8350,7 +8212,6 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8362,7 +8223,6 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", - "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8370,7 +8230,6 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8382,7 +8241,6 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8391,7 +8249,6 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8406,7 +8263,6 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8419,7 +8275,6 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8435,7 +8290,6 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8444,7 +8298,6 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -8464,14 +8317,11 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "inBundle": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8486,7 +8336,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8498,13 +8347,11 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8516,7 +8363,6 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8525,7 +8371,6 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8537,7 +8382,6 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8552,7 +8396,6 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8562,7 +8405,6 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8576,7 +8418,6 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8586,13 +8427,11 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8602,13 +8441,11 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", - "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8620,7 +8457,6 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8629,7 +8465,6 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8644,7 +8479,6 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8658,7 +8492,6 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8671,7 +8504,6 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8683,7 +8515,6 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8695,7 +8526,6 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8712,7 +8542,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8724,7 +8553,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8736,7 +8564,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8745,19 +8572,16 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8766,7 +8590,6 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8780,7 +8603,6 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8792,7 +8614,6 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8804,13 +8625,11 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8820,7 +8639,6 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8832,13 +8650,11 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8847,7 +8663,6 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8862,7 +8677,6 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8871,7 +8685,6 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8880,7 +8693,6 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8898,7 +8710,6 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8915,7 +8726,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8927,7 +8737,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8939,13 +8748,11 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8962,7 +8769,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8977,7 +8783,6 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8990,7 +8795,6 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index 2fe9a4b..7db0034 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.3", diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 0000000..30fc44d --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,30 @@ +"use client" + +import * as React from "react" +import * as TooltipPrimitive from "@radix-ui/react-tooltip" + +import { cn } from "@/lib/utils" + +const TooltipProvider = TooltipPrimitive.Provider + +const Tooltip = TooltipPrimitive.Root + +const TooltipTrigger = TooltipPrimitive.Trigger + +const TooltipContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + +)) +TooltipContent.displayName = TooltipPrimitive.Content.displayName + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } From 30c02eb561d046316feb77d6674f48e2338a9e2f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 10:13:56 -0700 Subject: [PATCH 171/315] feat(components:data-table): display submit time using tooltip ## what - display submit time using tooltip ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 4f850f3..16f8a3f 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -6,6 +6,12 @@ import Link from "next/link"; import { Badge } from "@/components/ui/badge"; import { buttonVariants } from "@/components/ui/button"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip" import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; import { Submission } from "@/types" import { cn } from "@/lib/utils"; @@ -195,9 +201,18 @@ export const columns: ColumnDef[] = [ }, cell: ({ row }) => { return ( -

- {moment.unix(row.getValue('submitTime')).fromNow()} -

+ + + +

+ {moment.unix(row.getValue('submitTime')).fromNow()} +

+
+ +

Submitted at {moment.unix(row.getValue('submitTime')).toLocaleString()}

+
+
+
); }, enableSorting: false, From eb3c6a1686c8c60a3623fe4271aa3352ee9dcc7a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:06:36 -0700 Subject: [PATCH 172/315] chore(types): add fgColor for `verdict` ## what - add fgColor for `verdict` ## how ## why ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/types/index.ts b/src/types/index.ts index 03032d9..a835193 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -113,19 +113,19 @@ export type VerdictType = { }; export const Verdict: Record = { - 0 : { fgColor: "", bgColor: "bg-gray-500", title: "- In Queue -" }, - 10: { fgColor: "", bgColor: "bg-gray-500", title: "Submission error" }, - 15: { fgColor: "", bgColor: "bg-gray-500", title: "Can't be judged" }, - 20: { fgColor: "", bgColor: "bg-gray-500", title: "- In Queue -" }, - 30: { fgColor: "", bgColor: "bg-orange-600", title: "Compile error" }, - 35: { fgColor: "", bgColor: "bg-gray-500", title: "Restricted function" }, - 40: { fgColor: "", bgColor: "bg-[#00AAAA]", title: "Runtime error" }, - 45: { fgColor: "", bgColor: "bg-[#000066]", title: "Output limit" }, - 50: { fgColor: "", bgColor: "bg-[#0000FF]", title: "Time limit" }, - 60: { fgColor: "", bgColor: "bg-[#0000AA]", title: "Memory limit" }, - 70: { fgColor: "", bgColor: "bg-[#FF0000]", title: "Wrong answer" }, - 80: { fgColor: "", bgColor: "bg-[#666600]", title: "Presentation error" }, - 90: { fgColor: "", bgColor: "bg-[#00AA00]", title: "Accepted" }, + 0 : { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "- In Queue -" }, + 10: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Submission error" }, + 15: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Can't be judged" }, + 20: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "- In Queue -" }, + 30: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-orange-600", title: "Compile error" }, + 35: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Restricted function" }, + 40: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#00AAAA]", title: "Runtime error" }, + 45: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#000066]", title: "Output limit" }, + 50: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#0000FF]", title: "Time limit" }, + 60: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#0000AA]", title: "Memory limit" }, + 70: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#FF0000]", title: "Wrong answer" }, + 80: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#666600]", title: "Presentation error" }, + 90: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#00AA00]", title: "Accepted" }, }; export const Language: Record = { From f6fdd33e8ad5476fa9ec5f75baf64434a70b414d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:11:53 -0700 Subject: [PATCH 173/315] style(components:data-table): format code ## what - format code ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 132 ++++++++++------------ 1 file changed, 61 insertions(+), 71 deletions(-) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 16f8a3f..598b199 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -1,37 +1,37 @@ -"use client" +"use client"; -import { ColumnDef } from "@tanstack/react-table" +import { ColumnDef } from "@tanstack/react-table"; import moment from "moment"; import Link from "next/link"; import { Badge } from "@/components/ui/badge"; -import { buttonVariants } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, -} from "@/components/ui/tooltip" +} from "@/components/ui/tooltip"; import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; -import { Submission } from "@/types" +import { Submission } from "@/types"; import { cn } from "@/lib/utils"; export const columns: ColumnDef[] = [ { accessorKey: "submissionId", - accessorFn: row => row.msg.sid, + accessorFn: (row) => row.msg.sid, meta: { // for displaying the columns dropdown - headerTitle: "Submission ID" + headerTitle: "Submission ID", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { return ( - + {row.getValue("submissionId")} ); @@ -39,19 +39,20 @@ export const columns: ColumnDef[] = [ }, { accessorKey: "problemNum", - accessorFn: row => row.msg.pnum, + accessorFn: (row) => row.msg.pnum, meta: { // for displaying the columns dropdown - headerTitle: "Problem Number" + headerTitle: "Problem Number", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { return ( - + {row.getValue("problemNum")} ); @@ -59,19 +60,20 @@ export const columns: ColumnDef[] = [ }, { accessorKey: "problemTitle", - accessorFn: row => row.msg.pTitle, + accessorFn: (row) => row.msg.pTitle, meta: { // for displaying the columns dropdown - headerTitle: "Problem Title" + headerTitle: "Problem Title", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { return ( - + {row.getValue("problemTitle")} ); @@ -79,19 +81,20 @@ export const columns: ColumnDef[] = [ }, { accessorKey: "username", - accessorFn: row => `${row.msg.name} (${row.msg.uname})`, + accessorFn: (row) => `${row.msg.name} (${row.msg.uname})`, meta: { // for displaying the columns dropdown - headerTitle: "User (username)" + headerTitle: "User (username)", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { return ( - + {row.getValue("username")} ); @@ -99,22 +102,20 @@ export const columns: ColumnDef[] = [ }, { accessorKey: "verdict", - accessorFn: row => row.msg.verdict.title, + accessorFn: (row) => row.msg.verdict.title, meta: { // for displaying the columns dropdown - headerTitle: "Verdict" + headerTitle: "Verdict", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { return ( [] = [ }, { accessorKey: "language", - accessorFn: row => row.msg.lan, + accessorFn: (row) => row.msg.lan, meta: { // for displaying the columns dropdown - headerTitle: "Language" + headerTitle: "Language", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { - return ( -

- {row.getValue("language")} -

- ); + return

{row.getValue("language")}

; }, enableSorting: false, }, { accessorKey: "runtime", - accessorFn: row => row.msg.run, + accessorFn: (row) => row.msg.run, meta: { // for displaying the columns dropdown - headerTitle: "Runtime" + headerTitle: "Runtime", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { - return ( -

- {(row.getValue('runtime') as number / 1000).toFixed(3)} -

- ); + return

{((row.getValue("runtime") as number) / 1000).toFixed(3)}

; }, enableSorting: false, }, { accessorKey: "rank", - accessorFn: row => row.msg.rank, + accessorFn: (row) => row.msg.rank, meta: { // for displaying the columns dropdown - headerTitle: "Rank" + headerTitle: "Rank", }, header: ({ column }) => { - return ( - - ); + return ; }, cell: ({ row }) => { - return ( -

- {row.getValue('rank')} -

- ); + return

{row.getValue("rank")}

; }, enableSorting: false, }, { accessorKey: "submitTime", - accessorFn: row => row.msg.sbt, + accessorFn: (row) => row.msg.sbt, meta: { // for displaying the columns dropdown - headerTitle: "Submit Time" + headerTitle: "Submit Time", }, header: ({ column }) => { return ( - + ); }, cell: ({ row }) => { @@ -205,11 +192,14 @@ export const columns: ColumnDef[] = [

- {moment.unix(row.getValue('submitTime')).fromNow()} + {moment.unix(row.getValue("submitTime")).fromNow()}

-

Submitted at {moment.unix(row.getValue('submitTime')).toLocaleString()}

+

+ Submitted at{" "} + {moment.unix(row.getValue("submitTime")).toLocaleString()} +

@@ -217,4 +207,4 @@ export const columns: ColumnDef[] = [ }, enableSorting: false, }, -] +]; From 0aa3bb226688a7584e23e2b863ee5476aac42823 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:18:28 -0700 Subject: [PATCH 174/315] style(components:data-table): add padding to links in live-submission DataTable ## what - add padding to links in live-submission DataTable ## how ## why ## where - ./src/app/components/data-table/columns.tsx ## usage --- src/app/components/data-table/columns.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/components/data-table/columns.tsx b/src/app/components/data-table/columns.tsx index 598b199..7f671b3 100644 --- a/src/app/components/data-table/columns.tsx +++ b/src/app/components/data-table/columns.tsx @@ -30,7 +30,7 @@ export const columns: ColumnDef[] = [ return ( {row.getValue("submissionId")} @@ -51,7 +51,7 @@ export const columns: ColumnDef[] = [ return ( {row.getValue("problemNum")} @@ -72,7 +72,7 @@ export const columns: ColumnDef[] = [ return ( {row.getValue("problemTitle")} @@ -93,7 +93,7 @@ export const columns: ColumnDef[] = [ return ( {row.getValue("username")} From 851811471a7ab8ecbd2205f495f6a6bce7e7742a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:20:19 -0700 Subject: [PATCH 175/315] chore(page:home): add page title ## what - add page title ## how ## why ## where - ./src/app/page.tsx ## usage --- src/app/page.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index db55097..3275e2a 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -18,8 +18,12 @@ export default function Home() { const { data, isLoading, isError, isSuccess } = useFetchLiveSubmission(pollIdRef.current); if (isLoading || !data) { - return -; + return ( +
+

Live Submissions

+ +
+ ); } if (isError) { @@ -31,8 +35,9 @@ export default function Home() { } return ( -
+
+

Live Submissions

-
+ ); } From e4196109e7dda3f34af9b1760d4e35877c230617 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:35:50 -0700 Subject: [PATCH 176/315] docs(docs:images): update images for `home` page ## what - update images for home page - loading - data loaded ## how ## why ## where - ./docs/images/page-home-loading.png - ./docs/images/page-home.png ## usage --- docs/images/page-home-loading.png | Bin 45798 -> 37608 bytes docs/images/page-home.png | Bin 126080 -> 181482 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/page-home-loading.png b/docs/images/page-home-loading.png index b632d7063b541d701265fa463896d3fbb47918d6..93898e24c3e05ea9954f16292fd1e10c254e788c 100644 GIT binary patch literal 37608 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 IA^7uu0NHHEA^-pY literal 45798 zcmeFZcU%)nw>BD3Hi`-&O{6Innt+J(Y5`OfM5GAx%a&1`+n!#`@8r3%L2))nOQUId7ib_gkLc- z*u!yv0|J5Uxp4m6RS1L){FN2C<2Ue!(oTmn5XeEug>$E``PohnvcD9zh&wTyTYRKF z>dL8#-7e=&d>Kjc? zn|^=xXpCmP?y^7H`RgEcvdE&_F1>-})ZpR}lRDF5hO#x2eU)@w;YIC^y$5xJAuO!h z|MZtT+4cL_>dl+FGye3S|M)dtR*v9(A%FV>_@Qnj8!yCK*yilvU%u~P21Js5i?1rP z)Ma^({h)N}FQfl45J#}b-_81e@gNJ5?;WraWgeq>Wr53cqBRDXR= zd|p_Drgy5a)mLX`-S~BE{T&NeZ{@ojtXsIu^1f)|PQovXkipGb$J;k~;JiHC6jC6g z-hcELFTC?eS6;88`nS$aQ>G$fe0Kig`UejEG$mx=KQU#>>7WH>rMvUV9-+>=xo|Dl z!RqpaSTDHo=IGPS6MO!=+J8)#d>nkWt3tZuO5Kmg^5<1B%Wcj?k4A2;^Xcmg&eDfw zvfbl&A@V-Ok=YaqWg!8xdUU3@n0zKRJu&gT0A>l>MIEf^%DJ2@Eojp%L{WZnhn5k_ zc@ajRz5wPAJ{_6=l$v2Vxsp3kH*xH0acCPkfV%e?Fzk5x-%gwGCoGGH@>a1B+ z_qDB?>=yR=RJTz0JL~W++aIe7i8xJlt=Vwni|+6#g4|bH%MGdr<*CkU(8{Ph;+30U zgAkW`(d$4oVZV9d^|+u7reY+C`1+~sO-Z<<$^q=Bvz%&gN_o8u)tS>eoaM4Y62I(4 zFKTlymaW4`b_J^%Gi6ujS$@d*R(S?&Fo_96 zvoXFoIGy#0ytxlPzfM=~;pVqiB}X$?Qv)U~y4r*2rJ2J5NXd0QlLw2Fdwd<x93Ju2(|O3weY;TxTG zsN>3nfliX`+GGzegU@E#yOEngyJjwSqm~vbwmLjbDDp0J$?2)1dQ)2Lw2z9wrlDAj z-AlgUwfh^{^6(4Qv(fG;RL^wgo5L}x;)4_;--|9iMHh&xW2nwqoQ_5+j9R6qV>_Q@ zk;|_A<5M4cecD-vHo!aAl`1_O?#iU@=lc8o1CGraKLq7Am|~<(S)@>m5lz!e&4v$g zllz9-;Z#M+F_o$d)nNbQ(d&!Ib_dOkWr;U9ZF;fZO{x;o|8fNLJABHTcs`-}Yj&rg zbIS9eRdTvlT9QX;ncHAB-l;_Fyn)E#TRoo9i7c`7wD}b0TxU&kZ|1NCI&<*OhNBqM zFW^V0n8)*7o0A-Qp_AeUF2HOq#8Lx=)3@^MN}GF7a%Qg}*ZJiyu|WgN1d&dBszz67 zIy^AoBhNatk0yZrfi-$P*OI!P{xwYgk-cjsFO=+%0*556q&h--*AePdj`M^3IK+JUG=g(CIX z55yX2kG_=WqhZ=y-ICE8Yhu^TA=5b;cUXQL;_|-(UG`WGSZ=Y47hUN<7#j!8nRX@< zSK~?Pe2^Nw55!-t(<~lv`t@#ra5|CLj0k;CaL>gTJ4!@J)BoFhSZ3m(DD&hZPM#?CaU4z>m zP>JM|-+l3R<+}LaZ`*5| zQO(s&1Ikrzcw_RJQ3&n27O`F4d{5Klhwl6ydiSX9iunbWA9!E1sWWznsi9Zio{eCl zn09Yp#QHThbQ#*tk#-Hz+$o*e6cG2E`imV6W~-3!nS9Dwv6YVLE`;M*ledu%udixV z*rByozjN{F)x-H9E#2O;kY|2-&o8UbePZ`YJGGj$FdK^y*P1xZCAYqusmWHEJ|hF6 z$JGp7`ukPLslFkX66mx$y%N?Np@+$=&)PKfpzO-PwCsHo_2& zS;#iMO`M-`M=0K)T(pp;^6ckg3-4K3WY4C-X*Jl+Pn&ay^8=UBMz+wv@Dp(Huen^W z@^H%i!6^2so4VmU%xbSgpyfjRk_iLVrRuX;lo#o%*EVPCb9vuZ$Sdt<+$+R2+{${- zsP0MqTD3-q6u7a|l7GVp#6i*=G05(Zxp_^eF>0Lyz%DSpBQN6|V)30195 zUFAjIZDsfSN=PgM#{SI;cW>Xmjf9>%L^ZTqahP>Stdg5DJ5bK;X?={wwONPk8w2B; zA?6B{hOzu0uu%u@W;j2@qQKIGmqUItIL+fVu+)pdg)pa zN3h8oO>z`5+pqVtf%e?<1rQ{1OwX;|!pt&)euZir+XJLZ+T4$c2E#fpAZ4gizGJVP zb9ylAd$4D9HiJlRCHru9kx#i7h<@^-kbPJTI7BR3c5<4iLg0s1EGG`cFc-Bz^puRa zUo8EAK^>%w>ul(amke?F%2mNS2MD!XG7k-d&k)^1#VL@+kz7V zR^4YVPD$xnt|A?%`-1xZoeFKqvQ6SJ^p32fpkOJpWw|Kobe z9dZlRk_l`0K_hVT%OIA@qK~U3C)U;(7-Is;9eG50mUl>UB^BBvh}GK0gk$rnE!k8H zdfr!vvDFt^qjFL;d^z){Dh&UA6b`=U3bBp2KL{bCgN2lB^4_|y0URb}zOAVla~gPy zt0Y_fX$|W9ul8;C;NHA~E$m>FWLEndU%trw9RLLD9^TxrZl!0oD>)EL3$LmX8zI#V03s{_7!0DvbwFgN-Zu2Rp9{T$wx%bm$`_bmOyBli^<4r(aI@y1k zz0i0(eWM4Dz*|6CrBAB=%5pkXLoC@U;Y@m&_f-7x6?DL2(kUgSZtq1quWuan$Is;O z{JIcoyZ*uW0C<;*2=>0gDJ;XCwWOk;@LbtVQ=_fb%L1?nw-J$FKf9eHgipr&4PbBC zqb&(N;w7Hrc&{OU1SO!4Hh`CceA_1-{p;@R-5(vyI(#Rk{LC+|rJKRe!d8F1SLx!f zKe9gssD2jo8^zIK-A|AJ_M-TSM9`GU_%eEWrg217ztz@ki* z_MF^eQC{zogm9)>Zrft!lRRKi+HG65_|X$Nuqa**d$w8>W3VXNFj=0zq`2OSXBRJ+w03wPG8uCBW? z{o9_9d{3wNc#(?zKj4qsp*2PPhF2DHbzCpi_{>ZfHtc~}P+;^v#CZ_J?po3aUj{!l ztkJEn?*>rRSb<3GFLxRKu(*!^G?DtuRGp3Gln_GATcJvNIWjpO1i+vlp)}d*aN!ky z6P(5Pc(ZUXkU7g>3~F7qN5|=@NCcsbGVt67y0&8Y2Cz*2O<--=Usakqe-D#km>_qV zQHiVT0y0|k0^m+)Vk``i&I;s^%UxXp)*aQWgTxXiPxXye483afF;QDdDfL^S#=*7O z*o}mBfXH%f$7(Mgz~4H|OnQ2flIgbl!oe7Ji-OADOlzI-l<2$5b8B6)ZqWRNawPod z+9Gm%&pU~kzUjcOLTeS@fxK7w7qiXs&9ftK+&5dn0BMR|uXO83u{%FT;N}LzIWnDzz1+9U3(fB|vnz zN%2U~I3=;p<9+ljbNxWB4S`Z~an{VwnPU6MPh~!w%}pBV6=OFCxwV z!!FyTASS^s7lmGorUY-3OH12WO_(kRL#|I+U@ifQ#$-QWNEC4yW_JUEMm8AfHEc1k zCB88A%n#?T1oXmkh(0fLWw{-ZG{hY8m8(pZvH9M-DPY|T_-tr8zt2I#bfKNf2Y`?%y)i6)$To=dl3`p8?$KD=B!v3>iStbIVQVvZZ7Pu9Zb~)^TiJu5;pSbe~=2 z@xX~NYDwFPQ?`ue=bYcab0Mzf{y@pp&8NBx-mR%p;m3H&m=|1H$pubwLS=> zu!{!5vl)1I<}MA)45mLnoG?V^q}Z*G5<7R%m-VUkVTDhGcyWX$#FU%MjBhSkR&B}BEtz8K| zyp7i9qKXstyl?W%5AT^~)pufC05ab0KX^c$@&=XD9ys#lGKWqDUfLW>L^PwgSz%YDB4V1qtsKQqswF2I=+X8Wba z@{Y&22C>j{ItYue^}auTq@gJURtQl&ag!+I_a)M{PfZGD6ac3AWm)e2Oykl4>};O} zCg9@AFguaZMSo&~pg4)agU0#$W5s-CvL!N-hQ5Ze4g)zQZ=pdf2&4Mq3fckN6j$UG z=g_Thlf>`r6|~eq%NE;MdWy9sd3=Wr&7*-9ynY7SRCcNUg;9Wa^`<^Znu`ZX100Oc z#X*R;PFGP+@GY7;vfLff0tFXsdv=S>m`7@Wz!- ze1EFhHh0-|#QphiDD;i-wFFs?yE@CCVv`!5U|E6-WIBFSaJ+y^28p7Ep zd|`DRH@Xwh_~=f)q6b)`=alwT=-R=x_Knq|-fK2RygV+vKZ-n4r?P%{`*|*l))zaJnqp)fdd40S#?W$y6;2mpDW;q4@7^z#I^dew$~&XSI7HX|1VnUBpOO-DZf z&3sYA|G}%wI^ZVrr5dtdVk;Mz;D{5AbliqMqcC3U>vpLQP3N2!CtV{&Qb71irhsc( zVAn^37`x?Wi_06!>FIJF%;0UD6De&>|CJ^cqd^$~9cG^~f5K7R)I|&R0#%+R5IFMh z)DUTA6ef_?vwDqE{3B>BDrjiG?Q$IwYJlO=n7)@v+YrzoGBo(H1xrNRx}B}5^3BGL zqbC@cjnGcT^yQZhapsMS8pLINs7A>9ARwQ2s7aO9^?t7zQ$oglE3oSNoWEfN9bFhFpQeY|bw*i-qo9=EU`a zE}}a>kyyE^IrbH3t!N71!1L2EBel_aNsW>_TT57AZcO7E^9SU^s#NKU zq?7AQMU8pgy$O{~N=08j6H3(+7J}eN!+uV!g@{!6D;IC`Rohz0;Gj_%J8ARbc%&+1 zsjoe#Qw`#0&3sWh#@%!=@+?!hDBDAC7gvb(k zEnfs?h6;@mv7l(p+%;&=F$;7DlAnOU{8|6cj*0)M1@JHM@4aauTl6;UG0$j_ztt_- zXaVM)6gx;1d9{HHV?4ezfr5#&G*8{zP8yj2c_8_^<;*0qhwmC=xi%CGmGX!#R7eigq~>^J7m)N z-Oe%qMCb>DbU}U&&;+AXw>5VOyaWlrp`qmut2oZ9)2rIdKKb(?PvR08`ebgpkv=o- zdn|H8iqnX^4i{Vh!E}}>QEGlx!6C_>`@#(S(sZhU%4wjJq(K zq$3ED5XN#tLK-trWfh+a2ka*xw-Qs&48>i&mTs)GCV;)=T{ktDVLH&)Y31tsA-mF( ziMii5x9~_pxT}v+>1WbW+jvyYiuVxtWQuBsWTb9!sVG|}h4K#1*<=>sFqTXV?0l$Q z#|t5c#`?E@!M+*;$memx=Su$j-o+xgacxFpW(U8T05+sIJW`}StV=34usHD?ov$Y& zTvdUkcVurz=!lRG1-O2T5fG2-JOq>-nDX5MK%?NW@^&Pp|I0yZddSQ8ldld zR?*sws`le!6?tR95}Mzou%j4Hc@1iX4!0V2zCH%%!ro(*^BRnZYHz5+(Fph1$)nEW z2w%~~w>a-HYMdUo0@}DZNu2Ybqn;jb3OR~Vn&y3`SX_mE_Zw12^~TJ-p2R`is~Wq# zGF^`2T5?2?okjOatq5Ojr76U&1Ku(@Em4b}a2_xi2QbpB*tEu}B?rF~J0(D*R3#8` zMDm+ERV7(#g4c;V4vU&>k6Qa!DdAO1eehJnH$s2o_ZTgDBB{|3l_*nS^;G%-^*XhUknKDm8r3iP`C zN`q<1(HcHT))hde#CrM|%S1fwBL%yTNP$EXF_i{)QShw&Er&&C6F<&K=q%s7xu5x{ zSa(>9<_{}Qw13TanG4oyg4H%J>zdIZ8VYfb_tK(RAGBr_&sb`5t10`2e3YE=yysF3 z%z+bv7}>Zs_-j^s|GCWLka&sbj$$%y8he=@#ggCs+iQj|qE8Ip5_4VXyi+8&gbF}q?dn=_EZpJCZGU8@iw!v`6~-l; zN?PA*@-Y^LvaUh`)SEWe4wzdKARf;q@MMxqp;2ios}<)2$9^Xwb;=K z-x`8e#8HZq$uX*4@y!OO$Wob6E>mF$V(x{Q?8?fsr{=ZdMd%57^$7rfe*&!;m-=ib>OrW1{70@F;OL3ybeVc`Hd?H;Y&ZUsX z8lcaF(jza7ziJQkfz}K8s~~cZczA8BB?vqoQ+*I6vPzCcoQ8HVz_cnS40xB)mRlVo zo<=r)XaxCwVxOYNsMcO^M2zMAq>M-WMo0tOexGn$-P?#+ybhTj2Sh_Zy}5L__`u0P z$CTMRnliP72oi8D8u=DM{V|O~-zCQcAdcC0T2Hf!`dtZ_d$ExfIa$Y-stcHGfOMoys+qs{}PvwBcYPuMr`p$fPs7X@@^L>^n!gV3< z9%qW{8g-0Tu$n!Fa;+QGb2X#xO~p9va#iTnqO>sL z(o$h8kA_J`WVhew*{crYn&?n>7$N!gI4KrBJ+c5$$tx1-usIET5uD_;aBK$&jRn-d zP=oj#=gl!!(*-bcHR&84rxWBc%TR3)VSEdRXY4mzepSgTu1!|52|0PYcx3?`B7-lM zHV;KC(i<=IB|6q%@4tq})(kEFaA512Pe-gy^Bsr&5SGXhkcPyotx|n4b&?*qDZKCc zxC26Ug`4@r6|-HHpS$s6sHLoc1hUzoX@E3{rblmL18|X4iXSl_Y?=a}bB1!2+U^P- z+yn#M%s}YLg-1Lwsdc#?DfcbQ?|C~1sot#IIT&2X07AdBUBJLV3k=dk3Vj*xWptoW zR<1CH$9ME-y@_9pxSw!3Ku!XF-%8WWQwnHwAxlwD9CQI3mvU8l_}VtEyMjXkviujZ zpEEwK`JHf_7Dxf5FN|u0CpfbwRq_gc(n&j~*K145Z1ssq|(y& zBEf<#;U6Z=V9|E+%z%c-)?sV6b1d(LZx?7+gV8jb)O>Hb(lGghpkORPd5$rCuKK zK#bY@w4FcR@no!Fm!sYpBwKwD+9I1apT;O4O~YzQ^%LF5pr3U=HU(cNmE9N|g3~Yy z?d?ZAJRBS_4%A4Yb$z2auJrKzjjlVi*C@NFEPVMFK(wiXrQQlh=&Ub|3*=i67mHAM z>W>+j3Qt6DOES@bdt}3o+hSUG2#7;coVE@%Yk0!EQ=TM*-r4>^yfe+1aUBw+h@6E9 zNyw2N*%hRv*EnQHs2v=O>!}^PtjF12mtcij3)dK=xM4p84hXM1>oB3?sC9!<)QyRw z0%HhY@#^OclaZ)xNppO}hW)<&%dQJ5oS6>JnrY1fkE@on@mhjBY)O@kinhkE{@K*E z5Km`>akE)1R1i_{K8ohD>ef~#e8SupK4~g8#mlW@eLqW6H-;#dfBeaYR$%=$(Sbf( zog4H*0B;DHu?z$gXXx@>H5^su_O2P&xepRXq}Cf)!Gv$PQ5xWoho6FsJYr^AOy}Mg zLm0sp5_R5yMXsnw4U|ko!eVj723F5DvAWC=nl}<5Wt5YUf7o%AwEnyG~4v6LqK0oi&}5AGz9;+7F3;B3=m`@ z_Cl*#R<}nvQK7?XjD5p0Hz>_|9nBV2b+Qs~mkD8|qtN%AE-WW}@a_R!)?QSUX9Ecx z2)%oS*Q}ZE=`2|cj-HD{UbVTZ$oPG*%2j7ns$J5jj9gMRXIAtiEVo|PPTT*r#0UK^ zR8Y#}r-1hGuD3yg12mf*ks9a0cMJd7+Je};tv7KmsWSH=lG5bxcf z(I4#^rKr9ZMHvw@*jJ5~rw?fS4k{5|mlnr5HA8(ovy}r^jA8EbcE7G-KDJ8kI zSX_z}7o`r6uz@yiU5JHIVsOijMZ zx;t^J?bon^3f{13S^*UZ+I0Yf9ydQ{p~T);dvXJf0>LY@{Y!4;f(o^dKY^k5Wg6&* z?f9L^>z>LLs1En0of5TgE01eMjGO#`edI~&uiEaHS;=~+h%<~Q6T0yRYwn2ao9q>n zG?r`wfs#(ze#b9?p(N+XZR{FVIy4&*XQz<9jzefVe8}I`|KgQ@)DiPh>}0KFou~!8 zaTPFd17Er#Uf%qTcVyog|Ai3=ojTL=#J**G?R}qT#YxJXt^6QNSv;K1*ZoQd8rnS( zRB0GFa#J|KX3s(&1_rS_D28WQUf3s-@$r3aQjSe`4U*M9Wg?c1vpDwKPxv^?6v}_k zzp^KqnWr){6m5nuWJ-ac-Z4ktF}Qgo>W)L2?xFp(mOgOFQVoUX4K?2@+7`b(7V!<* zDQ!fh4b_z{ZH&HXuUY#o9tblPG2&lAndxkk_M^9xnxfrwQsXpPl<@|y70Q)ZnCnHb zix_xYy?!!@b@DP1n#CaX0zeR7R3x`j?%ho2dlksL8H<2)$@(nam8I` zL*w#P0#Cw@I28@q$RneTDyW&>&tZmeaIZ?0s*qz+>)&3&jW!oIp8)ca>8_S;RWrZ} z_2U7yKCF>npnXmFlb`JIj+r5aNRd|WNS6YBSsIHf<3c{vI74-tNXx`HvJ#a2r4c@d z5cy@cH}?$W9@tX@u`D_->3b)O3n+ryB804P*_qIcAsQoZ0p68tl(dG&t@$|=jAFcn zP^`oD#G%Jj7F9&#Jo&&p0bDlyb<|jHja~8qUt}Vf1x?cVwhkI9&Mh#9Hn_OgfZHMS zi*d#iGeGr;&FWztW=kNhIqHGzjqq{tnPsn()qwB2>?(S+V2)m+a2QZ&xV+{@F%c}d z=B~;agIZ3tk!N_p4d?cujp97DgXSNwAJz!Opbt({vy*^>$)FF5k?M~H5kP4jLLMK5 zb1E^}AEj24o^oSa#nFxBz0FS1g!!g>1Acl$N46zB;3LYm^pc)8sM^sz*w8c076kzj z{xyNvQ5}UGa!k!|J>F%Bbu_%b@(7IFq=V;wKt|PBxALop#l!^_8!vqUr-irK|WU2dLb+$c`Evg$cTmQQ9y3>GN zgES;2nYjv(R`Ca*!=;ccPsT_&VrGB@4u>8WvxsTTPjOxWXZ7=2Npz!Yx$Rc=g#7-6){}&KUrP|o~^Ld`vudBHRoe&i*)HAzk4w|O00uf6mv+~LXjDk=Bt1PIa>5iIjVri zSCd#-Y7Y-PKa^N*DYCSgPx5=?lOh-;ZeKO8gqo>z{{|8=Wu(p&)x8n3qW&YH8qOma zQyca79Zm_Gb%gzQ?PTTTBSH&6nQsUFg$B}8bJUd@(sAMi@*RO%LEcZken+C#+J@{| zOcqo55Y40p0$9hdA{;FgoRH9g2M}FX-wh7(c~VqwfrQUGBZp!oIe#bbE4nEFk*}l? zF6iCVpqla}6yah$2JCKw!>Tzm4+^j>r{6Y>o}W#PPG&Q(9&7@_dM|1!lNXYOt)%!5 zBus#ukby!wsB_-1DYzbP*zSP6x;)rtaesX5zUKBr)C>Iii4GDc)86BZqd0AT&VLH!aYWFju}|7OPXK8a?AuVH-o|=rEHLqpF5FZxkY%M|Wd!{6mD;^pYc3Mj~aY?5SCs#j;edOma`*K>oE z%qt^JN_z_yeLpHZtmP|-#j*I~33C?x5Yj`~u+0O1crEGNZOwDi=5PF?^$(h_;u=ty zl{U86s}%#Xo4BYk=&a`Sv9u9T*cgQNM34*xFz-xuTz?BuRpOhc&SEtM7)??u!^bLN#^W0v>FI~vg+P1ELDNgp(e_ezR}QOpW;zy1a?T-a2e zH;9R^O4@yDbaiCqii}Yb?m|PQ$n~FSDUVhmeoE zw{}C3&-@NvZpA_&R@(31tx~6DD&{?vMK$L#*tNi~g-VKt=8`?N zke8If1c_5C1(aT~in*BHp~}_hJO@rmt`hRe7LUh4fP#E_TG{piC=hp^zfjP@&S;aA zIcFzToXLuVa)=0rwgyr9gwgkfdwN1Z)!~Xv&M-JM2WGJ`3$N2Jw%f-%qhNsxS9_eDS@3v-=-@|#Jg(G_zk#TQE>)yzRT~Ncx370;elhpPtO&-jgUl@Y% z60=pGi+bJ&WEX&OJZSY+NHB;oh*<*@m!d+2xrW0n3M8X=x}K|eTGZTbt+wbH8*1^V zie)AW>fx(AgIZOf`;<8Y$rnCBOFUo0qpDB_;jT?AUacl36Oj*LDKDcR5(i|Ck^GJr z-99G-O~+N@X0qkH-;wqWyAhXd31RRuzkB{sn{K4lyh-uo{V+dr8j*QHoGxtk3+^cc zz^oshY4aZ)ZeAMrHt|r6d`Qn0=iUZ%X@#|U9U@tr57MAwRE<5m&rwIwd@|sHlNm7r zabLpd;koa}$6_R_^#>fFS2Yo@S8q&KV0f!cyw|c5;0wzKcFo|pu0o<_d1m%~-~ssVCn|-iHY#v=81*)_9^iZ({poK=x&EVP!#Y zGMVPN+e7b+qVuFqN%G`(Jc4dYX>>w)8|uo zB3oeO<|NfwvHUiYZ7!5J8+r9g3h{$UnTb?H^k#>hEaBBf@R0wbAi(2=+SHjq7Bh zNtwd=jllTLVz4<-sn{xiEa2R)wW1j(L1AIDq-)q;ipGA9t{VhwS;n4={lk{O6h~e= zmI1L8%--{BSK!`Hpuq72CUJuMFCX|>2^rE13N2-_$`1XdB80`(<{#7n=C3+r8f;O7DZN>r8P)k@3-d=LG9Za|mln2~wG)_ioJs%Q zEzDm9=Fdlli*7ONx0gU!=gEsgTbTbW9he`a@a6CpvyR)jyAD!$vmsk%s$i?dypvpS z<(#Va_0XO=i0aoNg6gkUv9L0EuRvZN++qc;AJ2gFl7r|34oDh(Sh|FN5AszPpspwd=zB&dRX)(AHu76*H@4puqgN$%te8&AZof zNBpurcE80p7wSJYbY|cCY--zZ^l%nQk#*!!@+U3&ix)4j(9senLq)!U8f#FiCl?dx zGu`{#36VS|7*>_6{;l<7H)HY|b$;N?Ly+7xx^(G{lFK*c+Yj+NX35b4&-H~-%8>JZ1L#X}_X_jhOCL5g1|f0Cse#vi``3h!K| zp-z5oL$y+Et*y77b6;j0-xZ?v3JfP+&YV2wHa~z?CjvNjsk0?PeoAJ?(12VBXn5e$ z@lmTCapW|)V<$G^$8<<)2^%q&d)^UybJwTEo4dFw;Io3Q$j|9`Df-kmk&a%H-K%XT z_j^HY;PI=Od(xb^PY9UelC0kN5K}+hO>^;LdEnt8U1(dEM}sWsGPiHG^)X9)mwVB* z&3DgvXy)E2%a`}azcG6%3ClJTFw}QQ+aKqgSl4ohzFGDNs-PN#$39iGl?F@-UlMUK z7wa)`Q+O&osXR1o0m%#Y-SvHGRqJV9b)ay1V7}uUk6O;f**m6g(FQ5eCy!R8`SOPu z56ueRrg?ULHFZ?AGHAAxxuP%hcfz7mKJt?%S4Uu zWiC$jpw6Gljuuk+rk+;e|J&`soERmS%ajnI_M2%_%3*+fx~5oGvtfw>0&ihg<6}!a zds#gKdq0wE;8jZKVlmY7mc`n`a(}D?5A&Y4zxmXwvn(COw-*&e7Wt>vZGD7*Y@~7s z(S9+5D*y6=TE5pEC+87AnT8~6#)vup&5m&H9l)%ETpf>=b_e(Th>d`kvy503=Cax^ zrjaYL)tH3AR?s83a~WpN>Wz2}8o@6ua-Nd7u0Y<9zfAL*OFIiT@=dO64Kd+_zDCW7>(H zmG5%?gUfe$i4V){C zdEPv${uP&Xxk^bCs@(h%IGEMJe>xcO-)EpkQoZ$N%zXklm`2IUsTw78{(EmPrzxN} z-R)aa=QfqJ2F)JVy?p`@35nd!$?p8>=msKA*M90-;ayyeNO{aP?QhM*m8Ma@sk1f& z$f&vN!U54@uy_i7>22Z0>GrY#FwWxiv@|0bi=z9FrQ0VP5<}lPwoQ`Nn`OtIogHjS zhO?abEo0x1Y}CvK%&6OIxpy7-@}s}_a%?xkNqAbuM)h!;9+@fICPjC(ERS!vSbj2@ zFf8c!`SVwrf#P^`%2*YAr*bAl6|}B^!X-k|Q9|1#%1VF;&s@B0vIb+Z&(uz0tn9d0 z>5jAc>W6UFeE5Rj4x>sqp5k|#=oWEtqaI$4G-eCiGkDIe*skQ(h2qLL?-E#_j)Qjw zIzep@zu*_I_L8N97hnR%uht-qMwHu?&=5;b`+N7KFN3N;!vt!Ng>G%tE7ls{4J}uK zPf$M^4vXLREY|8twn^&mOi1r=N6kWv`y~ajH{J6Nw zQrq=I4#h-HqD49#DBn)Cm;6X51p{7^K&cHj!_%zKzvq^L%yZR=ZqZru$rPZJ_R0yq zUqfTa#Z8oQvy6L-cP^H-4&U+C8^s)NsRf%$3B zFEU%qIu3LOnSZ=<>40XH+PD`G$TV@?riZXUdZUL zrb0saK?_iYYUPt(UL8273kKo*_aJ}iWCF_tnjTb@l;U!7E#71sGF+hNcNg;Z)-h>! z2^I5Q^ch0wx#$0dV-BkL+O9pIxy|&K*Qm;E7F)-!xh6Ru9CMqrRBX9M%r~uS_uTd8 z+bnUX`o=X^b1p}ZA<#?EU+QekFOm>z_2{)(>N9d7hqHO;b8D-|XPuu&9_)D=c#J*WKISi z<_K1}Aa92*Kpyn-tl17;jWJv89sTiptlGKPaQHLwOypg;!@pZsojarRL>7!AtJzD( zI-kHCL#XHWBCUOO9U~D=oac&fcI9}Mo)1^{i`T2)#2dGt_rra~bN!3Hu+;;)4H_Wx z(A$Q$&G7VAd%MiE42?Q6=cIGFKhLIQeknqKD)hm2-QgE_Hs$a9bZJB+{U%-RX|J)d zaV}^zyTA%=V^D<^_IOM1E45>J%Q__ch&;~_&YS!fBA}~PAwRVF zCZBz>rl*2;fm*B8oh1T(6Q(o+n6g>8l9XuK=_+K#qWG7W%5DReQ-1wpf{ES$=@uwu zv%6_N^)DhEERly)KpiOjya+p+4C)0d?Pfecn6o!`#nR}b-zrU>@ zSrwS`=TFr8>bAIomo$d(;c(} zeZT)pMzjO$qM!I5*d-_FU)ed0=XSoYU%RHM@k0KNWit$J{s%6`-D|3doi)i?KRlmAyDTA02N+1_cnMlRNL9H%#PjWm>ybVl(`a??=tB# zR-C%pw*}+%y)VY7NZUkD77X0GR_Wyf0V6_&c4$j$AJ)Z}g%3FDsHs^ATPSDm-Ou(! zRW6U|b3QWLx=XX=qa7X$sF*r1<|V`McRTb!zW~yzvk-9p*BJe8Wb!v0p!%oFi)8y#rxZq{=&hQd-ebchf==Yc@HSDI94us@*Polkr z-QL7MQ@WY_d7wl!9jOakEzL4Bs6Dp#F@5oL3`#zyD(bx3=)Rq6 z`zydW6+i3=0_h)ClU6Ay4j8vVmT1}aIJLdlCzq4)ZQ@7!hpqToHZjI4y?czoaKKab z|4FD6#FoL~_lKzPHt%1EfGDT(>y1)R&4OL$ zTCrb?$4)rE{_d`^2~#A2Kq2ZkeEP0~!vz#{iMf9V=(>4R3p=o9t}=&2`eU^xI3(%GpiTBJ>j)(%TfCZGB}G4h^Z6a9Wnscq)4k2T&!NkYG&~ zVnT(gY}z$Qf6QH@7-^mW0L;&zZ!Xql;=YMMP_xnyAD%fz!S>1ZGp}C$Kc(gT?+Z$r zOx6scn?8SNddc^i|8wkunmHFV`1nbM|JW6X*WdB0=;OgZu&`*ptQby$IJy6wF!C&1 zv;U$4{vFvVF)nOO+*H8LK1j#L%E>N)t^bND}XO@itweD|iVnFLf_ldS~9Ekr`_q9Ayivf2FYT!D6!S|UKk+C^Cd4xDOV zU2B2T3LiQ*ea_=jt^0Z6WTJ&}> zYME1rJW-a%<56q&z4hJ+51IT26RmsMMppJhWqQk&t_AmYTprK>Q9by z{PA4~wN2IB%Okm~aA3UZ@phqN))N~YQ-}V)sG0naB9s4Fq3f(X#I5%M<)Zq%tpuok z$p_!8oH@NM!LMf1-ZfX+CUOJx|LS;Z*AwlT?*69;s^$v_jdyV^sZNXVfddm zc3cb@tl3DbaMjRpC8D(qdH)N?yy|{m=Os1<^;^-6nn-dcpp>`zh&lehIZ!t_)}_Td z^*E*`>e-)ev*=eD^Tyq`7f&1;m$g>T)q>G)eSt0~>g~VYy;E%{@4;=Q{Z(;hs$RFl z01FMP0;$M3-!_CC)&M*&H>5h zKeS9Y@(+f>-c2oYQ_1}oMZ(;W=fsf_W6R2#X1n!OELd0E~* z^4;ag+(*rG-gieem40g(0I3y6evO zt?^%7C+GD&?|z>B>}T)S_fN{lTIu6|qMGynF*EtgB{>(pvt&wtqHk{s!!R)TbNluXA6_zdA0#zw6-5H!?@PYk8bb%9^`u z?jEojh!R)F*{I^udOIT*>bh)>+UO_HVk76G&%&3mkm}gTQTfINR-8p#T%!+y*(wT_ zIqLA4tHRPgA``iN!;QdeZ&$H_{-Rjr)J(|cB+_$(6cH(9&(pand7Ba%^!CLQTc+4) zsyM~sXjASSOiibC%*8}U0rOCKZLpBoSzCN_nxJtTMzjm9-s}zfcY{#H?RE#uAi!h2 zv;&)Y`?SZ@XcqA+p`?5fjE5hO@!P&r0ew#y;%|wJZ6yu$DUBD)PR-N#t?}T!4BUQK zg=HPzHqmtIu}=&?f#Q_1G3v9B=GxV0{l{-aG zwCxCu4iLfIH4HI$-KX|$+wtbjY{h+>hqv1*dtUI?pAAm+Ea4iC#3TWy(T%?dXN|2H zjo3ibH|E5#oAZKdK!grd$N3DZ=#}M-JGW3`erF;sLpbMAkQXu^x6(QRvuao>eM#U2 zq9m5RbVXsa)AyIC;{yFsMX|4yn&Bte%(W(OR#%Tv)xysET^Y|fT4TP;ldp;Fsnl0` zycNOWc8rzWHEOIByM*EfKtox@PJhsOepXWvcyOf7{+MtyQ5$q@dkIH-iQP#=6>XuF zb$saCA8^sw@;5V098c?s$>n)xq-bl2HR}j|>}|YttSF~<(0TU)!HLxlQOamx#+fCc zDd8h7)X~vQ6Lf4ZJ2@_AJPVzm9&X)i5rwijJz*QV6QwXIc{A=4xuv!<@g@UQg{x*9 z6T)jL-5vh^^|Bs|H%Ym9T~AYoI}PF7pis9~v5x zmX^M?RX27iT$&41y_SeMaYsHhUFvO*@&Gyvy^j_d?@ME$)b1C0rF-G`WGO3{{kCjw ztL?D;YD~tNKrBmdq94CUWAYl~UD;~b2OY+#=$x?fNNcfP6RySvBds&E>0sw6G3~C# z7>$qoZ05yg!PV81p>meEXbIDvbSQKf9F#{XQOp=T?o=K|v)E;s+?NA8Oc-oWYl!ibIh+9sTw-UX-k zZ{#z6!_HoMj(kUN1Fg$>Cm%3UevfYhzw>?WEkH}Uzu^WB>MvK6fC!$1Uw%??ez(8A z7d;4E$4XjlV1+&?$i`+a8L(+1-}V3F3ws>9*_%O+39r4peIuXIb9Tl8slCOLCJ#`? zDcd)!&fVwY^xkmye89ihBbk}F!9MT-6YI;kZ0vgk_yE29{IHF@+CcI~cUkHfC;y(J}ORc)CToOrN8S!9&2%VTUb~~E0)OZ4~*vy zulTCR`KCTGB1S>L#l=PS-5B9$tyZe)I8`e&O(&$yIPp|?wY`!O#sR?aLUiL451uIW zYqf!0yjbXAA}8N-O=o8KzJ%n3@L>Ou(b14-hfaCuvlOrhe?7ZR^Nr2~qo9pbeJ9XP zrbR^en7ujhU^&Ama~~4f(9)vaY@PEeBH!!!yKSLweiOmy$b}dM^r@u^A8)w?BHpDQ z;ir0W!hGr%FI(qe+N`rY89`q~^pSszUz{I)j$bkMvx!>(D0KYg%Ylb`%A(Saef;<_ ze?eKE0Xx+4qwX@I20 z`=I>kXJ6i9&AW7GOt!MEv5LscHW>F^qLZU)2Y!bSqA37Ljx7bdUj~wj$%F}-uA11_ zAyM4~BbR35w$!AybcwehQ`zxvrUHRLg8lsb%p|c67ISrR7ypDFEBm~6&HMn+Yi+cl z{(0k_Vr@fLl6k8x(Av#gJ5L>%M|GLL{Xr(wAYcdMIdb0UgOB@D{INgZYK*Zq!el1N!ZK zSNyAx=Alq=n_d22ja6Tl9bG;M@-gqC$2XE2H_fOqZ{;-RdCSky_<@mWxo1ZNR*NZC zlK(-SwgMs6zG@m*gY~o1RmIgDj@{Z6GWNvVY?@K0iKqeqY*izM>^iy3a}2nidf=4YJ_WPt?BiJ{i$gE(yZ(+B#DCr|LLI*?+X9$j zh%Uo}=gV2RCYw1k_KEDBW>T&F2uK3KqFlyrPv%hEGHtEFPg)$Vr0WC=#w+gaZZ&># z3y~JkM85C(c=^3)oLPgUPnZ5AdRXwlIi32mJ^*wnGEt4_bfV56YONUapA{q$f%a2QpL(Lc?AW`+4U`Pa$`wtbM+`kcn=(UiZyV zc_>+Z&6*T1Q9KZs^f8W{`)rt_w7EH}BiGI*@1dI~zzN>}aL3E5q$zZQpu8l8cTzB0 z+9jB)RIIzVc>98(5@unaM@*D<+{0gW$0kKvy*xbRj~_pND!%3{>&yqRBzKloNO!5= zMa7M(OEpG8%hs^NKsu2uEmu%{CdoD&o9G|) z5aBDYpb*+iOw#Q+s?m}CR|7}wiSXAnt^T0V*4BZ0dEKfHE_W*Em*Zc9ofpTOyU1@Y zTQds2ZuS=A*()UEPo>s3-`kdvcCgPxCs1+i(vZu%76;D&JYFMI9$k(C7Q~D{# z)AH1GB}00>z0F8~8ALHv(Njs|!R{2I*MkQSmh!X3e=$E{J|--<#}oQKrz^uYR;&zO z10K-by#+C+Gg=p1(zb>TZY!NvcX+x1qI~7&13nlEVmIhGd*KgqBEhRqe!`~TiPJT0 zkfvCf)@{@}CJAyPlf4_E^}!n;vb}jIy-^QX!Imw6%k6U;nP|>|FnzzhGJOM1G<^6V zQ0LRUQFHqL>kDg|0~|>ubIy^;8<9bsTjnfgH>xllq(=%d#bp~^NhO=%4cy#l_mV$) z10TyPb2hqPn_Wra_f7tZo4hRtH*#d}}n5b`X?e{^Tb)!!I zQ{o4KbVnzN!1a#<7s9*2XZW{W$jwy1(biVHiXfwsAgwd-%Ao7H61IRJizVE#x0h7q zUyZnHsCHgd!7SA|)H)lLrt|Gg=k_gQwC(-0frN>c&BK>vUZN&dR8+!)#e98*{J3M~ zGb$@bW}TW>RytKT241)J{O5*- zM<~=OqYS-WyNSW7uj92snubD8A+-FPja5TG-$k8#OLTu0^|@&xgyW8?@3jnij*$dt z2)NZXRP)F9^=s)L;#bR!5-?FjoKQG(rYQ5Un@bL-fPg?a%QC!NYBfT6PpZsj1+(He zAF>Y@hpHW`1E_yXB)euo%AR4fN|Vp@B0CuDTRMQI5>q!dpPmB+|XNh_WGJ->W>Ht zUT6fJpc(zZIHL@tu)LdQyjWYX&#b=J5UObQn56AvRN85j&=eM=2WJ;A$|Nb0In$cD zwUbw472Ho9-S5<2`dFE$eZFyrRr5OSK+lQrHRGfi-1zNSOtx2R49FsfiUmY^sI>O} zcCRMAOkzuB{tv9zn4D|-7Kxe17H$3A3xMEeduvg@V$(JKT{SVr{0INAOp5+rl5Pao zT;eD#_ABUkPH)wmOUF(m5X21Ij|wE_y*l|sb^aHS3$Q)nh`JfKy+3p%!8*=?4b-tj zfjW{4pNjZ0*zqq9DmH2V88Yd^1a4u=q|>YKA$K zg3G7$%F7-p_zT`3*=K7S7UPOGIPFAU8L zT=MMhvldEyg+O?&iHqW&5@m|0{B)OIftMbD?8S=$;GNHtxjQht-fQf=uCYJ07CP557ST2y9$DNQjpvW^uQ+$GPahbqseB>@x@aYN;4km!DW5;wJjliq;K?*Sf zCwc`%DDyrvc9;cEAls`Md&_htSu}BcIcs@UuY#NAwsYc1){WxxdmrZ3oNHhjr#xZl z$>toH^xw2#{6=ds&9U8x8pN)P?hm2MUiRn9w4&J}yvFNatVb86e`K6Ls0x1{eF`N4Om(}ON$x(s5ivZ)O(CI; zHN)HHfR9O7nGJ^*CGFt@tTz(j{*iM2r!^_HJwQ-kVCCZC$h~tkx^AY{4Lyg@RFmU4Hn!ptwjxCj9nWR&=&|EknANedv00~Y zGmb}Ym4zhbdV; zSr=G!bjpF<>Q~a*)b0!}OZ%PCvEGF$()xDYS{fym;v8|E7vv7SPA+?mJe`%q$N5s) zO7zky>61`3cazRP#xK5zpW~NnVRiUnfI@k%a`h=um(w9LthBs*a28L|T1vT>90@GVhT-Lg?2y`Utd<&DRVi- z`JG|x$|#;veg7#=?BVb5Vd~1}@fO7n_Wb(9(K8`wM19eWYr#o6f!6g`9CXuS^{~0# zV7UYO?{de#@@G^*T}fd5S@gu8(E|afmHq(GL%PJjAR>IT&C!U_lI8iR7MlWM+#eCN z)D(wQDK;a2$2g_5wxB1Qr$rwmE@$0j);O31>z7pcNZfSTbJgLqCn$n>Zi0`Fv?5~6 z_n_Rlb4cL$1fR=Cb_mPf97Cm!be4&Cth2Nz;NMp;BGe*!J( z+uzg0+f_qDb?wprQJqQgEGYzKo9lel?C~O+8_AC7En|ZOx6Sk;(nuOC9eh@fLgfaf2Y-y%1SF?MUP~MZezPk zy0esYsWoxYCl|c6GPc|+v-|KXUO+{Ka0k3hueW`G#>NM-cfX~jC1w3o2+udnN)^rR zo4QE{J5BHQ{DmF_D8M3S9@=Yowr|yo&r7-q-lj#3h=@r3?NsARZN#r2ZCD|9HSW|N zi?=7=Py{IAO1t_p0@~0DiRVmVdU&v68~<~~HnOS{E%tDR#GQnE@7dh%rLLXoxu?NM zec*adsD0+I2!w=aWrVU||_U$nTX6NU1knlJ? zrx4lOwSP5mNW__FwW~jd#%gQ(CiL2$Xx?eLV6v5^b>@elYqKi_6m%g#rnvdPbHh)W zzq+}|as4EUODe&R8-{7!Pzw%EHA#Gv-gip3;5w3n9p%a4=DC=>JkKWAeB-?tqq({H z+fYq5=i?afco!3$`NE{k@VyV+RiBbP=s{I!ZiM?gxwgDSokQ{~W(GWR}20 zF(zjI%a@tL=l%6--&4>K)&Gz;4Dsl+|w)YqxEG782rtlL_w+d)Qg-_`fu<&J;l%u?Z2jInDGd{8eWM zct3W^i+dH1IW}{fYPQKkBd&m9`;XdzLFEDUymxM%c8}k=)-2z0r5h;)gDldKKs0`0 z%=pE)0Hl0_KdLj(oJRd{&}H-8+%ku`kN>We*cJc8IbxjuTTYw*d%4DBtsjo8x|M&` zXBTk%zhgO?163NCa>@^tCdzu^KUZne=&)J;9s5&9zWblB;qLK$!7*#pHeQ+URJu67BLFPb((K&R?2^@DV`zzM-C|8)eKS?s9gPo- zFVC{|kBu4FcIW1FUo27t))>1q3!P2 zR}2>ZVz{oA<3h8RF-fmKfEC~cuwvW#bH%nrmf?`NgK0d_8uUqOe~-g`wH!>jp^a#C zO77Qs-5E;yv18gS=E>2LGl{D`<3E+kBeipDJHJ-e7h*5P#>Uo6ky}pL?>b>?_*VnR zw-EIjupyt|Vm;ybseAJ1#dnlgu>rW+zXaVIhjUg<#yLtuxdQ&354P*_IY=h`B#Kva z{a4%ohG7Rk?mqn>$p1MwozZAg??Pi}zmz3-K>enAG$QnVSOJ_inJ*{GT>8g>^WDnw z_plb3^Ko@e()UT=^wMIQ87S&;HghSRK-E9!Pitk$n{tnRpL!zpGc%Or&v8=pPo4zQ zO~j1WkIhyxV?XiKgS>sEuzsKd_!xfsE%4F!SkZbX&}m0@vD+l0cv43@)s4anlSEQ_ z_X)z5UQrgXcNPk8?_Qctbbt9Y(b?D<<9lZ!$bE1GUm`bEJlB^$zKp4CW?1Rxm}~{y zcXDzAn=?HnBGw6s<`R!vxX>26EvUZ<${)(~s1D6q7<93?m%NjPvXGk>s_}wMt;DWw zBVzeJ?&i$xs=aNV&>Ik+n3$XwL|{fO5PV54o;{AM8BW7rRzzFIuJD}%TBkQC+Maow zQ;x63=2dCKopj}?4hn~=juWs=4kvk7PqRxgv0P|cvdq(PG{kTR2RSPxtT;AMMmR%! zrPj;A)vHmtRPXHm`XR%;`Fjag9|k$5nI<0djSfM$DMi#Pbl;)3z)kn{)1J0{DjjcF zcCSjqJWoRpKHuAWK_G`xSJJQ#O^X*_B(L0!Cpmh`?(c+=Ie(4m$IOj>15QIZ9FKNo z-IoJw5ioV>RC93WV{^qi88|I#ppV-4exqhCoBOtW87RhS*d!=M)C z&KeyWYj7DH8!4`hW4-LmBTR{N3R_zuRwNp(i17g7*>RPW?0%WmcA3FT!~-=F;2IUv zUoCBLoD8|zcd+PHJS0cM(X3*_F=CM33C=pNr@ncFrO^`U{ecH~-Kz!BBfJ*GETN%T zfAqH?1SpSc}g zzj=MRy5{&ty~Txyq}V+$W?HyqI1O2j*Aus7Gsm?D^>$-|{OL>```UCVi3<7<{COIF zp@lc-(KKDZawIX{phj}DSxq^vnUWB&zgRuU17M>RbeSK%Wi-t zYdVtzz2Ea03Ky}cM+vYusLZ(`kDDXWrI&mWLq7QV`uw5T%FQG(pe|8(gWN6oU8xa* zwOZaS0)ax#N5@c!&qtcH?(Q@O)U@uD#baA7I$j;A>b>ind(c+F>t@A64y%sfwtgfm$RXr+P`9jHf2(6 zTJlPE9nmH|qtmIf;AMzT^z9f^S_~F}7r&$Ee-NwgBM1%WfH+hclW;I*FJs!P0}LM@ zZA6P7uZxavDeP%x%Q%~(Or`_u!v3i4taGgaR-U3&GIoAww@J)H(z4o1_)&>X=4JHdlb^VteBK=1cFV{3UnJQ zmsV1=`U~6!q|oQ5Wbwbzl`=ymGYZDLjz-o+`Nh+P?sF`UVZ@Nrgeww0

~dk3pX^5;WbDW8r#r2!nQMTgV|aJYUKnS}m~E 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 diff --git a/docs/images/page-home.png b/docs/images/page-home.png index 302686d3fe17c43419b154b6cd61cc3203c5c6aa..5c999574870dc5723e2c24f3d9f280a0dc404f3c 100644 GIT binary patch literal 181482 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 ?#445Z@x6!lm9{*)YYi*^uYKxl3+#fZ~ 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 aZtrPxJr*Zcu_c6ne_}$?f`tOQUjGld0gx&H literal 126080 zcmeEubyQW~7VhCt2auMKZj=rIX{3=x>F$(byynTzZ zCjHhP7wxII-@fP!{05#*ZUNuk?%n>yGIJm#vc6frl77L@*L#-9XVUr_f2Xu07J_!y zm!v$D^C3jK+i6KE?ykQIz{`eok_IBl2K@aihZ6xkV8FxC)0$2UddC++?8#l1hoDKC zLhnO9?9J}~zUvmU0Z^(P1U#xczQWs)z(XuFFXi6(5D;XsX~a7g2c^S_LQ{c6wg-31 z)826lD)5YTsCTZ9iUdC!LL7yflq7wZ3BWUYV&C;1VgnSRd-H7xNN9M^3bab?GUujR zC`5c7`d_)}Zco?S)|#LPd{^BQyTb&5dGEv`iD@1^|CA^bL-7T2GTV%pl^sql_?_6J$VZyR28kUp!th{dwxzUC(BI#r?Cc}PSSIy#4&7-fhO!Vee7VUgr=_3ox+&7$ zLsoHdvF~~T9;s+_vaw<&9exJarwgfu#6YQbCD3%rfhMWOM~z zXwMRHxxjplIvJQi=h^&$fC^d6zxKlz8|&Gih&?VlU96gljm?B;>#momvn~(sHk9LxZ^%<)b8if2>qHLTHNLCaC>M_0C`-G zCXvbiu}g01$z}>w)BBzumYH{JRJ&~?W;_?7Fuh%mu*o9AUEZ$D4Q!z+>qB*pNg*Wr z>>bn6laHz&;AUt01O`umfedgV3mq}+P7Cet{!}`2UtOGJt@`{*=A_pyGuvMspglY2 z6Rmf4nl5S`k1M`^%Vdu+J zr$=fZwIqv~)p}1{G12fD-X5&yODynt;a=c7R=eu3uJmqzx*U{(^p98_IOP$`7U&%oVGz!1|$`qDwxIQPf z{_{PfavOEzE_cSkg1SrcuGrwNI2VNn z7aF;Ey2PzNaM>)8tgfSt(F#h_4nOLhhCgEiqb*@E$=R{pQO|_vYJ>&rDE_`}VKAsM z0mNadh8mwi;qCU6_miSNXEeXBdI6e+I@E0uL`gQoHl5(TlXIY8ZL+_dC|5PM-yACq z^6(IJw@Ywc``wkoZMoPK7|dY%OwMyIlqfQ7lgxS`$2^?xS*`oaT!)#yk1{ctOsCq& zTRB%!5rpyy42mtRkXO0a$QaA=ZEpz7t}oBjzNpckZB-^fOYzavj(0?jt~KOtV{Ml2 zh|EOgP2U#0C$&QQ^Q6(aC^Z!Y%su|^p(2Mguml#+d0uPYZ9#BD1=T^eZ`S>87yr$& z@4?Iba$U(M%ivMYW2QiW5OG29+o^{~nNJg+?RR(m&Xw2f;2{@q6~i}L{FNe)Z}j5p z3stX^?Lr!@VuPn6UY$=aH;Nl&)1Nr~DqUOJX}odorelF-m?KmfHA8!T&g=9u_*7&h z1cc=J$wMY9Y%7NfwB8>bAmfW;BC zOQhk#{?i{b%0z zdBpF$I26I8RT5CMB)*xip05;6^k%4QW3+g1q5B;(yZ7;*xNnI?0vBYpZyGxfL(LHO5Nwt{t$^UtBbQVtA% zH4J@uE(h)&)omxz6-)iWtT$b50h;roNN>0bw&U1M!$Rnlh)g9}HJq<0s!GWMX*^rr zfayXK+4QBSk_&(5w8?O}uHvkX7B@zc@jvtb1X*1hS)TcOilAD*O(p5x3v4La2QzaF zlO@IyU1@wVUFhjrSmXk9Aa>o?!hXdgot@F(DFxXa%&T-=?Vqk%KaS%xZSV*ZVY4_` zR%G&d3iYUsy59@rW;u0DI-*%SqR9sjyTJdNqegVY zuo#F|jwG6PwX^5PHi)Zc;}TQ>fn%LQ>AU3LEj>+TBxB}ckID%d%$2uAYPkHqaMo;t zGZOq7j~?xL($--QGt_AKt9oSHv>ol&!gv%+5|M!}Y*9P5mN0B@n(3KueIm?^N@PhF zCp#OSX}mArdLAtEm)+#hz}#?#cHu(~@6HZZzQBl6Ay(R>)Ce%VK&@P-1-QbexzaL^ zJv`5ydWLfsk1|MDt{-}UaShy)FuF>=xX4eC$E4Vb@erbCY8t z=zH)660T5h*_SyI`Tgae?+FjM8{G7?wkNBB3$?|wXmgoPjCG!h72k6oz(JwLv7adK z(n3wt(42AG7!iyfuXd?5>rPZ$K%#jBdj_JX*~zxP4atMsMbGQkdB~v?vC+V{C*weo zMm*;bSGWJ{Jq!Z`OHmf6QMGgNgN@eEGS@XO>&a977(TQ+i=}X(+Z-`E5~o1;WBPOt zU*WXUm|6#_Ge48asylSWSJ0+3Q%3{IF|Dv2P3%fwlmi7}r1}in!nU`VfggYHVqcbW zruR0#qT@id3y~+th$R~VIFX1kx_DuB9+r-d#eJ;;yKWT;+cK?Ou{Qgq6losTk{FN~-gjy|=-{o2C<|4RK z(o(l3F|M1nR!3IHUAfdF@HS;tJfLgJ;4rRhKN9plE>K8+BA4K2H&vsKgUA8Q_WQG{ zgdzmGS8Ut@x2wevtTYFu20mnfWB$l(bId@BR|{Fh>rghDjNfL`YlSrFj}!I$^f$|- z*B43S4|AIJ-JHZhJiM2^r}oW4v4Z1rCClGz=<`5(9cR50hM(XI1e}$X&bSs>f+5qG z?PyU~5b{i#KcN-j-2co26^3(82w49-o~lDnszdTeDq1>_Uu}5MHslEZp0TI`KQn@@ zf$>EX2SSY`j^nENW8rv1F9vK_bx1i$m@q9j*<2X>hwZep!JMvScV3k@1XQQRUcLRDEkP$GtGH3nG0Ffq;2WFtFJ>ML(oE)u7xYxPt~ju`6|DC zSPFXbjt@ta0`eGQjl^8;ceP?oS!k`{)bU*AHfJX@{_04F?*utmaH+4`A|E_2GN@;X zq4fR)IuveNil=`M>YxyRMrBav5l{70{51h{qH?&9&#B7w`NnsdO2d_2@W@>%rK)%O zR5;0PQ~ruum-^0*I148mvWmZH_xA4v60l~@D+qGa=eb`RcUe}pi4nB!=SYI2^mpAR z@H4d-0*B3$Zv=O)br%hE=OWF$(tl6Hpn;>Zfq@2}q}ML=&b9i82SBrxOTPWzU=kCM zhYm`Wbu2#I)lPxm$0-F62E;`tW8UR_u>m{asSnA$zboA7BH$uWqmQ%}cVi>7g1`}c zJ2F}C3jVQTA8)~rweayfVhLE^X*2*}W=bu)?|dGdwOb5Fz=Zcs3<=smD~8Yy-yG+< zBf0@3NdP#)e@*i54)I@;{BK_QUz7aBB!K~V5PbS)bYGq~J_Owz^=Q!*1;dlq_>6I5 zrKa7WANt{HV1=3|pJY&G+4snHOD}Zri#wi4odjS;8=y*>vEPtS=6K&4lcmC@UxPDutcCFRy?n|X7=ZH+4AqnB zO9whlcgH%Pvv`Hn$GtGGq?e_>JN4LfrtJ#9^OWJb9e?;g8`PhxeYZnio2c*&kz|G$ zNrXiwX8GwbV-WtT7<4V?M_B-H#%rU|V9pGFmsgkP8+(q1mcKuCnawuMalM>KDzhEM zsyrI{tor<`y0?T*g$?1hy9do3ixa$ETpFLlBLGJvtPL`DkAKSpFkI47{YmN6gEO(f6Gr)0(dYOg5&8fXPLtcMGBAYE7N;i=09o1%a%B{EAtn#{IBB}6jReo z-Ma%3FAj;TFu>bOv>PjF4}WDDX+&&>@Wl8Bks1I6JdejMm-^o$mce)IWimdSuJpc) zr|ZIye*3d1o+5Cc}9?8TPs_m;~P zt~*k6rE1a|Zq4$vTOL$$-=hd(D!W0r$S(cH{=D5kM*k6daEl2O+&HiFS|Zh5v`={j=)A0n zHVlM@e)K%hV49q+JIlk>G#owv5bk@0ff&#|cV1m!M?Umc-(O~Zn8a?Fn9ONP;y|Oxg7S}?Uz6=&*soLH3oa)8Oh-?7;Yu=!pwybaSIj@ z&V$N{y7Hm!!k)XL6Lf;PZzMl2bjC?=xo9GbgJ`Aijku_NQlQWBo6szjPGZ$1 zv%934k0RkQV7(?}H^}bDQ@)8mT-{5V#;#)T$Ah>efI9_vkU=;F8GWuZ5rRr z$L-nhr7D|Y=MG^U4#ei@zjk_(x=;jah|Zy**P8hwm01F}`p{5Hy{9WZX}SL2X(0d% zoYCs7aJt7(fd1$E7F{svi8`P0P^s%04M3N^P&}{P)?Hs8FJ0(3zezMtT}oZIc{=j_ zr3}EUmsHZGhTmTN&Areo(28#=?hiiC86x{aUjx;@#Vb#qlX^0s#YwYw)%_~Jq3raqH^POjGxU!+!* ztlys`ks}t^{SBO8Y#ghsKY>e;3c-@O$p_Ei?%6;Ou^j`D>}FjBuMM zGdd78ObD1>@a8BIEkt{6p&{VdfAc-RcW)V*&Z_H9&|eTwEg`+o`={HOV3mo6rkg#4 zrxr?O0!e(RI?=k#oa1zMi`I(AnmfUWR1f*RkI6_Z`^U{kt6zq{06`+bX+c`>JeAv$ zEii(!^`};8rsi$DC7gRWqyzj>nr06`rjt5(O=d*XU)3 z5`nv~p7 zxTOpRn%M}!u$O=Jlrj3*6X+}kJKeiPR#DZ;pY`5w{-TX{nr}K$Da$!%lquaxLob%+ zT2K|zo4ULd-isI82vv3^bmaG=y#Hb~Fi+Ch=S(a0Bl`S^R4$3_t9 zUJxW`m8UdC?sRQ5{HiJ-u>_fD6hMrmxDF+_drC;Q7d?EWR+rV8!h(W$DlhVnYrwx( zHOwtPIRwxGisZ!f91P&lY)0u4x)8|epz?-!Z#tC|E_5pZfj08b5ye%HHl)=fii}_5 zlTwBm%VW4e4UVXvk4z3BdVsqjvrzQkQf^Zg?6e*N)2jD6N&pyLDjnqvY2|oC`xRdl zz}iQvMz22*20Sc@?oQ{AXrHZh+j#Z5PeXB`f*&IQ2icf2?9?H=dGzyucl*>qK}#+- z4V0=3i*^k*=}oOcgQ6cn_%iaLr^+Ygtenz$Bl0KKzn@Sbae4eNE%<6r8U|nOSDaEEExb@Iu5?;pXh+|&OyPH_p+zxrErr~R0Z4ls0U}P~TMVM! z1ecXwSup-m*ndZp>VZ6-qOV^yrx9t!TtX5;Kows_MYz!a{%V*h4w@}mUo%GZ*T%XQ z2`UZ=F`ug4X<+}S&?qiloNEcQ;R)07kwp&*lB6!VAF>MHn@3h$?Ej>AVZ_!XOIK<; zs^qy4HQ|MY=c$mwrON#yM^X~fdKNwiMm(6H+;O$34vTE$wop*t5H~vxjj#uJAH7m~ z)%l+ssROf%<3jsC(skl=Sj|UG?}#;QWqAXUC^hh6^RyvI<^9CkU=N{*dmzh9GRyV{ zg^)iif>Pnd&Wdzr2o^`v#%<|+IhX$^*nX+m!@KTM%c6!*Dp6vl!`q|Vzb@O%8DddGqmrMDNwev*Q;@* z{&jQ^vicMu^{4LP3wVG<1g{6aCzlL~;C;~HKWAuh&CbM33`g5CRtuWbY5e<@b zF{>H+vNr-y4voMtHQA+!ihK)wvOf!Y-0NOsZmh=SyT7>mY=Xo4{I(`|iu+FZWw1&5 z!1#6jg4mXzJL31Y>;gqJ82K|iKhk)lk{wGmA}SQ!pOvT(v3x zJcvab-r4JfEK%ziiED5U5a&09K0a=^8YUzw$DrmnXV_(qGT&H-x!Lw-HG zSE7qi3FcL54?{vTQpz}2jCmy%wK;{)5E%!ONg7-e51+F9GXvTW!Fz4$A>Rk?VZXLO zD(FFHPOCats=qoGBncxNpZZXSWG=X4TQK4MIaEL%C(xwrne5ht!vo%o`i6cgQ@mYE z=q>l5!51|}(i1~5r_Q{&2Hgp3CjyN9eojY+ZF*x z&RcaOs$j{q=Xpv)J@O83^L(SD;TJNL6{@t%`9{xAH;VH>d82HPRBalKWA}jDg3I$k zjkl?6c{GKv$e=$q$^AnI!5!~W(`@p4X3Vc>#dt!o@1>>xVJ& z3>!0>bqe%rGhY;Fsn@`FW-FqegE|G%q}jrA)1zk5eM=xev~zW!MTq=oV=chq`bF(A zeo-3>hpK&jp^Zt2Jg@);lp`}GDfdhhN{IPSJKjmv5ow|7RXG}f`hlL)wEcy0apknl zXTla(@lw=&dEY=7)|FmMqVL7lXnXi_B4{#37hhO0kn$BJRl78P3w^?cB<2&QGK>4h zWW{%9JGsQ?xt+cpgj^DVBLF2rpFU8G#t1E7?8u4tih^s=Wr4z9i`#6a&rrpA`4=lG zZ^7`r@zdmm#yNW=+iFmZlkDwc^E(<9w;Pwgp@*0-qSt;X8JYaHV%fpD%>tRji+qyJ zUVm8TgxO%iLZBg7AU+VYIqvf1NW9vaVCigSfmm}7(}pnmMmg)6-n0!ahL2mVbDUG` zP(R#RDqm~b!CRrw+G{ral_yfGWT@(lA@*eEMg=}FD;{oYBsXX8jPRbr|N3(I(#%Hj zHa(Gb1wgGY$2Gl?e$YUEc#(JI;~)~SwNx?U_6;%h_F)pjV1@yf=*WaZRg{3XlY7FX z7lHeHq{4_gP+wKytJBW=7hlx$3%8w$)MLdqex(eSxvcPBJ(75(pjPFmT9GN@G*9G9 z5f?SZ^nPmeGbKL1P*Ph&QX&}HCtDt{Z|&?aMJTEjX#R3Zd#e9_0JXc2GQlszqcf4U zwg!5&-_2QXaY%qXg1<^BgzCKXv#^i5SEgVzM@l}K_n($9$lMQmOE^#f^uJ$xOXsow zkeX9SK?9W`GvX{I)DVF%dSVWvWF7RF2i)T9zXvNvruZoBO~PyMY0l613BKQnw&)RY z)`HBFX0RI~U|yLLgop6EEI$@ER5*e)38LoOPgTB%m29qbzd9dgz&adnq6~Og2Ni@; zH9Ru^S@-FH#3u%4dvU%kdnbw~?|d$7>AdGz>f^3+J^Ry|!wg zZhJBG!+UZn8C1~*v5VN8bE>;NExswdFTD;#{IiWS!60_l3US&1SSY?g``elx-U+mz z3WPR0UX$R4jQ75LA8@KWJ~=8cOmFwUuaJPW%8gW#yC{a#H=i6f2cwc;VT}5LF4{a| z1?h4(Y6i>@&kQIqM?M`1314h-GaPn^G-A62xGK_-f~Q910rLVfGIckpJR2z$?Q$|t9>pLMWutyny2_b*(iHM6&1|~xhQ7n+ zXxPLe>i!?6t7OZqKb3z929MX?1>t6vVv>%0mij~w0o`4w_KN!NkaQ2}j461FfTl}k z!i48cm}{iVOiL}+z4Ddz8uCXFl-1xa`-Ff-e3%?$bJQVRNulA=Io(e$t_0Odf#p4R zmpy13O&H#F9R|k>xRL0WD1)|9iAr^ME(}A|T{?zbkS2x8d_Zn>bwENL$&~<7O11Vo zH|%>L8X_T8=Wb-^JwlRIR6UP47L*RLd#zabdR}{_Z*Uh%U(clITJ&9Oz#GyrCfUDg z`nULueO>Lt!NnEaUrOTUFLS#&=tHy~D|wC1cS?1Ad7xB5<(#2s#1*-@gyU{Mefj)b zpsDyv)`CmlU*nA>_^=2_xS6K);3w{gi9)7X<1!2kBCWS3?}JxRFsxw<9`-nVqtCp| zgz>Aga5Uz@crBHxs{%~^)w##8DJC^{)bGPn#=0IVPBN*~+LZ15%_!{-k zZvfuW3iBdWuakVLH^Xh&n+$Iw|JLMFKtnYaFb5E}b?&HD68+lmgA2m-jE?u>;mtf3 z3Cbe-#P)QXaKt_;gd2K@lRs#`_gk=;T@f+pC0<1?pRMJRdWBnWtvzr)=?NR_FVtoK z_SwgP=oOgd4#N>LpEIjwZdBrl)3M}~@P`xs37@)GiY9km@7S@~7V0;ajt7vyXrDTJ3!rLjYU3B@CuMH%3G+9WU8?Mqo=LZ+`^#Ob{cG)J>4aI#Tq=P;!5nuTt@@xHv^b1!KC&5)VumoL@3LfA{ z;Lx~d3Z3y-@cqa#dj9*Y9?`Zmn!NT4E@XrxjzId?!8@5LTtrkX&8HNk>^MnN1f!Q| z;XUCWKaaS;5I8i8gkEX(*Ws5I;`R}6o)u%L9jAEU z619nbB)Q--Rx+&|N(9hq5;6gF6n)tOD}tEiyV1DD7d3T)K|s$~b8L|?DFD2^7r!yUlGJ$BMsFnJ#pg$#PUBj4-eKWpvrwh6}{Y=%dV#wj>WN*YKvt3sT7Bp7DpAgwf_ z0FJZy5(ckxtD`T_UWinrg87WpVbVbTTGF=;`WQ(f>dCS4d+o-ZQxyw(1=zpQLQL?9 z(msY^Q@YY+1sVk^8l-3O*t$>Em9<(QBFItYt9!RlL%h!I&j*F^2oX3QMmrGsGB`!K zt=HvdK9UWxY7^0|u&I9IGjed)Mnp@Nwh0ImoEmy=JuX+TXVCQ%shi5J6JAV$b|}h| zvOd=Zr;e{=xrAFLU^dbX5nWP+E|^Tjr-XsD0!i%G%ZZAOuNyEjQZ*A%{~E)(0is`d zCF4OCYanS0WKGn0nsOAgfm}Gx*b<9?Li(`ecSwh9tvjn*-477wGj8L2tzf%4q;+C& zTYy6)i*%y_%xI$+L)^ejNa$%3KN?IDz4d+s`Gsc%$q!Ug@pM6=v44=5AGb)%y5y^u zRnteS19FUBr@JizXo3nFU$nnPqo6s=Gz{ZIsSNf{jf!w8 zJOKc%wa@eH&lR?(ufCh_)|}`R1md!<+<)m55%dGC6pYl z8S*B|bn)Oko>VSqSg1CvagD2)`_P1mgnt=LE;@44q4by~wWPM*_ku7ZGQLb&@TA;*%ty_GnF4`P$#G-GZ^~D}qsDeuwT4eMvaF!Klkwdfdc0P$t(E{R*@c^%vYb>%z!J;mJwKNhEBY1_JX6K+z z_xtc!QaIc-8sxN|0h*B#A9hB|&MAIObFhq!2lfgyzwY|V8@XG0+d3M8dq1(|;fSxO z@A-X9N)xnkm^@?$wo)A?S{lCDV6?yu-}X6=G-XAtv<;Cgn?6g17wHhZCHt9yOx3$H zRvPsoZA{1tu&-JM=?YvbIzd$7H|n7jE<{8;sxCzdgc_NN@)TqtWvW3(Ovs@V@0gRK z{>%w4M8mnXG*sacfxQ{ttI-QpP9Mk@K|OCS8F?c@hy%g3yqEI1AV^$lfb?My$AHv-7(&^7}1B^n&y1|&r zm!=enPyw)hc;+Vwwsg}w0^l`(sx2I|a0y~OqlGw6R6>L+osydve3$(e1qA1uZ z0Lkq)vYKq0j+xlwawtnJ5v0TF7b`Q)V?vGag%n|Ltc{Ham`GoNq9Idzm3#1RSWm>Q4V+@sb2SiN<*N- zFwzgsP#lhwNe8Lyo@?nyRv{*RTr2zoc~%#bnMLbS*pY4op-M+EDt1rx4Lx~K8*JJi zTm}@3U#$Y+FJwcZMy=Zhz|VdNJhmMXH_Zi1N3~FTdC8#R@3qzX3+;;P1;K#KwqpE& z$e5xasG7VrF_r~VihC~*!GsX0@p!A2glIN-o%dc$92D7LzyT3SOzWWO1JVgvfw(FT z6AC9YtGtx*j3V>2U8|MX$|m5ymi#Oi@6bxz25H?R6USlH%`eixVJzS@Wu?vq!Jr8F z1l;P(&Eeo4D8uH3ICrp0UX1Put4+zqj&t zBafAptPSU<`B4JqGDY@6M0M8EQ6PK|jIWM%c5?y<_>jby^$;h2P&4IdQM0ii^bf+h zY3|kg+MA&Tj2wh$RfShZ1f8MkSrsaZIT%Lpt-C}aSZQPGQim4wbd>zU6~}{!UY|<1 zG!74|Fq*bU`p^Wv;VbHxS#RRNExP-Qy-6xGlx{c2PnGaW?)qwx&YuNC!YwfpUnej`aoZn_4y{9JvMW4JTn%qM3W{ffhy^2jAWpOMjq0thfw+n*8p`d@aFo$;Xtw2pKP zCs4pc%LMtSY-6B-8fA;{AprDml9ZjwY_%B?>uD2H$*ZOv7CNIO2*m`QT>RH=Vir>^ znlLdBWU)gO!Ai%KHW{Q(C!n$)fV7Wz%(cYW1Vn~V|{ML*nb#qw#T)&n1v zgcrpj*f$4_pU+I=K#ZFq@9`q=H(hgOQCflAa)d>_w43as1eoL;QA*2)U?ZY@p58^WvEGVDi^+D4_|?JTWZM zv8N}FHgCFeY(T%B zESg#s9*UGH4K2AxBIHr7-HA+3>>PzlnCMX0R&3Vwn_>DT>y^lYwsf{PQQM5^&~=8w}t8qOWD4i&U=TdFyWxYz8;Up z;8+jM4kGRVI2Gs2H<_AJDFQiG+c&|Qc`vC5I9$OPmxaev2I}5nX zQ(kL2>!vFs^X#zjzzbXx8WR!I7NVRSddPfTe?yw_5@AY*3~+uCM&-;Ou(BRkM3R|{ zd`-aGiXB?AURo%zEVG$BZ$~PALTFUP)ytI zo*Yo^OFU`0xZlS-LO1qVnns5C`Y{U}w}YS~03)9GyY-+*G6qL{-PT0Kb3PT-*)mb{ zpOS^x^f}P%jFb9WQyLlw%DRi`lna6}!s=yg?Zrc5r(p6N&jSlVdj^01&tsx9xFsQv zEM4F;N3U4Jq#^e7IA;=8jb>%INM#t6a*P8lDMqAM81 z!RTvtI3^wx=WP*J`Oq49TGeiQu$6SbRBY0FFt=0H_=B_&hQW3jJmtT#f+U_vpfEL6 zHQS&FMh_CPuEGpl+qQ>jzv{N4H@1ZloJ?k$aBa*N$tu^aYh^s^>5RZ8XsCd>7=_}M z45C0QB3k=T-q+5rdE4b-Qs8qT!0bwhF=Fx`A|Y$7X&=yEp7g)}5OrGnwBg1t^Mfi` z7~b!6%sECNj-2Ctfqw0Nb1mFaJt94Jx|fCeM^EAk_sU*6>;fsxGyK2;jeB4rmBum} zhkR_T9!2ngMfpIY9NFnXhg71}cVNT}(@p2nXpGhs1|#IArEa2p<`;DyXhRCsK4(8| zmUhopTF6R4RTdz0y+$R5u)9WVX+Vz_D|QMq3gR_ta_kYotTardf;u!_MLSW-FTskG z*#0$ro}=wAHRX#U$EY-hg~L4e*Yl+mS(>SBsP7L1MZItE4f`Ajn;$lDLDz6CF_7FW z-3?E~-NNri@Z}Ql&ZP$hT=Zb6W#CW%VT(4-pBWZE9DZFQ;WzsM`qC-uP^zv z>%HEkmeGFdYzaFVo*MjFV1pI_^ivWWfoEKL9Y$>1cAN=9p3g8X(D7Gi{2OyhtqU@& zKZ^IIa91iZ#h&2>p6|`D+&&@>Im~D; ze=P9qJq$H2$}e4A#PpZpGr`@%=vfUq@R0s;9m$!V%SyQAsoG=jb1 zZ79YHspbsj(AVAGj7GDm8lGrBf=6l!-@>0-x%N!2(~}jv`rAN00I5!iN(U_fCn5HI ze;Lw&0ISBT8QSBILvN^;K9Z1hC1iC#SR_KwYLp^4N;(7qUlJd?|z(b+0L}S&PoLPrv$K~*GHt+7mHm9T(%>8(ah0A>d9Qu^%r}osyiJPT@3V=t?Ti-W)&prjR8<|J$h4WCwqj4gz>rgROIE z+2e4{B0Yv%#VjB+rTR0zDS>z#t($9?7!_IINi&qSzD`I!4X&?XZH+H@zQTH2&jMgd zmK%ZZ<@tM{L6QXA8G2-~of-6kxWBz2s(2Vu0mN!AK+9!+(V^Y^kZ8QbxRAll2#pL1 znhHHRKp|8ZnK_{Yq6Fu|Rb1LjibTK$ks3qx`1$trr|I@j)2GgBzonx1Jpextwa#XE zI#wiV`3rVGEP>G5PsVUDl*5m3aQtW5M`Ls&; z%hSE#cTYaXKUAeLB{(H&Gj|BSL!_)K4yf>NjVx&Y`r2=QIZJv=g>T6y{L9V%MX42g z3p5eL^vUC}zf(tVsqjD(AvWV^nSbYPaOiKT@Mspi;(y~E{=<)NxShlDO^!3&c^k=F zO@wMtO4PrT!T;mu0Eb(304DtVvpa9|Uz7ZAYJ~rq*Uk0G!=L9( zul}WA5@+nM+7rB0#seMx>&w%H^*j_JhPuAIogH|h5MC2 zxBDjW8~=Y0v>at1g#P>ogz=MS260-YCb(*kX?J($B>3z6lgNb2lL!L`?Cd=G!Eyp6 zjMj&`oVO+@f7g4*G_92(E?b&lKfDWZLc(WR0^{?lwkT%gBJAvZqZn|}Th4C) z$@VQC{WIB>UVXBcRTK-wXpZ_O!oyVga-G*~UmA5Q?gDdG5bu)bY7GBH?mbu5>=$ z)LxtM&juBMf&EMaD`==5Qd{k9yjRRsOM`)Twk3SUcGDz@QVjiL@)#X^4MzkJ1&8)d{=z#ZH{f{ z+N}ceTSbjx16IIRN&uAfRG0i`Q6vth$ssGtk04$at+f9k%xl^}!Z|2bi}H%6p`Y@r z$Kn%Xy1e>nu3c|}UzwCFgpQ>@= z^1DR330W9o22if3d8n8xol1$LTvx))@T!M(-6sy5CuVrTn^&Il#J#isbK6lt zk_@X38}@%Pmw`c6)Ssj=tsy`y@BIz|Rf7+hO_w`SUo#L7d7o^{?M(X~R#N(DS?dKh zz6(OeAUTH~HEC00+ z;CBpcPk1~9@nv=3X7NJ%x#H!Q#uj&)7zWUP1?HuTHTZa%1F~K`t1cE$z+@+XW!3Td zDED+z2XeeV{2Xw+AHAIL+01@zMsss9b3=A>)5SEU%F$G+r_eKSa75itYJitA^gHna zmiD`mh}S*Ejn@o7gS}@XSP+RMJ1Ylmlh=%A8F#_OM0*%$7)|k(Tz4c6WuraezK*L>3girgDvcJ_}RkSNfU%aMy>ngB0ggu0~)rU(77!C!V`4g zWK?Pn+62d3YS0=m5v?H3|PljYe$kSQ=_N*B|HfVlp znKenT+HbYL*oB!!w3uY*=b6J3DHBikdTF*>0p=4iSk+c2z{&G;M;nakL7RA8X zmH0sisED&^-m8NXCs=@F1LG)Xwx-0r@IuNQNY(-8u|gqW;iLj<)4t(AiS}$Zc$vDv zC4c7rdLJKys)@sZmLS*HS-2UkeV*f>Vg^6FJC)e_742AH1lD)9{)owYVb13daDr(1sHa6qq z2VLNGJp$x~v~iV#UIP2@z!7KeNuREwx0i`roU;{HM3VJa&Rc^*|uFF2IvMVtTWF6F`AnM|-9g@Egr>IZTIoac?;G!`W* zCkHZq=T?rwJky{c$zDFLz{IQC=vXDmy4S#P0@wG9Q2=NcDE?Frjrq?D z4-y%4FFOMe&mRlr9gvCA1z6^IpV&`uhdb4}Z;kYPP|x>^1zb0|(V{6=KKzcY$!h(X zxZX6~Q>AKqgY2RwPV=jLs5k8=cr!}yrLD>h`SCLIsC-HJj;x6Lk8)-PYusjrR(Q(y z2V^KycQkbdHTt)$tdMs+t7HLv`Pblk>gy@e9mwcUVP6>z5u@G}w#k-u{3#sSgk$qB zT7}wDACR-An-omdbtax;Crg+`<$>%e5GnZA@;v#b8zxFggae)ZtV$b|oT$@A zsRfXvlhj`sf*r8H2d<95wZI`9))R-mZl*t!t~Cu6x$&b>8FF1*mSXHU056rBy&gVP z1C96ul!*?6np07oXsN~mX3^>4=p0t?*s!{{#w*T)n08)xCBIw<)cOKrBX~- zyngO8f=B9K%SC5o=C=Q&^M7;O3oqaYDI1dk@?-sn=cKVoM5M?qsWOql-DA#Rtja0) zLC4wt*^22{DHq#iHa_5o1FcaXlH64O zCH0egWKWvR6u%NIXW%)oTF^OnmhfZ!(78*=$rK z>H&AV-4jK=kuMifFb{31#%dSK4L)$b&6^thnfDSMDi_!hLJHf!m2Dbmxr5EQTVCUw zq(1iSQ$?M80IEeR_tO)k{F4+*lhn}j#`7XfIhGE=)22XQru#HlZ!&^hXiT2YN5KPJ zM7MlocB95>+#<%we#wkl2?qZ%wZna=Q&wlzoiaL7s_Ll%jwte}c9H#XUfkWI>)$nf zC9~M8&#l~-qRwS5%ZQ47L&Lqo_PYNE3zPO~4y(T_A~^UbLXi5iqOvXZO6Ius!I(Do z=$GdmTJ3Z z!~>hcv`sJh8YZ%c@%zfu@-@giX7+*r9u@N@1jh}WgjJlAwX__9D0*2^jY~lK;OUnF zoj>4cBWWToLHM<0Gq>kH-4xo^z``Kob~;e5ehHPnzC<2k-Fc^po)S8t3sR$IM`?+@ zgqKw~c@gr}crCorvs8m4F-YdIt|BPpBP$ksIu>Dj$$po6s0-)m0y;{`O{f~GJhmf` zi(Y2&BQ;UUm%7}Ni^ERQ)o+>tuPhKIpB9>K?tay&c!PT_!iTY$j&*`xWd+oUiiK>( zM`6gEArr1^2J?TKBan<(YhV5$e57Afpi{`71P;OgB`D7?vz)irkz$2;N*QY1lOX() zG|%C?y(?6CUq^w;c?J3)(&mP4e8K<^EaS4MP@zn6OHG+gqj{n5SoZq2)8RBd<*Zsf zpdJ@jY>AsE@ACntnpI>}yR4-21ZI&`2R)9)&XB~3zbG(w{L zYn?2F&beFV9 zNq2WkiHd?WNY?;Emm=LEp&%jM|AYH^?ss{u^<1CcwOl$MaF}z><2+*Dx9ztrmxC^u zyjZ;X&bRLN4!Qa*`EY{YM-APQn;3-hkT#F(b6y_LX2z`om5TNGsH`E&Uh{I6;EOSvE79B$uD0xw=^1rU z3NtI&#9UadeXH%fogXqCu_8Sv;=~DG&TIwz|Gq zYpL-C_6sbeXxfgR)1X?TaF-IbDU)+BHyzWaps$Okawu3eTustUH=37U+Dd<}Cm$@h zII;hE0kLbZJ&o+J%zo3#)~kryC+9Y)?o1tI^p^tT})9 zgyjgte>&p+HCw;Wc0hA;>jYabyv}lJ6?EM==;kh<2#*Ai5X7ycce9_e3?X^b+zG#4 zdq!a#fddrU0@{SJ)ZrZlcNrOw;>h!$E_(8rG*K=Bq%@!=TFO(ZeDYg>X0vM+QV!0O zbT!=d}@QChLCo1a)RFwVW-)$c>J`Jl;qYlW|V|P4a{}9wgcKLPjb+KQ- z;){F_x@2r?6sURd*vxblhHf_;V->sYqSAc6DWLJs`Kh_ZRv#PiSv;Z2X!AJzy^$5#nU7dk6~>!e)g92XB*|7 z^8J(A3wQv~K4)#5SLm&XMB6wUBPE@u!LV!4yP7D{nEhg?yNjO!6w#k4!v*QdrQU{g zk?-WSc%Otm>C1r#`=0Y3?DRW??A~qM|Jvxr!4wgb)R+9p#?aXRDpjuwn2uFTqg+%g zq{F5*=RB}EK+i~uQ#bvg;rjj@HUXPjJTq$j%_9#2T)99w;#N+$tSL{3C*yr^j}rzn z`7*uBt9p#2AU?~X%P`Muud;U)LL3r=xYr~z^Ci8BeGRHAA%sYp| zm|_9w+t9)zD-tCOStoxEAf#C^nEv1rtoQQQAcj(=*!?iKW>1%xDR&L|*sCYBjmRsX zZy~L=ljq{o4Hs`=aOxCzFFUx#J#p2=w7lBw6f((6X6^an3HziYs=6&xOJ(xJUt0bB zgCfd55X-AcymBvX=bQ8C-<^a;>oCtp7ok^@NYdTJ;`-Hm)=40ie@ktR?5^GjPGW0W ztj~?|^~H+kn+W&NV)kh=!Y3mHJ}yqKwiIo@Hh05rmCJ6f`9!D8sqfJn{=aqVLW?1% z*B7b+uLvh3oohPfnb+@Qw}ed90P!sEVnTlaYZW~wi`@-Foz#P$G6>Sm1)YGZO$VgJ zuLSjGN8^(p-(9F{VGU7GQRnaes8IBLBF7HkvG#F3XO;76+ZS9;sETr>eTB+o1r7 zL)M3NIc`ljP*+L-&-pSPo-=j;wqoqYk8z!7VWggz zD-@mAnjmT%2gUhE@3-|jmpBQaPNBR2ZWU41T*Zyn7vt>7QzrFZtp~R9g&m>M!nvk% z#S!1nX6)8FfZfUC@<-p|p<(bS*q_``&~E*@$rJb1>%0ppUypC-ND$vYjTBD4z6ykNm3DRZ)64+&sfi--Aqby0B2|$$2=&A~ zq%vTDx8%Sy$72QQV!LoDL$Yq_n}H#vwhIv*VMBKllk~kf{w^VHBG;P$iZYTe4*9+w zmESTr^|fmltr$?8pf-C(9LbO$eaM#!g|jsT@T@u~8s;&5%aa8e_U;C9uv{SP_LHqY zLnoV+eBCy3gx%7JFoW5&IJD~n#=PDq!Hilb;5e9s9MF;G4T&vaOo=4<1k0vi=aom6kqaAA)v8k%C?Tq~q`U4a6_AsZ3 z1Po=rl$@p@!Sl-^dZONKC)QJq^j8|ABAE2+#uZQM1fMJ`ReSDB3lu`kFHe9^$&EG? z^!z-24F#WYw?0!;4|GDs72~QP52nz0i~cqKb34wKUhnXm9&k#TbiX{UWb0rA07i{f zTnhHX7n+6=vjEE#!HkN+26>t#*oCxLHaC#B!*W&rHGQCADCPjle&&sa_0He6`Pat! z9`Ukv=n+Z>xIV{Hh71ByN24A?12(x7{40VHd&limis8Wd_smTLg*i%~$#z9dMTxsX z4_5SXfpYq0$3{4vpO4w;UQ(CK}b^~gpSwoEy|!qkjP z|4T|xv)Op*O+X&-&jaz%{(6xi$`5rHgD@sXnj2KP1507t+#iY$YgqV0Vk?O<2|mMv`z8YQs~cB;u11#*Tc=;4k8oC`dGv*^jbgHfKrqY%+;MNjM;$=s1xKcm z7m2Y>1QRl8LcwhEY6FX%jpS9;>-%45G4%&?I9Dk*c9}Z%;0GAS@hCeFHiATWq%&_B z_nxd!b>I(2V<6BO|2(c$;mSFc$gcM#qWeVJ$|!@o^AYyV&F?zCv8$da@eo&{3%pF< z{q`!{64>6eC%}lp^US!Ijt5;SoFz$XDGmL*2mGcXIyObb)r#r7bgZjE^yC3{tRh3K z1$kNJH-mBpi2N0NQa}rTlaDYR ztC=v{aL=^J6WGl0DWKXECa?}r6PT#)ZZ_N5#ea0S`v)aT8knGc3jy1j=w?xn+_+$j z^Il&JbOhhGCj^S4wWO_EW)RAjL>%(U@l-z1S`H|2mchJbw2QV~(RmMga*t#18iP&W}J8nmvi4wm{99*QaeC^h5Y8bw{Brj>+ zJ=v}IFxs)E~{B#Vt|Vb2EmS zw!C(d@8WD1%tb{F{DHc?{ZYSJk)i17HAd#a)syM!UG<8@Cy8R2uLQ|oUl7nH>vl^M z@|-NiUCb7_Cc$jYY|oz>Rw8BV9wG{&o*eaCj$u%4Ak3f`eKOetl2!}c*6n|wK<}cO zb$1*?cy+*bJapQSCIX}0R3l-lQp>~?&h1}j()L?u^5qZ`HU2X(_CrL5zuV7I-B@Om z>2NplJ5+$(f=Y*eZ!jN^9QJmR)b8K|09Lc^?AJ9Gg@)(=Ht(eR(}q}kL{wmNI`z;B}gH93!4R^;!3!C zNKhm&CG#V)#tmF&fON%DalxHEU>$sx{gg1U5TqIPgfgZ61}dH*$B{R%6{)y`((IEizX;y@ zP+|I%kRDWS2j0i_42}|Ry9=u3W3~3v>{FhMe0!hrj`^tsNCe{Y zS>TPh0YH>HzB>>0X-7WTZ}BMn%6F~A&~g`0+;i3Hk2>y+ig<;)vO0?{5*^~FbxqN~ zs*%`;Rk^*}*h*4!k+1S`0!+RY+u23Zah0j$O6VAdNb*1IEPBqGesgspsbo=-+;;gQ zj_71Kij2hhCV%x$PT!rF(Lz7fzC5-jfCV{;;~abKgrv9$Wt1{NhxKYZ<=*V3z|Gmd+keDG*P&PdFdo@F;h_1%9yEKs-PRA(aCU0gc6f&*k7Th=B__%)kKk-(54lf)BI{CS)Jp z$^!#cZv{P|ey_9o+f)d6cj?dw%$`FX%ob3v4%Ag}-v|sU5(h16VD`Upp(VBVD6#=H8M=W=O>@ zU66NRE-0ZoPiP_%MPCQ?1qHj`5t0;!4GPC@4BijtY8f!;MV(%n(|oOWF(2C2uQX#B z!VF(whv>C2kTZ4DMZTi%XWZjwrGr8$JDXirF=?1$SXc`(rcyX`hA%aYwqgq**mjag zYPkzf50L&bHAlfY80X&ZtP7Ez6LH@z#LcT{4k|vlJag5G2!mixnj@{xek9kv`FT%? z$b<&-8_6!G_0vMU=_sH}F3F;M&wh2Ul_8{QQEQKy zb$g^Jk*);ATJ=QwU0M)XpH|?Hq}uAKeSsqe2fc03f&0p_Y--o?ryKU5&EXX7-L}^Y*V@I-oCbazaKTc3T;GI ztprni&lYiY+d&zjvOhLK8_v4;8DbN7k;eQCv4tZv=vK6S42?U zl6++8oj+uHaKf2&E5q3}?{l3N(yMby@V-}w_hQt54Gx3Gcu};61w4eRsQQAw#GyN$ zu6P9tbQy8M5aMG}S#d@re zh?P}dyT&YN)(I5uRpd+AR==FCghiGJ&f^4Rh%r(z87MIvOJ&Q9qS=Xkr4Vhdh>#O^ zrVBT@V>djU(}X^79ab4EcYnpHJryO0*sP*bHXFi901u&H*HoO>5(2RD62CBvYWA0G zkd7J54p=w-ekc7C6Ce5%xNZQ00nnGok{vR{WlQ+#VfY})WFre95s&D%JI4zE0{#ug z7hq$3qec2K$sxEwGtb{nOZNjIqh0?Ba}`rG7r|S=uXJd!~hXnaOHmHZ4oHkWXd9qhrH7zj6Gb9x6hrr_C(CmrLXo74Kn~ruCgwjyR zZ?Q~6m)BaQcyXHY<;j9Clk9b)ZPQ4lLa;WMK0WB`;eW4P76m*|?0MlL>m-qORf+{_ zxM;q~a8Sm!Fo8Mlgc)~S1qH-~x@4AzuKGk1(d=-%O()=Pg2`8xC32uJf1lm9^@bFJ zw&?C*$KZ);GH=$Ea$+&G>L?zgjeuZK`6wd7kM;skKtER3^xXN+3iBQvN=fotLU=bb z`l?8vGw_ft&=76g*GCcB7-PX;uyi&ZH}k6at|`!y$=w(=5+}!_gFS`S$&_o;4zqVI zg6Y|=GoE3V?8|A{rpr8_m>Jt`w>|rX2{+Ow4^*o8z|i1WDq&=D(_mAk%wqI zgE|W@P~0xhfQ5s^53<6&Kw(cm-*$r#W19*IQr7Q^N*(`vmiD_NqH?T2+4{ht*r=sZ z34vngse_S4Q!xfCMLvWK9kz}J)s^534Ix=2xC?p4Yd!ofjm{W@3Qm=!2NpD~=<`g+ z$0mGuj;+T^HO|BfhF@3;iRXltycX2pLq<*R;=NAl>Z^(%HtH40`^?vO_+QQ{&`P1^ z5=Vp}sa0p&zNjE_YX`D=Os~nsU+_1aEVZVvYb)YX44Ru^<%(|zyGvWV6q;aoMbH{q zw(eX{(39I@p< zj4eK${jc+eB#W#5*JnagM;T3zE`Of9osd3lD)#6|7Km>;;y!)-GDdP9>v-G)8=*l$ zRe$U<9R>qn5OrP47)ki@XE3!4-i;W7Fr|)GnaK05n1Rylq zz7~eLBzqVq#v}RzOt(Nx`fZ@w^>H~Sg&1ekj4%WIKN_m@)$hsj_#Ytu08VGW*eYY# z>)lA|a0$U`QbY~JMo2@*588DX>BTUmz33yuggBjzx-TN#XY~#K5YeMJ5k=hPs~vL~ z)04ZtzwkNfC`1F*+3EVMN9hH=uTb`Jz!1azqj0} z;z{mVNDm`O>S4HUXgM(k8)y}H5GbJ7+}R*w4XbX!pr09U_4OW_PZ$Z|kcub(yijy6 zWw30OFL1jJ%>ji*3!r%lulkyk9fI=vXIAR(V@2Op{Uzs-2_R7<`MR`?bMB5A9HcF^Gs9%>b0X^`Jonyq8#`JL z-)vW3v;JHM7bHL`V{iKnRfz^`c35HX`1>b+p}vWPwHA=o#j4#*Cdm)vG3?Ey+zW6l z0_ub}0(SSxOYkTj&VYmTbF9iDHq|#JrfEr;g21wGG@OH{C~s*DeTn4|v>D;7VnY~L zZDz~(b891yQ1I$8b_l?M6hSHHLz*gAzBX+oQ#i#>7QcgRx_u}~_)EbSfIdeOLCo@5 zvrtbhiPeATs$Gmxnz-KmsH#NoPjc8Z&+CjfB4TV&IaKDo=Q#8duYS)|>=oOT;S~!b z-^*9YDEn{#xEu~&FvwAotI4>~OFpyUy@{2z1*pV{ke3HT{!B*apYr@l_KTX{+}v!H zZ}C?eJWDPiDzN$Xjx~}Ysdc`^dy?591S2Gu4(JLa!cTd7Y}a02u@7+KS=fgb=b(Svcg&~ z_)|`CNW6-lOprXqp3~k+vW&LwyD}kW2u&`l$OMOx1?F3;+ zSirU`@C!WQ5k&lF zGM6MSuq>SIR5<*tr6tOhYCgp&Fj#v;Y|P08zYIp?%+^^RRpqS>|8Bc_-?HFMi#6%so@^$q{`sX+Zf9z{pMiuCHs75~(DX7n}WRr&`&@gsO=w7Wo8 zlxl1g4nqKqV;aC?KZzvnip6_btnFa09eqrpkR@?h@hMWq69nD3#sdA?T@-HBH)Ai( z>X2}{nRFl@wB2rBlZPAvK(hDy8q@#da{V4d(gF$w?Cjr9f`!!osv&u@%plE;gW_}7 zptyfGqV-mOi;Yr0F5z?f^~*=?(l_j{V$)*o@@2_V0RhqE4{E1JU-&_3kF`%hg{F>v z0w~aApXNNWjEkfesbXF2=sbeyL`nC0{LfxS12L;)mwEhSpCN!cjH&Za=1@87eInW1E1X2i|8>c7^wtZ~NlYGok+kBC z#z(Vsk1jwcq{tVb5ua=7q-z|I04A0YG*t1|uXLUjhv@wj;Ndv~;~TcyGHGP!Q%&iy z2#8`-%Hr52r&oYYC72cjy2S!5Ss>u&!;{qKATEyu2y7F9__0XY$(8AR*#|kG59FqI zXwD0W?f{j3QifpRewNI!1Fx5jBs3%fZ=N_o(F3YGV)m>|;Xb1mMV zYA<|sTYWE!*yyrbv=<=b4;qIfl>+X{XHpJr&3CeqjG#EA z^Q}0!8{q*zJ3%P05YP_~d6TyX3yf zNB*N9aM-ced9{Oqkd&9_%F&JzT@77|n$LL&l59vhDa~q9zq>w=K4OJ}{j9=iQBCzu z8zqlf?_9&dZKU0K3%?Ofj#dBD~+B(5X5nx-3w7c#JN$ZoZenZJN}4@Kna( zL|&iVgd3+!t@TnExO>)`I&1&V#60ChvB2?Ta(kqdBN*I`rNYdkNf~pODNVNE{$}+E zl8NkMXTGgCQhcX>5$Mw!_}JEx8nbx@%10J>1%Yr_3P%bWEHDpv^FNcYV2kwR*GH4a z5B3yO2|>&ZR*;dgQg=0P_20I1RajU$^cEjgGM}&F84^T{kX&t- zPlOz4vr5{;y^j-sSn?jl#-7oANZ5&J@9{t8`2R6y{patH2&rFVMX>`s2JcMwJ%98P z#d=RExNk>LR_Z^1gl+CG_5D3j{^Rx1>}^)f@s;V;zkM`CdRg!zVc2wPw+it8`_CdP zux{1u66*g;C?EKh42&T0M)uV6--Aw01%bP()z^RO(ZBr~Vn9W}4PfZ#N&Y_}>i^m8 z)PdC7!`~O36Mqkpe|W^CBEVkr4v|FezbDAFss^CGby}pm-8BDom;Qb&Eeo7=5qtX< z|N3F~9B!R;7uOYT|Mv<#Iya|olOXE0y#9BvnS!De{cH!aT@}mM8KcN z=p&Z-uOHSY>(-ywDrryimj&Uk0R+CEkO&ZK1YKVJ|2tHq4IwJ2>~0bFdjI_<(KC{q zuEx9O&$OshKxAr;O0xg;lPl80!B=z^@Q*wA_a~P^2V;*LbulfTN}3T{p**b4*9|N_kH{4YoZMB)nWU%P7D0&Sa=KRwf>iZ1O^o&HyGAL zr|VUA|2k5nP!dM|zU+U#mNfxi64Tz0<>cQ(^q;R$>GS@+?0>$FK-}6hm$C-R{`Ii| zBS_-k6P2KW;JJ%I2&EhT>o^71=!5ys&-B+Fqes0BTnco0*!1_(1{NzM)GPZUQEd1I zp3CabsJ1GR`e{EmN|vz4H)>PWpPu;VQ|8D+$*YYg7LipPQL@u?T0i_`cZDzhXDV9S zx}D$7Y0NJE{>_(B5ZP9RBf8%A9r3c7=oUB|=$e<&jpCnWb13E`f^W<8w|}7Iw=*Ax zn-Qou{&n}VaSAOL-#;N-GffR=tQ;GSXE7tHr&4;y8O!=iN1o)F^5g$T?|Ei|H)vIv zX(s>2(5k10oGf4&?)D|esP(c1kwo|~M#<9Abk^fk|L-_Q41no!&oXh{?eAZ#h)6w6 zUx}RCbyv%6eNrsx?i0x-+kY;Y_4a~s+>QQ@KSS)|*bKH^wCwaJ-yyxZ zJkpKuc_N3%ucRdTYD@j2OY)qpf(3yYgb$0 zpRJ{{0Iv++WGCqL^#N(oZPJWazWV_)c()N8F&i&q+H@cA9%8)GBoU1dKg(W7$cOAO ziT=-cg4UvUq(U+zd|xZ2!7{h!n{+_v0ab*-;pR6Mpd18=Ar2xwrx9Yl_k@%6fJ2W3 zP?BGQ6}eryPfID2x8Q?v`qSH>R8aPtSjuhGwTlzuQ>N1pHVMwz%fA^{n-~=ZiPj8-Ik= z;&8-?iOSdCE?`~cuFUrW`hP2y0?>QgEn`Z5|ET%_1fN#{V+#AR<@{YikpC6V7yD^xiPN{mzZu`l$AXN{PraZj0xU{bydXqk)(N@+boOju zcg^FUCGMSeHgL(U?jmatq=1IPJueOfW>Q*U6p0GhF6kr(tkTE(mY#{wf`PpLC}@39+iak$CzXSeM|>IV$-DL^F%4uJv;KZvHu2j);hebJyt zfPD)~lJI>5(o3fCWK?q=)ex~U#J#RYKgvNBZSJ|PePpGZ8#2=qYyH@nJkRYqE-h(u zLcW$EmQ!ZF5xZ9KyV*Fw_Wkq{Il@4gE0#cVBf3m-74u3c3As(GkL=-J23k#Ja2Oua z>zZ9OvfgVi#j3Iz`n+m2?O;ccwvA80RMB#OAQ>NcOIe{F!+`8uL5 zO9Qsm>xE_!`IIKVt40%)uVseb<_#vPK=s<2!Sj9)5zvmdVtBB=+Yj3A4n6!Y4&(0J z<5ve6<*c65*294VJHJF?Gq4PN;BNE!U=|XBSO*gHUPlg zp;N8#^jv{nd!-K0Kl?%AYu?3rSUL#^CSd_gmBl-o)72Ya1gNCvF3%)?2Jy7$_JW{P zfYNd_lYLg40@DRP!n5IQJnecq&@94#4g)^SpysRN+2?hR;vh1)R9QBcn#5=-%uO`d zo9?S%1Quu!C4$`dOb=G`?mHmiM~qCiv4M22{7fku9Hl_#gZ-YCqqD5f z!82yQlZ05G9lyQ9kaxaq_WrH|lZY}feaXDE&7}&&Hd)2pMZpb0fckKz^>+}raWGM4 zs82)qYjb_n($xn%W9X~*y1M}1M!Tnwg&i_6c5?rHoZQi%w8Q9!-P_oQ+n~!V2pq@< z#Qm~C9ZA>L9vF*f;8LFC zOUupCQjMWVUh%5|zhvR+)g+fe_(5d5?L=jkl-oKua3Fz;O3rz0cL{K>{)&f0dHwdF#W7emLfTC9J}X}X8u z0(5+JDEU2M^n+&v^7~e)Tm}@~>1q;ZaG=d+^uKb`nA9oH;92{wb`cWgBCWoKQgXqq zgUpx&kdd?H@Jz0`PkZj~*z6cCB--iC)(7cgc+e*RV3Kaa?U^`MvELw91rESp*j9IU zyso#KB&6PX5Z5k-YG*YTe6$xYIsE6YPp%Ex&IG+lv=>fp6ChIEa|rCZK;OeJ(yxmv z3;*L?@KS6QXzjEd?prMSm-Dk`YZE_2M-VZE6=xj3A@VmN)A^`k>-)^Q7@9Ewe*j9x zhTvW?0Rseo8g2!47O!Phl>CVs&-d=RH=uy|S-no1LRr-Un5gCFE{-PMMvHZv$THWn z%t0CJbFhIKS;W12c%5|%ua&zZreBCZlTZ{Y0p3u`fq?y0Hbt;{9LjhrQV45VfHGb; z@9L+#^?s+e-zkA;SPee1t>?d##km^z9cBhEuVSUS(lht$`MJ_@i&tYS~s5b1yM41F)AO zr6{^x`5fnjl@eEK=z+2{E;2!gk@V48-^JG=4K@H553JM+ie{8Oz^4){g#LLPQ4$ig zMId_#dN_qzwnvUTz>3QX)X?d(^8@Js}cF*iUy^aly_ubwY<*z=p#(RT2aV1QWkhoN|F zmT|=zpWey!=KLTN9~z2J0H3RG@UC0P z6EM2Z#Y?$>7U*EpeJMKuPVA`NFAz>qR_LF?}R zda|gN43^%XKK4a`fVAkzcD2`ehlCZ?mFfaDx+;l9xljSQVzR4LswXg>wuKlSYd z8a#UFjev$wX?O8sIT_%9H1%VFH0t9`cXpq9bcP*SG0_}g!`mL;2}z|BoOm|##kSNn zz_Bs+Gwak+CuPJ?XL%cK@#@vdI^`hA`N=K^z$kMYiByE-NnCjw#-};&+2eg1py)`R zw?*6OcK6JAj5SqlU7o4%SPg83JF(J zJQiizRGJR#M(W>68ti9lRTuo*qEj9kJ^}3m^9!1w#f6rpSVipUs9UK2x7~RU{h2u1 z+1l8ss8}}yyJbnw_33JfZtwO~WvBZfGIDiDdJ}9yaAfO24}{mEcO!{S&4`bCeI#!L zp6+{U$~9X#rB(RsedDzT$Ja9(Li8Z83wxZvFX;VYHRSI<79Kk|4E zs2~@E4DBbu6b;rqJIrk`r3%jt9RHsES?${X_!SkuO@IWO!DyMa)Tr<_{H*yve-q7K?6FC;Gy^i` zt_<7d?-()&Zte!ybC?VE196Z^_eU0G@~uVJzF*@Uz_a$^&%8%+Oej_fimA)h!H8s2 zvmkjyXP9q+_CdqY?rE+$ESqN)Yjz)?ekWW`49yMILGcVfKC#EjG(zHO2KTe4+1So) z!EO&1N>3JdUsS*8@+Q!+Jj9!*ZF%jxX@U}=#6ljLfhLteC;s}2-m!-ec~F{u^3lW2 zc^v7rdY8p1gI=+-r>5;QZT^xpTWBGAYoW)YXJ`=U)-{}1aR2iuLubF1t;hMrxqXstKQuZfFpUi&_{ ze&TX=aGh7R`G-;0<7(Px;JgLN!SZ9GQ=fM={%+M#dFjWZGvf8+r$0sew(+Xh#y88K zjQ`Mz4P7AI@aLXGs0)|nVArNIwU5k5k^gC78gnUAZkqcnOZ+9CkM|vWJ0Qr zc7F+8^^cJ?|;7$>MdL1ERQT!TM#v*ds!*A!yZ$h2{pU98voz=h-4`>+iJ=`dRzPF#NV( z!V)qYsL2i>K%#qni7oFCXP{@)-2v?Snks29u>ggF*X$VBaan-Q%#RbYBGR5sShfz0 zVW?kSEW@49g&)wvsF0>1hEyUiQ*bIVi%mn!vLvpsX3yvSc23T>9=xKR94N_p+j&bo z2%W+g+`l`C=jaGhzubHuvc0h~y$U^B2gjiye=MO%*Kxv-Hn7T;?fbP`U4S{78fH0= z&h<&!ON;L&MCkrR+-9ACu|iIJseajN&DR4Q zI5IPJ{v+57$3bmwsB^d6k%F5N!HH(*8{inQgSilietCWL!is_#wG$B-tZE>5;hA5E zl^hMWqo38M9*1rRv9jLpAfM{F@VPtag%74c9ZZ!e22y!NpzL(Ec zLiVUZ3wV|~%$f@I-BI?@&+iIdb!CmtxTo{%i+&feIGH>q2&tSOSB?wm1T+iZ_wAF2 z#?oNA@Af(IvXl(e|D&cYkP5u){sk>CYI(gbnhOvevu@m#aa2NaQNa$eczg>vFUDVF z-1=EcwWEjZ$-^k^K+DTwE_FY*-Pd~aD?|6%9pE?g+MvNdfKJ9VrQz*ORT^gv3Bgy) zH41&s{xqKUnUzpgRLA$h7S;eNBNN96v;g^26y#S&?RMWdjdY)hhI-sx#S~1V75l20 z1B7fCs3)!U9BRhiX#qWWT4D83=48k6T>D#u&`0H=Sxw1_-=RsvldNYI3gWCQW$rq83; zo_s=SAawlgW<)r3(z%F^*f7LvuV-*tnCsR@w1OzM_LxYZQ{$uZ<9>&b&(JdYdfRZb z5|05#Yp;1YY!&K<>(D7rwcRaP@bKnf%uS})C^LEJ`^x9mFC+R1BG?14J1C+1u1pZV^jI$IHqy?n+LZ=cwN!h@E+S$_dQ)u4oB?#!F3yP_ z>;zz(keP92Or-;&kc~ml7pugHlIbP_5^{L6)Mi%@VI_?rfF@I~hMo+S7h~`E+Khgv zZ1wo;!Sk{8uz-0}&)Wb$eWU5c4*4~ap!451fByy#;G zz2M&V9DhKgYV32KxuaKxyW+Kyg}U_^J3fLFm%V&IoaS$b1=0t2n~2yj8W&f+o$1{LT5`HKp*E5}o6F%j5%y!sqQ zT3%dO2)(RnGH$+cws^^Xh=j~_vmHZ7ae#GMQjWXh|M+y}@I&5?Ie2My0<~Xo3;rgx-$` zL>oNm{FC;oPGq|u8^mGK1^GS_IbuH#cpaQwuMN4i7 z9REVSC0z>uf8-#FHw>~*dt_f-=g&)e?4n5^g)!4!g0J@b{D(OC4CjYX-2HghIjjf* zY@7gY6hQtaq?52&S)ixQ*D|?B=;7z%tq!K5vJ5lnSfl`y4Xy}5hn5pIW%}RHK#xs< zjE_~D5Lp9Cq#0eLN$Mt5j;h@}B9*wXv%Q@;ATC6H{!U6#c_O!*%T2?P%OznuN z(pob{U0=c-(NL#5t;#?_w;ZgDYQ(T)hq}~jz*Jz~7&p39hgr2WirPmenZC_lt(<18 z`%s{6GG#OI{Xpysp%}|WeX3lq0t7puW9{kUFSBBdvKFN@=ENKE^SotrJF&~%$ZIF_ z$k^w?E~a<={$yS-7=RLZFH@1u2f-jl7(^lW-h&nbjF9hv5uPo-+@|+7FwJc@pMdaG zI@qPQfuSk7cuI^5-;>zM7nEBa94F-&wXqTcdar456+6fzU-+C=&*YIp48?{f>Zr;- z?BK%MD-*g|+17X9^zWzQX-=C`Wr?-~;Hls!qGB>cpd)i3jk0$)7A%gBV?sSw?U_+f zoO=_vRD9$wC9H>GHDe==RTpMV4r~2dR*tdG8WFKrDBZkqm3qLN$sk;TvTMh3-vND+0}KI@(q6S@4jZLZxZK)d*G zP*Pks{(Q#UY%$lF1;Qu@UAY7$zHw~#VGKs;<&IF5OD>D`P#o7lRFoTWz>HtLHqV=f zifZ+4+ub0{*wDEkE4=OeWIR_(Y1ka-#RyIua?*-x*ENEW3{~jv(sN4yzIa3@%``Zb zIM`7&Q?ZLT*JdIT;x2}f!}z+ud9 zX_AZ!R1c69tswmq2Jt-mBS&VyE)s$!l^qV`HpMKqJl{(wh#=p%B19fMZzlS1VQMpv zHL;b2zSq*@frr6!1ZtMHNjlTkDBT~Z%<;`irYK@GG7xVO{SA6GziRUm)zQf-wbS^4 zAQ#(gl6Yqm4p|cQ1TJwBm1*{fa62w;#$<7`ANA}N5@Nu4HPlGZLvJF=8U&C%0-0f^ zhE5J<;_;9OoK3)(ijfQQ)vdLUoTltVzw=Ouvi!G<1VZ}qHeRHW=-md$CQ$Xs01+pT z#)AFY9j4fKS~aHdYu&4T50uP`JE%~MU!urgHa7|E&Or5C4(R9dKfu#EE-#*^Dz~#P zPU*Pkxy-9p2nP~fW)DREVPjU!=I6aJllmim@n=6VJ{F3N;=EKDxK5X1llZRh_r1DU z^>lw$?0-E8illi8=}8oi|4 zAS&mi?{=$-4KXY-_B)d!QKhb+LDOMCW>u3*o!Us-2aMEnoG>79 zfmx^^QXx!5s|?qS9N6n7$%Xo^Desi@hJ>P?tR+||`-sFRc$BTcARRuGcn|B9!P5B6 z03D5VP~M z`lo+Qy*FJ#Ea}PQf;iC*gW|SEp?abe!bCh=n1!3KPBsek3bW>)+@U@VSiS1-Mz2#K zjW`E2ULH~1_Y^aL-$Gzw=?Al%;{0&S1j$R4w{pXlw-N^f-&obV|Q?Y=~&aNTTEv*6K!feV6Y z0eF)P1el+=NHzqOl8~(E^1+x+b}tiDtp;V1ik(`|ChSw{*+Kiu!mLbh_l?^fUNoll z_0#>u&rqHAb?I#wn1t9`7t;nPgOo<{ZmL~26lNj%*^Pfjh}6@ML*8DPr8 z>-LMZ`Yu)-8!2|eW|k#N#2z%6O--xaHLet|u;)oqkYwYy==HPmmcX<#!nICQchPSleVg(h%fK1kZW3;04 z%e!2+uzmBnh;&|E(|zHNGtE|VK|FIzntCJM_Ct+7s)?)*vK0H*9<2SkDqcVN;xgL5 z`YB%3pmpZK3o4*5tPyx_X(#nA-b^W~uW@Bdg)t$mNq+_%aWpxp+{H;Y#51HJkgnwP zG)cZqASv%5hUak+j2c22k6gm!jRE7#LFfH>{eX|E(un~*-XHi?VD7iKOA@)p1q95USwav|HF&N}s{Vb!1St$!-BqqTdOj zhjj4Xb>U0Ipz>l?e>+PrFOalha{aUK_1F~&wYx$H9!doWvS3}Hb!QsR_DZuQaf#>t zsURjU2J6*}!0-la^cXTI?;spy%yhKb_d>8n@pJ;)15^#aNyUBFvaqu^$WRAARLUsr zSe?-xg!Ri2v_*$dk$Nyh7in41Y5gPpoAv?OQS)DR8shca0C-6!+jjMrKE5qtJvl*I+m>_ia3=I zANKH*7Sts7&R6@763Jjy3F;K1#cyH;(6yOsy{IW!41Ow*z|!=M)CJMQ+CU0AAv}w) z2oV%GM-!?GJ$3|>v5w)hd`C|y{6Ixq!E>B z9HPM^DP9SCH#E;^C>h!O4S$z#m$Ks!6_YS0)!vK9=1U1!Z~0wIxc!g^H%!jxEvyO+ zXkWMIv&`K_EtOl5@pAAV^d-^qYh&3dI`Q#%vJ$WQe1vdoeLKscgBVGg%S_O8q!UxAk8Nj5j=84}`d1b^AP)XcMYp z`W*8@XWh1t;Xxrgf4HPkI1IaCAlA>mAW|z}>VbVyR{Z<>jSLsd+wy*t3k2ixKc&hn zZL;&3d$>x<+E5Vx(E{LYHd$*X=muN;KE^18Qj<{RStC5{8UtaY@ zvwW@dkjOSaAU6FN^H7wGDDKrvLsJU%24|js09)8WFdRpU$v6|ch(Qd1QCclavsz=9 z@O7Xrn9_0p-Clix2@7l26|{=H#^iAjdNCc;CndTL`Ue}Iz9|sN&wb-6GuZ%kFJF2w zxdeWIW(vh<-FMzpqpdO&)ehIlGH`ialUVWOdWoDxVZiCFG}qTKPaWOTOk!GX9oRrIE57`xts87M0=WTNh29_hl**Nj@Iz)jp3 z44IZE-+InKqjaMs7!oEquT>^OYQ|Y+f)A?9W63-8&cq~&U}uB(@-_)`fzO$*H3^1- z9j?HmGcsSYIwSojpnb)_yg6AapZ`lIrH$a$F(p*8g}&vL4QI)GlSxZ;Q^LY4O=w=f zkzI%udDeKfMUPG9OKPhgDB4~-*9o-mjF>z`O zGiI)UO-~`lp0AH6mL{RKA)VAk364aCR%FlCIafXQ#G6XcTkJupxo-<=R^LpkC5CtF zb1rnj6i9`c_XT2_mp|A|xmL7s!j!PbWj;hSx^C8F=elhhbkKKWtzbz(Ua-O-QsxUG zF7zfJrI1aKKq*KuV?OZyXmjcc;KeF$gMjLKno>T99((>GtJiH}fxy(`zdi(_m~iR5ol%<`c)IrdkmG z?UKL5`{JMyWK~pDg-+bG{`x7pEtYoRnpfG7m`j-xceiXW1bH<)!f@-B^($2lKJywF=Z&?-zdqcByC zlo1itkTE0{5xt-(fvd2d5>=_lU9yxNyOs1cJkj0uRyQVxRuc1Pxq@%~02Zccq zQ_pwc+_}RHX5i~mEyO9?dy}WMN$D}?w^0v6OR4GBeYb(Lmk=@^Ev4{hT=$bDNUb12 z2(o*K5okjvY$sM(S#$D7{iqQZGKO&`KX^VHeVf$AJ3v-qOodFqnDK^nznH(vRscsgqE?JM>Eco>knAtYhC(HI1#V+!rcXO6YVjlB zkX?bWNElfRd$iUX9Sv4Pb@H!y;fdscE}9Ydu!`0QNK1WfKp%P4$v2kK7NO$?j3b)G zGdwk-#VqG$FI$K9NU~Z-ss7izZisR7uul^=iwt4aHoU&_^Q#>CHG)AHyUU_9_n^&$ zVXV&_@*K>ezG)(f>~cKSu2(6_$IjvcPQTiotu9b|9RJdOBY0-Ib5`GZv^>{|vUPSV z5i+r=KuhjvlI3(1++`IWdAQ0TPR9@HdBFq64KZruS43S>mw#jXFh@r_0 zpq1L#Y|Y47n!mLYa?DIOR=)qH|7$hP%By6})_}1|N}M^-GqTTuuG_OS9cMVHLx=4% zp1;g__J8RRs6c*|Es6d|1@7%H=?_KYV{>?7ns13|9Oi@-DQZbDYx@ZFAj!2Tus@#j(g<0xHGg#_S2szg-ED`<>sZwOq? zxobZsQkG7AnV~|W^~X?8Ma6|5hXSW;b(EPD;Dv>sF%Hi|R5an{Ps)F!+?U`$#G|MOFOA`_z7smQPX!4XkLA zoHxw>DVU$f^bft3>RK1fn28Cccgo;E)skdhSnX$_%17098(d3fk=ukoCSQ9La_3L^ zaab4Xll|(sjRMi`9Y*@21Rv}W$>qoKOdW$-^wwxy|FaMkj^qE?DgDcZ_|fvyXA#KD z!wi|4oW(h0GT{%u=NAW+UIUlckvWoD*XcMUBOc0spV8k!^W)g2uV$*tzWBr_FT|OM zB4xUq$$_LQDQj1R1ml)qCgC$0Okfw~(wOG+tFMaqYd; z32CzfZ|z?)RB?I0Ck)IG-VOUhnA~KDDVnqUkVa#u4N+``OSX{aUmMT(t;CAZ#iV>mr)zdeERSvZ=s^dTO)(TCu*KgQa+b{laoWwCM z&>#Cc=T55q<6HPc^zX+A5Ea^O;j@3EKIR3kmEwK*7V`fFmz>7~4ZL67#!udVsJZ|C zHm^tF92g600+lJ$O#hVE|JQNs$OEDN#co0Az&}LKe@LeP@5%Vb$v}*tHGy#PGhC&A z9UVy2w4^3lzc*g9kJC1e0a22k%P*Sz$He$^C|wWVT<}GE60@-Vxm5huH}uzoIiS8D ztlYxT1-#rJhx6xS119j4TtRK}e;Esaz9a!-vcW}Sg5uxCB;gJ#c#1)L_m_Vx0Dm5D zQzd|ve&wGvkNx*B`zQMmht#~D9jq!Ee}WVLJn9BnFvA>X@GJf$h7P=a-F@&BO{Wr` ze?QneVC?#A_!ja1c^>}pcwQYmr9R@tt3MZpe;hc{0l-RYx<`Te!0hp#C;h+vS$Msc ztG~HU_4xBt{PEa363oQ88d}?bhW`BdPVTS3QwkT&%>QwKf1Z|k-RlWIc41`mZ*TMe z#ZU?3LIolu1h+|><77Gz26SJi@&Ks{p@gru5OC-U`f(Kb{DbWz&$Fct+{sFZtH?K( zEvs!ns||__Oe`vI;(+j0cx1nW(joaQ^sMdoMGh{9`b*?o(2c|6jYOlUa+*?FM>L!2 z!PFg)Ca)Igu3d>rBO0gRwx#gl>Oz%XznWFebu;1C8GhJwMwIkU!-~t_Fi%Le8U)CDU~$l|Y|(M`qIy zlp~rXP$!h1&YvvaC7cY3^e&7B5 z?sSZh_-(a|n!PMXk_*lo+);GuqKebASq^y14yNd|yzb9i58kkqcQg6o@Q6vBs zC9rfI=mP|Vq@ih{ZYYk|0aEKDPsv4(_u(@`x70Gp#EsRiofx3=I364MCf|}Ce*z3i zR1(0Y?@yL|Uk2ZS@euoO4Cwp?Qs+=C=ZPAPMm9Ym+b2Jsu&(+BFV)OD`mAc21%&@+ z{O9;KiW}6Z(f8sb@RKIwG|&SPh3|lO`m{f|VK4vSee#Tu-}=dG0f#iuj2~m_9ye5_ z1Lgw>1PpTbL-Dqs`s|v4BQEi~^8GPU9Jt*3`d%WZ;cZ~6Fye7^Y27;qSQ683iGoh_z(wUfKovCSTh4!cPFDas!d`B$XN?D4h%X@8 zrq>T+d=_LbfZ(UcAAK)86NFt@pAKcd0`5X89C}pWX!tlXzpTOKpx#(H7-Q0J;1b7y{0n9BxKTZ(@nbmqg(7-tB)Q)C?#Mz9nu)H(>}&uUTIdTMa=yeyzn5Tmovux~+wR-+Fx)qdb3d z!`E)}tZ@os@7JiNVLzJ3D=rqeq5!Vx+ByAj`vc=y zlDogx)+UMTi%slVuR(%jG9gR_62zqcNlE*!Fra8aAq-Sy`uA^s8DJFdSQAVPox2@v&0JGNte2w#0gK%) zI@OJAj24fZpKY~;o3dV(tNGj47t`nIQ;vla_f=yOGRA>EEpS!v>hlw+g?J4cz>t7t z9}$l#=btfv*na&~ehnMle|gLNLGLaQAbwDKJH@$-6N{u=&P z7;Lq`FQaEP7lorz!^xbw();95d6us20}C}kpDi_D$77oVZAZt)O0OfDjvNQTh$V=5 z;SrsI`|0PbH18Q>;@jZ7;eg&KYR)K@;+SK&H^jSOo%>ZJ7(Y$FaT zs&ZN?T)#{mX4G)9L=m*;wPGLxQStRUTm^Vz7vt7#7_`q{0plH>7Q^O%U}*8dHcN8- zb%?V6L;4Jjxg)QGmn`HwLBnWT`GrJbd8ujKA-?U&$Ohl{6XMsG;xGvK;Bv^+E{-^4 zA(12LjX`m2M*$aq)`uBL0!Xc^kD>TkUZc(@Wvr2Qpt+<-nvKIk0>f=yj#6;qUpX{V zf8MIrjEXE)Pso;)yY}38$i@JC;JEEe!q~zZ;dSmgIB?1<~uaT zc5&FsE@-h-ww3-3U-}O+?L53EDw?Cg|D3bsn@^hLlV}twyIEE7IhDJ=y<-sG*T`wZ zHm$BIbRnQA5(^0?eCBq%OdWx(H z1(i8YAm!7@Z7l;P;7ZCQJgTxy#-Hqp(5K6uzEBhgH4hSH8Xg&7m|=%1X$A*YyPqo# ze3X?+T3{g{SubfQ#m*6cQ&4UjAdM-v{<#XbB+y85>;sn-m??@J(v2+KEDo|V=Xd2Y znc5ak^Z+!izSnLu%Oht?uo>aLFwsHx!dRCmV<5Q;%js^;^r01OCjasGo)9?V1OcfB zh=NF9*XEh5bt~+VyF#T4Xi6rO=6Rc!Y0j$!ysU-S3hcdK;eEBwYgnbpQuO3qC&WK4h$x{z&42bG6s#3 zCm5ZyY)%*7pL1kC$D+QKeq?sP;%IWul@67`|%z`cC85-;gj`WFx?nvU(h>_w&zoJ89LAf0}MM zfW(-n^2OZ32KvU!8mZF5f;fx5lu34o&3M5b&{|+E%yPkO(1zoC{aSl!Lj5i2W{S(R z&X`RKqT<-@5?f*|To5y8X&YBP+3mSo9vO6Gg)s^liT(KX_cD^kWHRYZT ztg8sJXyK!~c9Z2cN!|T+uK=TxY&&(ht)ej1ynhjf?3ds66_aChWiNCQj%n!mvDj8T zdZZwbqw>`CH1u>kNiAjl{KVzruFtz|f}VY%un$W$?2*XG@ z(>w{k-|fI_?%Oc z^$Bm))QJWJS?SAs;PI26>xiL#?^JtVp)=;~awx4u$QIH3jq*zSnJ;Y~ffK;OMnyML z)ELDVFgM(*jLIp~RpvTqW7=RlJB&7?=;Jz^Lp*Z->0CqLlxz+@!k9=8-UOvKX$9#h z-(AFyX(W|Eg)_D1lrCld3_j9EI+q1VOQEtJ%FSS8C<^gdNCB3+V5H|^r*R9O!C_|b z_(E|DoB){>&E3R0nyX24{?SZJsjdR^^doO!hfE{-mUV zJ)me2h@E=h-F4P;;|?$LWNhGs6~KczMeTWctQcM^J^Tp5Cgo5!zJ4y865f3)PvW4J z*kC0Ur38Bo@=h)?)lr2D-FFu)rrX^h_J@GlEvM%7KISsl8tA3us%&~Q5B$Ae&+X1K zC_V)4S%K3Jf9Wu2s|7LaXsxE;dp_T{Zj4}2q_;WnsNg*MFk4fp4g!RgCB&*)LpZD_gh!HQIc7=NZzXA_m=ul{M+%1aAaZ;=?<((RZ%z;ru zzZt&Nm>rNJLf1j=kQA4PQ8zbfF{cy-7_qq$cxP z;_1&_B9d8*dWF4@i*%01c{d*B0x#92s`(CaL*rIgca;o~8ge@8n}^Q*nF&n1b>h9y zk$l|&n-IBc@#cn|JFUliM2ryXPe4I>ycZr@kU{9dkPLD-n%tZG`^~M$z@Lf0_3bXo z?!s_TvN~8khK|+mn1h{jz_F$lj+ndS9BPAnbN}V(flV~q93a7?tB!z+T9kU*`N@7C zchN7fgDtMRaJ^^h64?HAy1Mj6J8G$AnC+X13t9=^0FQTgwBlwwDPZsXRcrSA*H=Aa z64xC50Ynl$?V=}>YMNeYz+K+)z}&gYxfso%qIXV5k!#TTpOdA%i%!6%=~1D9ekx?` zc4ULknN?;W`ik#2Y-CZKw08x-{wOz;*ge4@wlm4-OWwU9fy!vafZSFDx}Wa>945kU zV{hF^2;I9;#jm{MoR~Ug#O%I3@3@ag{u#tH<}ImeQ_HWsCMgF2JhmiagIa2dkT56s zcQ9Yp1RQdFSI1so$vsO=6RUjy5+L;t(MhQ5`S!2rXXr%?8V36^2L7d}7GV)$qS3EV zg?^)_*tAnLGsIb%UcpNj(pEbMl0td!HoclPfaC$VvZnLs6~N_^^Cl)1DIbf}? zfmREjC0m!+1J0I}rVZ1PtRagu2sb=cr)Woh*G%kZ_XMe$hkTpw_wE;<+;)f86J7Kb z7k=PR$5%rC(E?<7uMHZX951QX4V$|sNIpN*a8fB*%lFh)gZL>>|{ zzjLQCcC(-Qil7=%s39Ss*MI;PjKH2jTywmw&cX;p#imDuI`o9n9+v3esMQ9y>f?Ua zXr3#B*RVVJ23}ndkQ0oe>?Tf*Ui*9P@5Zb_5ywq6AHemL$4Jr-3_eWkDzodX<$Tt; z(N)uTThEzzu}xnBl7}~u`Ea^3=0fN4a{(7{3QXOWzyvLTUHKT5z*jimAN1Le}jhUyJDSMR*l^O z;j6XV4Y?P`O^n^$sRFTg$Z^?mn3a;PrtQ_{Yj6m*z#0C=t~(S9VAI#Qe+Lalful&6?Eye6!SWacy8FmmLc(chDhYwih*Dx!|V zHf%MWcB(?YJpDw&F@A8ywekxj28{Td`aL0))w-p_6dnG}CLf?EMs+)4^hRc_39pH3Xln%;}F$FzuUZIoLsMf`QFRt3r zP-M}%;iUqZWpt?9ts$7r59m`RlN>3yP!cIFB-rQGI-{p?U+I1QoXDu!)3l$+T~8zH zp-Ou5jSk9|y(sIshPT`wv@$1qxyM^S-Tn0v*sr`k0STVYeR|kv&QoAz7Vee6CT9K6 zjnk77ZP{kNJ;~d2&lxzaceJ7!klh+I_>#nFDWg|+GyygxMzHb6AxdcIUh3S4x==!-d~htmx-g^ zKNx?UQl)U*mB^+!OVkeE4=l0bMD6W;h;&u9`RkPlV? zjMF|tRLR^Wca%*uNiRf!7V-*EzX#t9tk5OH>JOnAOn4><{_RY8ynxKezhU8KaThn$ z0k`lzupvT4QOaUf&zUDkAIqQm=BmAr7>ow=Pi!Lrby-f2(}i6kvRR}8jyvo&j^=JG z4$h9q=3dC)lOT&S@N$|ccJ~KDQKvp#hhK{}pR?|ib9G87wYrJwR!~*!1Ao=qpdzW} zRFtoB_>JOd&l#*##+Aae@@SHYI7giTeG1k#BQV7SrWGzFZvGO~bxx z?EeVlfxjU83|>~#T%idUczUp|zD`}#tF)8zBs;TUlstN>p#Ds>0|Wu?EVl21svmi% zmQXSu1G5z%l$2@V>r24lmm>X`e+vDjyg&lRiI~3^tETkc1YcBjEO zeuRkVPv_Y1D$*f+qJC8h>n+^w*Eo2SoW<=bvN^~3{<+GG)atiXepK1}(LXTWafH~v zy!x=e^>WH=2cAfSV?36Kb7}Mso_uf>6WdH}0G09iKta?t`AheCn7^3%ZUr5MEWS zkG~|N3buL6?RP!o5Cy)C0BJBH#6>4oLEA5VT(c19Xd_6Y2&b!P4!ofVyS9aNeor*~ zNm;~M&0W5!W+#%fsF;dt?w(*7Q_T<5LUCJG&8&w*qJagA<)$>#*^lLkdZ=2a!Ta_x zb0ko67&c6k?flvp*F-!sZ3q>-whtd}JQ%mZU{nE0$cSB5;Nw!FeYE7JC8m?weE3|) z8p;v$(LW?m@HKGj;OeCFroyVjmbmgRvbzkIiRU(v5eU&H;eBJ6ucKbS^*o%2r6SvO zXTG`O(A`y_WhKiIc;?r6bSJc1nBYfJ-_+u18m*8HzTXjyg;r2rv~$l^yb6t>NrHy( z)>jQoEvmP}RfY;xPVHLppxCB8x^&b_2d7wI#v#oHcc{YCbT|*gSgf?Ks%w0TB+s^L z6)Co}95YaFf*d_%P#P*PpKQPbZo5`hCPSZ;ZA|OKm5PcMpOHYE?y_^Ts9yG0SuZ3H zh*KJ|OK4rUl$yq2P4zdIq#e^;hc_s@#m$~^vZt3H#4#m#XA32yuHek z@$Jt0Cu`jyNa{XIguvqR7;*F(b%oTT0K*wK_8Gz3FYDyzJX}-T+w$< zfOX3CM5F=}u@WC0e@6%k{~;d()O7L|yjRV2x3b8V;E+&UN_$-ahFwJ6V>mO~N2BHd zW(R3dhl^sXDTRbhynD@KUTjwe$~^rr4**oW(nWzEfa!#}tVhQ&dK?;m4rw}b8Mnw~hq|2=0Cm}4qwqKc2QvLzNNw71eAIL<@hV$uct zTMmxKM^d&k@nj}{Nm+dy3uq*_sR#EVDY5D5>?mAz-+nPa6u0NlyI-8)Z~c~YF4bZv zpttofktlg*d!o3n3T@I7r@V2Gv3bS-dx;mrSy4vHh8^St!^?2dk*8 z>D8h)caIUjCOaF?bV^f9Y~=#(l#z2(gS$2^qMTI%h;cjqgRAB4$AWD_!1Cq2(^(TL z4*AQ4Z#IDEi~kSLr`;JKTcJo3<4?Q@Y=dmM<97r=7_O5kH%i4_*c}KQvJeubn68fS zbX^-%+wP=rQ#cX9oPY&^9PTLcG3%m;Km`l!6%Trd#zdXA?*-@5VL(gp$DEElu+F@4 z@;?CO+F-r*s|G34QKqW=n#&d4%KoaGtvc|n?nLtiIpSYf8?^${9Q*Ft#9aGXR>?YO zO+Bu!f6{eb6v`p_i!XNjM)^riOz|#UwV{Xt2ZwA76t2h!jondb$CtP|ouyALn}YFJ zZ>}y$d%h4dI$fd=p93<1wIs^^Q;^0k8p`0QYwN2KeSaoFl3|4m*a95e>?X`RaR}|w zo=L6Eb8|J_Z)`4>JeQ_TtdjF4Bz*`XptY_`sWQe1hj1Gf;R^-NAv#Q=+(^(tg1B1c zvo_1;l{9i zKNYK9Fj%5Q@XLRBdAl?`9zZZHE@VOkc~BeSUR@EF^>b+`LNC1W#Ny38GEQ61R@Oo5 zR$!18t;;JNnQu@ptaW5qhP~ea(AO+vvcZ-91jxne#jE4pO*6WDN?S@%uzT!kd^ric z&i7+|Xw_KK9ypfb>#jx)m{k!%2q@;aNynq!fr8H4(@hj9zeN3y?(zd*@3 zjb;^Mp0h;@T{Nec5u}_J!!ryp5tCE%kz+)WbP?8cg3%%7hJ+Wv@Tu6n5FFOiJG>S} zaLl*ZL2_X_uz4(JZOvdX4OsixcjBeUg?~NRcR=m!ya?t;yz~vL1~ngBcD7C4$1U_X zYvbIRe_wTyV3LqFX{$h;wG2eXrc|`L`KDR_TanH-7AF8IQtqq`nLeM^Ei~=1f7@&J zFt@s$`7r}Kl;E_9Rf`HSjpk|rJpYIo1N^S)bGJ%f^#$Fzg|bt-JumFkY@r|eWqzF- z1RuXOvKYOL;w6a$S$7^ZC~*54M>VNw`m++-Ny5_X5KOY^w_FAchXBVVM)4V5cgdp%^jiSeKWYjN5rX*>mWX?x;!2Q%G7X&mx1 zs`OVhGN%(Gl;eVafw?iRyI~vSIy35OdYDMG5f|4;4xG38$Omg7H}qW9EJz0@GITVV zi6H~xp%5!hKESyd5U=9dh?d~6LTHMKAgWo|5+=m`ZVOvy#r;Wsl|5#sIles{8U?oB zR=h=d;ElN?eu)sPIeaQG8LVaseXNC&Rb~Q+vLIweEVqX5tzM;X=)5cTy#fC`IO+23 ztJj5S=ScuI7fI7+)%1}ARg2W}=ur&Rv(N+VmW>IPcNy3_`_twFG3~;{nC$V(gAGP~ zfze`&8D*Sg>8x2F0d?a-eTm17L20f<>QO>-`26R79_c&hn-ddBY?=jG{Fl*#)mo@| z#L|eopF1(N_h%QVGQWGENuD`!0&VFFP*CUbj1VC;qT04afj!W&;w-=^G#Z8BtK96> zr37J`X{qgfR21Dt`N#f;l>`UC!AaG0%>|f1z9()L#7=n#JglSL6eDgr2u^!giR`ep zpA)UNVhxL*Q{i=V@Dn!bq_H)et_4w|6nP!lQ&?tIv*y3LQTH5PsBEl5x^(|^ivxqvi*YCJ~^d0h_6E|Yi3x=DbkQY9TV@DMr6<^{?cj0iPyvF@@ zujEJ!HPKdbc0N}wGFJWHySgvHI?*@bj`HUh1-iEZ@ecD&u<`Qi4z zq$~|GO~4*OFfeKl6sLH|Ez|;tAa_WOawTACICMB$loKZd>5Un70iiVu8bO{C$Mdhx z;3g+@)9nXW(Agz7TchUaajg7>-rP!NZiSCycem?T*9t;5E(WBz5%-Ep zAyp1@G)s6U)lmzS(S4LvKvx~EELuh_m84d*6ZC+)O+~2*(YBBp(YQJc#-iNfAIV^Q3;}ydRmapsN6*%4SCx!a8nI_gq78Gnu_xtna zj40tbG;C)h-*BaMeP}Ra>Zz<{5($A*^qiz=6g@C$;KK5 zmfHzl()gHEo$>HiUSfiVNo@MaoxBi>hy9sjj0y^SJgAa}iqL>^Jd)aeN=Y(_5FGM6 zdZW7-3qTk4*`Z;zlP(YaZgO14@VE2UM6iy>PMVgIapyKHR@Kco1csO%?X8X?9o9$ z92TmiyQvOIy8=7Uv*jI0%<=hGPpi2Z_+rX$qijendq|=?do6Kp7|hp~9AO1zTvN>q zzd^a4q(Y-Tg$&6`kfAhqH7SD4bvySkS^}GWCX+saFkqN&hI*Ja43SCCnh}6RBA+WT zU?tGQ6mID!Bt!%S!EQw(hu@w7o3(9f3kyp(3s<*^*E46{q~llH{gkU0^-lfH=`7C; zqEA?6%RzNEnc^mz9hzH)GLo|81Kq7tXKWbC&cV2@RfAYw8?6wbH7rBF-cy<7qAL~k z9&{EDK6{-|Uy!u}Pvu?`nIS320euc`8cf4%N6kT{=bu#5E%c01pTdYJ^yJl;;2k)G z($X`s!}qKP7gUFuryvohk+FjtsLgIH< znJ%!RlHH(^E}!+@zms2tv$dquK+V|ZrhYJ-ZusaBcw-|Di2#dAFdGP;06o}A4StYd zfQEIG&lvj_R>H7*Vc`fpDOqRHe9$W=8$x0l#pNd1m?ux@56hbG(a>P*G*mdi(c=T* zO9sH9%1%NE8`(9G1cVDqo5%hk+Bh_#3TUFaFj$AvP2Oe!%J#B2FZ}RSH6}bFuCO;< zm{D_F6`$|F`WCcUF{Jl65yL2wq_6xT*$O_KhuZ)l4_bQZSxz?mn$V0_hGfPgaA>N4 zpE4Ux61(;n=0hn#*%IqB1*qzYQ*D*<{MJU__cVgl%+hLB=x~?&W*^_IS66oEw5L^9 zd+3)2N+oyBi031`^rR6c?n@{W;-Ell-6HNM>Z8M)91#gW&18jW@Xgh?GZzZ%ZA9}K zH$CkY!Nae6ELU~QRz^JR)nR^Z`1ud>mf?qr?rA^dxt*1}=*Wg#jQlidkgzL#>jsG( z9xC&MIf+mz{}l?&)Qy~{kJzgA-bD3#SyHq4W5(iLGV^8oDBX4ck*8IxL>d5UV!2B& z)<#or=~>NH#|LE7MU6%`WJluI;J3+sMsiI$48V=#J!$=>)gJ2`QHcUcQ#c3ZT3iZN z+D?^#LbQK~Yz{ExdTQT3KObb_Zx^C*FWAw4CH$}2`HKPOflX?ZCppyo)6jvi30v;!|bQ+TExs21>r8b0C` z&o^w;5Zl;cXXvD{y|{0I(@u4Bk&-ItTjiBxWT3QJ+YvT)M*&qu#+{57t~Z@=!sysz zUAfWKRBijd7pKW#UsEg^!hQ95oO_P=`kF}%z2EJt{=yJ~a9f7Vq89rCYpH||_pc1f zZyPI-a7a9iiYeu-Zo0USoq^x2<|ymHtjhrPV<2`5&W;HhJ`nTr&FMh-a>}N6f*iH0REJO2$sD4Cngx0vPi*tO87F*!@X}(M@?*;+=!NiC z^OE#h^d@J&xXA|#PyQgeQ^FbW-CG})-!9Wli2`5R1Uv`-^!VQ0Ca2>009m0oU&Up* zwISZ8KX7yw;AspBq5eT5S@u?#NQG{0;LM_Y;ZGF+oS%okbnG;h=78)oTw^M8rArQX z&cm%4-Q3HuJnaYfkVEr7jt@Z~;gN7~M99v3D2h$``8QB5^NAOR(z9U28L13@R+UI) zLHCuIJ*}a0cY$<#{#u1|NLEGTb#~pHle-& zG#&0+VsUPin5|` zy}LaIpZhgOOA&++yoVSCP}mNRyeC6XbqlFaRD{@k|G(~ z0J;=J6X8+YxNFv^2q4Z2m%Yv)nL$$DI;X$s)<`rcbCt zE_r>=QTtM1s(Ln;;gvyruWN%e~I~;y^|}zmh_9y7)A(xD|>e`KaCb z8Mu2lGnkw#E%~Q0U1zoNp2c=_ELAN`sz0d^=_&b5;KQ1r+m>O{iT(6}Se?g>1ZhAE z&Dxbbb?aQ+c8Wt{cGn!VuUQqM{=`*$GAXM*l~uO9BD|G3Ty;YF_D;S>rNiq6Z8V{2 zYLWVr7)0L5>=oNZ&6IfNoRd8)Ok;FDi>fErM|o?MvE!Bio0!4o%0{#?DIIFR@4L?N z)#Y7kOvw*TT2DXL7WuZ%6-%y6BS=j2Tnw4cWBExeX z1+D^bOqhR;*l@2XHgxyIe-yYNa0aC*D8Svn-&?#OwLvxdlvX9mr}z$5Ov@C0eTWgOqpk|Ikkj{i!b8p&rvu;9Y(ah6Y>5+TWEXLf~xii<`zlkyKqM;_oC`OYuR|VCqegQI~p%fdp0NoFD(1t(6vVz75l0Weq*FG7Nitoprg; z&goSqCP0s332lJgVE*33G|#!v=>H&2>@THX7LjBzm0%>DDu3G}nVa;DuHbi-Rq1C4 zU?Keh1m;J$15)t{n5!Da6Vz#n>=({t1d>oT0Vy^8(`pFe0X(_Zrp~0l1-6a`fPp|)#*b{ zwm3{R4NSF^%?+z|KEAv}x;IobDpe$)T7x1Fg)=R1JJ3Gb=!N~@E=rgJ`s}1M?|Acw z!8u@ul&q+2Kr9YwKNby?Z*8lI7`*gU4_mSL>e$|B#)wTOO~pZALCJ2bV?_h)ZFB?* zdMrj*NsL<)iUIUt42~&%D|o-ZHbvgQ!AkCsENvo zVqmsOL3cj1N<4AWsdF!8K9W}h7Ku5O0_*zsQPtDq3>U!q|9Yo`G36>xvv8m+S+(3+ zoxl1L>;w4}fATyghM$n!wbioB9S&m6=+Y0tN(UYWL#8b@J7tRKG5Gv3(QsKRT8>#z zTjWhsIRkNKT}{pd--jOUUPmSom#ni3c^JcQMR!)$$A!!U}rSVjy!_5go9m zA8))AHq$HDO@3pQy1cUx$jqsuNkk*4>J}0Nqs@U62WkX35%x{>!Hr zrr^us1Y+wFH8QS@#uYA`sfxED?NS~1|Iq@VwTf)NP_6mq8%m0(gVL?M1v;eqlQ(FR zFC*jycjaka9uA29yc*Rs{phhz(xEI8o_)&qpu}<@dp6(}=GDk!Rgs`I;O?aj+B1jFwV0<={_~JY|^CPS2$(yalxV)SH(nq zU9FNS?!(k28_yuI$y56~@&bOHpn|^BXF9Ifl#W@&`e~@q&k#g|Mb};V>YnVh;(u`4 z9#9(nifPPY+7?ET(%SP1q6KxFWfn<^8gO}`N%*>5Aq@GSPX*=#2;02*(gTk$ED#kKrQI3>xCz&7t)ikE)K6r~ zBQPZ)GI-5kUpG}DwGi8QCC(0VSoszWU7t?w;a-y+yR6=ZKsi(JN)9L|{5>(##C;y! zi&9%_wYC|{yPLT*t|Q1Oic+NZK7<*=7}t4L{1cf1_2ZA_3Bd32Hr}kP!S58PruXy^ z)g}?zvLuX83H-W0nc>@mbc%w{_{6SEj_g)OuRjuU?iv_!s|=#1_n(kzdJ9SBd-`a} zymIX3q!v5y*nE*H;9%X~bZ!0b_lg)QimrBY?PrGvonG!HQcvC(eD_{sHF%YF??Q?y zNPfQjDs&i7CH+B=&q;1`KC1noSRktiint8GntQM=Z~+skL2R^qQ?FJmQ@wK9L9K5$YnM53_WUXLq4eL>3~2|90yV3Jq;dRpODxq*a@N`1ImB@vcIR{fAAylPx0%du}-9i z``<75{lY*04*S2qYbAek6@Wpti^S{x_aY#cVLErOa)w5M+ zl)=yStIhw07=tB-9)QYm_^`j1kUx>e-;di&t|!TE-}jII3Rwd3@qdcyiUho9RJ%Y@ z(!T?vAaV`oe}C)0emSrMeHd(i|51aYcz^y#0-EQWtw;lILu-$rdluVm|*-l#uf?vJEI22PlV!YR3jNbPLS?YUWO2$k){!nml!VB z5ui{0XV=Mmz3^kMi?aOVs}&?rFcH0+{lYQKEFZ@xkmhS!9NEObM1DNF0Dt`}sY}@t zwWA=lC-)la^@jjk11^X?A;{_e&zA`4Y40Y>C|2+wh1VYZQ&c zc5^Q@J*!_i`0IKvaecj4bqnHPIdq3c)1hzL9O~lnN4ykjzewlj^IN9RT z6QacbI9pn%;@q!%=lZ&f=Bh4byj^a|pufgy{?GPn{sDL|AH}53f97eDqVg~ipJXQ} zEFRy4ES=tXw&5H0(tv4iZnH`yVElKG+yC>W{tECcfY<({lkJYzh z!-a-^u}94zs$#DUDDK+c0)XC+QQv7m#UrdyLvG&mV8U*1%uP3<7^9nWX|yAC+0D z@#ldK`r=-U*_W4!X&x)&*L=+z3BTD2WdMmXs%6R;A69!F?eEQUu9$<0OL`4o#kSVzrQ-b0?H%_AaEw=TfY zfVJZTAevonyy_RJBbrU2PO0Zh;{M?^xW?Nyc;mz zMn5KYO{+nxEy(dYB5bl$f&oys(Z7_#VjPec-80b}0A_4BKiwz<07Iip&A@a#svdy? znW~w5G(wT!r--=J?XQaGy&g=<=eMh`2I%JAc11F;2QO7OXnI)^@W&7T&b6A1nfn`@gt*3$LoSzU_Y# z!bZB0E&*u-=>`drP)b5lLZx%lAe(LxK~Y)(=?3XW>F(~_bjNRU&V8Pr=XuBd{sHe8 z4hL*Dti9HnbFMkR^ZHyDp!ITnR6%|p&~=ZJDUL7qe63#b_t5_Q$U_+j>o#3+Rh^vI z@+xLN0DdwSY)m!t#hC^~0V&Lij!XUicv~X)kf&)9FpxuX>|^E^LO`+Rus!jp%6aqSwe`l3Z3b{H zixEeZzMfrMXibswznz4y`Jm!Zo;E|>a5W*}Zl_7c_?tjxYtCM2x_LO)DD&#_wBV>7 zuw?0`Xe4dGMc=F~l7^Bq-)5TB46wSa3APiZS)8D375JN9LGH-Um>phMMkH<2 z-x72W^D=B}ZWbieU%ams(p@lnh=F!9yF)Y0A;9ECdlGd;oi4!G>f23l6T?+bXue8QD(uEE+4(z#WEMOZP9(%k&AJ1nz}vk>3K}l49cR$sHu=tt>`XhDoa4~ zysh_PQSc9ql|~Gk2X3Q!oK_>u#eZV1eoBjz1a-8C?O|ooputR^=Rmr|307BH7ed0i zPLo}73K17Og#!=WRp z8zXrIh!6n|;cy=qL*VND4P`^o@#B+O*H4dwkXFtvW@5XiZDhbQIL&tkLhV2$?3rbX zR%iOcmqk1O3%=J4x9P+yD#R8A2^THVf?hB}f3kc#Jm`{h8kM>NBy&~)dj#cnWxma- zAi&k^fDup&X|I#3edFCH$J^L;cEh@d`bc=I(*P&^BwNRbjw9%f6X?oNsH!2VkhVxM zw?kJ%Gg`C_M0~7>x(o4I$h6-g!T^8GP;#j(x1S5r*14OTu~zru9RYK!2!+M3+IsKU zQ=NUKv?sO-9c5t-WfpF3c0Bt@YX&bf!Xo^ii!w=ty#MWgqoUAc;`{(2%(LIl4Gip_ zd2KM%*Nf2c+Lvk~-AqlAh726&fJ{ z1MBRKdv^2OoryG2|i|yu3 z#(z5JZ1Yo!d-esJ7vwy=Y((GwX3}~WxIoKHB2F8&r_K^X;dssYiW-*N8a#7&T}Rk; z$3z6ZW^yh7si?UsRRRRi3vj(6_QH^qc7 zFshj!{e+Jif;>^ptnLpFlyVm-Vo6bL$GZ~+$dS_D;RqgYgR&o4)MsJyhtITbroMNJ zu*x;?R)A`4+h$g6;BR_d@^b$KabUC0Fy@N0h!lKM2-qXxlzE-g^~~XNb>lmP7gF%9 z_xDS57-8zYceq->0G5D|dwkF(R)FvX%UR`4e9s;LLO`F;V2zf^|?#<`n0dG;|K%A>7SU1J} zWHKg#Yx3@f8gPJp~6dd;3$L~+$dY49~yve=8NF-!9F*tSQ7tDH?aU&6N)sv*1 zSA(h9FBUA=SVDf(GPv@0MZ=;j;^sW#hCFsh26$E~q~B**sbf@Gi+&hQgofQ92=&j+ z#7?&FG&5Gp%7n!8L`_Lt=GYKA@bYb|EVLy*sTorJ9TBpvf7e&)*Wi<;1#CvCodNUY zPKQ+s1`}#`K`vJ&lAG)=1Xl1Cn9hMxN0q6A$1u#zNII!M_j*cK^!MSY>;@y0enKeFaD&X6EYJ$md8YJ9;a-qPWJdF zcHs;k#K+u5NX-t*AxAl9n4d3%6_M-sS1AMZA)=yRrofKqjs4>WA*H_XTJ0cYcI48m^2k@BezCt+FHQ)_lveXSg=$J<~@ zqWj=eO;KKwx3K@=*0_4QP#&5d<$;(d1DI}9J8ck=rwRdUQs={>=QNLB9k{(k2{^$n zIftL!a+1URvV1HgBRsAKRRbDt&wbwZrT86FU>+8(g5WDcJXLu~sBaG={#_vL){9s* z6vy5RNQjp3@m`#^KwG#GsAQ92gjWXX8}5>|L=-i-72U&%0p-Da#@w+O^-r=E^gvb= zRg?T4vSilVfsAY!fjKuME+op{yX_9n?R2yTAYfShx>7wMd44W*$#PHWx9&(zC3Y10^4v{7T8=mDS87AgS4%}6_%W=9164^D ze{HZKyumS8X>YnXG4nV=ddX(0#3JhQbP;()Cu~6mMYaB9#-kVNyWC8PLAL{q3xI}2 zF~RdzlRDG4_Hx1eO|^9zSRHIYP)%!rYlR%6YChr%G4d2Jg&}sE55PpJ1?2ER&Zxx- zY<5E^itzv0pr=m(PW`9isQ}(zv>UJI2e#te%j5`S6s;Lxj4Ae;QIz2kLcNcx)5umTV-Lo#zT!kL&jc& zGTno@f(byDk3ZyeDOMH!DSEN$&G^3a%PGsjm6t)Dl?gC_Ui7&<;-2BYrmGFiDF;+3 z_Lco`G)=*aqO=u#+qK@)j|(D^+&noEltR)V6w*AO=kTS+UaK&F5k6w|Z9y6L{I5hO z$M7MF*Ipeb zwq@n5r)T;GMTDV_Xxx3j^&su$w|ayKJ#Kzde9qTUVMx>SlCLg|eZuYTAwsMi5K$4VqTkQ=3#TO9Bo`z;DZ5Q2>?S=tfTPRyoyv`Q+O2=l zU)PXbnrSA&?zb1X`N{hHb%YP5Z=P;#YPN^b4Q&BG2|bUzAG1(f0>F6^+y*htZHPaI zkvLw~d3kKoOQe;94ca)l6F$Bfw^%FSUk}Y zvuZeW5C)mXKTw~5N-87YdvIX`WmHX?8mp2Zn>04Ad=SSiAp#ij?|RM03ARm*$oP~X zRK3K$>5WZNl)t&nVdTT3wsL6$MN1Yifi0TGg@##A))nA;;;j@yBW<66J%g&bC6NGRu%R(;xr0kI0w5rU;wYMv;YL)m%9`o*slk3<0a?30MS z(Tl6sfZ@BFq*DV+C7=2D4CLS{9?kvG$_rd^m1zzY6TOU1#5Hb&&iipg3TSfZ@Xu#` zX!vLF+=eDC=bLEC7U;2<_@EI`LXaf=f(#$U|K2`^?u<{q%|iz&jx6uLdu5t-99N@--HFXy*F>eC|uek1}jrsLszmA%j(9M*RX z04A4>99x2fiQAAW6ZAHi3d;fJF&w+YWGnEdeJgJ-vKY7`pVSe1N*AXG}EtN$rcG1^yxu1SP5;=vj`=CJ><8 zg`Z85mWvDGKCe8fa#$``76ro5bpP&Xy5z)@YG0irT`Q){R%--zlIGG^ATWELfhw6B znNI7kIeoMkC30;Dv&!%ib=eC3&ReLp!HpyeB-f$9@CRt=Ohi#uH=B@K-sC(kwO!hw zKXKPU1uHgdEm;X{$Dg1s^XX2$r@5a=?w+jcB^6;Ya}sQ7<+Wc;3EtJ5R2Z@x8Sn0t z(ZZ`o;i*-Q5;->*xEjG7F9IGvx76MSP&&@z{H=;c36 z|93BTF+!MO=899> zL)(i5LOsSfiZ&7p%chS1zz{Crera@dRfoZ$GGbnX8t<-{PhpSPLF8D!oBX;Rw$!%P z*Sh_RrYCx?>Cy6eu=es!&ocg9-w+Dd_!ei8iAd(gko#t~i^H}x$OWaidPZz+QDy`Z zUN}_~&G1Ktg4Pb0=7XC-%nY(JO3^jdX8HOw7B$M!)KF0@I>_&@i4JA9%6clYs&0~k zHT)@&7@2i=R8dk1rYU#|GvBT`ASTywe6I;6r606?1qPM{IK&D2Hc$aG52vP%>)Fu;c zG3r@HZBZWB3l^+%gcdUMCkyaLSKE$-5VmXJ7Ke_cUZYZKvr`bo@bv{h`N(dK8P=|E z-}sKk34cDVQ&*IWUSFk{J~$B{opOyBNsqor}KMUriRs!W2f8gg>Qs9cNB< zDx;!)$DkE#lqFNs3JKIe0{V_p>qSw8##$;jk-R`+8X{Eb%2^8A(xE=7i(LgaMuuW! z+8%#Dlvz?Z6MZ}L4C48>-nD<}N8?pT-iC8eXL z5XJffyri%uMHn-_cbJ_+hTLuj9Sse<&bV2+8KeI;48)Z8u9Yz{DILfiPS(EIiGV;E z`lkgNVowgX#(lb6z5Tk?9@ESRoUSILTe}(URRp&=KPAemJH5#0iM?pEzV!Fy0usQk zZ6~^b^eaE&BV~5x(V%VC2a7^9 z;hksirgR@pjAYK$5c37mp*En$Z;`OtVXI5uOnP6)E*r$5cQ}uItIU%aMH`OwxbPXV z=0Mt=NlskWy%A1b-3x4wl35zLloIy{MwWuKv@%Gi%7(l*Z+ujJR)3%GtL#W_@7e<4 z03BVjbqK+?p^?TWyqf$xC$KNasaGBjEOwN{if=W_+jMN78!hZmwi;$8r2n4N(>6_w zJ46;mH}*)AQ$wk*`*xp>3v`9V><4jp0+LBhl#s4A!O;8qOfBdG$FYa-q-vI;Z=Y9= zInqkfSX*%gn7q?7K-^9KGdGuUVwxcwOF0(G!6%P0aW9nOsc4h%xWK>M)oU|{%V(?U=gL2HfCs@aX1fC8kePGEyt5y3%%GtGx)8ylGvCW5lQ{;eaY`AnSeMb`O zg_evs6V?+|(LK1m^OYic5#aEDFuxzh`-obh3cDHCwkY-P1x{%AS08`a+ayago>NIP zye~{I4Dzz!J46q7k_4l#ZT^;ufW}Ct#*9sTxzo^5>??>8MF_V`b9m@LK>L9RE&m`0 zJ1ugVXQPWakQGit)?*dJ;QI?14Qr{?$!6pVJkip<^}pVcgikezP5+3r-mZ6AHz6L{ z+Y31LJL!vqMiFzu#)N{%76g0zKX@t7d&_%&7|I@86N!pO_r%SOcDTe*ZRNF4dHWM$ zE8|PI@ih554P)4B-?2h- zay7C;{av+XFXVPO9SRcYeM9)eS(p5=dI|5H*%yrk#Oa6YXgSN(7~-MsbxC%p0E?PE zc-=alN%*ENurbxarp`tXHF53M!V4qNq}XfXjKhAlgg|eEUmxT*&*IBTSWjs1Hg=ir z3rA=o++nlnZU9(daXP`?UAn6AJWJz*q(p~$O@h6Wz#~15G<&L?6~O)U{i3D7kR?S* z4uC|R4GR98j%A|}Mf7PB%|baXLyIww6XT+r-qqV}ZQRCrXXK<-c{Xa|JQQzH!&K%VNZ6LOn%(9MgChdgf<&%0W}iOB%^4wz8jk88!?L&S>C?3U-pReLn( z&jZc6KR-^dH%gxnuoMYqEwfUCNlj!XH=js-@m!$u4}Xyz|_bLCUkJ4H-MI0>+(8Yn4;?$VsSzZ%`rOi9z0QN!X2 zJtDyI6wiiFy3mM)7X97_XKie{(BRC9eI}hrTF<+jnJlu!#?5F~yft3Yop^5V=a%vH z62U_W0~78eHB};w#m?_>yv3j7QQIYU@l0FTD4c}-#hCf!LO{SSCh0T)MY08;O#q2@Y)oANi>ih&v zI82P52c*#g6C*t3%E5F$l>HC%OQd0>b520Q|5D$VER-_qIJPMG_-NQ`#XemQl9U4F za<;(>oPQLg4?DI7RkCsfL6hEU?~T+!u_Qa#7c5@EfX9=!F)wwtFrEQ9rRCT=uS!Ab z@>?O)k{CytG)>I}Iu==$K|kII9aG@yyv zV>*zjvbRCr^)U+M*wUxKJ?d~W+_mAaCl%pqWYE(WcD-ElwN`CF9V>dj*-(@w?YPC> z)`xB`hn`k(QspC@Ybajt0IehM4(@8Iq5;LLQ1{Z0iGva`lWg_;N$*6Iuj?}$s?vWY zS~M9yni{!O-kFVKqgi&Z|KhSUCU6Xy2UA)N7!p-nUo{z0;79SN{QS_Bji3 z&q0Wf>jA3N5{{?c^{WKEc!yJ)n90%QC!^2HXQN5ETb7P6tIm_#k!f8bv2YDVm9EuL zQM2Rbo<%}g`PkplirpnK5K0Wc>w0ET4A0>=!LMt10pW-H6T_ zCv8aW4#l%KmVMUI>Ey=!g;IO@5mX{=o)nl9X^wbeXg1K;wzOc0TdKp*r#3*Pu87=z zNg<2O*9FX)9{r9{#SLu9Og>hd=dkFZe8YlEE!v{>lJI{ZsC8P6LL;fg5Z>;}2L3@j zCcetZv?sLT_ZZ6pgu~xK@aVYl(&$=zv$MQ1Jc0s$Ff#(uj404fofxnJ8IWD~hcPvmi;F*Pij?M}mA{;doBrz_ajD5(zc9SYaac?z7WV zlK{7?^D_4+J1(9Ftu5byMfZxKnV1bwox(0am8K`kRvzf-x*hx5axF+dG-ZamI9xZOSt4uk|ZqMYg6f;c(erqS?t5?NKxiY=k}7n>t_y!73pKTqdvX62oG z-KY`3in~>|t4fM2@YEv2bOb?mz%8C?J#|{LxBE87SOXN@hb_=yMu(OrLDoqN6T*x>zJdpdp1-cO9Rc*$UXtl^omA<^ zlbj%o7`1C_+%Z9I8Fz>f1_Ea`q%4V%8V{)ZZ>Nle3&J%@+&;eT0uC4Sf5BaAPdIgD z7lpms6M!ovehJ>_RCQu!o+2$W@|E)5)@U)>V-W^e+iN;(bt+N=+mokdlVA_#wdV8% z^D#!ve2WG``Eo)2{pmMqCf8Y2-7$u-;J{tHnnxA&*#x5OPmql|j>1?Urrpm!@PpIN z8k`h=&g4qNn?vo5i(C4-@&-Rfue0rmS~1`Ir8oluhdr9Afo?dpiL~`7yZzqIcZBjx z^Bty4W8-eRV7piF`+7oSvnMvLF%e;-C{X}$sw?ekDL}l*F)=a0 zhURmRnXlcedDu%k6e9(OG=%oLgJWOTM(=aH`NU-?-u=LKJS9OsU5)yXsjDgohl(C} z?)LLJU(X;*LuBdgG+3Q%Iy7G`Q@@Mxm%1~|%hM4~#>4t_SikZs!!O}**AI#E3VF3b zC|EpMRd~#_Ogc#4@UkD zr3u=@;z|I8ERjml#hFG1qCg%E59pJQ>Q)kGs%|U6it#3aNu}`G^<+_@&gilEj1>er3BWArO)3W zW@^iRu!Oe2D3HS!rJnk#h3KcBqVtfm>3u|}MSJ6!8SRfu-H`Pm$QB|iZK0BoA=Tvz zR)QnJ#}VgWm+-0YBeC_RIcpyMn*gYZe6^BdVkeH`)BmwyR**D+hn$`TVwguc^wz89vvcu zIpB?NscQ>j`tB0QmAS&=X{pc%o~KKv-iNsF-%cxAL{0z|mP2>9ACLNyMIYH_r_EWP z@JBx#O{Pdxhy0o6uD+jYO3fz{6}Ed<$g~|P!nOnqJFUIyBO3F{Ty$+pIGRqjJ^YHZ z5f)#D2?W;CjBEA=%%joeUR9UOEN$=#-Sp+MHdL$}#_5I0t<8!aL288ZN*I4!`K`AP zlG}J5B&z88k#f)@sr6n+iz#ZnC zn#j>93G5+kk4jE)Bg9XAZR@Y{9}vuwz{G8HBsJ{huU>YDMz6)Mzl>fgfu^w#Y=fh( zkh#H{B+Hq*kx_qyU1Qd^+khPOD8El7xc&Jnh^6qg$0^lh!CUa0g-VW z*-88U_oGAh$_l)bEw)d>h%k?^lh)~K#JbRSMKkKCfux_{JG^$!v%6!WMKxlak)Oo9 z+@~dKMBjF-2W}RrN^Y*Zr4<)suFkpC(LuPhGiWSFazA~_bsm5>=abj)a%-hZQ;3d5 zYZC+%Twfq+LVQMz}o#MgkHyZ?<0q`MZ;VXGrU3<*UxO<4Q8rR_%Aqj zXTEWx{JDWnQpRsPVpl431nF>-3e0uS8mHj#A@=Ud6?}B7%JIhi2)pTv z$t_$tUuX&Ua`M=l@Ms`7?`ta~;V2j+)+#^daEV*NIA&;p>f7}`0 znAblMFArWy!iv$cTNSDG9|<))t+dn7bK2W2r(uCShq(n$xy@}S)s0gx&`8hb29sZu z7#RdY*~3Zm_fxAk@$1@03ud8E)A8vt(a_oEl7L-TZI_6@OXs7@zxbmT&fOx{=pZ7b zh?0u(7l&WOww_IO-^@W=&i2iMsHVp~lO`lVt$V9E#NNTG+Huu(V;en)=mPD6q{jfi z+tjO-tGGSF8QJKSl%2$_aL|s)R|>7FpSHLwQNU2U2kf=yYHq4cM}m@Pq9g!2N~I}C z=xG-oGeYzTnKk5P`YGUX9wxz!C5J$VHsSmft!QldjReu6pMbM$EIHAy&q9uYL|oLL zd0A@$FXMsn;>hqIwHWpHj^MlX@_XL&T-Z#V&}It;zcr@09PYWboy^R3M`DM~^}4AZ zi6$R6np^oNZT|n@Vk_lYr<2)(?e7I_#W`$9*CLROQf8%&lYyyKCMw?fWR5oOL4R)! zbvRg}@cK(K6YJk%OVVPfwDfWskI4RmbHzhz-D;QDH%|!Js-eSC9gb6z;*K5!h0qKo z#^UTBd+#C;iE4B5%H(vVjo%F3QyA9JokVTB4Q1l49ZdhEq5q~Gdg;oX!sY+r_1B%&{M#k=%l#$&O7|D-ulM27(FJ4|llH1p z(3nyFppO2{n$>F;+cBEkw+H6|?P=SHNarT~AHNPIL*7NbJP&|9-zxH5e<(t(h&-u0 zhS1ZKSz34*>JuZ|G5xpFmtM*j*@!X4p7j4e^zCQ5(V!7BzpG z_@1kvY#U|xFN58wzt7YjgzGd^y05xT|9R%#igQJ9`mf3XbGIU6Wl1ic`Wi(8r;WB+ zJRR7RSHanb9@mkiA`a^RIb^UL5W=S8GvWSCQ2j%B^gpJ}&L+^`Q;hk1Pd16?vGf3$ zF?Yls)>G+c+&}T;FYIl|ix6phht-zwI*Ec{b_tICgL-;_7s~<@ItRXgf1sIL5iu2) z&3^|;kU%7ok>oU|%f~+&&EGK?|NLLW09X?dgQ?H|^&QBe;5zvJe7VK`M+^FQJQM6T zs?D{g^3i{N2PzQ=t3h(E9@F{Pt@xi7aeG@LK~q7%fHA|Lum1Tplm%Q%lns}nl0War zzrLQM0>_!zTNwG*tN&c}+ZXZFZW*?rZ4-+>wd4O$hW~w48brWxY8PAc{_8tvQ-FdT zD{Hc~=g)k(f58O4uHZQC?O}TV6_}8e1UHaOts?B}e@jxMMM8k%97d8>{98u-#})GP z1uReayw3onKdJC-)hzP%sp!>FFLw%MzgNK59MApT)=c zNzN!W+EvfH$9R2wO5o#)95Y#T)#T>&celJ&0pmseEZuR`A2*j)1>d*B74c2Pp`b+! zp8>h}jvx}l_5HEWk_26fSqq?G{CEFqK?V1PN9yb9-#o-WSKI=*tps5ZQSDGM@-l|8 zZ7_<%1;6qhW24f$`;DPS_=^uZ{vm;)-h%;6UNLd?&u0oP5-BR)jK^xT-ahRr%6`Z) z>H<|b7l!=(0dC`e&^?$2Xw~AZ1ERS98s{nrZXSw8Pg2<^b}SyAhq2)*^i|O+@;xj< z{TfQD&G~6m@vokV*L>S2cCqKy{~T5pIFVr2(>t$Q>Y3NiNJo>9i7*t0MuUA1QN!O> zB#r*nsd=P9Qw}#;Rs7d4iXz1xAY9@T_i52v>nqRMTSTm68yXc82)XkCx?ywM#{Vn2 z0n7<(snmD|B{k>ZrKAu7$lOL*2Y;gF0x>$n+D)JLZ7ciC=JzI(`c3f2f z@l)nxEI=sqf&Ou52Z%^`1@ssM1O(;pb>E?4WLWm6-NuIjNkOPmAz10Yw@7l61C}Ce ztG&q;*0BuoIEo)wwi-Nvh)u}*veLTxKb*!A$YKKC$oTQA9Y9u}v`knMk9f)KeIfe=SuB0GEitp=SHBnmI$VxfS})-T8`dd)6$28yI(=@gn1Q_FJsS2# zXT_{aJkS@(Uo69Z_f*jU)%=L$v_{bw)}5J$ z-b$cLwtaBwfqktC4wW#G%?(I*VFw0%A0w$Ga1N}UXE1s#j<G5To|nu~&>4XglLU&{OCm;1l>ToR{2XFs+15R7;=E=sUMSJJ~bw zY#+_5?gYm43=9>9QG{W9eZdV?4nl6`gWGbCzlg)`gj9WHPfDWH`%3HQ_!5I~o>lLK z5awG>rcWrEE3x9(m+N9dwLQ@KGeBlc1$Oqb^meQ$RJZ1L+r*=U=b9t>xOVM^ug^ER zZpndd<}td$3s6H@F05ky?1#%mCx`noL&4Zo-H@a(G(YeRk1rMg$?~IgZj>|xP$&|f z+zzNh4j1~-p`grtb)D!)dmLtMX#g_%?uof)+y+XWUK;iOMZCu`l8Xidg3*fg?eF-a~{5ESIVnS2zJg#Ck* zKN|YfFtAyazw@C#y-wd#QQeO3%86;!N}@?o z&^ZraeJVQHZ|GSRIcEqG=$vZKHgdSWfrNM*i*^Cbcf&M3Td|^UNu#q&s!5Ch!|%J3 z5BLxTfO&_XYCmabys*bZ%mYIJ(YntO6av47vS;DdSAezA!q1hDO0tOxL3l=x4}XL0 zy|<~rwne!(;T}M@pC|$%Vc`)YQBJj#Xi72nq4L&3V;St`wsWdxLBG9oz)ox+5)!SZ zDy6`-7{$&z6Q`q?_7E@Boz-eCS8;F4tn*G{n}W)h`+zEd;0**s3Z5bvS%-{!hH9+)` zc}r>Lp??rk=Iu6#S&|vN!D?guy#V5%*!@U#zl|dA)%t)L0VQQ_Tin&BUNAg1t5b4H9Z1oZ;Q#>p04zu>DSb^wN?48!-{Ls2uV z*{k^6LR=KK8S~6eALmdJ3EXP4@msMN22tV-5qMbNgpZ(nW z(T3#!BZ4syiE_}5$!27_fQ5T@eT6OyMe3c|nHKr>EIr=o zazEqoQEi9~QXv?}%$p{(0&!`KNtn=tp}t_G|IjPG`2bX~VgcXy$>W*gcjb$=LJo_A z9hygPGB{bmJEmegSNTB#jNQr6q(i}bpDOod#Ta=P?HLYSX=;U<6xe{#TNE7!^AN-7 zM=<83JTEP+WIc{Y0;A#2XD^>Y4&%9vg4t(1c{M>`TAsb{3wmIPL;{O5&OO^}zhk^& z2mC!g0&rlR-c~jbkb@xgae_OHDW(WL&FKK;)ha$ipvYK5Ap`JmF?*qnwdjlpv0nVk z>21~abXOmwL3M=B-_gAEkEl0oSCN9Flp-rZ4rO_FE8d3nT;KZ5rAy9bYiB=SwiMwL zl(&!_`tTqY*tpbB^~j`eBQK2kf$~1wzVt7U0bJq4v^{EU5;IIbXyq2 z-}xEj#I`8010+@!{78jP>jUNvb~@UX<+eAE9}9P)6atSL)?Ay~$yl+y}z)||5<8x&lHRumS+4!&3u6Q;I-s+1NA#Y}+JGln^K6CHW~T?kK| zLG8I5%WS?+pdgfsB6xAN*D!i-v3}$PX?s1Bmn=0cjC>7Idy?OxLiGjM|= z@1DgntMYiQSsg%Hcz_!6b)uT&kZdx~1GX21DWP;AW6uTJ8qk0eBLa+GCJbRj^R|Yb zdymQbl8PO7f`HvO!YEx1yBnV6d;EH9jLSOpaF@E}tZ}bw^mF#+^;nTFeGF$uPlvupDCc7Y*Un9No^I8A&C;4syu#Ubnk#t}9h)C*HjH>70xnR8eJmfbZ4sYYthM~KwOYTB;hRkA(b5-1e}9K{<2=sR4{iim=_z@ zn7FS!YFInnDlu58<)W;neqs>Oi!rt1u0*{Qc}+y{Y#oLWt^KxH^3tp?*?%e4LLz3I z*+S`HyPFE<%qrC4TcbL5hT4X-!`cMh*>Ow7{_1ehx*oOCX+q86q0)2ympW&NW1r%= z%V_3SH~|;F3$d5!Av}=pwA9dnB1~98~LTP4{K`w=5juz(&kBD9?-4$ zXubWI{Yk^8_@{o2<1;iGO7@^1RQn>h4KVZtr8K{gbO(xbGeb{Yx~vz^)JCN6_h7b~P_^U`G~;11Sy>WfFA02DeVPIl?g}n7B*A5H=y#3Sq_aTC8~ppzq7`BL z?w;~`RRy8JADV10*#k)}<5-8AY9kVo8z)KEBa^)N<8@G9n5XfqLTi|FG;`9Z;lY80 z&yh=CA4Ixoss3JQRdUKlzd&|>0`RFHRChd(9Xa?cChzz(Up0B+V)iC`PfT}t$T08$ zDlreANsI4ZX*@_}S)0PWI=h9k-Zso~BLb*Vf|6*wPo*yI8RTf?{V0kdf6a$J(CM|; z`XY!$@=K=6_QZsbCpyr8GJ*v`MXr9;ZCPEs72P4NWUylMUEieY>72ejq`H6X`DEBpDd z)R$&V$b6wd z+#EQruhkxZ_xUT+<-!zf%W;qWblFZbL37~P884BS*dJ*}x@cl!(ERbCO?}sQuj{F8 zjd(?Z=C3>aeozA%&~>oBD&#yt4T2_LR3oK|>gkUo0RBS{v)ENN3A8N!+ zT?eQ4sL9mf%3Jb90}uDOLL6&^0S{aNezgb#N^}8)D;seEFkMQmU;JFS5qK?W*9<|6 zA$WjEJ0S?Bxm6oM#K_^7EZ|P^8T2bT8-Zr?5#vEO*w5{VLS`Z>jNu}_3JiWP>UOup z$U#v@=0m_K96^j$vsQ=esY6ZB0RJHuvCC|7oIB&5Q)V4UOwWM@CuaLd5p^`+-V3=qsq`On&}>_fP|)OHi8DSoUM27KhoGLeYc8k! ziz3%kj&9Z$#`|AI-5wsOl#W>7%y$E{x~x{2yN9Knq1_dWD;G zx+|HjTlPa|>{s5beeQL&2X1a;lmDy^MAUf$?j5w{NNcjiqW-<~6RJS}OJhqTW89>k z5oFY4Yl2;PL!Okt{iW*`Z8ujN*9F_?HT9%~jqSfQe{ zLsYdq)UE#9T;^Vg#dSr>60+2ecxm#@g^u{;mCU%KSyVV1pNg*8>-!>{+tIWK63`EZ zG-tXKJ2p9!$6eFv;@wx-`n9f_DpSzzGc2BihG7(MVr0rgRZ+!D#rIiLZ7hhejxV(y zKBEeWyZhfnk{N-<%vscS%a6q{E13r3vH{qr@T-K$)Xc)yF-fLfWbNE9{+_(6Ed3f= zRb8WP!XoRNU5PfG1t|&K`4i&_i(rj1&c4GxpkcwG%NL~vfxmP--8ELOK&$@Yb>YHV zE>&=PwwfH_H8|B3f%ALPwm!WQpUUt2uEHL?iu$^d^VZQ%PQ&C`m2TO_8$*#v&M}&U zxpM1Sfk@irE*DJ@L0HSV0QS>nEtxyRt(}ztK=b-})^Oh$wd~6=?^<`S@8vWTL)o#9 ze%Lj^70Kg5X7O9sSv3i_#Noj*&3?6~Z4{t&DbNIsWc*?~f2!j$ms23!@iePPp%A6N z&hu1j)7f|b6E!)Bl9q5x9_frPi%UF`bjc~pSF3k9 z{{~#LCjJ6kSQmiXhw;$zTRGyJRyfgDO$22y0n|_qR>C~GfWXy!b-vo|J6pWG`8gK# zuBgMKraAv2y%KW{>_KUnncRVIO6x)B`aFVj>Hee?oWJp)sUv#5(Zd!n2za(keN^Ip zINIbTjUmfuaXLGR-tv5>VG@Jw(Tg&jI?n**7eNh`K(V&r_KFIZt*`!aKWt~V!j@+7EOvHf57pLa z>1*kJIK2QF2^9z}rOAf`$1$*B;Uztr^%m(44!c)|3$^wOHg_Xf6d_@Ko^+@SDYYPt zfdu>ECA9)rs{d_E+MVb3Z_yHTJ}j^_cYQcpzseVmDkRWIJX;TzMC;;sZ|0GpxKp=d zk18bwZ4F;d#>mLWTlsv^UF=>wxE=h`X0m*EDtXme8jheQXR=6;olgw1o!g#tbs7j< zh0Hi4l>@m>P$COC<|_p=d;>`3>zI8HAy=yer^|kc#JDKmVG><#KRWr38sP;~J``CAe z6)$YvRV0uIvEr=PsYT}H>a`+-L>Wl1wvG_1<2K?533sH__`h13j~Q^Ywct=&phVVR z4q+`W9eRFtIk!6Cb1J>~&FtgH=SI#*XR9L;4*ADILT-y0L^^u17lYy+9``=m zW^Gj$_tv9I5+T1fz3bOvl%rjc@6J!ks?lQ2HK!OEz|xgEcVxP((0cjX;pc69J0B}L zc9MKTRC)@O0MxfX$;ynL|!_9(8D;HWykrezmcAbfj z1Ze$X9bQq7t+ZR;TrGcB%B ze6!T7XE9cYkJA)+A7bA5ahkEBHU*7a^w6kJvP>?Hl8hru)CwWw7u5}XeEHbdHVc?5 zYm!0C4yS%fATAur2NS1tMH3&>dhV<-+!WOLFuL$-_1nEnbe5mz1aU|-ax1_U`Dxa! z?L1RjJ8#kJK{>Ba_~t=CwM@U-NO)p0*C1u%m>@gq+`h6X%Lt*j!aKn>_9N54I|hY0 zQv#iuQ_S;J*RtpE6CyWr_9(HZT6;4_9#@5*T#0BL;pi5fA2qc;1y!}`<1l`6kcY|5=4@t# z`2eO$%V&H6I(*UDcvM%J6rdPH94CVP!cE`RT6M^Eh)znKQrac3(zKaRtDbXB(y z4YS4!)OUBm6?A)bvM|e!@^r$l1D@(2r&OOb{Nx6`z4dt^vJD5G?xYk%Rv7a1JQuB> zFbse9ix~rwD#mFdM3DXl>UQ(#WI4{zAcjWehW1Q-C4M`uytA0MGh=21xDFXe3mLA~ zxF5&q(){f6MJo`6k1zP-{LUqSAB&ft@>IDXbl1lAZ*Ih*(Th{3&>qB;!?8s8y2>S_ zT`<41vgmxYcqWBU?aP1@70u}(qfR3!ds%T@UwmB;o`h>pAaDyB(aVp?FZ16~>-H=O zecMrY9g+V#88co%XY+#qQNgoUI zneU0_k6^G`DDei_?pBw@_+vR|6vZqYM;1H>~A$ z6f=Go(2#>~xT|nS(Gh5$A z^ICs;sR}9|iR`DxMAu>dMl;%JvWg6}=A#R#cGOazsbnqZ#r&u&lQ*eSK@diF$hZc;-@hu%Df30I3N%)Lno&$tQL z8jX75fe=dKx-buTV?Qgz*RBa{>_|CEO;mhSBF#ylNrG6?{D!)^dHSdglh4vz-f-2u z&=z~28#v6fv~s|YI+pZO7I|*Dlhk=`rv3&uXj9V6p|V#bj0aCST^-`&O0%$EJ-;yl zqSx?>WnV32OSz-Gy?+2aaNc?oXd~19Kw?;3nkakgOowXP2S%T==M19AB2H_TBKJ`x zGpZYYTiu$M*J2CUOz|01J#ua$NrDL4(@Qg}Ow>HJ=Z3pKP2?YjvoG_E@@k2Z%zH(x z0Q-77XIBJW6G$SOte4ph^=$}oqK3`hK5HS`bPe)R*VZ+$hW%*Ox_p32c6MMhQvG`KXPf};|Hs~0M^&}`?S9jn-Zat;5&{C!wE+o{knU0m z>5%RYNdu*%1Oy31y1Tm+*rb4TcihQ2zjN<7@B5x{|Gj_QF>sGP9DA?5)?9P0wdVXj zpXXVm)(^|Qb9j?p>?YE(NLkCiGcq)*iLG&`n%manp!qWf^NX)V_ir?<_QWqH?ED2u zkm(`E;zK$&nP?bjy>DuCH1j!XD)Jv8Il2Z8kFXd};-X2o9>uphB}noJ8JG6?nN_qp z5uq{+Cn}CT}*OcU-NX{gZF4IN$3AR}J!kL9Y7{vR0#k+xeQ**fw zRD%xjM4Rnr%B_>^2xk0zoGqsTNaHPX?CHnc@PqK|Vj(^_|Lrc7GcXxgdu&+tO?{a# z{Y4VXV{Hs_erP~RBLd!PL9h}%(?8HJoL5ze{L#0DjEYhPA1q|4i?E>bVGXb;0=3vqfY9Ob8zXny^ z@EG?eUY3#>hPl6ow8$hyQ;UErI!92SpsL?k90d6pC`5D^gUF1 zz5G;b63;-hh~;eU2-XK7jzLU0r%*U7C;=;uJB04zf?OCK&ZN<@f<-h%;4Z3^PijIQ z&KrLEu0=$1FKHoM`&$XiFYsJ2ZngX&01`m*gkRZX{(L(U5<$WYeJK~+@X@T+Y7HNL zhyJVVLx}9pAYd{qLVPLJgS0Gu_z>dy{PuBm)psQ4F5XV0xQ+>S!1lJxSbFhPWo13E zJ3=Sqz^h zt{V+GT&#_omN64wkaIa7FPtcbvML_*_2(X*kL+)>t1Z;YZ_^}-2z_^*8C7Q?d(T<& z%zn13BRo5ToGw#RB-NKD_$D~TbWJGn(NxEPde6{ zQ^Wu}Y=S_%%ucKQ?3SR>Y)UE~^#M?mOmd@!FVb^ush3)78b6TU!aW#xxjL?AoA zX=wXD;LW8^Rh-sm&0(qlD;R{}m9-}^!~1vc2#5!fUd!dRAlZ%>Ax# z)B?7K(R&J~N}-~f>!}jHAG!&qlx32K=0&jLsL1&gpqOrC@Sys=keqnO&M?R2O`90h zWgfBkJRB1E7j)c~CmHGjvfjWv1@OWR2wZ=9m8N{(gFZLh_>lK#&XzD_~`c zzmh~uJRzR?AsxJwvz!>rdyx7^@p$C3UZ4%k-ZRluuZF77+<&;CwZLW zUXwRT6X5Z7-X>NWb%$Km4?LE6fyh$XjNL0KV?{AZwndbL5q4t2J4i744&aJ~;8Z#k zi2QzHovaMnqQ7$S#1TzObqc6)%|r3KWA|o50)kUNbv;HxPaeC_zrDF-U5B(6GfrU# zK*yz^wxHH$TlircwFwyw>q99TF`A-v-K5UX2Dh#_kOg&Tnu%S^29}es(XLN_9CA-= zd4T{FY@UVp)8jB;&?6eLNZ5b+x%jQbXK;HTQ?1P2NVRgJi-s=qd=LE^O`Bjs_YrpSJ~HTuVHr$6bKaA zf4uuD`;)Ba$y>bv_nV#H;s{}v=PP|e76W}}l9RvA8&>Kzc6<>hp4&Gr+-QTtP9N)k zeQ*|ojC$dxMjx<3M5=>e4fyoC*B1tQp$lLg*Rx#$nx~+>70Uz-p{}G4oWf91Fr2N5 zhb%zd-Tj>^wYJ`RXf6BNwp!f( zeWCc|VCKWus&jLqgNNI9tPufek6u<#1$8m&u3n0KEnSEIaI^}p`?^7L_jO@BPR+~s zOV>-*f?X#xQ5w`HBFwjf(asPE9Yj%9T9bA26t)U`Yj{|cHDYVWr+2u)fGr%x${==% z?kn0g5N#Or;>DLYYh6~qztzWGQlC^}#tBI}<1czmj2T;Kg{ixFjAlOGcPtCf9s7~{ zv@?O4{udH?y_mi^qATs!74iW#F?TC`2=Gs~RMLJHF{%**QUe0+!OgfAz1`!fBe--F zSOp4C^sQ9m#N&U(4>X~PUAgK+JGS_^-dxji>bIwTz{11#c%Yz86k$gcAx_mb<&JJI zKCWTPOO$R0d>jVpJAeGpf#B$fPUG?o!A#wsYVe3doVcKGl7N=XJ|}WjC=D-exy}l^6ac$U?xWRh5wf8RGSjB*G;fE!Be|Rp1rrT+NJQTnB}n+lB42y4 zd)XZUiMR-He8v7G+2E6c_0 z)gKJpQF?-$T&G#2JN)@=<|4oL<(!Ab=g{Aa(;->%yH+pv6HG6FY)dbY6l#fqf1SI8 zfMRbXOZbLOP7}i!SnjS}Y%}OKToNqCMn3UEm5QkZ5~**FCY?zXom|FsRa`v_sVeCz zm$Q|FMqa;}wQtj<@@c|@1oG9^paItP;X*8=2v~~#@&})NywmJ z9&q8lntvjk9)I}Z!Cd)|&%atW@DZ-Q#p@RB0{8m83rI%E>n+PeCq&Fz^Ov#rwtgZ{ zeu%GJdnY$yFC$vm5dCsB*IlV(q<(oFS!Y@|#HMLWu%c4UFb`{Y*Qk|C$Mm~PVYfr4 zf6_bmdd}?QnEfo@(zW3Gb(@aD9Os&F}fUgC83A+4NO22TrdpJ5(DOfiHl)aWW6>mNJPS(s?^ z*$ih@a}8X$bUB%%G{WW`%fHPk!=)i1ub{(Qmj{ER!s|-kqV+57w@4toalq6zEYyba z1CfjDRK!w8y}gQ|Bj*o5{|nm*8+);xVy0o-#WB5LoD@Ki_($XJvdJ1@PCfMK{K(qe z+)Dsy#>V4NAV9maoTw1G=K0s|bqkBHv6$>w^7Kr8m#2{{k(>O`4&5vHDJ?{u zXWs^Lx>vHRsem&ua(>&2idL$Yn&q))j?jb-@Tv`A(S!l7Dy0X-3suni_BQlJQL~*u zXKBfY3k1uD%7t#5Q^Nzl?tKpR2beu!@CDz3}F~Q|D3|3g+*wZE`2qU8+$0mSEPTFhnaQ?8fJ2doy~G zR>(4ymA{TV$?-xEzAuqU5+JiVVoGLqZ_9X1QPpIjB2N{VChs=${oCmh`~1iqZn+CohzX?!U!a&u1T+U_(~V|$#|YD~E&TeJpG z2!0-=zD=jv3d1!?siaMX&-@Wj)uZye)j1WCd}Q=q=MQGf_OTsrj?*X|?6g zuGYB08r;^zeTojP*L=^FE7zU3ebgE{rKcwI)w6An%5_RK?%p5qmN+?1MrA+}LLGLW zODi-}C(9Q!b?0()&RrQ5*UCL~9Z2}u0OJEf$da97@%JD@M=+cSn#(hwW=!vpdJokP4z5YIUWB<<-SuaS`%gOFe;r=iv>clZFA>&0u2gB^=z#q5pkUU zDi!o5MnZuQG8G7-g%mHxEk_w!}QxP#bpZLzTEUg8TLaJVgUv z*88t2^1vIY$35kEBGp2uM_{;eONdk(EkWYNGm;xk)W5=<0{H+{H2?l%pUa=RAeJjRS`~=S}s=TKEe{eaXz(J*}8T8m+HFZJ)Gl0$o|Zq`4iHB6{9ZN z$Gw?)s87zsU615qNGn82&r92;aCn(a<^H0M{*RUk9AX8S$6*FRN&Md>^D$75eQzc_ zlAyx2$Ys22%E5w4FF2EzUAgRw+_?zGzLR$vw0t|!w_ky$ftFVDhu2B`t*HZdnLaL> z_*4r;mJmD0!C@>oPHN>|JO&YjLpBYtGqowk#ZHAteKIcf>8$b@mk48S?msrBKxcak zz@*3nW7dBGAfWO9qG{bLI7t7yYW;8Q1Zqnd*rQUVtpbI=CoNBzeINVMw-r_TYC{K=qvdUjH$A5bh z_z?ubk!z-kk^h6e`1=qHAq7J^^GM7?;P02Af4qljf=(G6m4xxHSW@87El*XRj!_c! zFMTcmHAo5Y7-~-YrvKRXpTqe-gIXWJ5MdJs^W%Tt!GFA$QUeJ!IP5AkG5`8I@MthV zhP-I%DE?b>{54FV?BJNC+q;8rFEIb(pOn?@RY!j?SV!hx0WoQi;l-0LciR*hfe*$(X0g-@XlCMtaC#gNjqx2=fE&{pfHXXYxQsLi$#7 z^X2h1^1!_ReGf~$4e}afvP=K-vijF?Uc%UljQw3yXx_17VlF4OVirZlBzn92s`x)J zl8^>y?)1C=6-GLxSJOYZsP|v2BGw{^=MsZ%YVGY5&v-r!U%~vp+`$59k=fSwBBT77 z!Oaev8@X2NvM`&0P8_Lqqx!)9_9{+S2%5f+eP8U4Tj+oKo0Kk*)Iei9Yi#!`oD1A( zzg@YfIs83o?}U+BD=>CDZofC*2l}ALitd5(Kl;Qx^N{3mj_Y_9t?j~N(_~V#-y}&K zb@aR2f8H_f-`=s5<@<>K(XpkTAa|WqE}S+dhMTseH#spoYNh+^i$({9_?pl`Zcjp& zGH6r2qdi(m2Z!hW@*9vj z_XI3VG5KE|>D0uwz5@G!%({EtO|&oNV>mDB*h}@;)ZDe)HL5!;dnZBg&oH9+@2Fov z%wd)+W;IZ#J!=ia1Q=+nmqA1|Q0CUWT6ticX(KPPmk&=4;J-HR-u-RByqn`o`bF z#yk~VMm6QH?-?nr44S}VT64W(MyvgOTz0p9RM@4YEqyL5{<_l-Fr$>>4T+?aXlxEJ zNuL)D3v<{5BK|}p7q6XPKVOu*0Xp?=kSQ|iwv*Yw+Yt;5vva-P15L?0UW<;?*_9yd zd+{X==kV?7yz2Sdh#QkSk4WOUO7nJS%16V1RA5OHmAqT1zurBk2`i5<`qV^z&gMS)AScDnoD6=MNiQ(AOJ88%TM;q`Mbc zZsnA5MU6gISQ4wrxG7qFx){AFqF-)hjgC!$3c6OO5*PzVKmERMGzoXaQm=~JgJh#$ zN0Xh&1lsv(X5N{OGa&SWxis%Xe+307K!_a<$pE(Ro^MC{v)?1RBMrV7d@Ph8A~jpS z@xyW~gMi+?r^v$9+>K2^W`*8>$Oh-{=@T^1(}nP-6GiSt4yB=Zf$xmH)OWYr+uJeI zje;nsKp#)6oJ)7=xJQ_-j4w8%Z|wOj=Ok6!ON`qc@k2SZTj{+Qb)NSPj9KF5l8?Fy z`-j{1Y^^*XW4JPWkM(MbFO+9XT-1Rw;_dxsJ;`g~tFe})&-*ES@$kLKv`1XHVe0ra zml|Y__WT4qtOC2YBmcF=>&WGXXdNIpO~98pl>&k3zfUT7KQ+B5aofPyoL=LANL-&T z?SoeLX7vJ7#U!A`>%|q+Onlz|;kWl*)ZxaYPUzVZ`-6A!ZW|Nt1Aw8h3A;!G3()5( z6P#qnNiZbq93&g^!BG zVqcXzYt^ihYt6PDx2sowdN_gs*A2Y;?eM~@4NECk_Q+Z3lnuS@^mZ1^PF~T7E3IDL zBz4m6usPHVh)?C={a9-5crWT6doTUXQ2U^6+M`Y-km>Oh{PQcRw*7J6X09RELa*+X zwXT@`#OA#c>Zr6Qi>U~gP)>eh-TTM~EA^JKF?Q5Nd=d_D!+g6Ybj1L z5rfvY@ZpHLG}|bs;2g?$!b5XkzWm1XT)XIWisgt0PQUHD-|g(V@_zNORb;Z_y@*>B zo^xn_G%}46h)hUwN4&o)IIB6hqeOfhXm;H}IjY@!)1Nc&3S+T%SAtppt5bHLSDVgp9p7|dG{5P=ShwCPLd zN0hG8qCMv*;Cb?_rG6JqOH#7)_4@K?a$~DyyJ`uKsEU4w+vt4ZPPH!d1SW??A|lwG zLlPtw(%om%TyP*I*(j4-GgC6VBpjXa;dQrE*lOwaQ35)`J@(zwQ$4ru#R@ zC(=rsJq>l;xsLJtb@qUh93-X4bSBoUU->bCigEk5Nn^_FxpDXd2@z~_7=)6)N=|%* zBN;N4H;BDr?Ys0!uxqPw&b}jU6!v6ukf`;yD##sCqrch?5Fb~q#D5+Jf$lt#B^A5z zQKfXr@cdL;4uo5{L-(J{8aa2jvsaZ&v^P6DAFd7eog3~}nLRYs+{E-0B41KP)Daf$ z6!<}y9MU|>~_XEP!<#TG}-Bt(xv^O&Ng z7ID?Yh>%+$!7ce(iSW|cdh0n->z={1JD~0`s{j3(6-M&pMRF^U=riaMPk@nV%ljMj zA#KXvDkTu8fo(_3ZxIKoLOhawkct!@_67pQcdf+55#66KpnN~Oyy1p_;SS3BHnjs4 z)nv9x5rK|up6dnoj&+|b#>|bl6c2g3c*qqH=r;PL)qle#`$S`xs2)|?%xi+B9sHma zP`7u49Mwwkx|gb;PqC34hdv@ve5zENC^p)tKb);~?*Z{Hrag|pw3J`Dpn~7-XCH{7 z>&K;Rc#yCQ7D9gpo~Nu$etK-M^B_)aL`AOs?K#00I~sPtAoIzrL~}Rn+M^6cN#2OX z_tCYY^VAvpIK_vp8#|y_-5OfpJ%A$7<~1+jKb!z8^}9_!vs7u< zG?61*BBO<8dezR)Qex`%d!XHgL}p-OH~g5c=8N7peI45u23_^FX2=@fZAhxODp(Mb zGURn#^G*>^%z;wsF1K5mIPf=)qfg%Hj>kQ-k+bHdH(CMZNuTnqp>yrhoCT-1@{)c zvL{wI^UOWsb1&4{dEQ%s?nIm3EW|Q!u@K&yD6Kkp)p|h=ze@_%nuU^=jYkO~yzd)+ zy*1dRMBUNj3_5+WebK&yr=iT0U=P8Df$^inTTV{YJMm>_@zx|AEYvrR9I&{^M)Wp2) zt;)QOpfT?W)!8lZL^ouq+1#e#-Z~Z3eouMrXSwH)A1HDHWGs7e&Pvp{(eElrxsM00 zxfj=(Z)k8y0OO9>9Fc|z(>3~zYtahG(V^>}T9=UQD9)5Id0>WvyF`7S>Am;K=ggVq zlla-Ph9W}PomTmGeaC}SmU+*mv=lMVs7M!ke5sg19xPsrQ!oU+pVoT` zgBa(}AgFy}aAABc2O*^^tld#k{V7JUoXVGaE*m`a4AstpdeWE>ML~4jwoDMn@TpW|pa*#9)XPTGL6|q@; z_B?WZRG!e)@59FecZN#a1O@Sm;&g8Uk1+!d>D9KHCmab&ohgD@@|_>@RnnA;lqU{T zXl}X~7l(J$LZaR!IMmS--1J|dh~!04W3t<@SYgpjn}p^>w2RPuUXt=@^vgo2m;JqW z6wI2wKF%yH&d4~HBIMljy6s|p{E?Ulx}4h@ok$ss`YDriC#Puor-Mieaee;u`}AH%#{8$ zaLT9PN3rEGX5NnN4>;too|*iviC?w$tG2Hz!@HZ`2G>51xvkGmj?~_rNv9`-&&Y_0 zh@qR6)?nNxzX1@|P^?Gw9r$S%!pEhai5tTh0uAp^sZ?;j6AKGnl1^4Akd_kjIgO~E zYB3GXlWva^oWdaQyxROGFd+%D^ZC|_Do-A`*2jZoR(@Jsk-MWFzA^z5Y(h;! zA`jfnx?IbCCQ|Bl#PNAvj*{Q%qmHZF9Leo!Pe*^sTp>p%HK!(U)Q^wrc;ztOJ;(o@ zWWS(tBv=HB^V)h8QEucLYAKTQ_Ae~}L!Bsip46Jo$^XKjnsOX==geRX8hElLellZM zfDF4Am3mi*20iI`i&mrAz64hZYE-vX(cy)d=DK0heoP+*T2+31&n2?lF8T%eGVWmK z)yEw(sSppxIbZTI=O40TCPL;PPw>l-jGKVr-%x1m+1sU^W{l}%c{0Ss7-~~EjZNX) z+dQpga&B9Cl*2ec_hOpoO%3vNr60m@+oOGIcUn(h-vpHZBx$xOitl^yqYn zT2qX=_%1HX=`2DA(kAFKlG6r+tiD1&T-p!xD>h|%6~ircOyM^hw=Lgc}J||BP$v(@=EV0;+ZP>Pl+3)qs+{nziqe>|kRoKs(Cw&Da zc%5`wW^V}?q)@Zqb2O{q`a#2-7|Og}I4>cC5Jerj#Es7vm58ym$C>oy19(uptbM7sVF9@EC6F)z8;CcF)a^aO^^5J|8WORTDAQF(Yfp8tFaS7X*5B3 z@|e+Gzc?&pUNR#l8eg4xT=FufY>zSBQ7kxNcB6E8bcT?+=9S<=Z#J??NbHwk!C9u7 ztb2RxJo8g9bn&j?qRx?KH3lBbaVLWQSaEJAs{7JU$cXtdkP@eqVq!~TlhvTN+sMdYFI&EXi4j*t!V%x3%`j0Sh`#$NMx9aXRkX$= z%1eq5cQPkwzL=Zw{2Yi-xLb0U`s>$bB8QEMeqg6tMtqQaVLbO6D_~&HG`<#1>cq3< zF(f2SL}PAvB)3Ec6xm(VFQ$789_#8Z@~7?c*7_f(prEA_sKx=PG7oqsGb3cjM}e7SjAHPCsT zH$AT5v_oyswl(MfaUC_fzvK64UgamX+V&N1$5YS6$XL?m#i=MzxP8FA2;6Mmrw80} zSDfgzJ0uTiY*np^F0d!GP>R%MyUweIFp{DDUW$PSWzRm846g&cJXH2zvf5}%RV-f4d!K<6B@4zUzI zfjR*6-%R2D!02(Q!{!oXe;>W%68ZMJ->ApiE`kiBCz7=lWDDN<_V_9;fDEV zae#u8*JtxkBtprdnx7d;!SkUfMKh%8~as zLqW$`%L|_R#Zr{R0)gj9d$5Srr8+3s*|U%0uHPF5szw92#n^KTxV#AEaCpsurN7z z-_CepUhbk)#JK2AodvzdE}PF@`@6B=eK&52-46ECV0;N;eOi6v#}&-G8%|u1#XMc3 zFna~EWQ&E+JYONDxk(|CPjsK;3c5)0f^>inwBqu#!=s{=?pU=Y+?EeSctzSNZBjEb z!=gtM(V>&yy`0;m4o5t#;I%IaOVA?bw@8mJ4~+LX_P=u~j)1uuV)77DkFY#ctWP5G5rVtpvg7GZqtwICtrfWn~w6C`) zhWHU>k3XWtZON+%f3%$95G7w9vBW=%Urc*KfGweKh@I{YO*yt|gQt4s$=WoGvt5P3 zW7_7-?W>w~^9@qkY@9wS^ygwVAU4#USd?((JxI_CGhtnF`cNhggCv&97Yo@E>@3!_ z3fX4G!DnPEk9NgW<)4^-6pK zT7|r@eEA%?gGnAqS`pXeNg7(wW4GuTcAagnX(~9wI*Xx`oFcZ|2?-=Yv|O{Guud3* zU=~X6&=vn~lo;aVGY2yjQU?Z6ghsB#n@8v&13_}89*o)ap%g1E3cLa6>XZkP{oh+lU zO7O1S4w-As*}>}jg>O&0pD^M(FfI=?VN7Fk$!c-=BvYech9Q7a(RjqqFO%oR1BCN+iJh-A2@yx-0>x$LGY^+n`5MBr=+;_$?haJu+*F%9A`q3jnCiLil>tx z&G|-b7xhfJm+5YNLb%pp$mO#kYt}N8PJjrz?RHqCUsQbn$# zAj3sWwh+ap@cN0lz5gQi69yqP8dz8i5E?|Ad-T}s()&a zCTjGTi!!ti)!h|$O~k9s*Z?FO=VW~CJZhUdCv4t(2O0oVnnhEK4@1J1X;ylgTJ0d$ zBOmS&_NI4?0$xi0xf+)xLs%Q8w7+k|s|X*u`$<-7pts zyL%(MskGr{<(UByjWhRlDME%;Bf6@Nbxf$A%~=vpwXolVJ10ECzq&6D#@8wR@j{x* zs&I?0-9X)7UMp?e;HyIB@}bxi5_J_@=Zfp6t@o`y=5K(5Bd3hM7=%P+}lqI;ho4W3bBvQzXb1=K%rwYm8Q*fhvm)WQ7+*p$H-VpQ6XvG3izvo> zJcE77?1zfRUU5%a=6Gp|a3OgTA2pbd5h1+A^#hoZ(}SdKGwC2AbM_&LpT_4g@nk5n zkV9lTA5kD@EV%|Yipmk2m6#zy(4>V#=qfX6)gfYXC^KFs+s_g#w$YJb2i)#GcQ5gH zNiAwhc%Y(0(fZq$F%7As-o@qTa?fw@D4S;;{T*Ru*f9{)YyBFj;OfN2urp!X(sA9Y z;jppCP*(S>kW$AOJFr~%1@CbqD-nc1WV2!eCXFVVZPCekAApOm$%Vhn{%)Rsid-VK zN&!OttXo+4Njc;5NUx*4gWl0)nWNTRyX% z+SMl7^r0LxBp->84yTW)Q{?%$H@9mmeTu*DD~$W_0sFK-6!DmFebXnrF;l(sVe(UL5R;f-nSO-jDt`zS+%>fGp%Q&KsPL`cd3Kl&W9BiX zbB}Zg9>U#2%A(d5EK6L*Tj)IIxmFj$Ku88c17bI-UG7D=lr&z~{E7oIS6B9}MRG^J zPC<-9BiQE!Yt$Vf_f~H_d<%b?fIx(#EHTr-alasRP~Jm3_YDf{Y@cSh?&0?rllPtW z%Q|UP6FbMM5#?=URi{fSkv-n0&ub_VlAOkxBSZNlHk)*Yw8n42;;*0<(vT4dcO%b(C$5r{z~`bHOT!jX*Y0f-a@jfxJ5!wnISkVu z0OEa8G)51jb8Vz!-<#c3dSZB2J1Ul(SLsj)R-7)Ij7&ZW!e|*s>296ZqHKuD<=Rnk zs~_|z`GMVMuU;d&cE9;h=#F=J`T56b6qs2JP%Wna;&QIUm(aChxQ`GH5jCr8SOt+h zDNP)Upz2iNO0x?Qb6w+3X|kV7=O24k7=;F94BW#a7#3eyG+j%{*L~#^Y^9qVM0R83 zZoSR_fDnotXc`7ta$Y3ZF0_z-jpe`hVep>5j46Q%WeJ)jp=&1OO#lIV3~Vx@Kcybo z^tC;uuuxgccX@HEB{lxGBSE91x4K7TBXJdNRyEWmr@0JiN!j?BZM$qS>h!o~Ei4tk zy)l}Hterk24Q8h=U!zJbFSQ=EViR=6Ncq8!jFnj+pIlW)gw+>>jCb%oFI?41XZ%-& z^Qy6i7y0Fj<#)uf7Dm{^I`ZY6IP0!=-H&!Sv>fY6(Wap?g2>FB?F_QY} znjAIr(G)$L9+ez@7g$XaTUeJ=zH;#=w=5-(@C@*F3ZrjoUPsD{MG+-I<4hn!%$f?C z(-T(@&Ek4a#Y^PsealI>Lq1rlwj$eYMr(q^Q@@IJJ^N`VqRQC)LW_(hRUz__`mR`I zm|Y;0VoG4UrwI?&q?V%|`D2oKw=j(jZ>oz5{iwzW7E*^q15H3FNoM`&C?p;olOWY9 zpJt}c)8*Ank+pTEn(I(E?V8_+knzd(Y~L_;1=}W##}J%|UAxHY!vhn#iWh7rMYaGu zQ7(9#g25?C*kV14``HdGz$bbD*enzSuLWy(o*>X}UVM=s#61aP3B+)C$W@V8gkaGx z_jMPb$&k08!qw;>o;_&$0X&tSM9a(Pvb*21W^9#tNPgjLLh7wFrTE0oRISv{L*kj1 zS!E?!U-vYGJF`C8`Z?dvD@Vjrt7AvU4$RDc)N!YV%|O)7Gzg8#sKLUqu@OSl6wSvR8=^8Cb+-`LL_-s2^nrEI9P=kKFr+B_h^2LxdAi;L)IR z58sflVPSWyBcz!Ck}x@7*=%fz?%Gn z=({flkTyRR0$3#mUEKshOB9Lo;d|eUhHpC@9g@pV&E64Z7-ooVbbJJv@mh+x+{@)u z*|q!oJyn#l2pVy(&rbU_SWZXv-3Z?cQ=1(DoJY_%T}!{0Wo2ol6nNncdjriD1Quu= zXd&X6(g7i?jUe_tJ^`5cFx^Eg_%$}og9#s>%p_)g2QnIY^G1uXUnDh-I1VE3s?A^B##U3}z7nNP$A7ao%rBK(B7_o*4EM36Gu^v4+BjhS7mWM2>w zP&*Z=({HiOq!KY%%skuMyDj_0FJO?6#?%nJ3CPC)&0 zI*%{mLB{YD1ra+R=;Hw$l`XCv1K0gRse9BR{^pX3|+Ri5WSolphRjp|xq(Gb5@sAwC{bpySu%jP*L!+sn6nn!55>R;Hn?OEFSi z6qDkbsw6$QD}}sZ;WOq3Y#!-K`9Kn4{cdF>$E;7DYs5*Sy7dgLoy{{S1!A!7keP40 zr7fqggsHQLd|J8899yrQz1J>8g-MAMf|@fX2`Vh1j!$eNf&$)&bTnUG_?LDOyW6mX zoT(pl0_YU%ycV%hn)JN9)kX14QIE~be$HMxscabD*;bz6eS}Gu+Y?JYtqcjlpmwHd z-0L8YetXzY_S?|vIaYuW2E2;5Qa%Bn*j}bl!gZ}w2NKdrCo7!84#$(65@MTxiemcS zQGYT7TmSq{c*SPuk=jls&=_b_Q!+3%nCS8x=TX!3pb?lWn4w^Baq2RDCqR{oShfD) z6F60@cRn;Kl|92&UTB3j10p9;$<*t*cl(jC~H$==57FemvskHkBp3( zb8VveZV)RW+|kUoc(TW2%|k_k^AZ+{_d-%;5pD!-YusQu- z^9ct;ptcTXtgWv|Bk}NicV3-T-d8P)`k+QN=sjCgVrRZcJl&+#8g11Q;-uYA$st^* z?Q6pz{JAl!IR)>{P-zQ}swC54_^QrFWV%=+0!R`i`PHt6QVAr&;v*I*Ja~_bT+luU zGgbG^V?{`tMBt1hsvj{m5=I0?{!G;3T{dXK2S@}@s_af~B1>xVC{|oo^%`YM^o9^M z66`|qXe{Z$6ay>8wHZ8;q#9fhJS;_Vv8htVrDUpZ?j7++AEcSmp|t>g%;&iaWNju) za}F%NkHW}w?9lA{oFRP5Uc>Kpm0i4KB%9d%#y^iI5-;zPKFWH(Vb8U4%H2gx2TpkzKUG@#4;X^03mVa4O z0L(ORr((3ugv}=C1e@lP$23jLf|#s%DozfK6HltDpU}r*EO0JVOt)ogRb6Q#O_U*e*!%$bReppwi_wAD z0U~*-YJ=sdSI;vEdGte~d|{%Dny2m*SfOjn`dMzg-0)DvnT*I!Y${pU1|q}9_R*;U zm@xJ6_z?Nr$b@ydwc-$}Ei6U6iD27AjyTRy;fHMe#Cjoos86`&y<^6xVFWYAr_Bv2 zSOJQW=7^Y36`@B>VIfw*shzQQQ3?WmXQ}JCFbP7khc8l+a2Te5|8F{HT#4j>bsERi z;D=687gQd33W0T!l#J$zp!~Rqu-E%xmKBf)Ill;d1@U0>ye_#}{l>~z47y^MiK06q zjhuGFsmb2W4=Dt<-CP!17P+FrTdaE{``|z6*2E%00`oZ6S?7)RDyJY9Xl~3rtg?;a z>8Kdo@{qP9#om=iy)VUGR0Xdr{~*omvD5vo_fcx%klsuYkX}+#Ci#+&cKN>6`wweo zI@L7va&@Y!Xah5J$vhMpoyuTe>9^R^fjJjm{R zWZhWafM)97jJ9g9xR5$S_tBgoE)1(&fg@1O!~K8+vPaoc5KYSUTuyhWxGJm4v$EL& z1-?z+KYVmD7tXoLDJDWcc1CjmT;0@mdc6fo>;)RnG*Y(`UfjQ-@DQS^KYUuL1 z&`u>V1`;qQnYlmX*e`VLZ;f={hssjku;gCHZ#wUv;Yu5jZ~>((1%!|D{V%wKyF1A@ zro;X9LoQ+5^qZ;}3CI??N!u+*L5&wgPIRQ^VviK(6>+VUR@2^YyJ>K;(-;UrN&ZIbCoxQ+YjW_@s@fF-hCGiivqsPOKS8bJ_f#cNR$N}R`3 zWM&fL`)VX!%%iU+S|SaPPZ?RA%BC-Ql3&cLI84syBgfBKftgDsqI<#PKn!bRc7NCS zIrx1-s28~-5BD~IEQ#dHBBpY?7xdo=*2^}A#k_ZiqEiJPW$}wcQv89I>AH9I5B2|o zGF{%Z58!gD-477A>Sh**G^$yRfQ@G58`i39P^#^9XrB$h@4;21!+-^>Qi-i-7^pw= z!YNv2SZ>Q;HF?NOSCp%oVf*K3qSy`p68P8>ijK9l}#;-58%5ew@`KRepF;M(0G0xnkZL{B#h>T{6RqMiZ{(YG>bk$!hr{#U z=w86+r#U>L~(FMSEnm`tN=4&z|_7SGpuX@AN%w5)=E! z$@@F0@borFMNctf_209blvx0GlZ14z`)@n){~P6hI!B4Rzq-DzIV`&U#8_@5p9muLD1Pjrp7 zG=lcAG8f#X^{?<6NaE&=|ILTLK8g0fuCtB!2^GJ0RKHbwaNljn1jgU5^FMh(ivdiz z68&koZ2#^-{`Xc^NHPBJt>7PjOX6Kucnk?`IQhRe8)b+w&Hrb+z5dXb^4ir4&#Mx~ z|9`XRKi~NTX&3+JOZ}cB!ik^@p***9wfz0li3G_y)|iK6VSF%|rLYoN?Bzl4`}D3^ z48;hA$qnwRp}Wo*D@l+u0xnNrGQZ`FZ;HYv zh^?3GbF($a4V8WGAdpi;Nr>|A?$aTMcNIZA)d-H1gAUUs1?OI^^ z`SuV!;Jak?3rMldkJzqhvhRPQh(fb{K&5W-|h1< z`3l;tDZB=XYfnjEUf?}9cQ>F%^&joXM|uu04rk->fI&l2@1Al+!9e`_#9tMZmiM~q zKd%-Q`0Y^;tYbPmSMivr^{}PTOvs&WswEeg+z)QzlYN=WxVeiz2bup%nfnqj^_Q9x zPn4RMY|hjO$`nK=$f61-H$?BzBT2s;CzPZ+%sC@R#iI_!Zyz5`$Ntrd2IXnBuzZ-F zy^qELwgUoIe9DxLDmy6kM$@5=LT0Is_6jY;5d)=I25{cas1+2)5Og8%ecp_Z}n zXKl~J5jN^;rQp3T?t0VXQWrAC6d^hQj=2X#HBw1OLH>fm4E}<`7^l7hyRW^qtf;S* z2%t4A4_59MmzTXFCB}P89l%%V#n}Zgw~vwMuI1|}2SR-xz!{f#>*DHvSuoC`qN4Bc zW;G2RCZ=cFbm63)(euFs5w?;RED{^JB?nq+jVpKMqAZ-etU(k*rN`lj#@=#*p6PLQ z6$92WQ9B7+@#P214w^VuD|+k{78TjfkktkyqN}d_ZV{D-ktsQkp`jcep_J(o+Vp#* z(INX>#C;jFtx%!GMYo5FG=s_114?fKnW%+761+|bJ-NTqk(kxi+8Q|88rU)N*#zgr z@JY`~W4Z5mGdlL|Xv_Sn$D?^#ZL4WLXLnaVf~~^m4rKi_UZ=mleVW!Zom78RB}vVQ z^$*_b@>p6QB6|A9U9(U>18KTli`2af7Rdbh-h?4f2@upSpWdCHZrH-Dw`&RlucgN$ zRt;OjIu3r>CWBKlk2Scbb9vZPldV7>x`Y4Wy&&Dc^IjL*HHZ%&T!78}$b*GU&m%@h z4lFYjO6|le7u%xZuho^xE-c1;p%GLfTyxN+QgL9KgAYQ&xDyH7w#rOuD=?(3wx@+H zcs@kOu^2h-gvNuVOb7T^J2m`6O&)hVw4A$zOf<^0XZtxlsT5_3_ys5N%>hAxPJW%5 zUiM@rzyrnz8YGcXjD+~8Wa^X7`d7Pjl@RRbMY2O!1kZZ0OQNb3+we^L1Q5M zdsiG$YHm9Yd>^=Rdw1?v8m$pFRBSZiaQEB3de5cJ#Ha-$e_$NqvD1k0!02bUF&V!7 zjPq_L2%gy+H`-dRnDvSS8~y8s!`$$TomvXfW2Q4i5U%aOWoa{79k587ob5MD9W7d1 z+-o6DHQAahW0UfK6B24tpj$hH7LGXo9qmF}q==sEV0nIr1vw3kns!~)*#otH>MOtH z=zFuYU(D|)X4B?3Rw5baR{Wr4^mympY`JxK z*dr4^<~sq{2<7@nNh>;}*k_Y{{i)JT11nyuapf{|#DnC!<-}GafVLxCuXOQbBS;iP zh-po~-6XUEj@TZqr@w3-8IW2{{ZPpYS}ENJV)huzr!LW-(TW2hLLSFFBtu*RyDW5c zkJd-?7)nfgUeXm-o&&7)#nt&v6-_r%*CE$ zU3@f3mmT;(y$f|u_bAq8Iqdu1&i5ygmEvw=ka{jCh~ErE+dD)M-S0t%v^vI%d**R@ zVg?MY0F_mTI;F1jbPnGsiJSMTZy9hR{@BTJU!H6CNbcW!-0*4rCgjPP&Uhb;yN`pgw2ItZ| zPdnuK#Kwr)%Yk#nux#+7$tyUP@jhP#2#8|Nw5olSz@_vNf;`_Bi=A#`NzaYmo=JbY z;2Y$novoZyd*_GT&IqPfq(5(j-VUb(dZRjKS2%P8#F7!Aue6~!fybVg=SY+O zPYEw>Lw0fDrRM%&CeGi4yiRm!kA$i4WA#05yjW*U)N1G=GV%kbqDOk(7x7^~qK0sI zwCW8q9CvSYg_hnU^+4g-iye%uZ<7jbhki)W7E@g~^59gFEr^?Tq`BQUP`~s9@j7-# zKavl5(I?Vd}LR%w!(^VcAy zXlBK5j)oo?k++6OWxoEUX4cOuMfNb3#oLvuzlg3ms)OwrIa03YVv~$nt61gM{3e}@ zfRgSr7gjJn&}}lP2ShC%IiDnMOyJXq=>ITOJW`(kZOjRbL-xgaJ?5^r?PR1v9^Sw> z5*#Q{NG^w4Q@egn4GZH`Q~qHMH~O2PQgq#E(84ze2XdZxgQe!GuDh*|Ueui*l70Yk zh_d^XJ{c=~E)_FgXV%P44LcKcp2^sNpxRZo?Eh5frHuTpG1zPD*^2~qP1O${mYKw7 zPJeM)J4XT`7Hd7~dMBv98&-h13rZpjI7!JiFMq&<GmEBwsVS#&bctx5iSqNMlzD*>s_Jgn>GI*<}1D38E^7Xvk=4_6lj z<*s>EQ-I9Mg7dv|e4sLPIbC;=wFi_|KgwBwV})Ung1Ep=030fmQ?(p)#C^-wpB4Lv zK?{#@JG3cB;&?XhPBz*X`GsE4N|AEDmLbEUE`~PZ5c=x_!M@Ty9ZQ5q*9YW;t7(s$ z92tiAt}a*PRHiKS>?dGK(pOZ#iKxcD)N@WgB8(jth@szT_2I>eS^x?Z_&%+?+vH0r z@H{&@67yBQfV(3!(**eRPznuOvE7vL*K6X|CQ>HrG$-%6?D=5AE{@*nM7wc+T-{ZY zxcIdA9G&=AO3+Rkn<_Jlhz%TeaxnF(A2vT@J@P}zdf>(d{;VROOHJ*?(Q_S2tqdGf z7IeDmNTHC~`;P(7%_fUNU^LdB!JRV(yLWf;+AZpMCE3YO-b~<-KDQE+8-t_;36*b?RntqV~;@crE=F&xr$6T*S@~_%>-V6t@(HHv}-cUyS z{_dhwx;Xb*`@VUsyWWA zMyH&=lHGhNmkGE4nj^Gs2u-if{y5*+qJB|(pUU~DwjTi2Y8h-Nx^yo?;n6Jge&dIx

_{hq^E7^Mpe zEhQMA={rnlBe2t4ffrQbd*B7t92}Jx&bens+ouYkro@bZMX#d?a^9T_R~a<7NabyP zUtJ1jLK_r{!1a1=*7dgYoAc{^Nh74 z2@G}z0ty{__%$fpMQ4SfaDIE|ojEdVh*XF(n0fLA99y}srVz}Dd%7jJ<8W)=Syd7p z7`SzOjYmNN%-COPz#aA#3rkMRu!NNLU0k?x3=AZMF z1d6oEx}Jw>qu!$hv(fjMyisY@%R1k)Wi=uBv|L=yck%9p+)CJ8WEn5|s+ek}TLcRJ zL4n~kF)W%+pt^vnsj~*rdtb%u@*LfK+dU~Nt|lD?Rm9mVhq@cr+HamOf|%eds?Mi| zXPz}qTe0sndv}42XTGOv*aZvxZb(0-s$Q*I8P+1fvh(Knyx3KtL9-*r%ocJxh5`{p zaqoKr^3z46EnD3pCNXr9y&xhQ^vUvVuoma7@+oq6Y4csLa*L7IZH;|a(CLk%Ev+rx zm@G0j{=w6mpAWs78ngjOg_98!GnuWzps;NJqUVy=TdC`Wd|-6soq& z5*bZij@u`xG{@HD+pt$n_=4Vh2T?jVUK?w-#uq(1zW21E?mkV>y0Ff(Hl{qTBOI(;jq_|h{=*hlv`upI(<&heUHw&qL%d| zH5ZP|)k;y7?(>CO<3f7Jnsc!j)nSHR_e1KJrMDHn*p)g{ zgL~pu5|K>e*GM4uhS8$Em z?NE`s!@-quRAn1n_|_9aqj`*82OCvv}7*|-I)Pe~2jZw~rw$&=D>h2M^E62di zqfFLI#@h2>;6Zq|FVfZjChps!tDF4!>`W)j7$g<~Vz1n+Gr;Tw%$PqlWg3BC5dO~f zmvCjun#b?f??L$czVbCAi(_IplWm>e+?K}h9J47UM}LyFlD2U&*m!;mDq-ae^h$D! zeiEuwk{ zY@NCR>4zT~Wm>h=`2w~K0U~s0z`&|)^9}(yAv4T&7TFy~Ld%bLs8iFiy+GA%qQ~j=@p{qTnAhBWTfW(aE&M;sq1h2&ds0;fI zSWnw8Fnz!2H=^F-;D0dYTpmFvY2YKHk{>sFL()!;Rdg@hV6Fk`h_kiR?s>i&3D-{F z!3)@t&~K1DJC;&zgVxUnb?O$8A}G;(W0{Ddj)o9Gm1mmlQxpZZ zls5i7(RAD!XF7@+wWRAlniFsXz5}(T)LhkXHbH2Txsiy8k|_$ClY=3hD`ILy=^|Lu z>Yh<^=+!k{QV>hJU`nGo=6eog%2wO)jFFPks*7-zdGa3Jt{VGD?-Ll#sU!Br$izV#M8i!bRF!IqryBITpv+&&O~BEm*=6sIM&zoMH7$NMBOIGvN|b zsEwJleQwvckciJ^fR6LV;F|^!nz1_Qs^G&%9xdv!L+p^Rf6h$;2oOqu<=P}KDhzs0 z$7|YM7)nK6X>gw)llCVB^o;?kF4`aNshvJ|#7bicCLW(;Jw}(zB)B{qTy@yXIoU(x zSifLOtREvHMvFSA>Ohll*&tcF3Jr5kUVbv`_6@DURy;0?TOg+0Z&luxaQz)MiBWx< z<(pm2t+uDn%W9TsNRWnt-kT)Tiuqc!SCMWFz22j7Lrh<#q)*IRJc()yp8i19Ppffz zk~UT27R7Sk^|Pd2PwRJG-(V3Y?m|bWf>t6&m8Zgk^36&3m$_Bw;ZqmQafF!}3{QS~ ziOXHy&4Du~8Ie#25kQug?h6mrX9%(weiEgnq^25v)%+db^clV^UGxK*01#VX&!ATa zg9pBFLC~fWQr^?=n!75{+^_1%>Ytm5M5RB*YkqWtdNcCdEtsW#I9(Wft+~O2Wt4#a zM?;o4=!W~BP4E|w=txh#%34g8hPoLZ^0APXZ^}Yq6#IqhPAyU&%37Dc#(3iDmn|2v zb4kAWEkio^BlOnfcu~QIXi3=P7uvR0xO9Y$#NaId^Ot2Xqlo_i9GcF8AQ*=GU)pXy z+n_jV#-B~5Ub>wpeSsyEFC@T9Z~BQaqa6;fb$^Go653uCB5UQ{Y9al7%vc1)Ztyc! zQu-0T5>u3^@pgE-Zjj)TKWx zyg?fOCa$O-fo?Dgc6>0Ra`C0h{aYd2b;r}%SyTm7v%%O|U}@-TdMrdjI)AbQW-&=F zfrT2SI9!ztFcHcd9m0yBDSwH4TRpbG4iPYSs3DK9jm707fEZBLH0Rpe+l;2qQ|a5atHT#(hZ~lFs`2)q zfJM#)PJC+QT*=s=n8e0^6ykXe?!RO*V@2BzN*o>Q3p2{ELx zqbf}~eSG=7GyS(&Ia3gkn#j&$mDOT%u6%hnE$mxln9FL!Y(dj3Daro2yNa}O_$Vs9 zx5SI3m%foz+?~5f;y}s}%NTU-Xz8fwd z-9+qnFVQ^YBkKjnFTbpyyrG|t7wp`X&4P{HR{dJO%o6}f+(CYC@*<$``xtvXyS)Xy zLWn<=%x^Zk=U%Y7Ca=I~bM~z~j{)-2v*vLmo>huV+QE*CcL-&A@~bCoysw=IAojB% z%Gocz{NSqm(0`R@`2AHFNsSaS^2+2_boE=;!M$V#2UHyCSNirZsOT8)ob(sKir>2$ z&w6{a?^D0cy!*i4(n-|xKclZ*)AWRWqyesNv`HYq-WiHY=Lh z>aKUsn3oi_SHL#-5z8r<-F(xi5~Vx4Sh?C`v<68a2Qn$i=Ghz_PJzI(Qg#ktmRg+k zMCz10(kinsznVT`sQjeYwEaBKMOR;m6ZUs77L^II8y|+0t+D)x0;;0KPup+a4?u4u?l8xc_nTsY zT}{(}-ggH}U$uj?h6t$hCEAiY0NcKhmRAnL22+A8{VBFTJ>tIUp>ezQE95VafXMDG zQnSl7ASsfD8&t-$i*UBA>It^_5o760r^D<@nON^4NZ1--|P>8=KaHNb< znO$s94&1p>@B)mJ4aUH1bWiA1VD&`Tp~K|J{*VMh=x_!^tTaOkYdm)vrHF@jcLRf2 z;nLpp=OKg)-Oas%Ed*_QRG+8mLXW9VRC2P$h{F7#$8QVQ7K^fc{faN_F5MM+J{7Ul?U#>UnaorR zCTqcJzLeVjOru9)Goij(YdTvX_1aZ13AQG9EMYzQl7zHi6sBm@T|*5=zWGH6F}VHb0C)|;Xh9^) zjGU*c9diN?fd{P1I5>WIP04y+iNhhGDTnan4k0|~W>h?wfmjer0UG9}?{gd!uR|@z zx8ZTksRarSA6e@NRqN^)-=v8yZL$lQCbZaSa$UhZ5}a#Fs(WJ-9S-?ESCqEA|B;j{ z8I0vaKIy);%Wj>nUACRzf&UKRE%XsWieeZ8nFaZDW)gyWiX2qzZC@qQe?VU8kKe>S zc$ozHGy z?g;jA8C`N2;)zMiSs~0@xWCE*!D1P;C>XhQrl@K+o!r7e+!hoZ#{e;TJgd}qzwze` zC}IuU&oXY2#Q9TF0a~?g@eeJuR|F5>V_qOEG%?9Ko)CqHAQ`{!fieYaneD40Ls`yK z9INR+Y?P=dZtF&GA3(=Raavi=!}@ioIGhtId z>3xRYbY7^C_4q39=vOZ=Qi2X^-O<1y<#@7S@2^a^lnia!)Nfb>v`8Sa_>xycNJ(&v z52Z18y(nKtNw82L*$>m6*H0I=>9E0>)Bpu<+NiKpm9)vhqz9nTn;R}jw>yB-Z*gdmVF=AeY@UwJk`K+eT~JWy#nVf_DG5u<}e?(eM%OnAe?kq)xfj zU6P_Upu`AZmZhO7;I1W@zB+Z(+o_U zO=pE}|8$uTtW$^Gm|r7Ebw_$N3IuB0bf|COZPs%K3w+Mid)Iu+y&E8+Y)I;{Ol1@AVDsKEDh=7hew%IO01dEzY#-}z)2#dC(>bdjTD%lOYIBL@16x9DS;^=Z^y1=htwTy2+9y$dvYH%s47|1@?fmZe2NHvrQk})A zu$OWnAyRizjd*(!cgw##vM0lOgvo;~s{(mGsfSt=IPH#RxQ}LtFTEx?&r@N9J=mM8 zRS~JCIdt{R?1b7y!eFDCEXqI{*Z~T(mNI{2gFHM*E2znbRV319R@l^?n0BFr1QF=V z7|}10Uh77P2`F34@(8KZKEqWjB>WN-RK?@)(ufO};x=M3@qWSjf}N`^wxCRuFGbVm zB37bKPAyCy9t)n`pB63f+HbL0K!bER!h!K5h;E?7jGK5MA6ESNZYS{2-c=t9$XTB( zOV5#O+7Q5u2lAt0_Fv5-8$OUW1>77{xg*VETDXqycn2MYR!W~%MmmH|N|o;6vD;N+ z97a>aN{?1<^}8Xy>b~TxTWbC>?29pS)MfRJ`;f;fKphO$WNLA}?tA-iY=s@N@QUa0 zd|>dsM`y?@{SmsE`Eg9{nPQU?w}gWc{MOs@rctmcC9%WLOyrMy`S@1MyIB!!)%jes~$sj;^y*_#K zND*)X6*LZ!3+Km9*C@wP_)&GH4xKb;m9*mk#>PtDF_z8V-<&9U9ufozX}ocw`OtCQ zDn9@I6E2PnlOADH?^n4erGPB z+rOU;HFi{xHW~?hm|*fe-ac)DfJl++x+YTCt1gr33G^e_fxIoB(xX2{Ki}7)HEKm6 z`jq!N?$6yd3*;+($OVHhlulZ|94J;-6TA$zMzs|hSg&=paeuZqJtGfAdKw3c8NTET z2%g&&zESpUrw}NniCvwW&@;SF`;5(a{bFz`FOe8lo1ECp7 zEDU)>*r!+DKEKL;KtODv0c~j=?}HD(g7^8p8K8I3h1eMfFo_65hV~$(8{LqoPZFYH zb6RJjgA4;J-Niw+helCl8Wd|>I&aQLev*FXvWFdy=A8}xfEsS2tls1}qD>9eg2>b@ z0w2BgX~uezAO}*hqUb<-45-bxI&fJoKA|GzWrHw#FPTqB?F6*(O1V*%mR=u18L(7% zO_k$+BnWA3$k(Y^M}5U#Pw1jKs^YrfgGu`Zd&LtNq45VI@muHg_fJ>ao$(SsqSE%F z;2Yc~egxPP^?-NYYyAeGOx|!{CRk6F^1F)zBD+>V`SmQ%Qj5)aVa8-iWqy5LHj@Jj z{WqAAKRw3W;1`-CI9d_){;E_Uwq{bbvMmt3lA*V|!&#T7SAVHnAn{)R=O;hPXLpPr zN8I_C`+{S-_Yc%Wq_c+sgyxH5+EQd!5wOrQgWG|H(Jdyvb6hN1J@>6c#*ErtN5{3D z#Fb@o0GrHr*uh;xsnORO{xC6`Dz~n|R#(z|q6e0Dhj{S=8^A-WiI_;ubG{MP=2$sn z&39kaj_Xc%b1?o0NyLkl!@$DXNGcHv^x_sno;L(4c9a28(mX+eX24IZHj}HovBY1F zbx%sFEVyWM$-H|_%)VX*HBqPmGk7;bEgm$#?_+%g?&^x*G4zx)O&nS@C>LP&Q_5I`m6Ydh3l4TvMP+swR8hg<0ng!=AaWAqlWNg$-hF-oL@MMiBU7D&gY3J29A` z0>7h%`IFFH%$(GbFcg_B{!_|*R;oxX*-CR)P zN}xNy)J69=M<$*0{vWnRyiw|H&E#ja6-=bdw8d3J{KwcnJ4BDmoLv&EX6t5PWGWf` zgpeC2H_`UI7E+~6jPGO;;LhI-CD3y&B0<)k5<^sC@Pvg`JI|6y*)J7Q>(DHImD;@? znZxlB!vC?qqGr#%zMk|t5J|tAok00xjXHUxPjoTm1JJVNh!8B^VT%1kKh+VRl%oW_ z%n(-diR#MYJ(WdS!s(vqLL?}b-6Z1$|SKsW8G(IhE(YegSq zX;fTJGq9IbUQ*V@F+9FC78qBY|D;!7WvNgtNYdQ;%ucvxWSIEvFJpxDrjyzFypt7#tQ;;j)WsoxhBon7q( z#J6Ct>(%PJx8>3FBgPeIX{R5@MSpD?97^Glyq;5i>$^GM=+7M{YrMQrwVGJPL`z}1 z)Sh#GZUs(qnC~bZoE$9TMBl7!FN1(iU#{Mcwk;YE_V7Uw1p%$y!bC{67u*wxmj3N^ z3|SJx*OC(p!y6`hxT?#Gz{u?M7kssC}Wjj^e=n<<4`prTf_6Z2e%LR zzDz!*&y;y@Od~?2imIw?%{z2iq+^O!`YiX1*k#DHJVA}1)Sca)TYOB%#d}6ejNupj z;(6a)xFW)0d`hF$@AkrY`4)50xjw&Geq zdwFCb@O834p6BaO+GSr+=9g$$%nBz$OyWwZrD0(@7yF-`}F3TeMk6y zspv{BE61-TX0vt6t1bPEs%Nm)C>6?5p0rcp-1_XSv8pus!t;j3o>!-(x-g#QDefRl zs>(rN$}0T*#d91VTv`J9{?F}I71gHoM0TP}?Xg{F(c>=_bo~ts3d;rW!50;&J@#(q zD(s(qm~ehH-*K0Zgys7=^aDPb?(hdrYW}TYY#%ED;dRoNUl{U`%)3gu>yKm$RU-9aob>}3nt&w)Z7Jg`QuyPR z%9ze`!K=6%<6xA}ab!>JN%)TYew~68k7cx@Yzu7K{HncJiYBrtwq4$gx1iP<(;iAK zm_uuLOV*7b@PVK`VEXjvF-g7LyXxL1ZbSva0f}|%=5xI=E=_}g=TSXQ1W)87QB!`v zH3Cn)G>qo&4eaut#5IuBzoM5`g1;p?4-1!vX~^}X7DUOksmA1D5pNd`ld1`4#qztd zf+fUYK^oqj9lfxKx3^wg=xQLoISjpN%2oCtM=O3xt6|VEv1z0b8PB>@&U_|#WKAJ; zY-?1Hp)CPSC{akdV&XoK&hS^Lwa#8%^cB7rv-Y&F@vz18Iq|~y1#XE}MRiE7pYuZz zS4x(N)6h#b^_TS4GfBLOg89-Fv)xF1B&>MQ=nazw9m{u^t7T^i7hEZC`<}K$Jkmws ztmlY;z;`+MA@T*;z8`0=0;`>lsye3iuky1R@BFRBd!{hGv2T4F`#m`!)p$xm$PGVO z-K~fCD43G82rSk~%l7ETIxZjBZ4y5Zxa*B>HsjZDy<{#3N+GQc0~rdq4T5@|zqHY| zXua@;s>M;xTVSF;F8KLU_eyhE=V2|~VMyH{H%ZbFNkTYUYC8EJ{q-FP3UHA}?Fmn< zG16KU&?6-*Y@E%dbll0C&D@SoNKLL;`-KA?md3;R<1v9!;Hk>njAOq))fw%BHIXCI zR&QzawJ4%mF_AuHl1k_)0PPKwf1#f7tK?@A}sdv{Rt& zp~38P=qr{TT!%~^zLrO|eKn3yDR?}CFbVN4lWDj4TAJbXG=@L<*ESad!Aq*UC!v5M~c&QC=k)2wox(>8+s``|axXdf&W zra!9Fx%7>sSgQCXyz+-VkO)#xW37eNqDl*1uo; z`W1}BC2?|yrp=jFtMk^UC)F8^?-JikxZl^X65=-@m2$Y)&0mCY-aj~-38+(A5fVIc zU;TQyFfH-&r01a}9_AmJ$j<<>g;&=K_di+scjjEz35YL@-UpJXQ4!uN_1_}@yT<(S zdZuUu5X+z8d4Ig@|K1a=0j}?_I}K?5p7P&*VK@T3S&vH*|9?v5j|cxJIeTH?y6z0u z!$0fL?-+w_;7hLbonUXd8mlP`Vg2LrrY#sfdpZ+rq?d;&X zt7FX?$G@b|;xVY!rm%7HKikn?)#JZuaFvCi@D$jPrT$fxzrFmQ&8i2J7BU(^rX~Hq z*?0Y8v<2Y$%E(q`$-ks9`z~l1NxO!Y|B}T^B;Y!%TIVh4zod|#AsUKOXwt=RG0O0- z`N%-e16_$o(Y5XcR%S zXI!}QBxQ5JCnc-tXl2??_p5i{BKRY>$sd9m7~~baM)Th`B$-8D2n+S_?;@+b(b<(M zBl+5kIQrOG>1im%tHG8FizeE?N=lgqbRir54_5n&jdWzYS`09&5YLAP9s;)wrG&Kv0EQK%Wk6N%=>2GlIoBJ3F<1Y2O1G zTEpt*Mcv@HocH?5`XtMn6!J$mlmLnW`ZU4luZC~&=o5$_*aq5Ij_DqIPX}v(!-zRq zC@<-1_s7K#+72CoM<*A^S+dh9UH7eD)UL*{Iky6-k2YOH+;x%-;G4@{#F54E>l?ehucslb+2cH2U_gN?CYOhX+ z4xk#QL2TjnN^XaT)KkFA&~WP|Jea^0PUA{OMfH z62s)&lHP~;=0kxPD-u`dLp>?NyyZF|Vru$pvdwxO04|Ut8hT8kZ9vw0yKfi7PF6`= z9y81fP*@fEY60ob8Q_z&vC@~WH{172v9G=fo4wK`LC1;CsG_oR+!|)DW%~*I3dYE- zkx$a!k7nLv;a(?HtQimsd~UtMwV`Zyb<+-ARRE%eXodF1tKV_1@RRm3e_D*cC z=g3uiU!JsGDHx3#MTw=|ehfm=rwa`dszBfk!)TN-MFCKq$yduMn*o9o>Xwz3xkW)_ zEQe_(B}^0*t%{3>U>pBK&yYO_rVzS&Z^~Je)*z?hh#rMjR!;5$ef{~ubd=ic%~>lh ziV^xoGCd*p3?uKz$?3s~>3f;GF))AJ^`|LDI1f2{aCmmD$}X!XfgF3qLKu5BI1*&t zn1vtbJQMgf<^%|wx_90ZjAhB|QOetW98+&UntTwb*}aHR{LpJU`e<C~}?iY(RDV#O~^Q46MI)iV<=tikjjNE9FVueV!dj(myR}og^Egz$(tqn0UKc_ig zjOrMMg1sC5H}ONAYu#yVpc(0gQwL6yL~XCkj^C21SPB_2GM?_c7#2gjh* z0Ms}oGb|fX-~TzlSrM_HEPA@ekPn<}Mr?YCWkJdcE(LEAX42c*vBc9Lbjlb*-! z7cGnrb$@ySo38B^ zVkHM#*skf|1=!^^M(s_t$;q3nxyx(%d2@BCBdQ9-Aa@^bI6L$f1QQQ)qHt9$3XfaJ12Y8>x zmXWPEE^^a62Fh#|!ZpMFxL{J&9q7R8w_`dwCk#=Q?H9=?Q0V>`yMwSSA-V+3T}4Y)+)yk2aT6 z>50moTdh3b?0zc%)orqBN%dOGz?e2owq9B3IkW9{UCRibxodXNhaGP<#a6R5+H-Mv zMuVQ?X^ehKPYGH=1A76bjp5|IOMe!n!c?dArR};iF3@rB>0d+y4Ja6{ z_|4W8Gov%mKAjb@0jBS(u`)MZZ$4=l!TxjoXF&IAvoQYH zTr7}uUNbvEXStDnarYN(0>>5PuULR@=>p7W>ckMRr>n+2*hwL4J=cI@Q?vCjvErG= z)$I49)CbG<#Cq_;&@M>*mVMiyBTMSrOe|@N*8GzD_W23PXNadvvED}$EV@fcLc8M5 zC(9bfwIbfVSVWhMD=%wHYPVcx;H1QLN^Z48 zo%4ysHzR1M^vEaDF_a>Ut?{*DCq|lEfjZ**& znMI1WdTGBup2^YRcHcf7x5qo|i)VJ*Bi)?6dMoksjR@B6w^XMeR2xsOo?jdcDV4MG zPu8bX*i`yj4jA4?f&n$rMW_p{k;z&c)>8{SU9dFQPCSt_6*F~b+cXsQgO9onJ}Nn- zSmF45jF{5U^NiQ4yd!?z`8ENBE3_vzv=^UjXWy#3GRGf>Rk4>K$D8!DzxP;s^3GR3 zhx;6PvL^8~k|4LYt|-fp_2>CD+5?IA^N$0F2dR^A*V81Wv2Khu_2*SYLfdG(Gda1$ z*2#uQVtBpIx5O1%8hpuK`e(hr{TeeqJNn1rT2X>)u|!S3-!oAEt%|Pqab$BSx-%AN zC4#MPHdV`}$dgsQ$_#1l-lyIaXOF-<36fW#a}QD>InT0focfyns|gW*)WWwu#g+7aQ_T5XqU@A)Lf z1K>CnZp~mTc30|p*HfzRSroO{G*f~$IJch~#*Y9UQdMX$MkP2uVlU5AFFBfq;-8H* zyB7h0x(qCxGd1Y^DD4@TnIs4IeKYm3e&fG-LpK{+N}cHqz#8G(p)6^vLKV)tcLlfA zE5>x)s~Y_=TG1o}jowjv`Xe(3FH}`Ao8-9_4l}H<5sKvn=-$Dy#wO#+ur_gTIk$H4=k5LmII z(7cNT;WbzLgG!4y_c{jwzsqwb?zq=CEk~nJff&u$?iE2C%y$5N>H~PU#i{tg*3_7{ z93!LnPQwl6eAueDs@^r#JKj(`_>BG3x{UrDMBzXg)^IB`)YXn9O7MJqf_)(`MMrhW4mWF(t0A=5DIb7`p~8xT9PTXwT$ z;z1SIvsSdS z`I*1=lcHA8aQNr3A%#4XI@hpOq=o@BF#FvYAu)HjP3?&6Wh&C_tzxpEdQ!HgIh)J* zWqBc`>+~Smc#~Y~Tx0J|Hw~+{im0sc*O4R7_9G$^1?|BM>!r?^4+@tB^xeW@l=BhF z;O8N=B>nX$GaTO5G2IQTFJH+0GuiX);>+!fXkKb~Oqzd$=f9s);JoKlBanAh%mbD+ zMV?XI?_?jLr+y$yL#uKeHP_*!ifef!%Uxy>KUs2+Y->86Vlfs-`YyKTS3JIRZ_0!h zhuh-2v2#>SBSJ`-&*fGHujl6{(fF@$`Ve(zk(^7ZD-3!IS`U+jiA8u*ds5;tQvHY7 ze6MwnDU%+WQA*{Xe1v(%|HxKI9xcb*shrS7CRuxa5?*+FbkvdRtQhhI4Reakw}+ud z{<|fgcg@+hdpEONuU?7OUg1SneFycBhmv19X~h|`Agmv@kq;uBLaoI4&AD}|-yR9X zo$iB0LYvUn;w+*@_0wce>+ZO*T+*q6TBny~=VK51K>gf4<36)1=@B?|GT_l0yZ@yx zd)DCzaIY#B<`Yx>hAb;*>B2$bxm+;r?h>)edN+AWFbigmUFu&11Q2y;MG7S1>@ms< zX?vy}M#_TBn5!c}4`i4X+*+txt~3*^iLYX|rmN)35~R6(0-F8t9#*~8j@kf2gp zkS%6LvF}Zhs146U;|N71lH}|ERmoj@P%LpA2`l>b~XDh9_lHI z5hW(j5lmn~J0LQV)dtsX!I=aD+Pw5iy4yM%@xW!dyDHN|O1Er-Nh;w=!ld9#+gpizsY95-<3E z^N5yA+jH8iS5pMlddkN5W{=wCCAvb>5m=P2r^|_r?Q(JmY)mA4LarpM&95Z!J(Ya_ zCR?B(Vp3I6*d)X5t=QSKkHEBtfH)-Ja}Y~Y&|(uA}IbH;^KFA zO3S7y5c%-s(87nhMFS;EtOHW2T${IuRW`Eqaxks8BP@PJjD># z))aOlNphbsNjSC*u3N>R@hH?X3~jxrqzJg4XYuRuC9u?qDl?8=&)o&gH*6M;r<`)H zP7rNiZMnkYLXPpeLU%0qAV}JvDWZ9?{4)P7^=rx3=3mreS7P&KX3PqHKA%fU`}!P|VcB^c^NA~>_eu`-0Cr$T&8FM#)9(`uhZD>|Pk1dG>{J(T=Ae{qiRr1<6UTIW2+n|U!FGgxxiOBUH6{wz@y?C zA`!)wpViNMHEr-vR6-rgU)j)5kVkkW2B)ipFU z5SaWHLqC?Uxo<`JW3;Vbd&wUk4&~I!|7gGNFG~XP@BLbgL7og@6*=T`mn%!8vMDy_ z=dN8zI{41BU=5ZA>0oJ)N5kQiONN@%>;ZHFNO7HEp&eQ$@R>l3wMKGqZ5+=t`KHXx z&tQ_-xca3ItfyfYyvFUywo~SC_eS&^oQ?__60<|1nofi0WVgbWI~7gjTJ^H5#5q67 zH^*3yep90H7XK2Z8fVneN{0WgM*_d7D9?O|*=v_B(c9u`d&U_V^B|maw28(Dpx`48 z&SPD;eRH2(Ss}>dMKTO?zPDfcWCE3uz)J zPc_AGU~N6U!tm_gS(fWv@wM7Fr$=JFG#WGtfmlE? z+tclwyIkpE{)N^6bRA9!Y+Qp{YPeY@HE3?SzUbVSPJ6%iY+#>|G14|SW#iPh-!slx zb*h}=%vmz%5Ns-_aU#Foyqi~zHt)E1uNq8crom>dP9SRq(_sOO)#e7Yy65=3?|lRfTShK*6h`<6 z(p*iwxg*ffJr|nan{^*|dSfu+{V-o(>C?xeF+frF8vxz>BFoC7jGKAU8xMK0Sn@Z_ zeD=REe+rG1a>f_Qy(gojV3b1Y7h49VD+20E&rmtxcugI71i za=t@Ym28&XvG*=IDKx^p$#nRJl^T|GvSGnm)@63N`0wf?EMCnC}5PB5>5tM)w=_L@P z_m1@5B+~04fCy3o(&28;dH?Zz?~e2Fe!KaUG4{w_*=w)8_ME>mXAXvwUPwr*#oRlB zy(-A(MgLK|hz$8`IBbkYPY3*PpbX4G5st^NRaZ6}@`}KiBf>Ylv>aM6ZRO_lH9hbx zsLY;@u0_hqbKWE6K987UhG5dE&emAfY3*TY;y1wdoa(MNyVO@YnM^h)c}H^Z^0d0w6--sYVA3k|`YXb2ESl!d7gd z?R0DfR$=u_1Ux^9c8Xg7D1P@7ilev>c9*MCQ_q}@*@jL=c&QaK<69Sz$oR4*`xtTV z#`=8m*(`o%T6^4ebjR!Cl)2e(v035439;dNUQ?`tH7!*~%k-pS0^~Wgl%I4va<8*3 z!Tj#g5;DFZN1j8_fHV5Y4o4$Wv;vo`u;hSi)AFNn_NCn&G9z-vayCT?(aiUZSbTO7 zGUxG$&b=yR(FbX7J{?>VBx^qRw?)98Rg828C)pYHYdojVwh8+UFQft>gXqzHlJrE92Il;!Ix+Mo*wxTp-V6Gnf9=2;S^tb|L%*!NAZrVY!zZvl>!~M` zYp@VKz*ouJrILd^4`{9e@p$7qo z^`RbrmdsDjD3nPoNpk@o}kSm?Di? zU%wMX?3yWH7e-MpiLrw}L$^h9bb`&tjOyB9nyrJMVTWR~eW^{&D-A}^BE{{~|6)vX z?ce8G01!~KmVFXqYV8=lik8J#?X9esqeJdq%I(MBEV6idnKHe->5f`zwhL=sWU(j3 z(rYi~$UDb2p?nI%K>Q-UVLku^Y9l`QEl=BI%Z!~4bi6AyEs{Y#$7rNLBMQ0X|L}A- z2;RjO4&Nz{>{tXUZH~HJsZ#vw)mB|_KhU7{%WOY(hbWghcKMwwid?p?Ry1TJi7%yo zv`5JD`EWF6;Xy`(VL~=0`jRfp!7%pHt66m6>Q3)@??o#%s&=54!6Cn0)pY&#UR@=z zKloJC;7z#R**YB+{gt*NI{NQi=dWF34Y;3-21}agwY50*E83Y)U9Lz@5vretpo(HW^3qg9{7M{A{oP=6HeZ>z z>!biWiF#cvaE|s~V*&gbbFBhcx|tkB2^Zd98oUxNwJTg>O}1)RB&B-zdqU%wNGMLE zC&7`+s$q$CceC}q5LA-iFkV{Z5<#n* zh~?Mt0utThHY$Hg9soH&$n*eX}mRU>v&cI^#Cgwga<h9Ai8TGgS`<~k?s!p4EvaLp zTDbpejmLbzaXlzES`JOZL$?*%tWRpp3r^cf74TcN#wIt?=nE?<3SpGFUes@;N77&R z$9cL%BVS^ya6``^ceG|B4jTE{l{RNX59`D9L+SwJ~nLoJNXkxkE_0;uTZ_kSri3th9%ZtZ8}_@ig!=0MC5kbS4EaZXYcuBo1w=pQb~%_ zf*?7+X}p7d@##PeIMF}Z!Yt}W(baqN&Evc~;RoBDn+@)niW)vayD~rxUI-nln9;|U z$ANKn(^q`QGJ+Yv+Q?r6>+i}SWVlNfcggfR^EIoB2-SiT3q>vR=TC&lPz&V{)K=!m z4sRY^v3v+*@kU8|NHb~ic%^Xdy67A>7d;f0Z}oW9Q6joVlsHk~f)>H-l&_1Gzyt(uG3YL|V?4E%} zvtQ@?WZWtiqFa9ZSTklOSL`-aHsLc*S;E~CKhcVWGQai&c7$EahO&W2Jdel={YPXL zK~^uH4x_?G(%Yt9h(kcF-;GB(39*Ji3R<6{#Z01^QaoZzH(?Ky=6^$w(|DoWt}wj4 zl*OeiLKwp|c5tuU3og#YM>Ss)H_?tQy_LFNNdmG4n91`#F_VqXq@44|ck4;$e>5 zbo`z2rl9V7BmKxekBlwO_KAnvZP(b(Sxq){9;F!P7Q3e&aUr&Nsl0|{)}mnd#a4Ut zw6&d8305PN(H}Gz%%5F$>I}2jn~D_Q3ksjZy$9Z6Q#@PRnl5_tyFDWq zejI#9CV6KLAX0IVBBuMhT&bPv$Oilfh5ylf50&bs^3bkBZ;&L-G7pH&rLUxftSs!p zN1(@xrc&5jX229YcRPih0h?2hzZfON7xUm1g6t* zCn5pSGekPsw}I=Jc&$GL71)y`66J|$3uZJc%>-5B+IBzCPZ_-h5zVo|^VUu0pkn0);5LJu0)no62 z;G;r!*9hUt@JKJuhY+pLTyly20@I6e1|3K3)f_Cw;H*O7Es#!ESHI+(dEm+n#hlCO z9ej1c98dN62{9^8D+8+Ue<8q*rt1YQ%^qLvN=l(2;uf^n%vwWLI4Vi8Se1Scsy0gW zlZ?tw<9N(PqG{~$Jno{1`7@2MNXN5kl%67IgVOTLLZ>kx77Tm&JnoS~`j_nUWd_VW z-JJTYWs(n%LA$eFy!Ek@@{J+29(U9^TbZc*D>ZXqL9`UH49n|9t@Wp_#sq1dd#>5? zVFkHLZSv^Y!J@W$TF9hf-j-#=?)E|}RNuUy&)G!jEi#O7O@~c(@Jk_2#+FqtB>o9W zar!lq;d=QFz($IkO_$TwTjTjiEl%qcq!%3Gs{rcj&`m$OBc_XAjFA^7y+{+O+=DGR zsafcX-%82*PjI|$BCOm8AqmT-TUv_0CYH^kT>?iB^4Qc|0|j{xmVOB|x8GU%VaGP! zLz2sTRaWWQ1-ACJ%{R2IjL;5V><3v9mA|v&*?cEV&h>7G7!d#95|Dg;D-SgCW~C69 z!tyIuv}A~%WA>MF5n~?GqIzNj^l_dY(DoiT9VGa9U)TKm z+Wf3oQQ5%oa8*hHcRM8M+x;^@=E}tOn@TQnpcm_B4TOj>=};8GlbV*Nu>f^=kuR?)AlN(M+#smQr?+}DndmqnX)95^R&&#nMo*H5 zXCAftal@(s)ZM`AaFA@mOlJGoGI3f$YrqZd2w0leYBumchHS90`#^_@D6gxW1>dsi zK?L&x`3pPsv5YbDi+exWTmfb#SM#fMCf7r`y?Iw~+An}_E}ys{I9@kC))Yaf?NI-+ zd~hOfQ66|4@4wsegc|u@$irPD%ReH&=o6~brqE6eJn^0{VqKKDB5}3WPM-ia(C@*K zamaB7c@&^u##0I2xECv^F2%=P&fAMeecVrW!Ke7QxQI&#cuNR@E(|8L@gWtoW43ZA zjE2hnA!?Xi$p*e2$vhe(@dsZQY#IYVxwkJ9x(sX!#D%AQYnhm|8!qkv+s?d;xB$C- z^j{)pJxiQLJ&xPYVuIy(-hA`ImpsFcJ8W+T><}w#D&C=sQr4TkQ-;L(GXe|MrD;^_ z$&u;=G$(snNpkC4(x9Iqp|_9f5qcvWlcbKf#xD)? zBKj0X&?F2=RmuADBtvIxI@fNAzEo2Zg|46KSQR+`5Ll9=2mGv4m_ZG^2W0XGhFvqm zG?0q}T1{I~0taU*R))(3o%mS_fhJ)^ef2kPE@$i65jS&_pM*T@3nzxaPxf%dp-SMq zJoA^^6P9(k!fBZEq*mQSx(J8D@X5ULtrbcli_UBt7u6xIoV;Ik%9tFbW5x3kJP&6O z7%nQeu1pEnXICcj_bXiMcHL~Cx2HZF9*hzD_${7>-61dJNxzo`X|_%HYc0yx7E1A# zND9?8hHvT5f4z6lWm!@t1aVJ17PjE#2zERNV6uM#+`qvx7jUVY%+acX2&m`QxB8y| zqqIHzLGD4wfjU78G+J{FD#)y^B%@OeAFSZg0+VR61p&Djmuk%rl70aQPWMvW=oYRm za2eS05k<#X#FAMdem+qCEXr0@vzr%%h4p#^9ur{%-iFnTFAOgy`TfW-__>ZBhSaGC!&g7cU2+yK`1&v-M$Qv=ziC+fo|*9_e^s(uBGm`H0YY65vZl>( z61hD{(GQsThmH3?sE%D_@o1F1(pU*mtx*p(QW5u1>ECeZ4kTD_#Ual|f*3t6eRu3> z;E8(UWaT&{g4Dz`GtP0#3OAjE1NIQp-Dtr$Blv}}ytq$?z^)&@k)yb>7D~+-_EsC) zxJuqC{|okpeG9od-_DrdmVEFnySGrL=-Ch*oT0qQcqCGy6kB_Jy@voC9dp)P1E*llvr^tWq20+CHtCE3yh zE>;=ct^&gBrv%?YRz6tE&1`T#yhmje!!J}MULbqnuW)BI=roFr#4`o5d~;hPPo(^Q z-nPOaR}e3W(@@$M-`I+0oyqG)8!IlNKrurPk?9{z;!>m4&`qLZM`FhmAew58I83}v z4sZWh&d>K=_{6ZI>2GSb$ccZD7IFuXeg(-+O(vVYbY1$_i_{~9vD;=XMzh5I%lQ^J zbj)J>vA5rC2u&mK^&;gkW8BeH!IVQueJBvhgct0x+0(c2oJij+GGr?DbQfi+(vYc1 zO_e0WFRZNx%qx<^(;^~uuL{S1#M=s0QC1`9r>^Bdx1mwonjq}P5miIlCQKr#aD9Iyv1)whrf-QT-W@yQCqNzQ7R)G z`KhhN-+u35Wq~sorK(s#E``?dyfadNsWmqGi9BcbMD2SoaqH!jaF*-{LBmKL8WT1*u{Fbf5_3@l=otP@bZJFohcP-7&v&s_6 z+?u4+XK034tO2W%_e(V?-p8Z5SGt{gK00YQ3xjOl>t{?+3JN*OPZDRt6!L6=C-_tc zcVhw>zC6l;pqk56HrZtC5g$D5ajx&N7Tg+n0=%EKo`KZv+axc!8*~r#!&TY+ys(&sX7ptKpG1vnRl-74y zqxv(I@?#g`D=F3`Yc2FhAX5;L@`c4MfBuSKM{R1}Po7W2l}cO4lSjT8IbUS+?}?vo zt+h4*^tR`=1tO`9qCkh7t+hfbrH#?2RWxr^kd~kMv=IJqg3pT#Gp^TC1nXa#I1EAe zciq&P7 zFVH+zNDDiaxtkR0Uj{ei!Z6I)(gV$v^bo!DE3NkU^`yntK>N45oHdo2am6Yi9X1jA zX`7i*OV&BA;L?%NITJteu`VG`Ti);EEQ~LOld7DkN=LTWSrv&^AjK&o%3 z!Wl(l&o$-G5>R+;a>dE2If7Hn^Q#vw=%U+b zWwIp9+3FCzWqel~xO&^4+I=Un3ZoFiY?=K0+e*`+CL7|kq?z%CMfipwEAsrzQqRI{ zD$uDOFuL?My=@h7hhGzO#%E7Uzm&sPf|UsD7&Ar|Aob>m`K6{ApVe%UcY%Uxe__ z#cy_q!XMmC(qB>83cVU{NOUZxk?r?LKB(McK0Ggq{h3hmD*gq^s{<87S&J2_% z>nCW3WPUEwXI`R>Z?4t6gD2HI4L*~oG#K3bTMf?mTMZtV9P@`7TsAFSR*?RjO@h`* zn4Z)+GN_rF{cEu!RqAd^GK@W znIe_D`^+hR|X6E{m?QCCRJj+ln&!@_>iO!BmBQU(nbO z?f0+-^n2h#Rlpo$vdMD#$K3K;f$7d`QJ6Y52*kmtmp=El*{SxPseUVWnoT2gE#2>{ zaMN56;4t{UX#U5=Yy6%vl~kAiqfh@sw*U86j?Ulub?W%me>t8e12|K@@%aq=n-z)$ z=t|#r$MniSBKkj<&_70`BW}Pkkh&`+`KM#xkALB;23%^VzZC3Wj<3Z4_rPalW%|FJ z`k%Yobq6p}u#hfq{mb#(|D6D^6eGx>(lAq|DC*yqL7E(Wyp+o$_2Z8&B)72*EA#&{ voBpz@zWYQ(rh)$jrSDc9 From 58844a6060ca581331ccb25456fbf7a712033e2b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 3 Jan 2024 23:45:20 +0000 Subject: [PATCH 177/315] chore(release): 1.0.0-development.4 [skip ci] ## [1.0.0-development.4](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.3...1.0.0-development.4) (2024-1-3) ### :sparkles: Features * **components:data-table:** display `language` in live submissions data-table ([dd6e3db](https://github.com/Clumsy-Coder/uva-uhunt/commit/dd6e3dbfc0e0d34d861bcb258fea359dcace996c)) * **components:data-table:** display `problem number` in live submissions data-table ([44f75d5](https://github.com/Clumsy-Coder/uva-uhunt/commit/44f75d5e7636f3155f022f4a11d0677df5c41cc1)) * **components:data-table:** display `problem title` in live submissions data-table ([6c131eb](https://github.com/Clumsy-Coder/uva-uhunt/commit/6c131eb60bd4c94e8cd5d68d10d71cca1d3c1527)) * **components:data-table:** display `rank` in live submissions data-table ([293387b](https://github.com/Clumsy-Coder/uva-uhunt/commit/293387bb1ca547ff5fedc386d810e2432f48b789)) * **components:data-table:** display `runtime` in live submissions data-table ([b319bfe](https://github.com/Clumsy-Coder/uva-uhunt/commit/b319bfe872d7faa3b3bf79122bb4e878ee023eb4)) * **components:data-table:** display `submit time` in live submissions data-table ([77e225e](https://github.com/Clumsy-Coder/uva-uhunt/commit/77e225efb8342ea390aae846eeb90d91ef695c01)) * **components:data-table:** display `username` in live submissions data-table ([3ad7c53](https://github.com/Clumsy-Coder/uva-uhunt/commit/3ad7c53efa4816d41bb288bcfa71284d1d8f06c6)) * **components:data-table:** display `verdict` in live submissions data-table ([7b57189](https://github.com/Clumsy-Coder/uva-uhunt/commit/7b5718967bc0f16a9cfd4b423fda2a9410534369)) * **components:data-table:** display submit time using tooltip ([30c02eb](https://github.com/Clumsy-Coder/uva-uhunt/commit/30c02eb561d046316feb77d6674f48e2338a9e2f)) * **page:home:** display the `DataTable` for live submissions ([fc356b1](https://github.com/Clumsy-Coder/uva-uhunt/commit/fc356b1569ece65edf57c9b5e4c715cf444c9128)) --- CHANGELOG.md | 16 ++++ package-lock.json | 237 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 3 files changed, 251 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cb699b..aed09e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## [1.0.0-development.4](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.3...1.0.0-development.4) (2024-1-3) + + +### :sparkles: Features + +* **components:data-table:** display `language` in live submissions data-table ([dd6e3db](https://github.com/Clumsy-Coder/uva-uhunt/commit/dd6e3dbfc0e0d34d861bcb258fea359dcace996c)) +* **components:data-table:** display `problem number` in live submissions data-table ([44f75d5](https://github.com/Clumsy-Coder/uva-uhunt/commit/44f75d5e7636f3155f022f4a11d0677df5c41cc1)) +* **components:data-table:** display `problem title` in live submissions data-table ([6c131eb](https://github.com/Clumsy-Coder/uva-uhunt/commit/6c131eb60bd4c94e8cd5d68d10d71cca1d3c1527)) +* **components:data-table:** display `rank` in live submissions data-table ([293387b](https://github.com/Clumsy-Coder/uva-uhunt/commit/293387bb1ca547ff5fedc386d810e2432f48b789)) +* **components:data-table:** display `runtime` in live submissions data-table ([b319bfe](https://github.com/Clumsy-Coder/uva-uhunt/commit/b319bfe872d7faa3b3bf79122bb4e878ee023eb4)) +* **components:data-table:** display `submit time` in live submissions data-table ([77e225e](https://github.com/Clumsy-Coder/uva-uhunt/commit/77e225efb8342ea390aae846eeb90d91ef695c01)) +* **components:data-table:** display `username` in live submissions data-table ([3ad7c53](https://github.com/Clumsy-Coder/uva-uhunt/commit/3ad7c53efa4816d41bb288bcfa71284d1d8f06c6)) +* **components:data-table:** display `verdict` in live submissions data-table ([7b57189](https://github.com/Clumsy-Coder/uva-uhunt/commit/7b5718967bc0f16a9cfd4b423fda2a9410534369)) +* **components:data-table:** display submit time using tooltip ([30c02eb](https://github.com/Clumsy-Coder/uva-uhunt/commit/30c02eb561d046316feb77d6674f48e2338a9e2f)) +* **page:home:** display the `DataTable` for live submissions ([fc356b1](https://github.com/Clumsy-Coder/uva-uhunt/commit/fc356b1569ece65edf57c9b5e4c715cf444c9128)) + ## [1.0.0-development.3](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.2...1.0.0-development.3) (2024-1-2) diff --git a/package-lock.json b/package-lock.json index 4c1279f..8758e6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.3", + "version": "1.0.0-development.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uva-uhunt", - "version": "1.0.0-development.3", + "version": "1.0.0-development.4", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", @@ -6319,14 +6319,17 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6343,6 +6346,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6354,11 +6358,13 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6375,6 +6381,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6389,11 +6396,13 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6409,6 +6418,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6420,6 +6430,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6432,6 +6443,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6444,6 +6456,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6457,6 +6470,7 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6503,6 +6517,7 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6521,6 +6536,7 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6532,6 +6548,7 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6543,6 +6560,7 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6561,6 +6579,7 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6576,6 +6595,7 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6590,6 +6610,7 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6604,6 +6625,7 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6612,6 +6634,7 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6620,6 +6643,7 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6637,6 +6661,7 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6648,6 +6673,7 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6659,6 +6685,7 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6674,14 +6701,17 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6693,6 +6723,7 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", + "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6701,6 +6732,7 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6714,6 +6746,7 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6726,6 +6759,7 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6734,6 +6768,7 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6746,6 +6781,7 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6754,6 +6790,7 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6765,6 +6802,7 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6777,6 +6815,7 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6785,6 +6824,7 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6799,16 +6839,19 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6821,11 +6864,13 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", + "dev": true, "funding": [ { "type": "github", @@ -6845,6 +6890,7 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6859,6 +6905,7 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6867,6 +6914,7 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6875,6 +6923,7 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", + "dev": true, "funding": [ { "type": "github", @@ -6898,6 +6947,7 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6906,6 +6956,7 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6928,6 +6979,7 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6939,6 +6991,7 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6947,6 +7000,7 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", + "dev": true, "funding": [ { "type": "github", @@ -6961,6 +7015,7 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -6972,6 +7027,7 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6980,6 +7036,7 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6992,6 +7049,7 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7006,6 +7064,7 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7014,6 +7073,7 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7022,6 +7082,7 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7033,11 +7094,13 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -7046,6 +7109,7 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7058,16 +7122,19 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7081,6 +7148,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7095,6 +7163,7 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7106,6 +7175,7 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7122,11 +7192,13 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7138,11 +7210,13 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", + "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7151,24 +7225,29 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7177,11 +7256,13 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7190,6 +7271,7 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7198,11 +7280,13 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7211,6 +7295,7 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7226,6 +7311,7 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7237,11 +7323,13 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7260,6 +7348,7 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7281,11 +7370,13 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7297,11 +7388,13 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7313,13 +7406,16 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7329,6 +7425,7 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", + "dev": true, "funding": [ { "type": "github", @@ -7348,6 +7445,7 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7359,6 +7457,7 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7367,6 +7466,7 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7375,6 +7475,7 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7383,6 +7484,7 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7400,11 +7502,13 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7413,6 +7517,7 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7424,6 +7529,7 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7435,6 +7541,7 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7443,16 +7550,19 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7470,6 +7580,7 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7478,6 +7589,7 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7486,6 +7598,7 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", + "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7494,16 +7607,19 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7516,6 +7632,7 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7535,6 +7652,7 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7556,6 +7674,7 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7567,6 +7686,7 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7579,6 +7699,7 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7591,6 +7712,7 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7605,6 +7727,7 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7623,6 +7746,7 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7634,6 +7758,7 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7646,6 +7771,7 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7661,6 +7787,7 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7669,6 +7796,7 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7690,6 +7818,7 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7704,6 +7833,7 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7712,6 +7842,7 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7723,6 +7854,7 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7734,6 +7866,7 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7750,6 +7883,7 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7761,6 +7895,7 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7772,6 +7907,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7781,6 +7917,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7792,6 +7929,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7803,6 +7941,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7814,6 +7953,7 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7825,6 +7965,7 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7836,6 +7977,7 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7848,6 +7990,7 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7859,6 +8002,7 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7870,11 +8014,13 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7883,6 +8029,7 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7891,6 +8038,7 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7914,6 +8062,7 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7928,6 +8077,7 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7942,6 +8092,7 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7950,6 +8101,7 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7961,6 +8113,7 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7972,6 +8125,7 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7980,6 +8134,7 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7994,6 +8149,7 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8005,6 +8161,7 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8019,6 +8176,7 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8031,6 +8189,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8048,6 +8207,7 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -8056,6 +8216,7 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8070,6 +8231,7 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8084,6 +8246,7 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8115,6 +8278,7 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8128,6 +8292,7 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8136,6 +8301,7 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8151,6 +8317,7 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8163,6 +8330,7 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8171,6 +8339,7 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8179,6 +8348,7 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8187,6 +8357,7 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8195,11 +8366,13 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8212,6 +8385,7 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8223,6 +8397,7 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", + "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8230,6 +8405,7 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8241,6 +8417,7 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8249,6 +8426,7 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8263,6 +8441,7 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8275,6 +8454,7 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8290,6 +8470,7 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8298,6 +8479,7 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", + "dev": true, "funding": [ { "type": "github", @@ -8317,11 +8499,14 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", + "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8336,6 +8521,7 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8347,11 +8533,13 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8363,6 +8551,7 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8371,6 +8560,7 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8382,6 +8572,7 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8396,6 +8587,7 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8405,6 +8597,7 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8418,6 +8611,7 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8427,11 +8621,13 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", + "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8441,11 +8637,13 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", + "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8457,6 +8655,7 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8465,6 +8664,7 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8479,6 +8679,7 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8492,6 +8693,7 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8504,6 +8706,7 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8515,6 +8718,7 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8526,6 +8730,7 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8542,6 +8747,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8553,6 +8759,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8564,6 +8771,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8572,16 +8780,19 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8590,6 +8801,7 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8603,6 +8815,7 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8614,6 +8827,7 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8625,11 +8839,13 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8639,6 +8855,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8650,11 +8867,13 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8663,6 +8882,7 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8677,6 +8897,7 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8685,6 +8906,7 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8693,6 +8915,7 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8710,6 +8933,7 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8726,6 +8950,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8737,6 +8962,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8748,11 +8974,13 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8769,6 +8997,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8783,6 +9012,7 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8795,6 +9025,7 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index 7db0034..68776ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.3", + "version": "1.0.0-development.4", "private": true, "scripts": { "dev": "next dev", From f798c5dc106ad24665d1661b53938f41c4da1a49 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:51:54 -0700 Subject: [PATCH 178/315] chore(components): remove `LiveSubmissionTable` component ## what - remove `LiveSubmissionTable` ## how ## why - no longer needed for live submissions - DataTable is being used instead ## where - ./src/app/LiveSubmissionTable.tsx ## usage --- src/app/LiveSubmissionTable.tsx | 68 --------------------------------- 1 file changed, 68 deletions(-) delete mode 100644 src/app/LiveSubmissionTable.tsx diff --git a/src/app/LiveSubmissionTable.tsx b/src/app/LiveSubmissionTable.tsx deleted file mode 100644 index 07b825b..0000000 --- a/src/app/LiveSubmissionTable.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@/components/ui/table"; -import { cn } from "@/lib/utils"; -import { Submission } from "@/types"; -import moment from "moment"; - -type LiveSubmissionTableProps = { - data: Submission[]; -}; - -const LiveSubmissionTable = ({ data }: LiveSubmissionTableProps) => { - return ( - - - - Submission ID - Problem number - Problem title - User (username) - Verdict - Language - Time - Rank - Submit time - - - - {data.map(({ msg }) => { - const { sid, pnum, pTitle, uname, name, verdict, lan, run, rank, ver, sbt, } = msg; - return ( - - {sid} - {pnum} - {pTitle} - {name} ({uname}) - -

- {verdict.title} -

-
- {lan} - {(run / 1000).toFixed(3)} - {rank} - - {moment.unix(sbt).fromNow()} - -
- ); - })} -
-
- ); -}; - -export default LiveSubmissionTable; From b1fe859517e467ee909ef5cbc41cdd5140a390f9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 3 Jan 2024 17:02:17 -0700 Subject: [PATCH 179/315] style(components:navbar): style the first link in navbar ## what - style the first link in navbar - enlarge text - font bold - add margin right ## how ## why - to separate the home page link with the other links ## where - ./src/components/navbar.tsx ## usage --- src/components/navbar.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index a1d6941..e84ea74 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -31,6 +31,7 @@ const Navbar = ({ className, ...props }: React.HTMLAttributes) => { className={cn( "nav-link", pathname === link.href && "active-nav-link", + "first:text-lg first:font-bold first:mr-8", )} > {link.label} From 0ac8423b247be25f8c5c67c9efaf4192e8dbe63e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jan 2024 15:23:24 +0000 Subject: [PATCH 180/315] build(deps): bump axios from 1.6.3 to 1.6.4 Bumps [axios](https://github.com/axios/axios) from 1.6.3 to 1.6.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.6.3...v1.6.4) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8758e6d..6107d8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.3", - "axios": "^1.6.3", + "axios": "^1.6.4", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.303.0", @@ -2543,11 +2543,11 @@ } }, "node_modules/axios": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", - "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.4.tgz", + "integrity": "sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } diff --git a/package.json b/package.json index 68776ee..f3f5032 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.3", - "axios": "^1.6.3", + "axios": "^1.6.4", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.303.0", From 84bf3a40690bd7f98037d28694afb8f883debe03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:16:47 +0000 Subject: [PATCH 181/315] build(devDep): bump postcss from 8.4.32 to 8.4.33 Bumps [postcss](https://github.com/postcss/postcss) from 8.4.32 to 8.4.33. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.32...8.4.33) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6107d8b..8c011c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9513,9 +9513,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "funding": [ { "type": "opencollective", From 3dec90b05dc99e7d7d65f393409b10b6b279d1e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:19:05 +0000 Subject: [PATCH 182/315] build(deps): bump lucide-react from 0.303.0 to 0.305.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.303.0 to 0.305.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.305.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c011c1..14b1cf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "axios": "^1.6.4", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.303.0", + "lucide-react": "^0.305.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", @@ -5775,9 +5775,9 @@ } }, "node_modules/lucide-react": { - "version": "0.303.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.303.0.tgz", - "integrity": "sha512-B0B9T3dLEFBYPCUlnUS1mvAhW1craSbF9HO+JfBjAtpFUJ7gMIqmEwNSclikY3RiN2OnCkj/V1ReAQpaHae8Bg==", + "version": "0.305.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.305.0.tgz", + "integrity": "sha512-frSsvuReQ7JvOhmRFd+qkMpnL20nVPO+A3NuR+vLh8MXPZ8hHVSYKtgl2A2yV9PhzCtCGgwCmegFdZs9qVCXzQ==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index f3f5032..367b00a 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "axios": "^1.6.4", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.303.0", + "lucide-react": "^0.305.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", From 5b5575ef29ac97d2f656d2b14d11b5c712a49f39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:29:09 +0000 Subject: [PATCH 183/315] build(devDep): bump tailwindcss from 3.4.0 to 3.4.1 Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.1/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.0...v3.4.1) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 14b1cf5..52528ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "postcss": "^8", "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.4.0", + "tailwindcss": "^3.4.1", "typescript": "^5" } }, @@ -10778,9 +10778,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", - "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", diff --git a/package.json b/package.json index 367b00a..b827528 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "postcss": "^8", "semantic-release": "^22.0.12", "semantic-release-export-data": "^1.0.1", - "tailwindcss": "^3.4.0", + "tailwindcss": "^3.4.1", "typescript": "^5" } } From 8db8ac5d258764b20b732cfe2ce6c2997f5db8db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:31:17 +0000 Subject: [PATCH 184/315] build(devDep): bump @types/react from 18.2.46 to 18.2.47 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.46 to 18.2.47. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52528ef..8ee9220 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2013,9 +2013,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.46", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz", - "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==", + "version": "18.2.47", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", + "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From 09dda6211c9b82d55966b99ddac212f222ffc048 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:34:14 +0000 Subject: [PATCH 185/315] build(deps): bump axios from 1.6.4 to 1.6.5 Bumps [axios](https://github.com/axios/axios) from 1.6.4 to 1.6.5. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.6.4...v1.6.5) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ee9220..1a694dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.3", - "axios": "^1.6.4", + "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.305.0", @@ -2543,9 +2543,9 @@ } }, "node_modules/axios": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.4.tgz", - "integrity": "sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dependencies": { "follow-redirects": "^1.15.4", "form-data": "^4.0.0", diff --git a/package.json b/package.json index b827528..a037653 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.1", "@tanstack/react-table": "^8.11.3", - "axios": "^1.6.4", + "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.305.0", From c3bd70a95935bb3cc7d3d14dc07b0497a3047788 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:37:16 +0000 Subject: [PATCH 186/315] build(deps): bump @tanstack/react-query-devtools from 5.17.1 to 5.17.9 Bumps [@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools) from 5.17.1 to 5.17.9. - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.17.9/packages/react-query-devtools) --- updated-dependencies: - dependency-name: "@tanstack/react-query-devtools" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 32 ++++++++++++++++---------------- package.json | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a694dc..4ed7345 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", - "@tanstack/react-query-devtools": "^5.17.1", + "@tanstack/react-query-devtools": "^5.17.9", "@tanstack/react-table": "^8.11.3", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", @@ -1906,29 +1906,29 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.1.tgz", - "integrity": "sha512-kUXozQmU7NBtzX5dM6qfFNZN+YK/9Ct37hnG/ogdgI4mExIx7VH/qRepsPhKfNrJz2w81/JykmM3Uug6sVpUSw==", + "version": "5.17.9", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.9.tgz", + "integrity": "sha512-8xcvpWIPaRMDNLMvG9ugcUJMgFK316ZsqkPPbsI+TMZsb10N9jk0B6XgPk4/kgWC2ziHyWR7n7wUhxmD0pChQw==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/query-devtools": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.17.1.tgz", - "integrity": "sha512-gNdt6PYzYlyjtSAoO8Jt9GIFq5VSLLDV2qq0TCi1t/PGnpAIlIHqNZGYkQTPsy0FyGUTX3pCq4bd7v5z/wzf3A==", + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.17.7.tgz", + "integrity": "sha512-TfgvOqza5K7Sk6slxqkRIvXlEJoUoPSsGGwpuYSrpqgSwLSSvPPpZhq7hv7hcY5IvRoTNGoq6+MT01C/jILqoQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.1.tgz", - "integrity": "sha512-4JYgX0kU+pvwVQi5eRiHGvBK7WnahEl6lmaxd32ZVSKmByAxLgaewoxBR03cdDNse8lUD2zGOe0sx3M/EGRlmA==", + "version": "5.17.9", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.9.tgz", + "integrity": "sha512-M5E9gwUq1Stby/pdlYjBlL24euIVuGbWKIFCbtnQxSdXI4PgzjTSdXdV3QE6fc+itF+TUvX/JPTKIwq8yuBXcg==", "dependencies": { - "@tanstack/query-core": "5.17.1" + "@tanstack/query-core": "5.17.9" }, "funding": { "type": "github", @@ -1939,18 +1939,18 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.1.tgz", - "integrity": "sha512-QWHqdEN2TJpj76r0yzdOJEopmPvdAHOJHAKXaygubRASqCqfcWGkOHGD9pqqHOfTu5eQdV1Csx97EuSjnHMKcA==", + "version": "5.17.9", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.9.tgz", + "integrity": "sha512-1viWP/jlO0LaeCdtTFqtF1k2RfM3KVpvwVffWv+PMNkS2u4s8YGUM17r3p82udbF9BY1mE7aHqQ3MM1errF5lQ==", "dependencies": { - "@tanstack/query-devtools": "5.17.1" + "@tanstack/query-devtools": "5.17.7" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.17.1", + "@tanstack/react-query": "^5.17.9", "react": "^18.0.0" } }, diff --git a/package.json b/package.json index a037653..6411eff 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", - "@tanstack/react-query-devtools": "^5.17.1", + "@tanstack/react-query-devtools": "^5.17.9", "@tanstack/react-table": "^8.11.3", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", From 459800b7b1dcec192f9f10e6f42b56a1af07a2fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:40:20 +0000 Subject: [PATCH 187/315] build(devDep): bump @types/node from 20.10.6 to 20.10.7 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.6 to 20.10.7. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ed7345..8b386da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1992,9 +1992,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", - "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", + "version": "20.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz", + "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From fda83bdbb70b8a752443b9e237ef75ea20bf3582 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:43:29 +0000 Subject: [PATCH 188/315] build(deps): bump lucide-react from 0.305.0 to 0.307.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.305.0 to 0.307.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.307.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8b386da..f524319 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.305.0", + "lucide-react": "^0.307.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", @@ -5775,9 +5775,9 @@ } }, "node_modules/lucide-react": { - "version": "0.305.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.305.0.tgz", - "integrity": "sha512-frSsvuReQ7JvOhmRFd+qkMpnL20nVPO+A3NuR+vLh8MXPZ8hHVSYKtgl2A2yV9PhzCtCGgwCmegFdZs9qVCXzQ==", + "version": "0.307.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.307.0.tgz", + "integrity": "sha512-+vZ+vUiWPZTMnLHURg4aoIaz6NHOWXVVcVd8iLROu1k4LbyjcnHIKmbjXHCmulz7XAYLWRVXzhJJgIr+Aq3vOg==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index 6411eff..5e73e61 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.305.0", + "lucide-react": "^0.307.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", From 9893209bc36e5fc2f6dfee66ec2a64deb97c09e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 15:19:19 +0000 Subject: [PATCH 189/315] build(deps): bump lucide-react from 0.307.0 to 0.308.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.307.0 to 0.308.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.308.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f524319..00cf738 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.307.0", + "lucide-react": "^0.308.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", @@ -5775,9 +5775,9 @@ } }, "node_modules/lucide-react": { - "version": "0.307.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.307.0.tgz", - "integrity": "sha512-+vZ+vUiWPZTMnLHURg4aoIaz6NHOWXVVcVd8iLROu1k4LbyjcnHIKmbjXHCmulz7XAYLWRVXzhJJgIr+Aq3vOg==", + "version": "0.308.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.308.0.tgz", + "integrity": "sha512-QC3S4Qi6s5y/w4bhS7sauDG29MsPwV0C5g9/mKkY7/gm3tPpg9tyRQG33g597Q5M3vmE0APcPuOjyQKsF8gnIg==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index 5e73e61..9c9fcbe 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.307.0", + "lucide-react": "^0.308.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", From cf7e5e5801176cf061b34f8bf3fb26adf92a4016 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 15:36:37 +0000 Subject: [PATCH 190/315] build(deps): bump lucide-react from 0.308.0 to 0.309.0 Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.308.0 to 0.309.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.309.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00cf738..81fa552 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.308.0", + "lucide-react": "^0.309.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", @@ -5775,9 +5775,9 @@ } }, "node_modules/lucide-react": { - "version": "0.308.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.308.0.tgz", - "integrity": "sha512-QC3S4Qi6s5y/w4bhS7sauDG29MsPwV0C5g9/mKkY7/gm3tPpg9tyRQG33g597Q5M3vmE0APcPuOjyQKsF8gnIg==", + "version": "0.309.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.309.0.tgz", + "integrity": "sha512-zNVPczuwFrCfksZH3zbd1UDE6/WYhYAdbe2k7CImVyPAkXLgIwbs6eXQ4loigqDnUFjyFYCI5jZ1y10Kqal0dg==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index 9c9fcbe..cef0d8c 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", - "lucide-react": "^0.308.0", + "lucide-react": "^0.309.0", "moment": "^2.30.1", "next": "14.0.4", "next-themes": "^0.2.1", From aa40decf3538255e76902f2bf784504f80026023 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 15:38:43 +0000 Subject: [PATCH 191/315] build(devDep): bump @types/node from 20.10.7 to 20.10.8 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.7 to 20.10.8. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 81fa552..32961a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1992,9 +1992,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz", - "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==", + "version": "20.10.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", + "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 67e281aa92e2e4ea6e67f9f8010707ddf8afe7f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 16:00:50 +0000 Subject: [PATCH 192/315] build(devDep): bump @types/node from 20.10.8 to 20.11.0 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.8 to 20.11.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 32961a8..95a4c17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1992,9 +1992,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", - "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", + "version": "20.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", + "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 81497ed565a5fe75914a5eb260f8f1f4526192df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 15:18:32 +0000 Subject: [PATCH 193/315] build(deps): bump @tanstack/react-table from 8.11.3 to 8.11.6 Bumps [@tanstack/react-table](https://github.com/tanstack/table) from 8.11.3 to 8.11.6. - [Release notes](https://github.com/tanstack/table/releases) - [Commits](https://github.com/tanstack/table/compare/v8.11.3...v8.11.6) --- updated-dependencies: - dependency-name: "@tanstack/react-table" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 95a4c17..2af157d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.9", - "@tanstack/react-table": "^8.11.3", + "@tanstack/react-table": "^8.11.6", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1955,11 +1955,11 @@ } }, "node_modules/@tanstack/react-table": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.11.3.tgz", - "integrity": "sha512-Gwwm7po1MaObBguw69L+UiACkaj+eOtThQEArj/3fmUwMPiWaJcXvNG2X5Te5z2hg0HMx8h0T0Q7p5YmQlTUfw==", + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.11.6.tgz", + "integrity": "sha512-i0heTVZtuHF9VPMwcYoZ21hbzGDmLjxHYemDMvbGpjk5fUZ8nLF3S8qjVRU79XfPW8KK9o7iTU2fGFVQQmxMSQ==", "dependencies": { - "@tanstack/table-core": "8.11.3" + "@tanstack/table-core": "8.11.6" }, "engines": { "node": ">=12" @@ -1974,9 +1974,9 @@ } }, "node_modules/@tanstack/table-core": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.3.tgz", - "integrity": "sha512-nkcFIL696wTf1QMvhGR7dEg60OIRwEZm1OqFTYYDTRc4JOWspgrsJO3IennsOJ7ptumHWLDjV8e5BjPkZcSZAQ==", + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.6.tgz", + "integrity": "sha512-69WEY1PaZROaGYUrseng4/4sMYnRGhDe1vM6888CnWekGz/wuCnvqwOoOuKGYivnaiI4BVmZq4WKWhvahyj3/g==", "engines": { "node": ">=12" }, diff --git a/package.json b/package.json index cef0d8c..ad55bc6 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.9", - "@tanstack/react-table": "^8.11.3", + "@tanstack/react-table": "^8.11.6", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", From fb69b814f7713fd4f4dcb155a86c5b7eb455b328 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:25:54 -0700 Subject: [PATCH 194/315] chore(components:error): add `Error` component ## what - add `Error` component ## how - takes in two props - status: http status code - message (optional): message to display under the status code ## why - this will be displayed in a page if there's an error returned when fetching the api server - using `nextjs` app router `error.tsx` doesn't help - ex: if there's an 404 error, the `error` page rendered, not `not-found.tsx` - ex: if there's an 400 errror, the `error` page is rendered but the error is unhandled ## where ## usage --- src/components/error.tsx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/components/error.tsx diff --git a/src/components/error.tsx b/src/components/error.tsx new file mode 100644 index 0000000..e0e66fc --- /dev/null +++ b/src/components/error.tsx @@ -0,0 +1,18 @@ +type Props = { + status: number; + message?: string; +} + +const Error = ({status, message}: Props) => { + return ( +

+ ) +} + +export default Error + From 09fc44a582dd9d62cc192924e67f0774e183b819 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:34:31 -0700 Subject: [PATCH 195/315] refactor: move schema validation for endpoint `/api/problems/[problemNum]` to it's own file ## what - move schema validation for endpoint `/api/problems/[problemNum]` to it's own file - add schema in `/api/problems/[problemNum]` via import ## how ## why - the schema validation will also be used in the client side - used in `/problems[problemNum]` ## where - ./src/app/api/problems/[problemNum]/route.ts - ./src/schema/index.ts ## usage --- src/app/api/problems/[problemNum]/route.ts | 10 ++-------- src/schema/index.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 src/schema/index.ts diff --git a/src/app/api/problems/[problemNum]/route.ts b/src/app/api/problems/[problemNum]/route.ts index ebd4d4b..48582f4 100644 --- a/src/app/api/problems/[problemNum]/route.ts +++ b/src/app/api/problems/[problemNum]/route.ts @@ -3,19 +3,13 @@ import { z } from "zod"; import { uhuntProblemNumUrl } from "@/utils/constants"; import { Problem, ProblemStatus } from "@/types"; +import { problemNumSchema as schema } from "@/schema"; type getParamsType = { - params: { - problemNum: string; - }; + params: z.infer; }; export const GET = async (_request: Request, { params }: getParamsType) => { - const schema = z.object({ - problemNum: z.coerce - .number({ invalid_type_error: "Must be a number" }) - .min(1, "Must be a number greater than 0"), - }); const schemaResponse = await schema.safeParseAsync(params); if (!schemaResponse.success) { diff --git a/src/schema/index.ts b/src/schema/index.ts new file mode 100644 index 0000000..1113fbc --- /dev/null +++ b/src/schema/index.ts @@ -0,0 +1,10 @@ +import { z } from "zod"; + +/** + * Schema validation for endpoint `/api/problems/[problemNum]` + */ +export const problemNumSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}); From 75b7595d294ce602f5bf358841412f9d439a69b1 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:38:50 -0700 Subject: [PATCH 196/315] chore(hooks): add react-query hook to fetch stats of problem number ## what - add react-query hook to fetch stats of problem number ## how - fetch from api endpoint `/api/problems/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 4502133..02649b1 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -12,6 +12,10 @@ export enum queryKey { * Reacy query key for fetching all problems */ allProblems = "all-problems", + /** + * React query key for fetching a problem num + */ + problemNum = "problem-num" } /** @@ -44,3 +48,12 @@ export const useFetchProblems = () => { }); }; +/** + * Fetch stats of a problem using problem number + */ +export const useFetchProblemNum = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.problemNum], + queryFn: async () => await axios.get(`/api/problems/${problemNum}`), + }) +} From 7a5b08c6abea14fc97b59ce0841e46f0b90e7a50 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:40:47 -0700 Subject: [PATCH 197/315] chore(api:problemNum): return status 404 if problem number is not found ## what - return status 404 if problem number is not found ## how ## why - this will ensure a problem number not found will be handled ## where - ./src/app/api/problems/[problemNum]/route.ts ## usage --- src/app/api/problems/[problemNum]/route.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/api/problems/[problemNum]/route.ts b/src/app/api/problems/[problemNum]/route.ts index 48582f4..fc3ce22 100644 --- a/src/app/api/problems/[problemNum]/route.ts +++ b/src/app/api/problems/[problemNum]/route.ts @@ -28,7 +28,17 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const response = await fetch(url); const data: Problem = await response.json(); - data.status = ProblemStatus[data.status as unknown as number] + + if(Object.entries(data).length === 0) { + const message = { + message: `Problem number ${problemNum} not found` + } + return NextResponse.json(message, { + status: 404, + }); + } + + data.status = ProblemStatus[data.status] return Response.json(data); }; From 935e4e2128e97e8cdd74110d7a757fc389bf1776 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:48:28 -0700 Subject: [PATCH 198/315] refactor(utils:constants): add type `number` to uhunt urls ## what - add type `number` to uhunt urls ## how ## why - it's a little tedious to convert number to a string when using the function ## where - ./src/utils/constants.ts ## usage --- src/utils/constants.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 618f01b..041e5e1 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -15,9 +15,9 @@ export const viewProblemUrl = /** * URL for viewing the details of the problem PDF using problem ID - * @param {String} pid problem ID + * @param {String | Number} pid problem ID */ -export const uhuntViewProblemUrl = (pid: string) => `${viewProblemUrl}${pid}`; +export const uhuntViewProblemUrl = (pid: string | number) => `${viewProblemUrl}${pid}`; /** * URL for fetching all problems on uva-uhunt @@ -26,25 +26,25 @@ export const uhuntAllProblemsUrl = () => 'https://uhunt.onlinejudge.org/api/p'; /** * URL for getting Problem data using Problem ID - * @param {String} pid - problem ID + * @param {String | Number} pid - problem ID */ -export const uhuntProblemIdUrl = (pid: string) => +export const uhuntProblemIdUrl = (pid: string | number) => `${uhuntBaseApiUrl}/p/id/${pid}`; /** * URL for getting Problem data using Problem number - * @param {String} problemNumber - problem number + * @param {String | Number} problemNumber - problem number */ -export const uhuntProblemNumUrl = (problemNumber: string) => +export const uhuntProblemNumUrl = (problemNumber: string | number) => `${uhuntBaseApiUrl}/p/num/${problemNumber}`; /** * URL for getting Problem ranklist using Problem ID, starting rank and number of ranks to return - * @param {String} pid - Problem ID + * @param {String | Number} pid - Problem ID * @param {Number} [start=1] - rank to start from. Default is 1 * @param {Number} [count=100] - rank to go up to. Default is 100 */ -export const uhuntProblemRankUrl = (pid: string, start = 1, count = 100) => +export const uhuntProblemRankUrl = (pid: string | number, start = 1, count = 100) => `${uhuntBaseApiUrl}/p/rank/${pid}/${start}/${count}`; /** @@ -53,13 +53,13 @@ export const uhuntProblemRankUrl = (pid: string, start = 1, count = 100) => * represented in 20 array elements, each element represents 12 months. * The submissionTime represents at what time should look back from, * could be start from 5 years ago or now. - * @param {String} pid - problem ID + * @param {String | Number} pid - problem ID * @param {Number} [submissionTime=moment().unix()] - Unix timestamp. Default is current unix timestamp * @param {Number} [back=20] - Number of years to look back. Default is 20 * @param {Number} [jump=12] - Number of months each array element will represent. Default is 12 */ export const uhuntSubmissionCountUrl = ( - pid: string, + pid: string | number, submissionTime = moment().unix(), back = 20, jump = 12, @@ -74,16 +74,16 @@ export const uhuntUsername2UidUrl = (username: string) => /** * URL for getting Submission list of a problem using Problem ID - * @param {String} pid - problem ID + * @param {String | Number} pid - problem ID */ -export const uhuntProblemSubmissionListUrl = (pid: string) => +export const uhuntProblemSubmissionListUrl = (pid: string | number) => `${uhuntBaseApiUrl}/p/subs/${pid}/0/${moment().unix()}`; /** * Get User submissions using UserID - * @param {Number} uid User ID + * @param {String | Number} uid User ID */ -export const uhuntUserSubmissionsUrl = (uid: string) => +export const uhuntUserSubmissionsUrl = (uid: string | number) => `${uhuntBaseApiUrl}/subs-user/${uid}`; /** From afe075219fcb5d52a165228ef2d7210c91bf8aa9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:55:45 -0700 Subject: [PATCH 199/315] feat(page:problemNum): fetch stats for `/problems/[problemNum]` page ## what - fetch stats for `/problems/[problemNum]` page ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 65 ++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/app/problems/[problemNum]/page.tsx diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx new file mode 100644 index 0000000..c3cabc7 --- /dev/null +++ b/src/app/problems/[problemNum]/page.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { useFetchProblemNum } from "@/hooks"; +import { problemNumSchema } from "@/schema"; +import { AxiosError } from "axios"; +import { z } from "zod"; +import Error from "@/components/error"; + +type problemPageProps = { + params: z.infer; +}; + +const ProblemPage = ({ params }: problemPageProps) => { + const { + isLoading: problemNumIsLoading, + isSuccess: problemNumIsSuccess, + isError: problemNumIsError, + data: problemNumData, + error: problemNumError, + } = useFetchProblemNum(params.problemNum); + + if (problemNumIsLoading) { + return ( +
+

Loading: {params.problemNum}

+
+ ); + } + + if (problemNumIsError) { + type ErrorMessage = { + message: string; + }; + + if ( + (problemNumError as AxiosError).response?.status === 400 + ) { + return ( + ).response?.data.message + } + /> + ); + } else if ( + (problemNumError as AxiosError).response?.status === 404 + ) { + return ; + } + } + + if (problemNumIsSuccess) { + console.log(problemNumData); + } + + console.log("problem page: ", params.problemNum); + return ( +
+

Problem page: {params.problemNum}

+
+ ); +}; + +export default ProblemPage; From 862bcc89d7fcadec7556e000199f12d38852f2e7 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 19:50:56 -0700 Subject: [PATCH 200/315] build(shadcn): add component `Card` ## what - add component `Card` ## how - run command npx shadcn-ui@latest add card ## why ## where - ./src/components/ui/card.tsx ## usage --- src/components/ui/card.tsx | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/components/ui/card.tsx diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..afa13ec --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } From ba863ba2edd8064ad3efa81698ee57b3779df55b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 4 Jan 2024 21:23:48 -0700 Subject: [PATCH 201/315] chore(page:problemNum): add structure and placeholder components ## what - add structure and placeholder components ## how - divide into to big sections - charts - uses grid for display - 2 columns on md to larger screens - 1 column on smaller screens - table - uses flex for display - will be in flex column direction ## why - this will show how the components are laid out ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 48 ++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index c3cabc7..7f12763 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -1,10 +1,37 @@ "use client"; -import { useFetchProblemNum } from "@/hooks"; -import { problemNumSchema } from "@/schema"; import { AxiosError } from "axios"; import { z } from "zod"; + import Error from "@/components/error"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { useFetchProblemNum } from "@/hooks"; +import { problemNumSchema } from "@/schema"; + + +type ChartCard = { + title: string; + chart: React.ReactNode; +} +const ChartCard = ({title, chart}: ChartCard) => { + return ( + + + {title} + + + {chart} + + + ); +} type problemPageProps = { params: z.infer; @@ -57,7 +84,22 @@ const ProblemPage = ({ params }: problemPageProps) => { console.log("problem page: ", params.problemNum); return (
-

Problem page: {params.problemNum}

+

Problem page: {params.problemNum}

+
+
+ +
+
+ +
+
+ +
+
+
+
ranklist
+
submissions
+
); }; From 91815dbabdbb0c2bea784776746d392af199caf3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 11:06:38 -0700 Subject: [PATCH 202/315] chore(types): add object `ProblemVerdictMap` ## what - add object `ProblemVerdictMap` ## how ## why - will be used to convert verdict keys in `Problem` type into a readable string ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index a835193..74a3351 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -4,6 +4,57 @@ export const ProblemStatus: Record = { 2: "Special judge", }; +export const ProblemVerdictMap: Record = { + /** + * Number of Accepted + */ + ac: "Accepted", + /** + * Number of Presentation Error + */ + pe: "Presentation error", + /** + * Number of Wrong Answer + */ + wa: "Wrong answer", + /** + * Number of Time Limit Exceeded + */ + tle: "Time limit exceeded", + /** + * Number of Memory Limit Exceeded + */ + mle: "Memory limit exceeded", + /** + * Number of Compilation Error + */ + ce: "Compile error", + /** + * Number of Runtime Error + */ + re: "Runtime error", + /** + * Number of Output Limit Exceeded + */ + ole: "Output limit exceeded", + /** + * Number of Submission Error + */ + // sube: "Submission Error", + /** + * Number of Can't be Judged + */ + // noj: "Can't be judged", + /** + * Number of In Queue + */ + // inq: number, + /** + * Number of Restricted Function + */ + // rf: "Restricted function", +} + /** * Data structure returned when querying from url `https://uhunt.onlinejudge.org/api/p/num/:num` * From 813def746d408509bd39a50f350dc918855b96b7 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 11:10:04 -0700 Subject: [PATCH 203/315] build(npm): add package `recharts` ## what - add package `recharts` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 530 +++++++++++++++++++++++++--------------------- package.json | 1 + 2 files changed, 294 insertions(+), 237 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2af157d..873e06e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", + "recharts": "^2.10.3", "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" @@ -1985,6 +1986,60 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz", + "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -3381,6 +3436,116 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "devOptional": true }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -3416,6 +3581,11 @@ } } }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -3524,6 +3694,14 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -4157,6 +4335,11 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -4198,6 +4381,14 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -5009,6 +5200,14 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, "node_modules/into-stream": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", @@ -5706,8 +5905,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", @@ -6319,17 +6517,14 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6346,7 +6541,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6358,13 +6552,11 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6381,7 +6573,6 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6396,13 +6587,11 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6418,7 +6607,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6430,7 +6618,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6443,7 +6630,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6456,7 +6642,6 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6470,7 +6655,6 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6517,7 +6701,6 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6536,7 +6719,6 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6548,7 +6730,6 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6560,7 +6741,6 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6579,7 +6759,6 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6595,7 +6774,6 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6610,7 +6788,6 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6625,7 +6802,6 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6634,7 +6810,6 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6643,7 +6818,6 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6661,7 +6835,6 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6673,7 +6846,6 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6685,7 +6857,6 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6701,17 +6872,14 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6723,7 +6891,6 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", - "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6732,7 +6899,6 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6746,7 +6912,6 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6759,7 +6924,6 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6768,7 +6932,6 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6781,7 +6944,6 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6790,7 +6952,6 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6802,7 +6963,6 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6815,7 +6975,6 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6824,7 +6983,6 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6839,19 +6997,16 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6864,13 +7019,11 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -6890,7 +7043,6 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6905,7 +7057,6 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6914,7 +7065,6 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6923,7 +7073,6 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", - "dev": true, "funding": [ { "type": "github", @@ -6947,7 +7096,6 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6956,7 +7104,6 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6979,7 +7126,6 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6991,7 +7137,6 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7000,7 +7145,6 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", - "dev": true, "funding": [ { "type": "github", @@ -7015,7 +7159,6 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7027,7 +7170,6 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7036,7 +7178,6 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7049,7 +7190,6 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7064,7 +7204,6 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7073,7 +7212,6 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7082,7 +7220,6 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7094,13 +7231,11 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", - "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -7109,7 +7244,6 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7122,19 +7256,16 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7148,7 +7279,6 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7163,7 +7293,6 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7175,7 +7304,6 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7192,13 +7320,11 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7210,13 +7336,11 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", - "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7225,29 +7349,24 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7256,13 +7375,11 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7271,7 +7388,6 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7280,13 +7396,11 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7295,7 +7409,6 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7311,7 +7424,6 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7323,13 +7435,11 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7348,7 +7458,6 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7370,13 +7479,11 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7388,13 +7495,11 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7406,16 +7511,13 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7425,7 +7527,6 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -7445,7 +7546,6 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7457,7 +7557,6 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7466,7 +7565,6 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7475,7 +7573,6 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7484,7 +7581,6 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7502,13 +7598,11 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7517,7 +7611,6 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7529,7 +7622,6 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7541,7 +7633,6 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7550,19 +7641,16 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7580,7 +7668,6 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7589,7 +7676,6 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7598,7 +7684,6 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", - "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7607,19 +7692,16 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7632,7 +7714,6 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7652,7 +7733,6 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7674,7 +7754,6 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7686,7 +7765,6 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7699,7 +7777,6 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7712,7 +7789,6 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7727,7 +7803,6 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7746,7 +7821,6 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7758,7 +7832,6 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7771,7 +7844,6 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7787,7 +7859,6 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7796,7 +7867,6 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7818,7 +7888,6 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7833,7 +7902,6 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7842,7 +7910,6 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7854,7 +7921,6 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7866,7 +7932,6 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7883,7 +7948,6 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7895,7 +7959,6 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7907,7 +7970,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7917,7 +7979,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7929,7 +7990,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7941,7 +8001,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7953,7 +8012,6 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7965,7 +8023,6 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7977,7 +8034,6 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7990,7 +8046,6 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8002,7 +8057,6 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -8014,13 +8068,11 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8029,7 +8081,6 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8038,7 +8089,6 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8062,7 +8112,6 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8077,7 +8126,6 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8092,7 +8140,6 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8101,7 +8148,6 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8113,7 +8159,6 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8125,7 +8170,6 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8134,7 +8178,6 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8149,7 +8192,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8161,7 +8203,6 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8176,7 +8217,6 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8189,7 +8229,6 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8207,7 +8246,6 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -8216,7 +8254,6 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8231,7 +8268,6 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8246,7 +8282,6 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8278,7 +8313,6 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8292,7 +8326,6 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8301,7 +8334,6 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", - "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8317,7 +8349,6 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8330,7 +8361,6 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8339,7 +8369,6 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8348,7 +8377,6 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8357,7 +8385,6 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8366,13 +8393,11 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8385,7 +8410,6 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8397,7 +8421,6 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", - "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8405,7 +8428,6 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8417,7 +8439,6 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8426,7 +8447,6 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8441,7 +8461,6 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8454,7 +8473,6 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8470,7 +8488,6 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8479,7 +8496,6 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -8499,14 +8515,11 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "inBundle": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8521,7 +8534,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8533,13 +8545,11 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8551,7 +8561,6 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8560,7 +8569,6 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8572,7 +8580,6 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8587,7 +8594,6 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8597,7 +8603,6 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8611,7 +8616,6 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8621,13 +8625,11 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8637,13 +8639,11 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", - "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8655,7 +8655,6 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8664,7 +8663,6 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8679,7 +8677,6 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8693,7 +8690,6 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8706,7 +8702,6 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8718,7 +8713,6 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8730,7 +8724,6 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8747,7 +8740,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8759,7 +8751,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8771,7 +8762,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8780,19 +8770,16 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8801,7 +8788,6 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8815,7 +8801,6 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8827,7 +8812,6 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8839,13 +8823,11 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", - "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8855,7 +8837,6 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8867,13 +8848,11 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8882,7 +8861,6 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8897,7 +8875,6 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8906,7 +8883,6 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8915,7 +8891,6 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8933,7 +8908,6 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8950,7 +8924,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8962,7 +8935,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8974,13 +8946,11 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8997,7 +8967,6 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9012,7 +8981,6 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9025,7 +8993,6 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, @@ -9655,7 +9622,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -9751,8 +9717,12 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "node_modules/react-remove-scroll": { "version": "2.5.5", @@ -9799,6 +9769,20 @@ } } }, + "node_modules/react-smooth": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz", + "integrity": "sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==", + "dependencies": { + "fast-equals": "^5.0.0", + "react-transition-group": "2.9.0" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", @@ -9821,6 +9805,21 @@ } } }, + "node_modules/react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "dependencies": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0", + "react-dom": ">=15.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -9948,6 +9947,37 @@ "node": ">=8.10.0" } }, + "node_modules/recharts": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.10.3.tgz", + "integrity": "sha512-G4J96fKTZdfFQd6aQnZjo2nVNdXhp+uuLb00+cBTGLo85pChvm1+E67K3wBOHDE/77spcYb2Cy9gYWVqiZvQCg==", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.19", + "react-is": "^16.10.2", + "react-smooth": "^2.0.5", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, "node_modules/redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -10922,6 +10952,11 @@ "xtend": "~4.0.1" } }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11285,6 +11320,27 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/victory-vendor": { + "version": "36.7.0", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.7.0.tgz", + "integrity": "sha512-nqYuTkLSdTTeACyXcCLbL7rl0y6jpzLPtTNGOtSnajdR+xxMxBdjMxDjfNJNlhR+ZU8vbXz+QejntcbY7h9/ZA==", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", diff --git a/package.json b/package.json index ad55bc6..4915e60 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", + "recharts": "^2.10.3", "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" From 8318b936b7303ececc168a4ee9989f4f2caa2c9a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 18:23:52 -0700 Subject: [PATCH 204/315] chore(tailwind): add `tremor` tailwindcss config ## what - add `tremor` tailwindcss config - brand colors - light mode - dark mode - background colors - light mode - dark mode - border colors - light mode - dark mode - content colors - light mode - dark mode - box shadow - light - dark - border radius - font size ## how - obtained from - https://www.tremor.so/docs/getting-started/installation ## why - some of the tailwindcss styles from `tremor.so` will be used in this app - using chart styles - bar chart - line chart - area chart - tooltip styles ## where - ./tailwind.config.ts ## usage --- tailwind.config.ts | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index a9d9eae..2841e67 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,4 +1,5 @@ import type { Config } from 'tailwindcss' +import colors from 'tailwindcss/colors' import { fontFamily } from "tailwindcss/defaultTheme" const config: Config = { @@ -52,11 +53,83 @@ const config: Config = { DEFAULT: "hsl(var(--card))", foreground: "hsl(var(--card-foreground))", }, + // tremor.so tailwindcss config + tremor: { + brand: { + faint: colors.blue[50], + muted: colors.blue[200], + subtle: colors.blue[400], + DEFAULT: colors.blue[500], + emphasis: colors.blue[700], + inverted: colors.white, + }, + background: { + muted: colors.gray[50], + subtle: colors.gray[100], + DEFAULT: colors.white, + emphasis: colors.gray[700], + }, + border: { + DEFAULT: colors.gray[200], + }, + ring: { + DEFAULT: colors.gray[200], + }, + content: { + subtle: colors.gray[400], + DEFAULT: colors.gray[500], + emphasis: colors.gray[700], + strong: colors.gray[900], + inverted: colors.white, + }, + }, + "dark-tremor": { + brand: { + faint: "#0B1229", + muted: colors.blue[950], + subtle: colors.blue[800], + DEFAULT: colors.blue[500], + emphasis: colors.blue[400], + inverted: colors.blue[950], + }, + background: { + muted: "#131A2B", + subtle: colors.gray[800], + DEFAULT: colors.gray[900], + emphasis: colors.gray[300], + }, + border: { + DEFAULT: colors.gray[700], + }, + ring: { + DEFAULT: colors.gray[800], + }, + content: { + subtle: colors.gray[600], + DEFAULT: colors.gray[500], + emphasis: colors.gray[200], + strong: colors.gray[50], + inverted: colors.gray[950], + }, + }, + }, + boxShadow: { + // light + "tremor-input": "0 1px 2px 0 rgb(0 0 0 / 0.05)", + "tremor-card": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", + "tremor-dropdown": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)", + // dark + "dark-tremor-input": "0 1px 2px 0 rgb(0 0 0 / 0.05)", + "dark-tremor-card": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", + "dark-tremor-dropdown": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)", }, borderRadius: { lg: "var(--radius)", md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)", + "tremor-small": "0.375rem", + "tremor-default": "0.5rem", + "tremor-full": "9999px", }, keyframes: { "accordion-down": { @@ -80,6 +153,12 @@ const config: Config = { fontFamily: { sans: ["var(--font-sans)", ...fontFamily.sans], }, + fontSize: { + "tremor-label": ["0.75rem", {}], + "tremor-default": ["0.875rem", { lineHeight: "1.25rem" }], + "tremor-title": ["1.125rem", { lineHeight: "1.75rem" }], + "tremor-metric": ["1.875rem", { lineHeight: "2.25rem" }], + } }, }, plugins: [require("tailwindcss-animate")], From 67cb4a4d65465fb1a6dc4187fcfe1bb3531d3cc3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 6 Jan 2024 18:32:33 -0700 Subject: [PATCH 205/315] chore(utils:processing): add function to generate data for `rechart` bar chart ## what - add function to generate data for `rechart` bar chart ## how ## why - this will be used to generate the data needed for `recharts` bar chart to render ## where - ./src/utils/dataProcessing.ts ## usage --- src/utils/dataProcessing.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/utils/dataProcessing.ts diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts new file mode 100644 index 0000000..45b34d0 --- /dev/null +++ b/src/utils/dataProcessing.ts @@ -0,0 +1,36 @@ +import { Problem, ProblemVerdictColors, ProblemVerdictMap } from "@/types"; + +export type processedProblemVerdictBarChartType = { + /** + * Name of the bar in the bar chart. + * usually the verdict acronyms + */ + name: string; + /** + * The value of the verdict + */ + verdict: number; + /** + * Tooltip title to display. + * Usually would be the full string of a verdict + */ + tooltipTitle: string; + /** + * Color for bar + */ + fill: string; +}; +export const processProblemNumBarChartData = (data: Problem) => { + const processedData:processedProblemVerdictBarChartType[] = [] + + for(const [key, value] of Object.entries(ProblemVerdictMap)) { + processedData.push({ + name: key.toUpperCase(), + verdict: data[key as keyof Problem] as number, + tooltipTitle: value, + fill: ProblemVerdictColors[key], + }) + } + + return processedData +} From f0a96a1effcfedb499bf5ee32de497f5779d7ffd Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 10:42:34 -0700 Subject: [PATCH 206/315] refactor(types): combine multiple instances of `Verdict` into one ## what - combine multiple instances of `Verdict` into one - add type `ProblemVerdictType` - title: string to display in client side. usually for displaying tooltip title - bgColor: tailwindcss background color - fgColor: tailwindcss foreground color - bgHex: hexcode of property `bgColor` - fgHex: hexcode of propetty `fgColor` - apply type `ProblemVerdictType` in object `ProblemVerdictMap` - set their properties - set `Problem.ver` number as key into object `ProblemVerdictMap` - they map to the same key in the object `ProblemVerdictMap - doing this way to prevent duplocate code` - remove `VerdictType` - remove `Verdict` - the keys of this object are applied in object `ProblemVerdictMap` - set property `Submission.verdict` to type `ProblemVerdictType` - apply changes to other files - replace `Verdict` with `ProblemVerdictMap` in api endpoint `/api/poll[pollId]` ## how ## why - this to remove duplicate code - to combine string abbreviation of the verdict into object `ProblemVerdictMap` - to combine verdict ID from `Submission` into object `ProblemVerdictMap` - refactoring these later would be difficult ## where - ./src/app/api/poll/[pollId]/route.ts - ./src/types/index.ts ## usage --- src/app/api/poll/[pollId]/route.ts | 10 +- src/types/index.ts | 195 +++++++++++++++++++++-------- 2 files changed, 152 insertions(+), 53 deletions(-) diff --git a/src/app/api/poll/[pollId]/route.ts b/src/app/api/poll/[pollId]/route.ts index d346249..b78df8a 100644 --- a/src/app/api/poll/[pollId]/route.ts +++ b/src/app/api/poll/[pollId]/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server"; import { z } from "zod"; import axios from "axios"; -import { Language, Problem, Submission, Verdict } from "@/types"; +import { Language, Problem, Submission, ProblemVerdictMap } from "@/types"; import { fetchLiveSubmissionsUrl, uhuntProblemIdUrl } from "@/utils/constants"; type getParamsType = { @@ -38,10 +38,12 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const converted = data .map(async (submission: Submission) => { - submission.msg.verdict = Verdict[submission.msg.ver] || { - fgColor: "", - bgColor: "", + submission.msg.verdict = ProblemVerdictMap[submission.msg.ver] || { + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgColor: "bg-gray-500", title: "- In Queue -", + fgHex: "", + bgHex: "6b7280", }; submission.msg.lan = Language[submission.msg.lan] || "--"; diff --git a/src/types/index.ts b/src/types/index.ts index 74a3351..0c62032 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -4,56 +4,179 @@ export const ProblemStatus: Record = { 2: "Special judge", }; -export const ProblemVerdictMap: Record = { +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Problem verdict data structure + */ +export interface ProblemVerdictType { + /** + * Title to be displayed on the front end + */ + title: string; + /** + * Tailwindcss for background color + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + bgColor: string; + /** + * Tailwindcss for foreground color + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + fgColor: string; + /** + * Hexcode of property `bgColor` + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + bgHex: string; + /** + * Hexcode of property `fgColor` + * Usually used for displaying verdict using shadcn-ui `Badge` component + */ + fgHex: string; +} + +const ProblemVerdictMap: Record = { /** * Number of Accepted */ - ac: "Accepted", + ac: { + title: "Accepted", + bgColor: "bg-[#00AA00]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#00AA00", + fgHex: "", + }, /** * Number of Presentation Error */ - pe: "Presentation error", + pe: { + title: "Presentation error", + bgColor: "bg-[#666600]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#666600", + fgHex: "", + }, /** * Number of Wrong Answer */ - wa: "Wrong answer", + wa: { + title: "Wrong answer", + bgColor: "bg-[#FF0000]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#FF0000", + fgHex: "", + }, /** * Number of Time Limit Exceeded */ - tle: "Time limit exceeded", + tle: { + title: "Time limit exceeded", + bgColor: "bg-[#0000FF]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#0000FF", + fgHex: "", + }, /** * Number of Memory Limit Exceeded */ - mle: "Memory limit exceeded", + mle: { + title: "Memory limit exceeded", + bgColor: "bg-[#0000AA]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#0000AA", + fgHex: "", + }, /** * Number of Compilation Error */ - ce: "Compile error", + ce: { + title: "Compile error", + bgColor: "bg-orange-600", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#EA5A0C", + fgHex: "", + }, /** * Number of Runtime Error */ - re: "Runtime error", + re: { + title: "Runtime error", + bgColor: "bg-[#00AAAA]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#00AAAA", + fgHex: "", + }, /** * Number of Output Limit Exceeded */ - ole: "Output limit exceeded", + ole: { + title: "Output limit exceeded", + bgColor: "bg-[#000066]", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "#000066", + fgHex: "", + }, /** * Number of Submission Error */ - // sube: "Submission Error", + sube: { + title: "Submission Error", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + }, /** * Number of Can't be Judged */ - // noj: "Can't be judged", + noj: { + title: "Can't be judged", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + }, /** * Number of In Queue */ - // inq: number, + inq: { + title: "- In Queue -", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + }, /** * Number of Restricted Function */ - // rf: "Restricted function", + rf: { + title: "Restricted function", + bgColor: "bg-gray-500", + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgHex: "6b7280", + fgHex: "", + } } +// adding keys from `Submission.ver` into object `ProblemVerdictMap` +// will reduce the duplicate code +// these verdict IDs have the same styling properties +ProblemVerdictMap["0"] = {...ProblemVerdictMap.inq }; +ProblemVerdictMap["10"] = {...ProblemVerdictMap.sube }; +ProblemVerdictMap["15"] = {...ProblemVerdictMap.noj }; +ProblemVerdictMap["20"] = {...ProblemVerdictMap.inq }; +ProblemVerdictMap["30"] = {...ProblemVerdictMap.ce }; +ProblemVerdictMap["35"] = {...ProblemVerdictMap.rf }; +ProblemVerdictMap["40"] = {...ProblemVerdictMap.re }; +ProblemVerdictMap["45"] = {...ProblemVerdictMap.ole }; +ProblemVerdictMap["50"] = {...ProblemVerdictMap.tle }; +ProblemVerdictMap["60"] = {...ProblemVerdictMap.mle }; +ProblemVerdictMap["70"] = {...ProblemVerdictMap.wa }; +ProblemVerdictMap["80"] = {...ProblemVerdictMap.pe }; +ProblemVerdictMap["90"] = {...ProblemVerdictMap.ac }; +export { ProblemVerdictMap }; + +/////////////////////////////////////////////////////////////////////////////////////////////////// /** * Data structure returned when querying from url `https://uhunt.onlinejudge.org/api/p/num/:num` @@ -148,36 +271,7 @@ export type Problem = { rej: number; }; -export type VerdictType = { - /** - * Tailwindcss styles for foreground - */ - fgColor: string; - /** - * Tailwindcss styles for background - */ - bgColor: string; - /** - * Title to be displayed on the front end - */ - title: string; -}; - -export const Verdict: Record = { - 0 : { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "- In Queue -" }, - 10: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Submission error" }, - 15: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Can't be judged" }, - 20: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "- In Queue -" }, - 30: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-orange-600", title: "Compile error" }, - 35: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", title: "Restricted function" }, - 40: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#00AAAA]", title: "Runtime error" }, - 45: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#000066]", title: "Output limit" }, - 50: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#0000FF]", title: "Time limit" }, - 60: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#0000AA]", title: "Memory limit" }, - 70: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#FF0000]", title: "Wrong answer" }, - 80: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#666600]", title: "Presentation error" }, - 90: { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-[#00AA00]", title: "Accepted" }, -}; +/////////////////////////////////////////////////////////////////////////////////////////////////// export const Language: Record = { 1: "ANSI C", @@ -187,6 +281,8 @@ export const Language: Record = { 5: "C++11", }; +/////////////////////////////////////////////////////////////////////////////////////////////////// + /** * Submission data structure * @@ -227,15 +323,13 @@ export type Submission = { * Verdict properties * * contains - * - verdict title Ex: `Accepted`, or `Compile error` + * - title: verdict title Ex: `Accepted`, or `Compile error` * - fgColor: tailwindcss class to use for foreground color * - bgColor: tailwindcss class to use for background color + * - fgHex: hexcode of the property `fgColor` + * - bgHex: hexcode of property `bgColor` */ - verdict: { - title: string; - fgColor: string; - bgColor: string; - }; + verdict: ProblemVerdictType; /** * Language ID */ @@ -266,3 +360,6 @@ export type Submission = { uname: string; }; }; + +/////////////////////////////////////////////////////////////////////////////////////////////////// + From 1aadd937bb2249303ca4d19c7f0619dc3c246f03 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:01:04 -0700 Subject: [PATCH 207/315] chore(utils:processing): use array to filter out keys from `ProblemVerdictMap` ## what - use array to filter out keys from `ProblemVerdictMap` - use an array to filter which keys to keep in `ProblemVerdictMap` - filter out keys from ProblemVerdictMap using the array - update references - setting `tooltipTitle` - setting `fill` ## how ## why - to keep up with the changes in `ProblemVerdictMap` - check c041074 - be default `ProblemVerdictMap` contains all verdicts - don't need to show all of them in a bar chart ## where - ./src/utils/dataProcessing.ts ## usage --- src/utils/dataProcessing.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts index 45b34d0..75b93f8 100644 --- a/src/utils/dataProcessing.ts +++ b/src/utils/dataProcessing.ts @@ -1,4 +1,4 @@ -import { Problem, ProblemVerdictColors, ProblemVerdictMap } from "@/types"; +import { Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; export type processedProblemVerdictBarChartType = { /** @@ -21,14 +21,24 @@ export type processedProblemVerdictBarChartType = { fill: string; }; export const processProblemNumBarChartData = (data: Problem) => { + // filter out the ProblemVerdictMap object and keep keys from `filter` array + const filter = ["ac", "pe", "wa", "tle", "mle", "ce", "re", "ole"] + // const filteredVerdicts: Record = {} + // filter.forEach(( key: string ) => { + // filteredVerdicts[key] = ProblemVerdictMap[key] + // }) + // + // obtained from https://stackoverflow.com/a/69676994/3053548 + const filteredVerdicts: Record = Object.fromEntries(filter.map(k => [k, ProblemVerdictMap[k]])) + const processedData:processedProblemVerdictBarChartType[] = [] - for(const [key, value] of Object.entries(ProblemVerdictMap)) { + for(const [key, value] of Object.entries(filteredVerdicts)) { processedData.push({ name: key.toUpperCase(), verdict: data[key as keyof Problem] as number, - tooltipTitle: value, - fill: ProblemVerdictColors[key], + tooltipTitle: value.title, + fill: ProblemVerdictMap[key].bgHex, }) } From 6361c777b051ed221a056a836a901a6873f2730f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:18:19 -0700 Subject: [PATCH 208/315] docs(types): add file header docs ## what - add file header docs ## how ## why - to explain what is this file used for ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index 0c62032..baea3f9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,12 @@ +/* + * Contains all types for the upstream api server (uva uhunt https://uhunt.onlinejudge.org/api ) + * + * This file also contains objects that are used to convert a number from any of these types + * into a string. Ex: (submission verdict ID converted to a string). + */ + +/////////////////////////////////////////////////////////////////////////////////////////////////// + export const ProblemStatus: Record = { 0: "Unavailable", 1: "Normal", From b6ef6576adaa4d3c2c41244e8abd637f44da09b0 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:22:27 -0700 Subject: [PATCH 209/315] feat(components:charts): add Recharts custom tooltip component ## what - add Recharts custom tooltip component ## how - obtained from - https://github.com/tremorlabs/tremor/blob/main/src/components/chart-elements/common/ChartTooltip.tsx - note - this tooltip is from `tremor.so` , and it uses tailwindcss custom configs, which means `tailwind.config.ts` needs to be updated - done in commit 1e5b14f ## why - this will be used in charts - this is will make chart tooltips more pleasing to look at compared to the default tooltips ## where - ./src/components/charts/Tooltip.tsx ## usage --- src/components/charts/Tooltip.tsx | 155 ++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/components/charts/Tooltip.tsx diff --git a/src/components/charts/Tooltip.tsx b/src/components/charts/Tooltip.tsx new file mode 100644 index 0000000..e360e7d --- /dev/null +++ b/src/components/charts/Tooltip.tsx @@ -0,0 +1,155 @@ +/* + * Custom Recharts tooltip component. + * Used in Rechart charts +* +* Code obtained from `tremor.so` +* https://github.com/tremorlabs/tremor/blob/main/src/components/chart-elements/common/ChartTooltip.tsx +*/ + +import { cn } from "@/lib/utils"; + +export const ChartTooltipFrame = ({ children }: { children: React.ReactNode }) => ( +
+ {children} +
+); + +export interface ChartTooltipRowProps { + value: string; + name: string; + color: string; +} + +export const ChartTooltipRow = ({ value, name, color }: ChartTooltipRowProps) => { + return ( +
+
+ +

+ {name} +

+
+

+ {value} +

+
+) }; + +export interface ChartTooltipProps { + active: boolean | undefined; + payload: any; + label: string; + // categoryColors: Map; + valueFormatter: { + (value: number): string; + } + labelFormatter?: { + (payload:any ) : string; + } +} + +const ChartTooltip = ({ + active, + payload, + label, + // categoryColors, + valueFormatter, + labelFormatter +}: ChartTooltipProps) => { + if (active && payload) { + const filteredPayload: any[] = payload.filter((item: any) => item.type !== "none"); + + return ( + +
+

+ {labelFormatter ? labelFormatter(payload) : label} +

+
+ +
+ {filteredPayload.map(({ value, name, payload }: { value: number; name: string, payload: any }, idx: number) => ( + + ))} +
+
+ ); + } + return null; +}; + +export default ChartTooltip; From 2104011cc6811b4d854ef7e2c88e52cd373046e8 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:30:20 -0700 Subject: [PATCH 210/315] feat(components:charts): add `ProblemVerdictChart` component ## what - add `ProblemVerdictChart` component ## how - uses Rechart bar chart - uses custom tooltip component in `./src/components/charts/Tooltip` ## why - this will be used to display a problem number submission verdicts using a bar chart ## where - ./src/components/charts/ProblemVerdictChart.tsx ## usage --- src/components/charts/ProblemVerdictChart.tsx | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/components/charts/ProblemVerdictChart.tsx diff --git a/src/components/charts/ProblemVerdictChart.tsx b/src/components/charts/ProblemVerdictChart.tsx new file mode 100644 index 0000000..f65ef7e --- /dev/null +++ b/src/components/charts/ProblemVerdictChart.tsx @@ -0,0 +1,48 @@ +/* + * To display a problem number submission verdicts in a bar chart + * + * Uses Rechart bar chart + */ + +import { + Bar, + BarChart, + CartesianGrid, + ResponsiveContainer, + Tooltip, + XAxis, +} from "recharts"; + +import { processedProblemVerdictBarChartType } from "@/utils/dataProcessing"; +import ChartTooltip from "@/components/charts/Tooltip"; + +type Props = { + data: processedProblemVerdictBarChartType[]; +}; + +const ProblemVerdictChart = ({ data }: Props) => { + return ( + + + + + + `${new Intl.NumberFormat("us").format(number).toString()}`} + labelFormatter={(payload) => payload[0].payload.tooltipTitle} + /> + } + /> + + + + ); +}; + +export default ProblemVerdictChart; From acc2eac151fb0b8c5713df1007c8ad627a0b7fac Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:32:22 -0700 Subject: [PATCH 211/315] feat(page:problemNum): render `ProblemVerdictChart` component ## what - render `ProblemVerdictChart` component ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 41 ++++++++++---------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 7f12763..068690b 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -7,31 +7,13 @@ import Error from "@/components/error"; import { Card, CardContent, - CardDescription, - CardFooter, CardHeader, CardTitle, } from "@/components/ui/card" import { useFetchProblemNum } from "@/hooks"; import { problemNumSchema } from "@/schema"; - - -type ChartCard = { - title: string; - chart: React.ReactNode; -} -const ChartCard = ({title, chart}: ChartCard) => { - return ( - - - {title} - - - {chart} - - - ); -} +import { processProblemNumBarChartData } from "@/utils/dataProcessing"; +import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; type problemPageProps = { params: z.infer; @@ -46,7 +28,7 @@ const ProblemPage = ({ params }: problemPageProps) => { error: problemNumError, } = useFetchProblemNum(params.problemNum); - if (problemNumIsLoading) { + if (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) { return (

Loading: {params.problemNum}

@@ -78,22 +60,29 @@ const ProblemPage = ({ params }: problemPageProps) => { } if (problemNumIsSuccess) { - console.log(problemNumData); + // console.log(problemNumData); } - console.log("problem page: ", params.problemNum); + const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) return (

Problem page: {params.problemNum}

- + + + Submission Verdicts + + + + +
- + {/* */}
- + {/* */}
From 90e808c1379de82d2fb7575ac5f23d53c94268e1 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 15:31:24 -0700 Subject: [PATCH 212/315] chore(schema:submission): add schema for endpoint `/api/submissions/overtime/[problemNum]` ## what - add schema for endpoint `/api/submissions/overtime/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index 1113fbc..eb692d1 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -8,3 +8,9 @@ export const problemNumSchema = z.object({ .number({ invalid_type_error: "Problem number must be a number" }) .min(1, "Problem number must be a number greater than 0"), }); + +export const submissionOvertimeSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) From 304a5632393094c51671213156267d1d73968ba5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 15:27:13 -0700 Subject: [PATCH 213/315] feat(api:submission): add endpoint `/api/submissions/overtime/[problemNum]` ## what - add endpoint `/api/submissions/overtime/[problemNum]` - get the submission count of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - the endpoint will return a cumulative submission count - an array of object - time: momentjs time serialized - count: submission count from current index + the previous index ## how ## why - this will be used to chart submissions overtime of a problem ## where - ./src/app/api/submissions/overtime/[problemNum]/route.ts ## usage --- .../overtime/[problemNum]/route.ts | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/app/api/submissions/overtime/[problemNum]/route.ts diff --git a/src/app/api/submissions/overtime/[problemNum]/route.ts b/src/app/api/submissions/overtime/[problemNum]/route.ts new file mode 100644 index 0000000..0fd1cd1 --- /dev/null +++ b/src/app/api/submissions/overtime/[problemNum]/route.ts @@ -0,0 +1,93 @@ +import { z } from "zod"; + +import { submissionOvertimeSchema as schema } from "@/schema"; +import { NextResponse } from "next/server"; +import { uhuntProblemNumUrl, uhuntSubmissionCountUrl } from "@/utils/constants"; +import { Problem } from "@/types"; +import moment, { Moment } from "moment"; + +type getParamsType = { + params: z.infer; +}; + +export type getResponseType = { + name: string; + time: string; // time formatted to year + submissions: number; + fill: string; +} + +/** + * Get the submission count of a problem using `problem number` + * The submission count will be a cumulative submission count + * + * if invalid `problem number` is given, a response of 400 will be returned + * if the problem doesn't exist, a response of 400 will be returned + */ +export const GET = async (_request: Request, { params }: getParamsType) => { + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + const submssionCountUrl = uhuntSubmissionCountUrl(problemData.pid); + const submissionResponse = await fetch(submssionCountUrl); + const submissionData: number[] = await submissionResponse.json(); + + // sum the submission count + // each element is a cumulative sum of the previous + const data = submissionData.reduce( + (acc: number[], cur: number, i) => + i === 0 ? [cur] : [...acc, acc[acc.length - 1] + cur], + [], + ); + // map each element to the year. + // use values from the url + // Ex: https://uhunt.onlinejudge.org/api/p/count/36/1704664602/20/12 + // 36 : pid + // 1704664602 : the time to look back on. usually the current time (unix time). Look back from this time + // 20 : return number of years of submission. in this case 20 years + // 12 : Number of months each array element will represent + const submissionUrlSplit = submssionCountUrl.split("/"); + const thirtyDaysInSeconds = 60 * 60 * 24 * 30; + const responseData:getResponseType[] = data.map((cur, i) => { + const submissionTime = +submissionUrlSplit[7]; + const back = +submissionUrlSplit[8]; + const jump = +submissionUrlSplit[9]; + const unixTime = submissionTime - (back - i) * thirtyDaysInSeconds * jump; + + return { + name: "submissions", + time: moment.unix(unixTime).format("YYYY"), + submissions: cur, + fill: "#8884d8" + }; + }); + + return Response.json(responseData); +}; From 1d95a99fe459ea0b397588c105624c03796f496f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 17:40:33 -0700 Subject: [PATCH 214/315] chore(hooks): add react-query hook to fetch submissions overtime ## what - add react-query hook to fetch submissions overtime ## how - fetch from api endpoint `/api/submissions/overtime/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 02649b1..5928149 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -15,7 +15,11 @@ export enum queryKey { /** * React query key for fetching a problem num */ - problemNum = "problem-num" + problemNum = "problem-num", + /** + * React query key for fetching submission overtime count + */ + submissionCount = "submission-overtime", } /** @@ -57,3 +61,16 @@ export const useFetchProblemNum = (problemNum: number) => { queryFn: async () => await axios.get(`/api/problems/${problemNum}`), }) } + +/** + * Fetch submissions overtime count + */ +export const useFetchSubmissionCount = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.submissionCount], + queryFn: async () => + await axios + .get(`/api/submissions/overtime/${problemNum}`) + .then((res) => res.data), + }); +} From 16d1311f4862b8c751cf69c1eeeb2ce5ef8b927a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 17:45:31 -0700 Subject: [PATCH 215/315] feat(components:charts): add `SubmissionsOvertimeChart` component ## what - add `SubmissionsOvertimeChart` component ## how - takes prop - data of type `SubmisionsOvertimeType[]` - use Recharts `AreaChart` component - use custom tooltip from `./src/components/charts/Tooltip` - use linear gradient for color the area chart ## why - this will be used to display submissions overtime of a problem using area chart ## where - ./src/components/charts/SubmissionsOvertimeChart.tsx ## usage --- .../charts/SubmissionsOvertimeChart.tsx | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/components/charts/SubmissionsOvertimeChart.tsx diff --git a/src/components/charts/SubmissionsOvertimeChart.tsx b/src/components/charts/SubmissionsOvertimeChart.tsx new file mode 100644 index 0000000..e1c0777 --- /dev/null +++ b/src/components/charts/SubmissionsOvertimeChart.tsx @@ -0,0 +1,58 @@ +import { + Area, + AreaChart, + CartesianGrid, + ResponsiveContainer, + Tooltip, + XAxis, +} from "recharts"; + +import { getResponseType as SubmissionOvertimeType } from "@/app/api/submissions/overtime/[problemNum]/route"; +import ChartTooltip from "@/components/charts/Tooltip"; + +type Props = { + data: SubmissionOvertimeType[]; +}; + +const SubmissionsOvertimeChart = ({ data }: Props) => { + return ( + + + + + ( + + `${new Intl.NumberFormat("us").format(number).toString()}` + } + // labelFormatter={(payload) => payload[0].payload.tooltipTitle} + /> + )} + /> + {/* linear gradient */} + {/* obtained from https://www.youtube.com/watch?v=e4en8kRqwe8 */} + + + + + + + + + + ); +}; + +export default SubmissionsOvertimeChart; From 3f2f7c4e8af0eeb57736696c36d2164f8572013a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 7 Jan 2024 17:49:34 -0700 Subject: [PATCH 216/315] feat(page:problemNum): render `SubmissionOvertimeChart` component ## what - render `SubmissionOvertimeChart` component ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 068690b..46f095d 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,10 +10,11 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum } from "@/hooks"; +import { useFetchProblemNum, useFetchSubmissionCount } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; +import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; type problemPageProps = { params: z.infer; @@ -27,8 +28,16 @@ const ProblemPage = ({ params }: problemPageProps) => { data: problemNumData, error: problemNumError, } = useFetchProblemNum(params.problemNum); + const { + isLoading: submissionCountIsLoading, + isSuccess: submissionCountIsSuccess, + isError: submissionCountIsError, + data: submissionCountData, + error: submissionCountError, + } = useFetchSubmissionCount(params.problemNum) - if (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) { + if (( problemNumIsLoading || !problemNumData || problemNumData.data === undefined ) || + ( submissionCountIsLoading || !submissionCountData)) { return (

Loading: {params.problemNum}

@@ -68,6 +77,7 @@ const ProblemPage = ({ params }: problemPageProps) => {

Problem page: {params.problemNum}

+ {/* Submission verdicts bar chart */}
@@ -78,8 +88,16 @@ const ProblemPage = ({ params }: problemPageProps) => {
+ {/* Submissions overtime line chart */}
- {/* */} + + + Submissions overtime + + + + +
{/* */} From 1988c82a098f0547156cba4e124bac35d3e91831 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 07:20:28 -0700 Subject: [PATCH 217/315] chore(types): add `Python` as a value in `Language` object ## what - add `Python` as a value in `Language` object ## how ## why - found a case where the language id was not present in the `Language` object. - after a little investigation, I found that this new id is for the language `Python` ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/index.ts b/src/types/index.ts index baea3f9..14aecb6 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -288,6 +288,7 @@ export const Language: Record = { 3: "C++", 4: "Pascal", 5: "C++11", + 6: "Python", }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -371,4 +372,3 @@ export type Submission = { }; /////////////////////////////////////////////////////////////////////////////////////////////////// - From 507b215ee4fde9f7bbfdfa76d388e5264e7cd9fd Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:18:03 -0700 Subject: [PATCH 218/315] chore(schema:submission): add schema for endpoint `/api/submissions/language/[problemNum]` ## what - add schema for endpoint `/api/submissions/language/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index eb692d1..2073ae0 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -14,3 +14,10 @@ export const submissionOvertimeSchema = z.object({ .number({ invalid_type_error: "Problem number must be a number" }) .min(1, "Problem number must be a number greater than 0"), }) + +export const submissionLangSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) + From 445dec0b67f04f62b0031c91fc1573c20c96db03 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:21:41 -0700 Subject: [PATCH 219/315] refactor(utils:constants): limit start range when fetching submissions of a problem ## what - limit start range when fetching submissions of a problem - limit submissions from today to 1 year ago and return 500 submissions - add params - startSubmission: starting point when searching for submissions - default to 1 year before in unix time. in other words, it will return submissions starting from 1 year ago - endSubmission: ending point when searching for submissions - default to current time. - limit: limit number of submissions to value provided - default to 500. in other words it will always return 500 submissions of a problem - currently not being used. - how to use - append the number to end - ex: https://uhunt.onlinejudge.org/api/p/subs/36/0/1707350533/500 - the 500 in the end of url will limit number of submissions to 500 ## how ## why - before the start range was set to 0, which would fetch every submission for the problem - this would fetch too many items and it would take a while to process them ## where - ./src/utils/constants.ts ## usage --- src/utils/constants.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 041e5e1..2dd4a58 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -74,10 +74,19 @@ export const uhuntUsername2UidUrl = (username: string) => /** * URL for getting Submission list of a problem using Problem ID + * NOTE: this will return a large number of array elements. Recommend to return 1 year worth of submissions + * * @param {String | Number} pid - problem ID + * @param {Number} [startSubmission=moment().subtract(1, 'years').unix()] - Unix timestamp for what time to start searching. Default is 1 year ago + * @param {Number} [endSubmission=moment().unix()] - Unix timestamp for what time to end searching. Default is right now + * @param {Number} [limit=500] - Number of submissions to return. Default is 500 submissions */ -export const uhuntProblemSubmissionListUrl = (pid: string | number) => - `${uhuntBaseApiUrl}/p/subs/${pid}/0/${moment().unix()}`; +export const uhuntProblemSubmissionListUrl = ( + pid: string | number, + startSubmission = moment().subtract(1, 'years').unix(), + endSubmission = moment().unix(), + limit = 500 +) => `${uhuntBaseApiUrl}/p/subs/${pid}/${startSubmission}/${endSubmission}/500`; /** * Get User submissions using UserID From fd4c856a0f7943d1476afdc714a726daf3747bbd Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:50:54 -0700 Subject: [PATCH 220/315] feat(api:submission:language): add endpoint `/api/submissions/language/[problemNum]` ## what - add endpoint `/api/submissions/language/[problemNum]` - get submissions language count of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - fetch submissions of problem number - count submission language ## how ## why ## where - ./src/app/api/submissions/language/[problemNum]/route.tsx ## usage --- .../language/[problemNum]/route.tsx | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/app/api/submissions/language/[problemNum]/route.tsx diff --git a/src/app/api/submissions/language/[problemNum]/route.tsx b/src/app/api/submissions/language/[problemNum]/route.tsx new file mode 100644 index 0000000..3824b98 --- /dev/null +++ b/src/app/api/submissions/language/[problemNum]/route.tsx @@ -0,0 +1,76 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { submissionLangSchema as schema } from "@/schema"; +import { + uhuntProblemNumUrl, + uhuntProblemSubmissionListUrl, +} from "@/utils/constants"; +import { Language, Problem, Submission } from "@/types"; + +type getParamsType = { + params: z.infer; +}; + +export type getResponseType = Record; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem stats + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + // return 404 if problem doesn't exist + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch submissions of the problem + const submissionsUrl = uhuntProblemSubmissionListUrl(problemData.pid); + const submissionResponse = await fetch(submissionsUrl, { cache: "no-cache" }); + const submissionData: Submission["msg"][] = await submissionResponse.json(); + + // map language id as key and 0 as value. (the value will be count of a submission language) + const languageObj = Object.keys(Language).reduce( + (acc: Record, cur: string) => { + acc[cur] = 0; + + return acc; + }, + {}, + ); + + // increment count of key-value for their respective language ID + const responseData: getResponseType = submissionData.reduce((acc, cur) => { + const languageId = cur.lan; + acc[languageId] = acc[languageId] + 1; + + return acc; + }, languageObj); + delete responseData["undefined"]; + + return Response.json(responseData); +}; From cbb5f1864150b32f5aeca44a96ba5b3e688ed050 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:54:30 -0700 Subject: [PATCH 221/315] chore(hooks): add react-query hook to fetch submission language ## what - add react-query hook to fetch submission language ## how - fetch from api endpoint `/api/submissions/language/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 5928149..8d904a4 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -20,6 +20,10 @@ export enum queryKey { * React query key for fetching submission overtime count */ submissionCount = "submission-overtime", + /** + * React query key for fetching submission by language + */ + submissionLang = "submission-language", } /** @@ -74,3 +78,17 @@ export const useFetchSubmissionCount = (problemNum: number) => { .then((res) => res.data), }); } + +/** + * Fetch submissions by language + */ +export const useFetchSubmissionLang = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.submissionLang], + queryFn: async () => + await axios + .get(`/api/submissions/language/${problemNum}`) + .then((res) => res.data), + }); +} + From a6cfeca489362611c197efd7280ed53be888fe54 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:58:09 -0700 Subject: [PATCH 222/315] chore(utils:processing): add function to generate data for `recharts` radar chart ## what - add function to generate data for `recharts` radar chart ## how - loop through the object - add object to array - property `language`: string version of the language ID - property `count`: number of submissions of that language ID ## why - this will be used to generate the data needed for `recharts` radar chart to render ## where - ./src/utils/dataProcessing.ts ## usage --- src/utils/dataProcessing.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts index 75b93f8..9d34205 100644 --- a/src/utils/dataProcessing.ts +++ b/src/utils/dataProcessing.ts @@ -1,4 +1,5 @@ -import { Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; +import { Language, Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; +import {getResponseType as submissionLangType} from '@/app/api/submissions/language/[problemNum]/route' export type processedProblemVerdictBarChartType = { /** @@ -44,3 +45,25 @@ export const processProblemNumBarChartData = (data: Problem) => { return processedData } + +////////////////////////////////////////////////////////////////////////////////////////////////// + +export type processedSubmissionLangType = { + language: string; + count: number; +} + +export const processSubmissionLanguageRadarChart = ( + data: submissionLangType, +): processedSubmissionLangType[] => { + const processedData: processedSubmissionLangType[] = []; + + Object.entries(data).forEach(([key, value]) => { + processedData.push({ + language: Language[key], + count: value, + }); + }); + + return processedData; +}; From fc5ecfc46270ddee9da516ca2952c51232d65a33 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:04:41 -0700 Subject: [PATCH 223/315] feat(components:charts): add `SubmissionLanguageRadarChart` component ## what - add `SubmissionLanguageRadarChart` component ## how - takes a prop - data of type `/api/submissions/language/[problemNum]` GET response - process the data - use Recharts `radar` chart - use custom tooltip from `./src/components/charts/Tooltip` - use radial gradient for color inside of the radar ## why - this will display submissions by language of a problem using `radar` chart ## where - ./src/components/charts/SubmissionLanguageRadarChart.tsx ## usage --- .../charts/SubmissionLanguageRadarChart.tsx | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/components/charts/SubmissionLanguageRadarChart.tsx diff --git a/src/components/charts/SubmissionLanguageRadarChart.tsx b/src/components/charts/SubmissionLanguageRadarChart.tsx new file mode 100644 index 0000000..828c704 --- /dev/null +++ b/src/components/charts/SubmissionLanguageRadarChart.tsx @@ -0,0 +1,60 @@ +import { + Radar, + RadarChart, + PolarAngleAxis, + PolarGrid, + ResponsiveContainer, + Tooltip, +} from "recharts"; + +import ChartTooltip from "@/components/charts/Tooltip"; +import { processSubmissionLanguageRadarChart } from "@/utils/dataProcessing"; +import { getResponseType } from "@/app/api/submissions/language/[problemNum]/route"; + +type Props = { + data: getResponseType; +}; + +const SubmissionLanguageRadarChart = ({ data }: Props) => { + const processedData = processSubmissionLanguageRadarChart(data); + return ( + + + + + ( + + `${new Intl.NumberFormat("us").format(number).toString()}` + } + // labelFormatter={(payload) => payload[0].payload.tooltipTitle} + /> + )} + /> + + + + {/* */} + + + + + + + ); +}; + +export default SubmissionLanguageRadarChart; From 6ebcb5272a10374aca6cb3a6bb5a847c3b4ee890 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:12:47 -0700 Subject: [PATCH 224/315] feat(page:problemNum): render `SubmissionLanguageRadarChart` component ## what - render `SubmissionLanguageRadarChart` component ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 46f095d..397b6d5 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,11 +10,12 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum, useFetchSubmissionCount } from "@/hooks"; +import { useFetchProblemNum, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; +import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; type problemPageProps = { params: z.infer; @@ -35,9 +36,19 @@ const ProblemPage = ({ params }: problemPageProps) => { data: submissionCountData, error: submissionCountError, } = useFetchSubmissionCount(params.problemNum) + const { + isLoading: submissionLangIsLoading, + isSuccess: submissionLangIsSuccess, + isError: submissionLangIsError, + data: submissionLangData, + error: submissionLangError, + } = useFetchSubmissionLang(params.problemNum); + if (( problemNumIsLoading || !problemNumData || problemNumData.data === undefined ) || - ( submissionCountIsLoading || !submissionCountData)) { + ( submissionCountIsLoading || !submissionCountData) || + ( submissionLangIsLoading || !submissionLangData) + ) { return (

Loading: {params.problemNum}

@@ -100,7 +111,14 @@ const ProblemPage = ({ params }: problemPageProps) => {
- {/* */} + + + Submissions by language + + + + +
From fe1b462ae067f57f3b69cd0e1140264c4afa43a5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:35:40 -0700 Subject: [PATCH 225/315] chore(schema:problemNum:ranklist): add schema for endpoint `/api/problems/ranklist/[problemNum]` ## what - add schema for endpoint `/api/problems/ranklist/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index 2073ae0..460ba78 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -21,3 +21,10 @@ export const submissionLangSchema = z.object({ .min(1, "Problem number must be a number greater than 0"), }) +export const problemNumRanklistSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) + + From 1a35cec38173c12ce1078dda8795cc807ebacbd3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:30:10 -0700 Subject: [PATCH 226/315] feat(api:problemNum:ranklist): add endpoint `/api/problems/ranklist/[problemNum]` ## what - add endpoint `/api/problems/ranklist/[problemNum]` - get ranklist of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - fetch problem ranklist - add extra properties - verdict object - fgColor - bgColor - title - fgHex - bgHex - language: convert language ID into a string - pnum: problem number - pTitle: name of the problem ## how ## why ## where - ./src/app/api/problems/ranklist/[problemNum]/route.ts ## usage --- .../problems/ranklist/[problemNum]/route.ts | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/app/api/problems/ranklist/[problemNum]/route.ts diff --git a/src/app/api/problems/ranklist/[problemNum]/route.ts b/src/app/api/problems/ranklist/[problemNum]/route.ts new file mode 100644 index 0000000..d84611d --- /dev/null +++ b/src/app/api/problems/ranklist/[problemNum]/route.ts @@ -0,0 +1,68 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { problemNumRanklistSchema as schema } from "@/schema"; +import { Language, Problem, ProblemVerdictMap, Submission } from "@/types"; +import { uhuntProblemNumUrl, uhuntProblemRankUrl } from "@/utils/constants"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem stats + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + // return 404 if problem doesn't exist + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem ranklist + const ranklistUrl = uhuntProblemRankUrl(problemData.pid, 1, 10); + const ranklistResponse = await fetch(ranklistUrl); + const ranklistData: Submission["msg"][] = await ranklistResponse.json(); + + // add properties to the ranklist array + const converted = ranklistData.map((rank: Submission["msg"]) => { + rank.verdict = ProblemVerdictMap[rank.ver] || { + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgColor: "bg-gray-500", + title: "- In Queue -", + fgHex: "", + bgHex: "6b7280", + }; + rank.lan = Language[rank.lan] || "--"; + rank.pnum = problemData.num; + rank.pTitle = problemData.title; + + return rank; + }); + + return Response.json(converted); +}; From 95f2b19f7158ffa026584d1f43bf794f788e3a1a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:37:47 -0700 Subject: [PATCH 227/315] chore(hooks): add react-query hook to fetch problem ranklist ## what - add react-query hook to fetch problem ranklist ## how - fetch from endpoint `/api/problems/ranklist/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 8d904a4..77fee1c 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -16,6 +16,10 @@ export enum queryKey { * React query key for fetching a problem num */ problemNum = "problem-num", + /** + * React query key for fetching a problem ranklist + */ + problemRanklist = "problem-ranklist", /** * React query key for fetching submission overtime count */ @@ -92,3 +96,15 @@ export const useFetchSubmissionLang = (problemNum: number) => { }); } +/** + * Fetch problem ranklist + */ +export const useFetchProblemRanklist = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.problemRanklist], + queryFn: async () => + await axios + .get(`/api/problems/ranklist/${problemNum}`) + .then((res) => res.data), + }); +} From 888833af8d814593a7f9b7bc60e103bc8836370e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:40:12 -0700 Subject: [PATCH 228/315] chore(shadcn:data-table): add columns structure for problem ranklist table ## what - add columns structure for problem ranklist table - define which columns to display on the DataTable ## how ## why ## where - ./src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx ## usage --- .../components/data-table/ranklistColumns.tsx | 218 ++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx diff --git a/src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx b/src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx new file mode 100644 index 0000000..75142ed --- /dev/null +++ b/src/app/problems/[problemNum]/components/data-table/ranklistColumns.tsx @@ -0,0 +1,218 @@ +"use client"; + +import { ColumnDef } from "@tanstack/react-table"; +import moment from "moment"; +import Link from "next/link"; + +import { Badge } from "@/components/ui/badge"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; +import { Submission } from "@/types"; +import { cn } from "@/lib/utils"; + +export const columns: ColumnDef[] = [ + { + accessorKey: "submissionId", + accessorFn: (row) => row.sid, + meta: { + // for displaying the columns dropdown + headerTitle: "Submission ID", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("submissionId")} + + ); + }, + }, + { + accessorKey: "problemNum", + accessorFn: (row) => row.pnum, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Number", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemNum")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "problemTitle", + accessorFn: (row) => row.pTitle, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Title", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemTitle")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "username", + accessorFn: (row) => `${row.name} (${row.uname})`, + meta: { + // for displaying the columns dropdown + headerTitle: "User (username)", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + if (row.original.uname === "--- ? ---") { + return ( +

{row.original.uname}

+ ) + } + return ( + + {row.getValue("username")} + + ); + }, + }, + { + accessorKey: "verdict", + accessorFn: (row) => row.verdict.title, + meta: { + // for displaying the columns dropdown + headerTitle: "Verdict", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("verdict")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "language", + accessorFn: (row) => row.lan, + meta: { + // for displaying the columns dropdown + headerTitle: "Language", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{row.getValue("language")}

; + }, + enableSorting: false, + }, + { + accessorKey: "runtime", + accessorFn: (row) => row.run, + meta: { + // for displaying the columns dropdown + headerTitle: "Runtime", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{((row.getValue("runtime") as number) / 1000).toFixed(3)}

; + }, + enableSorting: false, + }, + { + accessorKey: "rank", + accessorFn: (row) => row.rank, + meta: { + // for displaying the columns dropdown + headerTitle: "Rank", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{row.getValue("rank")}

; + }, + enableSorting: false, + }, + { + accessorKey: "submitTime", + accessorFn: (row) => row.sbt, + meta: { + // for displaying the columns dropdown + headerTitle: "Submit Time", + }, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + + +

+ {moment.unix(row.getValue("submitTime")).fromNow()} +

+
+ +

+ Submitted at{" "} + {moment.unix(row.getValue("submitTime")).toLocaleString()} +

+
+
+
+ ); + }, + enableSorting: false, + }, +]; From 8ec45018b7c2e7b11dcf802e33975e69ba1d1a7d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:51:59 -0700 Subject: [PATCH 229/315] build(npm): add package `@tanstack/react-virtual` ## what - add package `@tanstack/react-virtual` ## how ## why ## where - ./package-lock.json - ./package.json ## usage --- package-lock.json | 26 ++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 27 insertions(+) diff --git a/package-lock.json b/package-lock.json index 873e06e..140d2fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.9", "@tanstack/react-table": "^8.11.6", + "@tanstack/react-virtual": "^3.0.1", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1974,6 +1975,22 @@ "react-dom": ">=16" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.0.1.tgz", + "integrity": "sha512-IFOFuRUTaiM/yibty9qQ9BfycQnYXIDHGP2+cU+0LrFFGNhVxCXSQnaY6wkX8uJVteFEBjUondX0Hmpp7TNcag==", + "dependencies": { + "@tanstack/virtual-core": "3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@tanstack/table-core": { "version": "8.11.6", "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.6.tgz", @@ -1986,6 +2003,15 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@tanstack/virtual-core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz", + "integrity": "sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@types/d3-array": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", diff --git a/package.json b/package.json index 4915e60..8033b32 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@tanstack/react-query": "^5.17.1", "@tanstack/react-query-devtools": "^5.17.9", "@tanstack/react-table": "^8.11.6", + "@tanstack/react-virtual": "^3.0.1", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", From 09259ea6136050bb7a0338efd6afdabc4225b18b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:07:34 -0700 Subject: [PATCH 230/315] feat(components): add `VirtualTable` component ## what - add `VirtualTable` component ## how - uses - `@tanstack/react-table` to generate a table - `@tanstack/react-virtual` to handle virtualization ## why - to display a table without the `DataTable` functionality ## where - ./src/components/virtual-table/index.tsx ## usage --- src/components/virtual-table/index.tsx | 137 +++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/components/virtual-table/index.tsx diff --git a/src/components/virtual-table/index.tsx b/src/components/virtual-table/index.tsx new file mode 100644 index 0000000..ddc788b --- /dev/null +++ b/src/components/virtual-table/index.tsx @@ -0,0 +1,137 @@ +"use client"; + +import { useRef } from "react"; +import { + ColumnDef, + flexRender, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { useVirtualizer } from "@tanstack/react-virtual"; + +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { cn } from "@/lib/utils"; + +interface Props { + columns: ColumnDef[]; + data: TData[]; + /** + * Height of the table. Must be a number denoting pixels + * + * Ex: 400 would mean 400px. this will be set using tailwindcss `h-[400px]` + */ + tableHeight: number; +} + +/** + * A Virtual table using `@tanstack/react-table`. The virtualization is from `@tanstack/react-virtual` + * + * Code obtained from + * - ./src/components/ui/data-table/index.tsx + * - https://codesandbox.io/p/devbox/tanstack-table-example-virtualized-rows-33u7fj?file=%2Fsrc%2Fmain.tsx + * - https://codesandbox.io/p/devbox/tanstack-react-virtual-example-dynamic-mr8t3x?file=%2Fsrc%2Fmain.tsx + */ +function VirtualTable({ + columns, + data, + tableHeight, +}: Props) { + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + }); + + const { rows } = table.getRowModel(); + + //The virtualizer needs to know the scrollable container element + const tableContainerRef = useRef(null); + + const rowVirtualizer = useVirtualizer({ + count: rows.length, + estimateSize: () => 33, //estimate row height for accurate scrollbar dragging + getScrollElement: () => tableContainerRef.current, + //measure dynamic row height, except in firefox because it measures table border height incorrectly + measureElement: + typeof window !== "undefined" && + navigator.userAgent.indexOf("Firefox") === -1 + ? (element) => element?.getBoundingClientRect().height + : undefined, + overscan: 5, + }); + + return ( +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ); + })} + + ))} + + + {rowVirtualizer.getVirtualItems().map((virtualRow) => { + const row = rows[virtualRow.index]; + + return ( + rowVirtualizer.measureElement(node)} + key={row.id} + > + {row.getVisibleCells().map((cell) => { + return ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext(), + )} + + ); + })} + + ); + })} + +
+
+
+ ); +} + +export default VirtualTable; From e3ac24512fd3c74f2f3865cfd1e841e19d2bedd3 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:19:20 -0700 Subject: [PATCH 231/315] feat(page:problemNum): render `VirtualTable` for ranklist ## what - render `VirtualTable` for ranklist - fetch problem ranklist using react-query hook - render data using VirtualTable ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 397b6d5..bbb4ce0 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,12 +10,15 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; +import { useFetchProblemNum, useFetchProblemRanklist, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; +import { DataTable } from "@/components/ui/data-table"; +import { columns } from "./components/data-table/ranklistColumns"; +import VirtualTable from "@/components/virtual-table"; type problemPageProps = { params: z.infer; @@ -43,11 +46,20 @@ const ProblemPage = ({ params }: problemPageProps) => { data: submissionLangData, error: submissionLangError, } = useFetchSubmissionLang(params.problemNum); + const { + isLoading: problemRanklistIsLoading, + isSuccess: problemRanklistIsSuccess, + isError: problemRanklistIsError, + data: problemRanklistData, + error: problemRanklistError, + } = useFetchProblemRanklist(params.problemNum); - if (( problemNumIsLoading || !problemNumData || problemNumData.data === undefined ) || - ( submissionCountIsLoading || !submissionCountData) || - ( submissionLangIsLoading || !submissionLangData) + if ( + (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || + (submissionCountIsLoading || !submissionCountData) || + (submissionLangIsLoading || !submissionLangData) || + (problemRanklistIsLoading || !problemRanklistData) ) { return (
@@ -122,7 +134,11 @@ const ProblemPage = ({ params }: problemPageProps) => {
-
ranklist
+
+

Ranklist (Top 10)

+ {/* */} + +
submissions
From 1ec1ed931b4d85302815d18a1aec51ac6f10919e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:42:40 -0700 Subject: [PATCH 232/315] chore(schema:problemNum:submission): add schema for endpoint `/api/submissions/[problemNum]` ## what - add schema for endpoint `/api/submissions/[problemNum]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/schema/index.ts b/src/schema/index.ts index 460ba78..c5cbe3f 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -27,4 +27,8 @@ export const problemNumRanklistSchema = z.object({ .min(1, "Problem number must be a number greater than 0"), }) - +export const problemNumSubmissionSchema = z.object({ + problemNum: z.coerce + .number({ invalid_type_error: "Problem number must be a number" }) + .min(1, "Problem number must be a number greater than 0"), +}) From 36ed1442d43c849501ce540771ec65c300b968ba Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:45:32 -0700 Subject: [PATCH 233/315] feat(api:problemNum:submission): add endpoint `/api/submissions/[problemNum]` ## what - add endpoint `/api/submissions/[problemNum]` - get submissions of a problem using problem number - if invalid `problem number` is given, a response of 400 will be returned - if the problem doesn't exist, a response of 404 will be returned - fetch problem submissions - add extra properties - verdict - fgColor - bgColor - title - fgHex - bgHex - language: convert language ID into a string - pnum: problem number - pTitle: name of the problem ## how ## why ## where - ./src/app/api/submissions/[problemNum]/route.ts ## usage --- src/app/api/submissions/[problemNum]/route.ts | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/app/api/submissions/[problemNum]/route.ts diff --git a/src/app/api/submissions/[problemNum]/route.ts b/src/app/api/submissions/[problemNum]/route.ts new file mode 100644 index 0000000..9de86ad --- /dev/null +++ b/src/app/api/submissions/[problemNum]/route.ts @@ -0,0 +1,77 @@ +import { z } from "zod"; + +import { problemNumSubmissionSchema as schema } from "@/schema"; +import { NextResponse } from "next/server"; +import { + uhuntProblemNumUrl, + uhuntProblemRankUrl, + uhuntProblemSubmissionListUrl, +} from "@/utils/constants"; +import { Language, Problem, ProblemVerdictMap, Submission } from "@/types"; +import moment from "moment"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem stats + const { problemNum } = params; + + const problemUrl = uhuntProblemNumUrl(problemNum); + const problemResponse = await fetch(problemUrl); + const problemData: Problem = await problemResponse.json(); + + // return 404 if problem doesn't exist + if (Object.entries(problemData).length === 0) { + const message = { + message: `Problem number ${problemNum} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch submissions of the problem + const submissionsUrl = uhuntProblemSubmissionListUrl( + problemData.pid, + moment().subtract(1, "years").unix(), + moment().unix(), + 20 + ); + const submissionResponse = await fetch(submissionsUrl, { cache: "no-cache" }); + const submissionData: Submission["msg"][] = await submissionResponse.json(); + + const converted = submissionData.map((rank: Submission["msg"]) => { + rank.verdict = ProblemVerdictMap[rank.ver] || { + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgColor: "bg-gray-500", + title: "- In Queue -", + fgHex: "", + bgHex: "6b7280", + }; + rank.lan = Language[rank.lan] || "--"; + rank.pnum = problemData.num; + rank.pTitle = problemData.title; + + return rank; + }); + + return Response.json(converted); +}; From 19f716c00c4111be8917ee234a7af3fe224787ad Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:49:32 -0700 Subject: [PATCH 234/315] chore(hooks): add react-query hook to fetch problem submissions ## what - add react-query hook to fetch problem submissions ## how - fetch from endpoint `/api/submissions/[problemNum]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 77fee1c..33e507b 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -20,6 +20,10 @@ export enum queryKey { * React query key for fetching a problem ranklist */ problemRanklist = "problem-ranklist", + /** + * React query key for fetching a problem ranklist + */ + problemSubmission = "problem-submission", /** * React query key for fetching submission overtime count */ @@ -67,6 +71,7 @@ export const useFetchProblemNum = (problemNum: number) => { return useQuery({ queryKey: [queryKey.problemNum], queryFn: async () => await axios.get(`/api/problems/${problemNum}`), + refetchOnWindowFocus: false }) } @@ -80,6 +85,7 @@ export const useFetchSubmissionCount = (problemNum: number) => { await axios .get(`/api/submissions/overtime/${problemNum}`) .then((res) => res.data), + refetchOnWindowFocus: false }); } @@ -93,6 +99,7 @@ export const useFetchSubmissionLang = (problemNum: number) => { await axios .get(`/api/submissions/language/${problemNum}`) .then((res) => res.data), + refetchOnWindowFocus: false }); } @@ -106,5 +113,21 @@ export const useFetchProblemRanklist = (problemNum: number) => { await axios .get(`/api/problems/ranklist/${problemNum}`) .then((res) => res.data), + refetchOnWindowFocus: false + }); +} + +/** + * Fetch problem submissions + */ +export const useFetchProblemSubmission = (problemNum: number) => { + return useQuery({ + queryKey: [queryKey.problemSubmission], + queryFn: async () => + await axios + .get(`/api/submissions/${problemNum}`) + .then((res) => res.data), + refetchOnWindowFocus: false }); } + From d271d90ee05dfd43f308c453e9d42947f52d3392 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:55:30 -0700 Subject: [PATCH 235/315] feat(page:problemNum): render `VirtualTable` for `Problem submissions` ## what - render `VirtualTable` for `Problem submissions` - fetch problem submissions using react-query hook - render data using VirtualTable ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index bbb4ce0..04cfc04 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -10,7 +10,7 @@ import { CardHeader, CardTitle, } from "@/components/ui/card" -import { useFetchProblemNum, useFetchProblemRanklist, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; +import { useFetchProblemNum, useFetchProblemRanklist, useFetchProblemSubmission, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; @@ -53,13 +53,21 @@ const ProblemPage = ({ params }: problemPageProps) => { data: problemRanklistData, error: problemRanklistError, } = useFetchProblemRanklist(params.problemNum); + const { + isLoading: problemSubmissionIsLoading, + isSuccess: problemSubmissionIsSuccess, + isError: problemSubmissionIsError, + data: problemSubmissionData, + error: problemSubmissionError, + } = useFetchProblemSubmission(params.problemNum); if ( (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || (submissionCountIsLoading || !submissionCountData) || (submissionLangIsLoading || !submissionLangData) || - (problemRanklistIsLoading || !problemRanklistData) + (problemRanklistIsLoading || !problemRanklistData) || + (problemSubmissionIsLoading || !problemSubmissionData) ) { return (
@@ -139,7 +147,11 @@ const ProblemPage = ({ params }: problemPageProps) => { {/* */}
-
submissions
+
+

Submissions

+ {/* */} + +
); From 865875c15aec35382abadfe3fe0ce4f91640c157 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:57:11 -0700 Subject: [PATCH 236/315] chore(utils:constants): use the limit value when fetching problem submissions ## what - use the limit value when fetching problem submissions ## how - uses the parameter `limit` value - default is 500 ## why - this will limit the number of submissions returned ## where - ./src/utils/constants.ts ## usage --- src/utils/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 2dd4a58..b481ea5 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -86,7 +86,7 @@ export const uhuntProblemSubmissionListUrl = ( startSubmission = moment().subtract(1, 'years').unix(), endSubmission = moment().unix(), limit = 500 -) => `${uhuntBaseApiUrl}/p/subs/${pid}/${startSubmission}/${endSubmission}/500`; +) => `${uhuntBaseApiUrl}/p/subs/${pid}/${startSubmission}/${endSubmission}/${limit}`; /** * Get User submissions using UserID From 090e837ae21b88cc06d39ca58f7b9b5393770dc6 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Wed, 10 Jan 2024 21:11:33 -0700 Subject: [PATCH 237/315] chore(components:charts): change radar chart grid opacity depending on theme ## what - change rader chart grid opacity depending on theme - set radar chart grid opacity to 0.3 in dark mode - set radar chart grid opacity to 1.0 in light mode ## how ## why - the opacity of 0.3 is barely visible in light mode - cant change the fill color of the radar chart grid ## where - ./src/components/charts/SubmissionLanguageRadarChart.tsx ## usage --- src/components/charts/SubmissionLanguageRadarChart.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/charts/SubmissionLanguageRadarChart.tsx b/src/components/charts/SubmissionLanguageRadarChart.tsx index 828c704..21c3a29 100644 --- a/src/components/charts/SubmissionLanguageRadarChart.tsx +++ b/src/components/charts/SubmissionLanguageRadarChart.tsx @@ -6,6 +6,7 @@ import { ResponsiveContainer, Tooltip, } from "recharts"; +import { useTheme } from "next-themes"; import ChartTooltip from "@/components/charts/Tooltip"; import { processSubmissionLanguageRadarChart } from "@/utils/dataProcessing"; @@ -16,11 +17,13 @@ type Props = { }; const SubmissionLanguageRadarChart = ({ data }: Props) => { + const { theme } = useTheme(); const processedData = processSubmissionLanguageRadarChart(data); + return ( - + Date: Wed, 10 Jan 2024 21:22:49 -0700 Subject: [PATCH 238/315] chore(page:problemNum): render problem number and title ## what - render problem number and title ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 04cfc04..29b757c 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -106,7 +106,7 @@ const ProblemPage = ({ params }: problemPageProps) => { const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) return (
-

Problem page: {params.problemNum}

+

{params.problemNum}: {problemNumData.data.title}

{/* Submission verdicts bar chart */}
From c58b14f0c83aaa4a32717dc10716ff25c1a243e8 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:19:48 -0700 Subject: [PATCH 239/315] feat(shadcn:data-table): set DataTable height if provided ## what - set DataTable height if provided ## how - take `height` as a prop - set the height of the table if it's defined - set the table to overflow-y if height is defined ## why - a replacement for `VirtualTable` - VirtualTable struggles to scroll when theres high amounts of items to render. DataTable can handle high items without issue - to have the ability to set the size of the DataTable ## where - ./src/components/ui/data-table/index.tsx ## usage --- src/components/ui/data-table/index.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/ui/data-table/index.tsx b/src/components/ui/data-table/index.tsx index 30c1f7b..8bae903 100644 --- a/src/components/ui/data-table/index.tsx +++ b/src/components/ui/data-table/index.tsx @@ -37,11 +37,16 @@ import { DataTablePagination } from "@/components/ui/data-table/pagination" interface DataTableProps { columns: ColumnDef[] data: TData[] + /** + * height of the table. If specified, it will overflow the table contents + */ + height?: number } export function DataTable({ columns, data, + height }: DataTableProps) { const [sorting, setSorting] = useState([]) const [columnVisibility, setColumnVisibility] = useState({}) @@ -128,7 +133,7 @@ export function DataTable({
-
+
{table.getHeaderGroups().map((headerGroup) => ( From 232be3d5af32a9f020e424add1d680b6b20b0a21 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:25:00 -0700 Subject: [PATCH 240/315] refactor(page:problemNum): use `DataTable` to render ranklist and submissions ## what - use `DataTable` to render ranklist and submissions - set a max height to the DataTable ## how ## why - DataTable can handle high volumes of items when scrolling ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 29b757c..1c19af8 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -144,13 +144,11 @@ const ProblemPage = ({ params }: problemPageProps) => {

Ranklist (Top 10)

- {/* */} - +

Submissions

- {/* */} - +
From 13516bd512825674132dbc46e00685d723a5666f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:28:34 -0700 Subject: [PATCH 241/315] refactor(api:problemNum:submission): set submission limit to 500 ## what - set submission limit to 500 ## how ## why - Since the DataTable is being used to display problem submissions, it can handle a high amount of items to be rendered ## where - ./src/app/api/submissions/[problemNum]/route.ts ## usage --- src/app/api/submissions/[problemNum]/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/submissions/[problemNum]/route.ts b/src/app/api/submissions/[problemNum]/route.ts index 9de86ad..560683d 100644 --- a/src/app/api/submissions/[problemNum]/route.ts +++ b/src/app/api/submissions/[problemNum]/route.ts @@ -53,7 +53,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { problemData.pid, moment().subtract(1, "years").unix(), moment().unix(), - 20 + 500 ); const submissionResponse = await fetch(submissionsUrl, { cache: "no-cache" }); const submissionData: Submission["msg"][] = await submissionResponse.json(); From 1f73e6f8d8b411d1485c0a3aaf6e133405f001ce Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:15:51 -0700 Subject: [PATCH 242/315] chore(page:problemNum): add `Loading` component for `/problems/[problemNum]` page ## what - add `Loading` component for `/problems/[problemNum]` page ## how ## why - this will be used to display when fetching data on the `/problems/[problemNum]` page ## where - ./src/app/problems/[problemNum]/loading.tsx ## usage --- src/app/problems/[problemNum]/loading.tsx | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/app/problems/[problemNum]/loading.tsx diff --git a/src/app/problems/[problemNum]/loading.tsx b/src/app/problems/[problemNum]/loading.tsx new file mode 100644 index 0000000..ae01a6d --- /dev/null +++ b/src/app/problems/[problemNum]/loading.tsx @@ -0,0 +1,28 @@ +import Loading from '@/components/ui/data-table/loading' +import { Skeleton } from '@/components/ui/skeleton' +import React from 'react' + +const ProblemNumLoading = () => { + return ( +
+ +
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+ ) +} + +export default ProblemNumLoading From c4e856c4497636dd456147ea2c585b8638a73a73 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:17:39 -0700 Subject: [PATCH 243/315] chore(page:problemNum): use `Loading` component ## what - use `Loading` component - use component from `./src/app/problems/[problemNum]/loading.tsx` ## how ## why - this will be used to display when fetching data for `problems/[problemNum]` page ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 1c19af8..e3b64b6 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -18,7 +18,7 @@ import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeCha import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "./components/data-table/ranklistColumns"; -import VirtualTable from "@/components/virtual-table"; +import Loading from "./loading" type problemPageProps = { params: z.infer; @@ -70,9 +70,7 @@ const ProblemPage = ({ params }: problemPageProps) => { (problemSubmissionIsLoading || !problemSubmissionData) ) { return ( -
-

Loading: {params.problemNum}

-
+ ); } From ffd247c5f908514de35828902d65e7840d418124 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:33:32 -0700 Subject: [PATCH 244/315] feat(page:problemNum): set title as link to view problem pdf ## what - set title as link to view problem pdf ## how ## why - to be able to view the problem that is currently loaded ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index e3b64b6..0d963e0 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -19,6 +19,8 @@ import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguage import { DataTable } from "@/components/ui/data-table"; import { columns } from "./components/data-table/ranklistColumns"; import Loading from "./loading" +import Link from "next/link"; +import { uhuntViewProblemUrl } from "@/utils/constants"; type problemPageProps = { params: z.infer; @@ -104,8 +106,10 @@ const ProblemPage = ({ params }: problemPageProps) => { const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) return (
-

{params.problemNum}: {problemNumData.data.title}

-
+ + {params.problemNum}: {problemNumData.data.title} + +
{/* Submission verdicts bar chart */}
From 7c4d4bd50a691e613cd25856be1176728ad37db2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:45:22 -0700 Subject: [PATCH 245/315] style(page:problemNum): format code ## what - format code ## how ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 45 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 0d963e0..f55134f 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -4,13 +4,14 @@ import { AxiosError } from "axios"; import { z } from "zod"; import Error from "@/components/error"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { - Card, - CardContent, - CardHeader, - CardTitle, -} from "@/components/ui/card" -import { useFetchProblemNum, useFetchProblemRanklist, useFetchProblemSubmission, useFetchSubmissionCount, useFetchSubmissionLang } from "@/hooks"; + useFetchProblemNum, + useFetchProblemRanklist, + useFetchProblemSubmission, + useFetchSubmissionCount, + useFetchSubmissionLang, +} from "@/hooks"; import { problemNumSchema } from "@/schema"; import { processProblemNumBarChartData } from "@/utils/dataProcessing"; import ProblemVerdictChart from "@/components/charts/ProblemVerdictChart"; @@ -18,7 +19,7 @@ import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeCha import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "./components/data-table/ranklistColumns"; -import Loading from "./loading" +import Loading from "./loading"; import Link from "next/link"; import { uhuntViewProblemUrl } from "@/utils/constants"; @@ -40,7 +41,7 @@ const ProblemPage = ({ params }: problemPageProps) => { isError: submissionCountIsError, data: submissionCountData, error: submissionCountError, - } = useFetchSubmissionCount(params.problemNum) + } = useFetchSubmissionCount(params.problemNum); const { isLoading: submissionLangIsLoading, isSuccess: submissionLangIsSuccess, @@ -52,7 +53,7 @@ const ProblemPage = ({ params }: problemPageProps) => { isLoading: problemRanklistIsLoading, isSuccess: problemRanklistIsSuccess, isError: problemRanklistIsError, - data: problemRanklistData, + data: problemRanklistData, error: problemRanklistError, } = useFetchProblemRanklist(params.problemNum); const { @@ -63,7 +64,6 @@ const ProblemPage = ({ params }: problemPageProps) => { error: problemSubmissionError, } = useFetchProblemSubmission(params.problemNum); - if ( (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || (submissionCountIsLoading || !submissionCountData) || @@ -71,9 +71,7 @@ const ProblemPage = ({ params }: problemPageProps) => { (problemRanklistIsLoading || !problemRanklistData) || (problemSubmissionIsLoading || !problemSubmissionData) ) { - return ( - - ); + return ; } if (problemNumIsError) { @@ -103,10 +101,15 @@ const ProblemPage = ({ params }: problemPageProps) => { // console.log(problemNumData); } - const processedProblemVerdictData = processProblemNumBarChartData(problemNumData.data) + const processedProblemVerdictData = processProblemNumBarChartData( problemNumData.data); + return (
- + {params.problemNum}: {problemNumData.data.title}
@@ -146,11 +149,19 @@ const ProblemPage = ({ params }: problemPageProps) => {

Ranklist (Top 10)

- +

Submissions

- +
From a5760bc4cf8365449920375b207340b2d175e26b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:54:57 -0700 Subject: [PATCH 246/315] docs(docs:images): update images for `/problems/[problemNum]` page ## what - update images for `/problems/[problemNum]` page - loading - data loaded ## how ## why ## where - ./docs/images/page-problems-num-loading.png - ./docs/images/page-problems-num.png ## usage --- docs/images/page-problems-num-loading.png | Bin 0 -> 88325 bytes docs/images/page-problems-num.png | Bin 0 -> 330377 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/page-problems-num-loading.png create mode 100644 docs/images/page-problems-num.png diff --git a/docs/images/page-problems-num-loading.png b/docs/images/page-problems-num-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..47917861a2bf021b2cd3da74985a258a6a584fd0 GIT binary patch literal 88325 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 Q5CZ-v$^rnGl%fCs0B5MMlmGw# literal 0 HcmV?d00001 From e2eacbef2b0142e24f844df34d564347e8255c1b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:56:30 -0700 Subject: [PATCH 247/315] docs(readme): display screenshots for `/problems/[problemNum]` page ## what - display screenshots for `/problems/[problemNum]` page ## how ## why ## where - ./README.md ## usage --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 4ae3bd0..53fd868 100644 --- a/README.md +++ b/README.md @@ -50,5 +50,9 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym ![Problems page 2](docs/images/page-problems.png) +### Problems page (`/problems/[problemNum]`) +![Problems num page 1](docs/images/page-problems-num-loading.png) + +![Problems num page 2](docs/images/page-problems-num.png) From b2257467a19c0bf298fbd0eadbda52e6a58fde98 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:11:53 -0700 Subject: [PATCH 248/315] refactor(hooks:problemNum): extract data after fetching ## what - extract data after fetching when fetching from `/api/problems/[problemNum]` ## how ## why - this will prevent error `variable may be undefined` when using the hooks data ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 33e507b..5e91d80 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -70,10 +70,11 @@ export const useFetchProblems = () => { export const useFetchProblemNum = (problemNum: number) => { return useQuery({ queryKey: [queryKey.problemNum], - queryFn: async () => await axios.get(`/api/problems/${problemNum}`), - refetchOnWindowFocus: false - }) -} + queryFn: async () => + await axios.get(`/api/problems/${problemNum}`).then((res) => res.data), + refetchOnWindowFocus: false, + }); +}; /** * Fetch submissions overtime count From b54d7a5b34077bba9b7193b023d33f2ae8cd9e0d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:26:36 -0700 Subject: [PATCH 249/315] refactor(page:problemNum): update reference when fetching problemNum stats ## what - update reference when fetching problemNum stats ## how ## why - to accommodate changes made in `./src/hooks/index.ts` - check 46ca37e ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index f55134f..acb2d30 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -65,11 +65,11 @@ const ProblemPage = ({ params }: problemPageProps) => { } = useFetchProblemSubmission(params.problemNum); if ( - (problemNumIsLoading || !problemNumData || problemNumData.data === undefined) || - (submissionCountIsLoading || !submissionCountData) || - (submissionLangIsLoading || !submissionLangData) || - (problemRanklistIsLoading || !problemRanklistData) || - (problemSubmissionIsLoading || !problemSubmissionData) + problemNumIsLoading || + submissionCountIsLoading || + submissionLangIsLoading || + problemRanklistIsLoading || + problemSubmissionIsLoading ) { return ; } @@ -101,16 +101,16 @@ const ProblemPage = ({ params }: problemPageProps) => { // console.log(problemNumData); } - const processedProblemVerdictData = processProblemNumBarChartData( problemNumData.data); + const processedProblemVerdictData = processProblemNumBarChartData(problemNumData); return (
- {params.problemNum}: {problemNumData.data.title} + {params.problemNum}: {problemNumData.title}
{/* Submission verdicts bar chart */} From 59a17184e2c0955f8d1065d46c7c0176cf285441 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:29:32 -0700 Subject: [PATCH 250/315] style(hooks): format code ## what - format code ## how ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 5e91d80..c6ea4f5 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -49,7 +49,7 @@ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { return data; }, refetchInterval: fetchInterval, - staleTime: fetchInterval + staleTime: fetchInterval, }); }; @@ -60,7 +60,7 @@ export const useFetchProblems = () => { return useQuery({ queryKey: [queryKey.allProblems], queryFn: async () => axios.get("/api/problems").then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); }; @@ -86,9 +86,9 @@ export const useFetchSubmissionCount = (problemNum: number) => { await axios .get(`/api/submissions/overtime/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} +}; /** * Fetch submissions by language @@ -100,9 +100,9 @@ export const useFetchSubmissionLang = (problemNum: number) => { await axios .get(`/api/submissions/language/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} +}; /** * Fetch problem ranklist @@ -114,9 +114,9 @@ export const useFetchProblemRanklist = (problemNum: number) => { await axios .get(`/api/problems/ranklist/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} +}; /** * Fetch problem submissions @@ -128,7 +128,6 @@ export const useFetchProblemSubmission = (problemNum: number) => { await axios .get(`/api/submissions/${problemNum}`) .then((res) => res.data), - refetchOnWindowFocus: false + refetchOnWindowFocus: false, }); -} - +}; From c6d11522401c69ff46abf4761a97f5ecb9626a48 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:41:18 -0700 Subject: [PATCH 251/315] build(npm): add script `lint:tsc` and `lint:eslint` ## what - add npm script - `lint:tsc` - `lint:eslint` - update npm script - `lint` ## how ## why - to lint code using typescript and eslint separately and together ## where - ./package.json ## usage --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8033b32..88420a6 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "npm run lint:tsc && npm run lint:eslint", + "lint:tsc": "tsc --build tsconfig.json .", + "lint:eslint": "next lint" }, "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", From e3dcc445cabd064d4c449cbed6817b4fffffd7d5 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:43:55 -0700 Subject: [PATCH 252/315] refactor(hooks): apply types returned when fetching ## what - apply types returned when fetching ## how ## why - to provide a data type when data is fetched ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index c6ea4f5..e6f5122 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { useQuery } from "@tanstack/react-query"; -import { Submission } from "@/types"; +import { Problem, Submission } from "@/types"; /** * Enum for React Query Keys when using React-query @@ -59,7 +59,7 @@ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { export const useFetchProblems = () => { return useQuery({ queryKey: [queryKey.allProblems], - queryFn: async () => axios.get("/api/problems").then((res) => res.data), + queryFn: async () => axios.get("/api/problems").then((res) => res.data), refetchOnWindowFocus: false, }); }; @@ -71,7 +71,7 @@ export const useFetchProblemNum = (problemNum: number) => { return useQuery({ queryKey: [queryKey.problemNum], queryFn: async () => - await axios.get(`/api/problems/${problemNum}`).then((res) => res.data), + await axios.get(`/api/problems/${problemNum}`).then((res) => res.data), refetchOnWindowFocus: false, }); }; @@ -112,7 +112,7 @@ export const useFetchProblemRanklist = (problemNum: number) => { queryKey: [queryKey.problemRanklist], queryFn: async () => await axios - .get(`/api/problems/ranklist/${problemNum}`) + .get(`/api/problems/ranklist/${problemNum}`) .then((res) => res.data), refetchOnWindowFocus: false, }); @@ -126,7 +126,7 @@ export const useFetchProblemSubmission = (problemNum: number) => { queryKey: [queryKey.problemSubmission], queryFn: async () => await axios - .get(`/api/submissions/${problemNum}`) + .get(`/api/submissions/${problemNum}`) .then((res) => res.data), refetchOnWindowFocus: false, }); From d1f403db78f79e3ed0f7604746210f635a11037e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:44:45 -0700 Subject: [PATCH 253/315] chore: apply types to the fetched data using react-query hooks ## what - apply types to the fetched data using react-query hooks ## how ## why - to deal with typescript errors - to accomodate changes made from d957416 ## where - ./src/app/problems/[problemNum]/page.tsx - ./src/app/problems/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 12 ++++++------ src/app/problems/page.tsx | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index acb2d30..9eeee8b 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -22,6 +22,7 @@ import { columns } from "./components/data-table/ranklistColumns"; import Loading from "./loading"; import Link from "next/link"; import { uhuntViewProblemUrl } from "@/utils/constants"; +import { Problem, Submission } from "@/types"; type problemPageProps = { params: z.infer; @@ -101,16 +102,15 @@ const ProblemPage = ({ params }: problemPageProps) => { // console.log(problemNumData); } - const processedProblemVerdictData = processProblemNumBarChartData(problemNumData); - + const processedProblemVerdictData = processProblemNumBarChartData( problemNumData as Problem); return (
- {params.problemNum}: {problemNumData.title} + {params.problemNum}: {( problemNumData as Problem ).title}
{/* Submission verdicts bar chart */} @@ -151,7 +151,7 @@ const ProblemPage = ({ params }: problemPageProps) => {

Ranklist (Top 10)

@@ -159,7 +159,7 @@ const ProblemPage = ({ params }: problemPageProps) => {

Submissions

diff --git a/src/app/problems/page.tsx b/src/app/problems/page.tsx index a1d05d6..30764b2 100644 --- a/src/app/problems/page.tsx +++ b/src/app/problems/page.tsx @@ -4,6 +4,7 @@ import { DataTable } from "@/components/ui/data-table"; import DataTableLoading from "@/components/ui/data-table/loading"; import { columns } from "@/app/problems/components/data-table/columns"; import { useFetchProblems } from "@/hooks"; +import { Problem } from "@/types"; const ProblemsPage = () => { const { data, isLoading, isError } = useFetchProblems(); @@ -24,7 +25,7 @@ const ProblemsPage = () => { return (

All Problems

- +
); }; From 6eb3c69a5234db10109cabe5f5e882c32770ba49 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 12 Jan 2024 17:08:39 +0000 Subject: [PATCH 254/315] chore(release): 1.0.0-development.5 [skip ci] ## [1.0.0-development.5](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.4...1.0.0-development.5) (2024-1-12) ### :sparkles: Features * **api:problemNum:ranklist:** add endpoint `/api/problems/ranklist/[problemNum]` ([1a35cec](https://github.com/Clumsy-Coder/uva-uhunt/commit/1a35cec38173c12ce1078dda8795cc807ebacbd3)) * **api:problemNum:submission:** add endpoint `/api/submissions/[problemNum]` ([36ed144](https://github.com/Clumsy-Coder/uva-uhunt/commit/36ed1442d43c849501ce540771ec65c300b968ba)) * **api:submission:language:** add endpoint `/api/submissions/language/[problemNum]` ([fd4c856](https://github.com/Clumsy-Coder/uva-uhunt/commit/fd4c856a0f7943d1476afdc714a726daf3747bbd)) * **api:submission:** add endpoint `/api/submissions/overtime/[problemNum]` ([304a563](https://github.com/Clumsy-Coder/uva-uhunt/commit/304a5632393094c51671213156267d1d73968ba5)) * **components:charts:** add `ProblemVerdictChart` component ([2104011](https://github.com/Clumsy-Coder/uva-uhunt/commit/2104011cc6811b4d854ef7e2c88e52cd373046e8)) * **components:charts:** add `SubmissionLanguageRadarChart` component ([fc5ecfc](https://github.com/Clumsy-Coder/uva-uhunt/commit/fc5ecfc46270ddee9da516ca2952c51232d65a33)) * **components:charts:** add `SubmissionsOvertimeChart` component ([16d1311](https://github.com/Clumsy-Coder/uva-uhunt/commit/16d1311f4862b8c751cf69c1eeeb2ce5ef8b927a)) * **components:charts:** add Recharts custom tooltip component ([b6ef657](https://github.com/Clumsy-Coder/uva-uhunt/commit/b6ef6576adaa4d3c2c41244e8abd637f44da09b0)) * **components:** add `VirtualTable` component ([09259ea](https://github.com/Clumsy-Coder/uva-uhunt/commit/09259ea6136050bb7a0338efd6afdabc4225b18b)) * **page:problemNum:** fetch stats for `/problems/[problemNum]` page ([afe0752](https://github.com/Clumsy-Coder/uva-uhunt/commit/afe075219fcb5d52a165228ef2d7210c91bf8aa9)) * **page:problemNum:** render `ProblemVerdictChart` component ([acc2eac](https://github.com/Clumsy-Coder/uva-uhunt/commit/acc2eac151fb0b8c5713df1007c8ad627a0b7fac)) * **page:problemNum:** render `SubmissionLanguageRadarChart` component ([6ebcb52](https://github.com/Clumsy-Coder/uva-uhunt/commit/6ebcb5272a10374aca6cb3a6bb5a847c3b4ee890)) * **page:problemNum:** render `SubmissionOvertimeChart` component ([3f2f7c4](https://github.com/Clumsy-Coder/uva-uhunt/commit/3f2f7c4e8af0eeb57736696c36d2164f8572013a)) * **page:problemNum:** render `VirtualTable` for `Problem submissions` ([d271d90](https://github.com/Clumsy-Coder/uva-uhunt/commit/d271d90ee05dfd43f308c453e9d42947f52d3392)) * **page:problemNum:** render `VirtualTable` for ranklist ([e3ac245](https://github.com/Clumsy-Coder/uva-uhunt/commit/e3ac24512fd3c74f2f3865cfd1e841e19d2bedd3)) * **page:problemNum:** set title as link to view problem pdf ([ffd247c](https://github.com/Clumsy-Coder/uva-uhunt/commit/ffd247c5f908514de35828902d65e7840d418124)) * **shadcn:data-table:** set DataTable height if provided ([c58b14f](https://github.com/Clumsy-Coder/uva-uhunt/commit/c58b14f0c83aaa4a32717dc10716ff25c1a243e8)) --- CHANGELOG.md | 23 +++++ package-lock.json | 237 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 3 files changed, 258 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aed09e4..1e9d4fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +## [1.0.0-development.5](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.4...1.0.0-development.5) (2024-1-12) + + +### :sparkles: Features + +* **api:problemNum:ranklist:** add endpoint `/api/problems/ranklist/[problemNum]` ([1a35cec](https://github.com/Clumsy-Coder/uva-uhunt/commit/1a35cec38173c12ce1078dda8795cc807ebacbd3)) +* **api:problemNum:submission:** add endpoint `/api/submissions/[problemNum]` ([36ed144](https://github.com/Clumsy-Coder/uva-uhunt/commit/36ed1442d43c849501ce540771ec65c300b968ba)) +* **api:submission:language:** add endpoint `/api/submissions/language/[problemNum]` ([fd4c856](https://github.com/Clumsy-Coder/uva-uhunt/commit/fd4c856a0f7943d1476afdc714a726daf3747bbd)) +* **api:submission:** add endpoint `/api/submissions/overtime/[problemNum]` ([304a563](https://github.com/Clumsy-Coder/uva-uhunt/commit/304a5632393094c51671213156267d1d73968ba5)) +* **components:charts:** add `ProblemVerdictChart` component ([2104011](https://github.com/Clumsy-Coder/uva-uhunt/commit/2104011cc6811b4d854ef7e2c88e52cd373046e8)) +* **components:charts:** add `SubmissionLanguageRadarChart` component ([fc5ecfc](https://github.com/Clumsy-Coder/uva-uhunt/commit/fc5ecfc46270ddee9da516ca2952c51232d65a33)) +* **components:charts:** add `SubmissionsOvertimeChart` component ([16d1311](https://github.com/Clumsy-Coder/uva-uhunt/commit/16d1311f4862b8c751cf69c1eeeb2ce5ef8b927a)) +* **components:charts:** add Recharts custom tooltip component ([b6ef657](https://github.com/Clumsy-Coder/uva-uhunt/commit/b6ef6576adaa4d3c2c41244e8abd637f44da09b0)) +* **components:** add `VirtualTable` component ([09259ea](https://github.com/Clumsy-Coder/uva-uhunt/commit/09259ea6136050bb7a0338efd6afdabc4225b18b)) +* **page:problemNum:** fetch stats for `/problems/[problemNum]` page ([afe0752](https://github.com/Clumsy-Coder/uva-uhunt/commit/afe075219fcb5d52a165228ef2d7210c91bf8aa9)) +* **page:problemNum:** render `ProblemVerdictChart` component ([acc2eac](https://github.com/Clumsy-Coder/uva-uhunt/commit/acc2eac151fb0b8c5713df1007c8ad627a0b7fac)) +* **page:problemNum:** render `SubmissionLanguageRadarChart` component ([6ebcb52](https://github.com/Clumsy-Coder/uva-uhunt/commit/6ebcb5272a10374aca6cb3a6bb5a847c3b4ee890)) +* **page:problemNum:** render `SubmissionOvertimeChart` component ([3f2f7c4](https://github.com/Clumsy-Coder/uva-uhunt/commit/3f2f7c4e8af0eeb57736696c36d2164f8572013a)) +* **page:problemNum:** render `VirtualTable` for `Problem submissions` ([d271d90](https://github.com/Clumsy-Coder/uva-uhunt/commit/d271d90ee05dfd43f308c453e9d42947f52d3392)) +* **page:problemNum:** render `VirtualTable` for ranklist ([e3ac245](https://github.com/Clumsy-Coder/uva-uhunt/commit/e3ac24512fd3c74f2f3865cfd1e841e19d2bedd3)) +* **page:problemNum:** set title as link to view problem pdf ([ffd247c](https://github.com/Clumsy-Coder/uva-uhunt/commit/ffd247c5f908514de35828902d65e7840d418124)) +* **shadcn:data-table:** set DataTable height if provided ([c58b14f](https://github.com/Clumsy-Coder/uva-uhunt/commit/c58b14f0c83aaa4a32717dc10716ff25c1a243e8)) + ## [1.0.0-development.4](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.3...1.0.0-development.4) (2024-1-3) diff --git a/package-lock.json b/package-lock.json index 140d2fd..702a20c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.4", + "version": "1.0.0-development.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uva-uhunt", - "version": "1.0.0-development.4", + "version": "1.0.0-development.5", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", @@ -6543,14 +6543,17 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6567,6 +6570,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6578,11 +6582,13 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6599,6 +6605,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6613,11 +6620,13 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6633,6 +6642,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6644,6 +6654,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6656,6 +6667,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6668,6 +6680,7 @@ }, "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6681,6 +6694,7 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.2.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6727,6 +6741,7 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6745,6 +6760,7 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6756,6 +6772,7 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6767,6 +6784,7 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6785,6 +6803,7 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6800,6 +6819,7 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6814,6 +6834,7 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6828,6 +6849,7 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6836,6 +6858,7 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6844,6 +6867,7 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6861,6 +6885,7 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6872,6 +6897,7 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6883,6 +6909,7 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6898,14 +6925,17 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { "node": ">=14" } }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6917,6 +6947,7 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", + "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -6925,6 +6956,7 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6938,6 +6970,7 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6950,6 +6983,7 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6958,6 +6992,7 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6970,6 +7005,7 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -6978,6 +7014,7 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6989,6 +7026,7 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7001,6 +7039,7 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7009,6 +7048,7 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7023,16 +7063,19 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7045,11 +7088,13 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", + "dev": true, "funding": [ { "type": "github", @@ -7069,6 +7114,7 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7083,6 +7129,7 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7091,6 +7138,7 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7099,6 +7147,7 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", + "dev": true, "funding": [ { "type": "github", @@ -7122,6 +7171,7 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7130,6 +7180,7 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7152,6 +7203,7 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7163,6 +7215,7 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7171,6 +7224,7 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.9.0", + "dev": true, "funding": [ { "type": "github", @@ -7185,6 +7239,7 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7196,6 +7251,7 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7204,6 +7260,7 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7216,6 +7273,7 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7230,6 +7288,7 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7238,6 +7297,7 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7246,6 +7306,7 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7257,11 +7318,13 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -7270,6 +7333,7 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7282,16 +7346,19 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7305,6 +7372,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7319,6 +7387,7 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7330,6 +7399,7 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7346,11 +7416,13 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7362,11 +7434,13 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", + "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7375,24 +7449,29 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7401,11 +7480,13 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7414,6 +7495,7 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7422,11 +7504,13 @@ }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7435,6 +7519,7 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7450,6 +7535,7 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7461,11 +7547,13 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7484,6 +7572,7 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7505,11 +7594,13 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7521,11 +7612,13 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7537,13 +7630,16 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7553,6 +7649,7 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", + "dev": true, "funding": [ { "type": "github", @@ -7572,6 +7669,7 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7583,6 +7681,7 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7591,6 +7690,7 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7599,6 +7699,7 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7607,6 +7708,7 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7624,11 +7726,13 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7637,6 +7741,7 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -7648,6 +7753,7 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7659,6 +7765,7 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7667,16 +7774,19 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "2.3.6", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -7694,6 +7804,7 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7702,6 +7813,7 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -7710,6 +7822,7 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", + "dev": true, "engines": [ "node >= 0.2.0" ], @@ -7718,16 +7831,19 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7740,6 +7856,7 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7759,6 +7876,7 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7780,6 +7898,7 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7791,6 +7910,7 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7803,6 +7923,7 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7815,6 +7936,7 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7829,6 +7951,7 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7847,6 +7970,7 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7858,6 +7982,7 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7870,6 +7995,7 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7885,6 +8011,7 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7893,6 +8020,7 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7914,6 +8042,7 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7928,6 +8057,7 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.0.4", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7936,6 +8066,7 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7947,6 +8078,7 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7958,6 +8090,7 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7974,6 +8107,7 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7985,6 +8119,7 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7996,6 +8131,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8005,6 +8141,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8016,6 +8153,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8027,6 +8165,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8038,6 +8177,7 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8049,6 +8189,7 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8060,6 +8201,7 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8072,6 +8214,7 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8083,6 +8226,7 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -8094,11 +8238,13 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8107,6 +8253,7 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8115,6 +8262,7 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8138,6 +8286,7 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8152,6 +8301,7 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8166,6 +8316,7 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8174,6 +8325,7 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8185,6 +8337,7 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8196,6 +8349,7 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8204,6 +8358,7 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8218,6 +8373,7 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8229,6 +8385,7 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8243,6 +8400,7 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "9.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8255,6 +8413,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "16.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8272,6 +8431,7 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -8280,6 +8440,7 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8294,6 +8455,7 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8308,6 +8470,7 @@ }, "node_modules/npm/node_modules/pacote": { "version": "17.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8339,6 +8502,7 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8352,6 +8516,7 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8360,6 +8525,7 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.10.1", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8375,6 +8541,7 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8387,6 +8554,7 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8395,6 +8563,7 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8403,6 +8572,7 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8411,6 +8581,7 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8419,11 +8590,13 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8436,6 +8609,7 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8447,6 +8621,7 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", + "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -8454,6 +8629,7 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8465,6 +8641,7 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8473,6 +8650,7 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "7.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8487,6 +8665,7 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8499,6 +8678,7 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "4.4.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8514,6 +8694,7 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8522,6 +8703,7 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", + "dev": true, "funding": [ { "type": "github", @@ -8541,11 +8723,14 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", + "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8560,6 +8745,7 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8571,11 +8757,13 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8587,6 +8775,7 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8595,6 +8784,7 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8606,6 +8796,7 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8620,6 +8811,7 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8629,6 +8821,7 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8642,6 +8835,7 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8651,11 +8845,13 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", + "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8665,11 +8861,13 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.16", + "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8681,6 +8879,7 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8689,6 +8888,7 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8703,6 +8903,7 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8716,6 +8917,7 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8728,6 +8930,7 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8739,6 +8942,7 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8750,6 +8954,7 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8766,6 +8971,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8777,6 +8983,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8788,6 +8995,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8796,16 +9004,19 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8814,6 +9025,7 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8827,6 +9039,7 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8838,6 +9051,7 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8849,11 +9063,13 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8863,6 +9079,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8874,11 +9091,13 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8887,6 +9106,7 @@ }, "node_modules/npm/node_modules/which": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8901,6 +9121,7 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8909,6 +9130,7 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8917,6 +9139,7 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8934,6 +9157,7 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8950,6 +9174,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8961,6 +9186,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8972,11 +9198,13 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8993,6 +9221,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9007,6 +9236,7 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9019,6 +9249,7 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, diff --git a/package.json b/package.json index 88420a6..49234b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.4", + "version": "1.0.0-development.5", "private": true, "scripts": { "dev": "next dev", From a54727b1f305965b8b758956d63b53ff23ec4dd9 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 13 Jan 2024 13:21:15 -0700 Subject: [PATCH 255/315] chore(types): add type for User Submission ## what - add type for User Submission - UserSubmission - name: name of the user - uname: username of the user - subs: (of type UserSub) - sid: submission id - pid: problem id - pnum: problem number - pTitle: problem title - ver: verdict id - verdict: verdict details (of type ProblemVerdictType) - run: runtime - sbt: submission time - lan: language - rank: submission rank ## how ## why - used for setting up structure of the data returned from api ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index 14aecb6..8372ebe 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -372,3 +372,36 @@ export type Submission = { }; /////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Submissions array returned when fetching user submissions + */ +export type UserSub = { + sid: number; + pid: number; + pnum: number; + pTitle: string; + ver: number; + verdict: ProblemVerdictType, + run: number; + sbt: number + lan: string; + rank: number +} + +// user submissions + +export type UserSubmission = { + /** + * name of the user + */ + name: string; + /** + * username of the user + */ + uname: string; + /** + * User submissions + */ + subs: UserSub[] +} From 0426358c7d78b18dff280ff11174a07b1beec58b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 13 Jan 2024 13:23:53 -0700 Subject: [PATCH 256/315] chore(schema:user:submissions): add schema for endpoint `/api/users/[username]/submissions` ## what - add schema for endpoint `/api/users/[username]/submissions` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index c5cbe3f..6762ce4 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -32,3 +32,12 @@ export const problemNumSubmissionSchema = z.object({ .number({ invalid_type_error: "Problem number must be a number" }) .min(1, "Problem number must be a number greater than 0"), }) + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Schema validation for endpoint `/api/users/[username]/submissions` + */ +export const userSchema = z.object({ + username: z.coerce.string().min(1, "Username must have at least on character") +}) From 023d8865d3603325c11185d2ee7e4896f4a7c211 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 13 Jan 2024 13:26:09 -0700 Subject: [PATCH 257/315] feat(api:user:submissions): add endpoint `/api/users/[username]/submissions` ## what - add endpoint `/api/users/[username]/submissions` ## how - check if username is valid (using zod schema) - if username doesn't exist, return 404 - fetch all problems from `/api/problems` - used as a cache for `pnum`, `pTitle` - fetch user submissions - sort the submissions by submission time in descending order - take only the first 500 elements in the array - convert submission array into `UserSub` object - add properties - pnum - pTitle - verdict ## why - this will be used for fetching user submissions ## where - ./src/app/api/users/[username]/submissions/route.ts ## usage --- .../api/users/[username]/submissions/route.ts | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/app/api/users/[username]/submissions/route.ts diff --git a/src/app/api/users/[username]/submissions/route.ts b/src/app/api/users/[username]/submissions/route.ts new file mode 100644 index 0000000..531fdb9 --- /dev/null +++ b/src/app/api/users/[username]/submissions/route.ts @@ -0,0 +1,118 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { userSchema as schema } from "@/schema"; +import { + uhuntUserSubmissionsUrl, + uhuntUsername2UidUrl, +} from "@/utils/constants"; +import { + Language, + Problem, + ProblemVerdictMap, + UserSub, + UserSubmission, +} from "@/types"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch username ID + const { username } = params; + + const usernameUrl = uhuntUsername2UidUrl(username); + const usernameResponse = await fetch(usernameUrl); + const usernameData: number = await usernameResponse.json(); + + // return 404 if problem doesn't exist + if (usernameData === 0) { + const message = { + message: `Username ${username} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch all problems + // this is needed because later each submission will need problem number and problem title. + // if repeatedly fetching from upstream api server, it will slow down. + const allProblemsUrl = `http://localhost:${process.env.PORT}/api/problems`; + const allProblemsResponse = await fetch(allProblemsUrl); + const allProblemsData: Problem[] = await allProblemsResponse.json(); + + // fetch submissions of the user + const userSubmissionsUrl = uhuntUserSubmissionsUrl(usernameData); + const userSubmissionResponse = await fetch(userSubmissionsUrl, { + cache: "no-cache", + }); + const userSubmissionData = + (await userSubmissionResponse.json()) as UserSubmission; + + // change userSubmissionData.sub[] into UserSub[] + // originally the upstream api would return `userSubmissionData.sub` as an array of array + // // ex: + // [ + // [ + // 0: 5251911 // submission ID + // 1: 62 // problem ID + // 2: 10 // verdict ID + // 3: 0 // runtime + // 4: 1168359789 // submission time + // 5: 4 // language ID + // 6: -1 // rank + // ] + // ] + const converted = (userSubmissionData.subs as unknown as number[][]) + .sort((a, b) => b[4] - a[4]) // sort by submission time in descending order + .slice(0, 500) // take only the most recent 500 submissions + .map((submission: number[]) => { + const converted: Partial = {}; + converted.sid = submission[0]; + converted.pid = submission[1]; + converted.ver = submission[2]; + converted.run = submission[3]; + converted.sbt = submission[4]; + converted.lan = submission[5] as unknown as string; + converted.rank = submission[6]; + + const problemData = allProblemsData.find( + (problem) => problem.pid === converted.pid, + ); + + converted.pnum = (problemData as Problem).num; + converted.pTitle = (problemData as Problem).title; + converted.verdict = ProblemVerdictMap[converted.ver as number] || { + fgColor: "text-primary-foreground dark:text-secondary-foreground", + bgColor: "bg-gray-500", + title: "- In Queue -", + fgHex: "", + bgHex: "6b7280", + }; + converted.lan = Language[converted.lan]; + + return converted; + }); + + userSubmissionData.subs = converted as unknown as UserSub[]; + + return Response.json(userSubmissionData); +}; From b055aa871eb6da099b9cf7b5b8c3620ca24db69d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 13 Jan 2024 13:31:33 -0700 Subject: [PATCH 258/315] chore(hooks): add react-query hook to fetch user submissions ## what - add react-query hook to fetch user submissions ## how - fetch from endpoint `/api/users/[username]/submissions` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index e6f5122..0eac29b 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { useQuery } from "@tanstack/react-query"; -import { Problem, Submission } from "@/types"; +import { Problem, Submission, UserSubmission } from "@/types"; /** * Enum for React Query Keys when using React-query @@ -32,6 +32,11 @@ export enum queryKey { * React query key for fetching submission by language */ submissionLang = "submission-language", + //////////////////////////////////////////////////////////////////////////////////////////////// + /** + * React query key for fetching user submissions + */ + userSubmissions = "user-submissions", } /** @@ -131,3 +136,20 @@ export const useFetchProblemSubmission = (problemNum: number) => { refetchOnWindowFocus: false, }); }; + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Fetch user submissions + */ +export const useFetchUserSubmissions = (username: string) => { + return useQuery({ + queryKey: [queryKey.userSubmissions], + queryFn: async () => + await axios + .get(`/api/users/${username}/submissions`) + .then((res) => res.data), + refetchOnWindowFocus: false, + }); +}; + From 28b44585abc4b6ef47a694e1f4a405a9b72c3559 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 13 Jan 2024 13:33:15 -0700 Subject: [PATCH 259/315] chore(shadcn:data-table): add columns structure for user submissions table ## what - add columns structure for user submissions table - submission ID - problem number - problem title - verdict - language - runtime - rank - submission time ## how - using @tanstack/react-table to generate a table ## why - this will be used to display data as a table using DataTable ## where - ./src/app/users/[username]/components/data-table/submissionColumns.tsx ## usage --- .../data-table/submissionColumns.tsx | 219 ++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 src/app/users/[username]/components/data-table/submissionColumns.tsx diff --git a/src/app/users/[username]/components/data-table/submissionColumns.tsx b/src/app/users/[username]/components/data-table/submissionColumns.tsx new file mode 100644 index 0000000..33a52a2 --- /dev/null +++ b/src/app/users/[username]/components/data-table/submissionColumns.tsx @@ -0,0 +1,219 @@ +"use client"; + +import { ColumnDef } from "@tanstack/react-table"; +import moment from "moment"; +import Link from "next/link"; + +import { Badge } from "@/components/ui/badge"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { DataTableColumnHeader } from "@/components/ui/data-table/column-header"; +import { Submission, UserSub } from "@/types"; +import { cn } from "@/lib/utils"; + +export const columns: ColumnDef[] = [ + { + accessorKey: "submissionId", + accessorFn: (row) => row.sid, + meta: { + // for displaying the columns dropdown + headerTitle: "Submission ID", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("submissionId")} + + ); + }, + }, + { + accessorKey: "problemNum", + accessorFn: (row) => row.pnum, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Number", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemNum")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "problemTitle", + accessorFn: (row) => row.pTitle, + meta: { + // for displaying the columns dropdown + headerTitle: "Problem Title", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("problemTitle")} + + ); + }, + enableSorting: false, + }, + // { + // accessorKey: "username", + // accessorFn: (row) => `${row.name} (${row.uname})`, + // meta: { + // // for displaying the columns dropdown + // headerTitle: "User (username)", + // }, + // header: ({ column }) => { + // return ; + // }, + // cell: ({ row }) => { + // if (row.original.uname === "--- ? ---") { + // return ( + //

{row.original.uname}

+ // ) + // } + // return ( + // + // {row.getValue("username")} + // + // ); + // }, + // }, + { + accessorKey: "verdict", + accessorFn: (row) => row.verdict.title, + meta: { + // for displaying the columns dropdown + headerTitle: "Verdict", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return ( + + {row.getValue("verdict")} + + ); + }, + enableSorting: false, + }, + { + accessorKey: "language", + accessorFn: (row) => row.lan, + meta: { + // for displaying the columns dropdown + headerTitle: "Language", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{row.getValue("language")}

; + }, + enableSorting: false, + }, + { + accessorKey: "runtime", + accessorFn: (row) => row.run, + meta: { + // for displaying the columns dropdown + headerTitle: "Runtime", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{((row.getValue("runtime") as number) / 1000).toFixed(3)}

; + }, + enableSorting: false, + }, + { + accessorKey: "rank", + accessorFn: (row) => row.rank, + meta: { + // for displaying the columns dropdown + headerTitle: "Rank", + }, + header: ({ column }) => { + return ; + }, + cell: ({ row }) => { + return

{row.getValue("rank")}

; + }, + enableSorting: false, + }, + { + accessorKey: "submitTime", + accessorFn: (row) => row.sbt, + meta: { + // for displaying the columns dropdown + headerTitle: "Submit Time", + }, + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + return ( + + + +

+ {moment.unix(row.getValue("submitTime")).fromNow()} +

+
+ +

+ Submitted at{" "} + {moment.unix(row.getValue("submitTime")).toLocaleString()} +

+
+
+
+ ); + }, + enableSorting: false, + }, +]; + From c937b7871af9c72c784dcf80197252eaf72ca318 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 13 Jan 2024 16:14:55 -0700 Subject: [PATCH 260/315] feat(page:user): display user submissions on `/users/[username]` page ## what - display user submissions on `/users/[username]` page ## how - using DataTable to display a table ## why ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 69 +++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/app/users/[username]/page.tsx diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx new file mode 100644 index 0000000..882251d --- /dev/null +++ b/src/app/users/[username]/page.tsx @@ -0,0 +1,69 @@ +"use client"; + +import { AxiosError } from "axios"; +import { z } from "zod"; + +import Error from "@/components/error"; +import { userSchema } from "@/schema"; +import { useFetchUserSubmissions } from "@/hooks"; +import { processUserSubmissionsVerdictBarChart } from "@/utils/dataProcessing"; +import { UserSubmission } from "@/types"; +import { DataTable } from "@/components/ui/data-table"; +import { columns } from "@/app/users/[username]/components/data-table/submissionColumns"; + +type Props = { + params: z.infer; +}; + +const UserPage = ({ params }: Props) => { + const { + isLoading: userSubmissionIsLoading, + isSuccess: userSubmissionIsSuccess, + isError: userSubmissionIsError, + data: userSubmissionData, + error: userSubmissionError, + } = useFetchUserSubmissions(params.username); + + if (userSubmissionIsLoading) { + return
Loading {params.username}
; + } + + if(userSubmissionIsError) { + type ErrorMessage = { + message: string; + } + + const status = (userSubmissionError as AxiosError).response?.status + const message = (userSubmissionError as AxiosError).response?.data.message + + return ( + + ); + } + + // process data + // const userSubmissionVerdicts = processUserSubmissionsVerdictBarChart((userSubmissionData as UserSubmission).subs) + // console.log(userSubmissionVerdicts) + + return ( +
+
+

{userSubmissionData?.name} ({params.username})

+
+
+
+
+
+

Submissions

+ +
+
+
+
+ ) +}; + +export default UserPage; From 495a1fde5620f268088f48528e26394f8313cb96 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sat, 13 Jan 2024 16:52:41 -0700 Subject: [PATCH 261/315] chore(types): add property `verdictShort` in `ProblemVerdictMap` object ## what - add property `verdictShort` in `ProblemVerdictMap` object ## how ## why - this will be used in api endpoint `/api/users/[username]/submissions/verdict` - the endpoint will count the verdicts by verdict ID - the verdicts are in number form - the ProblemVerdictMap needs a way to reference the object in reverse when converting verdictID into verdictShort - with this the endpoint can access the object of the corresponding verdictObject using verdictShort ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index 8372ebe..f30ee29 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -43,6 +43,10 @@ export interface ProblemVerdictType { * Usually used for displaying verdict using shadcn-ui `Badge` component */ fgHex: string; + /** + * Verdict shorthand string + */ + verdictShort: string; } const ProblemVerdictMap: Record = { @@ -55,6 +59,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#00AA00", fgHex: "", + verdictShort: "ac" }, /** * Number of Presentation Error @@ -65,6 +70,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#666600", fgHex: "", + verdictShort: "pe" }, /** * Number of Wrong Answer @@ -75,6 +81,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#FF0000", fgHex: "", + verdictShort: "wa" }, /** * Number of Time Limit Exceeded @@ -85,6 +92,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#0000FF", fgHex: "", + verdictShort: "tle" }, /** * Number of Memory Limit Exceeded @@ -95,6 +103,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#0000AA", fgHex: "", + verdictShort: "mle" }, /** * Number of Compilation Error @@ -105,6 +114,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#EA5A0C", fgHex: "", + verdictShort: "ce" }, /** * Number of Runtime Error @@ -115,6 +125,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#00AAAA", fgHex: "", + verdictShort: "re" }, /** * Number of Output Limit Exceeded @@ -125,6 +136,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "#000066", fgHex: "", + verdictShort: "ole" }, /** * Number of Submission Error @@ -135,6 +147,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "6b7280", fgHex: "", + verdictShort: "sube" }, /** * Number of Can't be Judged @@ -145,6 +158,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "6b7280", fgHex: "", + verdictShort: "noj" }, /** * Number of In Queue @@ -155,6 +169,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "6b7280", fgHex: "", + verdictShort: "inq" }, /** * Number of Restricted Function @@ -165,6 +180,7 @@ const ProblemVerdictMap: Record = { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgHex: "6b7280", fgHex: "", + verdictShort: "rf" } } // adding keys from `Submission.ver` into object `ProblemVerdictMap` From 9ffc525545d12d5a39d2ca5e99a2ba78cdb7c128 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 07:06:20 -0700 Subject: [PATCH 262/315] chore(types): add type for User submission verdict ## what - add type for User submission verdict - UserSubmissionBarChartType - name: name of the bar in bar chart - verdict: value of submission verdict count - tooltipTitle: string to display in bar tooltip - fill: color to display the bar chart ## how ## why - used for generating data for Rechart bar chart - for displaying user submissions by verdict ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index f30ee29..c819093 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -421,3 +421,28 @@ export type UserSubmission = { */ subs: UserSub[] } + +/** + * Data structure for display user submissions using Rechart bar chart + * Used in api endpoint `/api/users/[username]/submissions/verdict` + */ +export type UserSubmissionBarChartType = { + /** + * Name of the bar in the bar chart. + * usually the verdict acronyms + */ + name: string; + /** + * The value of the verdict + */ + verdict: number; + /** + * Tooltip title to display. + * Usually would be the full string of a verdict + */ + tooltipTitle: string; + /** + * Color for bar + */ + fill: string; +}; From 33101e61c3c9e9b44bb9a0f76bc6b30f2fd670f2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 07:10:00 -0700 Subject: [PATCH 263/315] feat(api:user:submissions:verdict): add endpoint `/api/users/[username]/submissions/verdict` ## what - add endpoint `/api/users/[username]/submissions/verdict` ## how - check if username is valid (using zod schema) - if username doesn't exist, return 404 - fetch user submissions from endpoint `/api/users/[username]/submissions` - count submissions by verdict type - process the data to work with rechart bar chart ## why - used for displaying submission by verdict in a Rechart bar chart ## where - ./src/app/api/users/[username]/submissions/verdict/route.ts ## usage --- .../[username]/submissions/verdict/route.ts | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/app/api/users/[username]/submissions/verdict/route.ts diff --git a/src/app/api/users/[username]/submissions/verdict/route.ts b/src/app/api/users/[username]/submissions/verdict/route.ts new file mode 100644 index 0000000..f19e7c6 --- /dev/null +++ b/src/app/api/users/[username]/submissions/verdict/route.ts @@ -0,0 +1,89 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { userSchema as schema } from "@/schema"; +import { + uhuntUserSubmissionsUrl, + uhuntUsername2UidUrl, +} from "@/utils/constants"; +import { + ProblemVerdictMap, + UserSubmission, + UserSubmissionBarChartType, +} from "@/types"; + +type getParamsType = { + params: z.infer; +}; + +/** + * Get the user submissions by verdicts + * The data returned will be used in Rechart `bar` chart + */ +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch username ID + const { username } = params; + + const usernameUrl = uhuntUsername2UidUrl(username); + const usernameResponse = await fetch(usernameUrl); + const usernameData: number = await usernameResponse.json(); + + // return 404 if problem doesn't exist + if (usernameData === 0) { + const message = { + message: `Username ${username} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch submissions of the user + const userSubmissionsUrl = uhuntUserSubmissionsUrl(usernameData); + const userSubmissionResponse = await fetch(userSubmissionsUrl, { + cache: "no-cache", + }); + const userSubmissionData = + (await userSubmissionResponse.json()) as UserSubmission; + + const filter = ["ac", "pe", "wa", "tle", "mle", "ce", "re", "ole"]; + // count the verdicts by their verdict ID. + // use verdictShort as the object key + // this will be used when later when constructing the data for recharts + const reducedData = (userSubmissionData.subs as unknown as number[][]).reduce( + (obj: Record, cur, _index) => { + const verdict = ProblemVerdictMap[cur[2]]; + obj[verdict.verdictShort] = obj[verdict.verdictShort] + 1 || 1; + + return obj; + }, + {}, + ); + + const processedData: UserSubmissionBarChartType[] = filter.map((verdict) => { + return { + name: verdict.toUpperCase(), + verdict: reducedData[verdict] || 0, + tooltipTitle: ProblemVerdictMap[verdict].title, + fill: ProblemVerdictMap[verdict].bgHex, + }; + }); + + return Response.json(processedData); +}; From 475f2c2650810c41bd1fc898a206e427a5cc2965 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 07:14:31 -0700 Subject: [PATCH 264/315] chore(hooks): add react-query hook to fetch user submissions by verdict ## what - add react-query hook to fetch user submissions by verdict ## how - fetch from endpoint `/api/users/[username]/submissions/verdict` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 0eac29b..99562bf 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { useQuery } from "@tanstack/react-query"; -import { Problem, Submission, UserSubmission } from "@/types"; +import { Problem, Submission, UserSubmission, UserSubmissionBarChartType } from "@/types"; /** * Enum for React Query Keys when using React-query @@ -37,6 +37,10 @@ export enum queryKey { * React query key for fetching user submissions */ userSubmissions = "user-submissions", + /** + * React-query key for fetching user submissions verdict + */ + userSubmissionVerdict = "user-submissions-verdict", } /** @@ -153,3 +157,19 @@ export const useFetchUserSubmissions = (username: string) => { }); }; +/** + * Fetch user submissions verdicts + * Used for displaying data using Rechart bar chart + */ +export const useFetchUserSubmissionVerdict = (username: string) => { + return useQuery({ + queryKey: [queryKey.userSubmissionVerdict], + queryFn: async () => + await axios + .get(`/api/users/${username}/submissions/verdict`) + .then((res) => res.data), + refetchOnWindowFocus: false, + }); +}; + + From 2d8a058e5e1af1dc0c3bdb97b0d0bed74408cd47 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 07:17:24 -0700 Subject: [PATCH 265/315] feat(page:user): display user submissions by verdict with bar chart ## what - display user submissions by verdict with bar chart ## how - fetch the data using react-query hook `useFetchUserSubmissionVerdict` - display the data using Rechart bar chart ## why - to display submissions by verdict ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 32 +++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index 882251d..9f5228d 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -4,10 +4,11 @@ import { AxiosError } from "axios"; import { z } from "zod"; import Error from "@/components/error"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { userSchema } from "@/schema"; -import { useFetchUserSubmissions } from "@/hooks"; -import { processUserSubmissionsVerdictBarChart } from "@/utils/dataProcessing"; -import { UserSubmission } from "@/types"; +import SubmissionVerdictChart from "@/components/charts/ProblemVerdictChart"; +import { useFetchUserSubmissions, useFetchUserSubmissionVerdict } from "@/hooks"; +import { UserSubmission, UserSubmissionBarChartType } from "@/types"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "@/app/users/[username]/components/data-table/submissionColumns"; @@ -23,8 +24,16 @@ const UserPage = ({ params }: Props) => { data: userSubmissionData, error: userSubmissionError, } = useFetchUserSubmissions(params.username); + const { + isLoading: userSubmissionVerdictIsLoading, + isSuccess: userSubmissionVerdictIsSuccess, + isError: userSubmissionVerdictIsError, + data: userSubmissionVerdictData, + error: userSubmissionVerdictError, + } = useFetchUserSubmissionVerdict(params.username); + - if (userSubmissionIsLoading) { + if (userSubmissionIsLoading || userSubmissionVerdictIsLoading) { return
Loading {params.username}
; } @@ -53,8 +62,19 @@ const UserPage = ({ params }: Props) => {

{userSubmissionData?.name} ({params.username})

-
-
+
+
+ + + Submission Verdicts + + + + + +
+
+

Submissions

From 4c64daca6a8fb54df639d763dfb32e4c5fb45acd Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 07:22:49 -0700 Subject: [PATCH 266/315] style(page:user): format code ## what - format code ## how ## why ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index 9f5228d..945f472 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -7,7 +7,10 @@ import Error from "@/components/error"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { userSchema } from "@/schema"; import SubmissionVerdictChart from "@/components/charts/ProblemVerdictChart"; -import { useFetchUserSubmissions, useFetchUserSubmissionVerdict } from "@/hooks"; +import { + useFetchUserSubmissions, + useFetchUserSubmissionVerdict, +} from "@/hooks"; import { UserSubmission, UserSubmissionBarChartType } from "@/types"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "@/app/users/[username]/components/data-table/submissionColumns"; @@ -32,18 +35,17 @@ const UserPage = ({ params }: Props) => { error: userSubmissionVerdictError, } = useFetchUserSubmissionVerdict(params.username); - if (userSubmissionIsLoading || userSubmissionVerdictIsLoading) { return
Loading {params.username}
; } - if(userSubmissionIsError) { + if (userSubmissionIsError) { type ErrorMessage = { message: string; - } + }; - const status = (userSubmissionError as AxiosError).response?.status - const message = (userSubmissionError as AxiosError).response?.data.message + const status = (userSubmissionError as AxiosError).response?.status; + const message = (userSubmissionError as AxiosError).response?.data.message; return ( { return (
-

{userSubmissionData?.name} ({params.username})

+

+ {userSubmissionData?.name} ({params.username}) +

@@ -69,7 +73,9 @@ const UserPage = ({ params }: Props) => { Submission Verdicts - +
@@ -78,12 +84,16 @@ const UserPage = ({ params }: Props) => {

Submissions

- +
- ) + ); }; export default UserPage; From e8ebdd6a7669c71f42dc2b3e963ca674356d1520 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:00:54 -0700 Subject: [PATCH 267/315] chore(types:raw): add type for raw User submissions ## what - add type for raw User submissions - UserSubmission - name: name of the user - uname: username of the user - subs: submissions of the user (type of UserSub) - UserSub: a tuple of 7 elements - Submission ID - Problem ID - Verdict ID - Runtime - Submission time (unix timestamp) - Language ID - Submission Rank ## how ## why - this is to add types to the raw data returned from uhunt api - better to have a seperate Raw data type before transforming them into usable data type ## where - ./src/types/raw.ts ## usage --- src/types/raw.ts | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/types/raw.ts diff --git a/src/types/raw.ts b/src/types/raw.ts new file mode 100644 index 0000000..4fd22ab --- /dev/null +++ b/src/types/raw.ts @@ -0,0 +1,64 @@ +////////////////////////////////////////////////////////////////////////////////////////////////// +/** + * Raw User sub + * + * contains the data in order + * - Submission ID + * - Problem ID + * - Verdict ID + * - Runtime + * - Submission time (unix timestamp) + * - Language ID + * - Submission Rank + */ +export type RawUserSubs = [ + /** + * Submission ID + */ + number, + /** + * Problem ID + */ + number, + /** + * Verdict ID + */ + number, + /** + * Runtime + */ + number, + /** + * Submission time (unix timestamp) + */ + number, + /** + * Language ID + * - 1=ANSI C + * - 2=Java + * - 3=C++ + * - 4=Pascal + * - 5=C++11 + * - 6=Python + */ + number, + /** + * Submission rank + */ + number, +] + +/** + * Raw data returned when fetching from uhunt api + * + * https://uhunt.onlinejudge.org/api/subs-user/[userID] + * + * Ex: https://uhunt.onlinejudge.org/api/subs-user/339 + */ +export type RawUserSubmission = { + name: string; + uname: string; + subs: RawUserSubs[] +} + +////////////////////////////////////////////////////////////////////////////////////////////////// From 8481d8fd06d411b9ca983b63a0e520fccd7a2b7f Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:04:53 -0700 Subject: [PATCH 268/315] refactor(api:user:submissions): use `RawUserSubmission` type in endpoint `/api/users/[username]/submissions` ## what - use `RawUserSubmission` type in endpoint `/api/users/[username]/submissions` ## how ## why - this is to give a more accurate understanding of the data returned from uhunt api ## where - ./src/app/api/users/[username]/submissions/route.ts ## usage --- src/app/api/users/[username]/submissions/route.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/app/api/users/[username]/submissions/route.ts b/src/app/api/users/[username]/submissions/route.ts index 531fdb9..58fab44 100644 --- a/src/app/api/users/[username]/submissions/route.ts +++ b/src/app/api/users/[username]/submissions/route.ts @@ -13,6 +13,7 @@ import { UserSub, UserSubmission, } from "@/types"; +import { RawUserSubmission } from "@/types/raw"; type getParamsType = { params: z.infer; @@ -65,7 +66,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { cache: "no-cache", }); const userSubmissionData = - (await userSubmissionResponse.json()) as UserSubmission; + (await userSubmissionResponse.json()) as RawUserSubmission // change userSubmissionData.sub[] into UserSub[] // originally the upstream api would return `userSubmissionData.sub` as an array of array @@ -81,7 +82,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { // 6: -1 // rank // ] // ] - const converted = (userSubmissionData.subs as unknown as number[][]) + const converted = userSubmissionData.subs .sort((a, b) => b[4] - a[4]) // sort by submission time in descending order .slice(0, 500) // take only the most recent 500 submissions .map((submission: number[]) => { @@ -112,7 +113,11 @@ export const GET = async (_request: Request, { params }: getParamsType) => { return converted; }); - userSubmissionData.subs = converted as unknown as UserSub[]; + const resultData: UserSubmission = { + name: userSubmissionData.name, + uname: userSubmissionData.uname, + subs: converted as UserSub[] + } - return Response.json(userSubmissionData); + return Response.json(resultData); }; From 7d15004005726b28885365c0d61b55a658f54582 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:14:08 -0700 Subject: [PATCH 269/315] refactor(types): move type `SubmissionLangType` to `src/types/index.ts` ## what - move type `SubmissionLangType` from `src/utils/dataProcessing.ts` to `src/types/index.ts` ## how ## why - better to move it in one place ## where - ./src/types/index.ts - ./src/utils/dataProcessing.ts ## usage --- src/types/index.ts | 19 +++++++++++++++++++ src/utils/dataProcessing.ts | 10 +++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/types/index.ts b/src/types/index.ts index c819093..de24736 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -446,3 +446,22 @@ export type UserSubmissionBarChartType = { */ fill: string; }; + +////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Data type used by Rechart radar chart. + * + * This is used to display submissions by language + */ +export type SubmissionLangType = { + /** + * Programmign language used for the submission + */ + language: string; + /** + * The sum of submissions using this language + */ + count: number; +}; + diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts index 9d34205..08ca389 100644 --- a/src/utils/dataProcessing.ts +++ b/src/utils/dataProcessing.ts @@ -1,5 +1,6 @@ import { Language, Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; import {getResponseType as submissionLangType} from '@/app/api/submissions/language/[problemNum]/route' +import { SubmissionLangType } from "@/types"; export type processedProblemVerdictBarChartType = { /** @@ -48,15 +49,10 @@ export const processProblemNumBarChartData = (data: Problem) => { ////////////////////////////////////////////////////////////////////////////////////////////////// -export type processedSubmissionLangType = { - language: string; - count: number; -} - export const processSubmissionLanguageRadarChart = ( data: submissionLangType, -): processedSubmissionLangType[] => { - const processedData: processedSubmissionLangType[] = []; +): SubmissionLangType[] => { + const processedData: SubmissionLangType[] = []; Object.entries(data).forEach(([key, value]) => { processedData.push({ From e3ca5f5ff3800eac364e16eaa494c7f76e13a5fa Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:20:04 -0700 Subject: [PATCH 270/315] refactor(types): move type `VerdictBarChartType` to `src/types/index.ts` ## what - move type `VerdictBarChartType` to `src/types/index.ts` ## how ## why - better to move it in one place ## where - ./src/components/charts/ProblemVerdictChart.tsx - ./src/types/index.ts - ./src/utils/dataProcessing.ts ## usage --- src/components/charts/ProblemVerdictChart.tsx | 4 +-- src/types/index.ts | 29 +++++++++++++++++++ src/utils/dataProcessing.ts | 23 ++------------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/components/charts/ProblemVerdictChart.tsx b/src/components/charts/ProblemVerdictChart.tsx index f65ef7e..473ba04 100644 --- a/src/components/charts/ProblemVerdictChart.tsx +++ b/src/components/charts/ProblemVerdictChart.tsx @@ -13,11 +13,11 @@ import { XAxis, } from "recharts"; -import { processedProblemVerdictBarChartType } from "@/utils/dataProcessing"; +import { VerdictBarChartType } from "@/types"; import ChartTooltip from "@/components/charts/Tooltip"; type Props = { - data: processedProblemVerdictBarChartType[]; + data: VerdictBarChartType[]; }; const ProblemVerdictChart = ({ data }: Props) => { diff --git a/src/types/index.ts b/src/types/index.ts index de24736..f684899 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -465,3 +465,32 @@ export type SubmissionLangType = { count: number; }; +////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Data type used by Rechart bar chart. + * Specifically used for `Problem verdict bar chart` and `Submission verdict bar chart` + * + * This is used to display submissions by verdict + */ +export type VerdictBarChartType = { + /** + * Name of the bar in the bar chart. + * usually the verdict acronyms + */ + name: string; + /** + * The value of the verdict + */ + verdict: number; + /** + * Tooltip title to display. + * Usually would be the full string of a verdict + */ + tooltipTitle: string; + /** + * Color for bar + */ + fill: string; +}; + diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts index 08ca389..4013e38 100644 --- a/src/utils/dataProcessing.ts +++ b/src/utils/dataProcessing.ts @@ -1,27 +1,8 @@ import { Language, Problem, ProblemVerdictMap, ProblemVerdictType } from "@/types"; import {getResponseType as submissionLangType} from '@/app/api/submissions/language/[problemNum]/route' import { SubmissionLangType } from "@/types"; +import { VerdictBarChartType } from "@/types"; -export type processedProblemVerdictBarChartType = { - /** - * Name of the bar in the bar chart. - * usually the verdict acronyms - */ - name: string; - /** - * The value of the verdict - */ - verdict: number; - /** - * Tooltip title to display. - * Usually would be the full string of a verdict - */ - tooltipTitle: string; - /** - * Color for bar - */ - fill: string; -}; export const processProblemNumBarChartData = (data: Problem) => { // filter out the ProblemVerdictMap object and keep keys from `filter` array const filter = ["ac", "pe", "wa", "tle", "mle", "ce", "re", "ole"] @@ -33,7 +14,7 @@ export const processProblemNumBarChartData = (data: Problem) => { // obtained from https://stackoverflow.com/a/69676994/3053548 const filteredVerdicts: Record = Object.fromEntries(filter.map(k => [k, ProblemVerdictMap[k]])) - const processedData:processedProblemVerdictBarChartType[] = [] + const processedData:VerdictBarChartType[] = [] for(const [key, value] of Object.entries(filteredVerdicts)) { processedData.push({ From bee68333d0b870d1fcc7faec710b9fe7fe5da7fa Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:54:45 -0700 Subject: [PATCH 271/315] refactor(api:problemNum:submission:language): process the data for Rechart radar chart ## what - process the data for Rechart radar chart ## how ## why - better to process the data server side ## where - ./src/app/api/submissions/language/[problemNum]/route.tsx ## usage --- .../submissions/language/[problemNum]/route.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/app/api/submissions/language/[problemNum]/route.tsx b/src/app/api/submissions/language/[problemNum]/route.tsx index 3824b98..4f17d19 100644 --- a/src/app/api/submissions/language/[problemNum]/route.tsx +++ b/src/app/api/submissions/language/[problemNum]/route.tsx @@ -6,7 +6,7 @@ import { uhuntProblemNumUrl, uhuntProblemSubmissionListUrl, } from "@/utils/constants"; -import { Language, Problem, Submission } from "@/types"; +import { Language, Problem, Submission, SubmissionLangType } from "@/types"; type getParamsType = { params: z.infer; @@ -64,13 +64,22 @@ export const GET = async (_request: Request, { params }: getParamsType) => { ); // increment count of key-value for their respective language ID - const responseData: getResponseType = submissionData.reduce((acc, cur) => { + const reducedData: Record = submissionData.reduce((acc, cur) => { const languageId = cur.lan; acc[languageId] = acc[languageId] + 1; return acc; }, languageObj); - delete responseData["undefined"]; + delete reducedData["undefined"]; + + const processedData: SubmissionLangType[] = Object.entries(reducedData).map( + ([key, value]) => { + return { + language: Language[key], + count: value, + }; + }, + ); - return Response.json(responseData); + return Response.json(processedData); }; From 11faf6bb5d31fd3cc239f207a724cc5e04999665 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:49:04 -0700 Subject: [PATCH 272/315] chore(hooks): add type returned for hook `useFetchSubmissionLang` ## what - add type returned for hook `useFetchSubmissionLang` ## how ## why - better to have a datatype attached when fetching the data ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 99562bf..647a0d6 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { useQuery } from "@tanstack/react-query"; -import { Problem, Submission, UserSubmission, UserSubmissionBarChartType } from "@/types"; +import { Problem, Submission, SubmissionLangType, UserSubmission, UserSubmissionBarChartType } from "@/types"; /** * Enum for React Query Keys when using React-query @@ -107,7 +107,7 @@ export const useFetchSubmissionLang = (problemNum: number) => { queryKey: [queryKey.submissionLang], queryFn: async () => await axios - .get(`/api/submissions/language/${problemNum}`) + .get(`/api/submissions/language/${problemNum}`) .then((res) => res.data), refetchOnWindowFocus: false, }); From 749cd1d4999209375dd75c6aee328bfb9cf6a9b8 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:56:42 -0700 Subject: [PATCH 273/315] refactor(components:charts): change prop type to `SubmissionLangType` ## what - change prop type to `SubmissionLangType` ## how ## why - the api endpoint `/api/submissions/language/[problemNum]` now processes the data for Rechart radar chart ## where - ./src/components/charts/SubmissionLanguageRadarChart.tsx ## usage --- src/components/charts/SubmissionLanguageRadarChart.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/charts/SubmissionLanguageRadarChart.tsx b/src/components/charts/SubmissionLanguageRadarChart.tsx index 21c3a29..8751331 100644 --- a/src/components/charts/SubmissionLanguageRadarChart.tsx +++ b/src/components/charts/SubmissionLanguageRadarChart.tsx @@ -9,20 +9,18 @@ import { import { useTheme } from "next-themes"; import ChartTooltip from "@/components/charts/Tooltip"; -import { processSubmissionLanguageRadarChart } from "@/utils/dataProcessing"; -import { getResponseType } from "@/app/api/submissions/language/[problemNum]/route"; +import { SubmissionLangType } from "@/types"; type Props = { - data: getResponseType; + data: SubmissionLangType[]; }; const SubmissionLanguageRadarChart = ({ data }: Props) => { const { theme } = useTheme(); - const processedData = processSubmissionLanguageRadarChart(data); return ( - + Date: Sun, 14 Jan 2024 09:00:52 -0700 Subject: [PATCH 274/315] refactor(page:problemNum): update datatype passed to component `SubmissionLanguageRadarChart` ## what - update datatype passed to component `SubmissionLanguageRadarChart` ## how - cast type when passing data to the component ## why ## where - ./src/app/problems/[problemNum]/page.tsx ## usage --- src/app/problems/[problemNum]/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/problems/[problemNum]/page.tsx b/src/app/problems/[problemNum]/page.tsx index 9eeee8b..60728d5 100644 --- a/src/app/problems/[problemNum]/page.tsx +++ b/src/app/problems/[problemNum]/page.tsx @@ -22,7 +22,7 @@ import { columns } from "./components/data-table/ranklistColumns"; import Loading from "./loading"; import Link from "next/link"; import { uhuntViewProblemUrl } from "@/utils/constants"; -import { Problem, Submission } from "@/types"; +import { Problem, Submission, SubmissionLangType } from "@/types"; type problemPageProps = { params: z.infer; @@ -141,7 +141,7 @@ const ProblemPage = ({ params }: problemPageProps) => { Submissions by language - +
From d773671ab833be365a0e368c4ad3ffc43b030084 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:24:27 -0700 Subject: [PATCH 275/315] feat(api:users:submissions): add endpoint `/api/users/[username]/submissions/language` ## what - add endpoint `/api/users/[username]/submissions/language` ## how - check if username is valid (using zod schema) - if username doesn't exist, return 404 - fetch user submissions - count submissions by language - process the data to work with rechart Radar chart ## why - used for displaying submissions by language in a Rechart Radar chart ## where - ./src/app/api/users/[username]/submissions/language/route.ts ## usage --- .../[username]/submissions/language/route.ts | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/app/api/users/[username]/submissions/language/route.ts diff --git a/src/app/api/users/[username]/submissions/language/route.ts b/src/app/api/users/[username]/submissions/language/route.ts new file mode 100644 index 0000000..10b07d1 --- /dev/null +++ b/src/app/api/users/[username]/submissions/language/route.ts @@ -0,0 +1,90 @@ +import { z } from "zod"; + +import { NextResponse } from "next/server"; + +import { userSchema as schema } from "@/schema"; +import { Language, SubmissionLangType } from "@/types"; +import { RawUserSubmission } from "@/types/raw"; +import { + uhuntUserSubmissionsUrl, + uhuntUsername2UidUrl, +} from "@/utils/constants"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch username ID + const { username } = params; + + const usernameUrl = uhuntUsername2UidUrl(username); + const usernameResponse = await fetch(usernameUrl); + const usernameData: number = await usernameResponse.json(); + + // return 404 if problem doesn't exist + if (usernameData === 0) { + const message = { + message: `Username ${username} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch submissions of the user + const userSubmissionsUrl = uhuntUserSubmissionsUrl(usernameData); + const userSubmissionResponse = await fetch(userSubmissionsUrl, { + cache: "no-cache", + }); + const userSubmissionData = + (await userSubmissionResponse.json()) as RawUserSubmission; + + // map language id as key and 0 as value. (the value will be count of a submission language) + let languageObj = Object.keys(Language).reduce( + (acc: Record, cur: string) => { + acc[cur] = 0; + + return acc; + }, + {}, + ); + + // count the submissions by language id + // object key: language ID + // object value: count + const reducedData = userSubmissionData.subs.reduce((acc, cur) => { + const languageId = cur[5]; + acc[languageId] = acc[languageId] + 1; + + return acc; + }, languageObj); + delete reducedData["undefined"]; + + const processedData: SubmissionLangType[] = Object.entries(reducedData).map( + ([key, value]) => { + return { + language: Language[key], + count: value, + }; + }, + ); + + return Response.json(processedData); +}; From 818e4443f315d655ea8ef4beb2d4479071c1a78c Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:28:11 -0700 Subject: [PATCH 276/315] chore(hooks): add react-query hook to fetch user submissions by language ## what - add react-query hook to fetch user submissions by language ## how - fetch from endpoint `/api/users/[username]/submissions/language` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 647a0d6..a281b3b 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -41,6 +41,10 @@ export enum queryKey { * React-query key for fetching user submissions verdict */ userSubmissionVerdict = "user-submissions-verdict", + /** + * React-query key for fetching user submissions language + */ + userSubmissionLanguage = "user-submissions-language", } /** @@ -172,4 +176,17 @@ export const useFetchUserSubmissionVerdict = (username: string) => { }); }; - +/** + * Fetch user submissions by language + * Used for displaying data using Rechart radar chart + */ +export const useFetchUserSubmissionLanguage = (username: string) => { + return useQuery({ + queryKey: [queryKey.userSubmissionLanguage], + queryFn: async () => + await axios + .get(`/api/users/${username}/submissions/language`) + .then((res) => res.data), + refetchOnWindowFocus: false, + }); +}; From 54639abedcb68f405f6cd314547b6cffe9586934 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:29:15 -0700 Subject: [PATCH 277/315] feat(page:user): display user submissions by language with radar chart ## what - display user submissions by language with radar chart ## how - fetch the data using react-query hook `useFetchUserSubmissionLanguage` - display the data using Rechart radar chart ## why - to display submissions by language ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 34 +++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index 945f472..f0f7623 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -8,12 +8,18 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { userSchema } from "@/schema"; import SubmissionVerdictChart from "@/components/charts/ProblemVerdictChart"; import { + useFetchUserSubmissionLanguage, useFetchUserSubmissions, useFetchUserSubmissionVerdict, } from "@/hooks"; -import { UserSubmission, UserSubmissionBarChartType } from "@/types"; +import { + SubmissionLangType, + UserSubmission, + UserSubmissionBarChartType, +} from "@/types"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "@/app/users/[username]/components/data-table/submissionColumns"; +import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; type Props = { params: z.infer; @@ -34,8 +40,19 @@ const UserPage = ({ params }: Props) => { data: userSubmissionVerdictData, error: userSubmissionVerdictError, } = useFetchUserSubmissionVerdict(params.username); + const { + isLoading: userSubmissionLanguageIsLoading, + isSuccess: userSubmissionLanguageIsSuccess, + isError: userSubmissionLanguageIsError, + data: userSubmissionLanguageData, + error: userSubmissionLanguageError, + } = useFetchUserSubmissionLanguage(params.username); - if (userSubmissionIsLoading || userSubmissionVerdictIsLoading) { + if ( + userSubmissionIsLoading || + userSubmissionVerdictIsLoading || + userSubmissionLanguageIsLoading + ) { return
Loading {params.username}
; } @@ -79,6 +96,19 @@ const UserPage = ({ params }: Props) => {
+ {/* Submissions language using radar chart */} +
+ + + Submissions by language + + + + + +
From a1c52bc7bf52dcad30f90a51dd7b9bba79517034 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:52:53 -0700 Subject: [PATCH 278/315] chore(types): add type for raw Problem ## what - add type for raw Problem - problem ID - problem number - problem title - Number of Distinct Accepted User (DACU) - Best Runtime of an Accepted Submission - Best Memory used of an Accepted Submission - Number of No Verdict Given (can be ignored) - Number of Submission Error - Number of Can't be Judged - Number of In Queue - Number of Compilation Error - Number of Restricted Function - Number of Runtime Error - Number of Output Limit Exceeded - Number of Time Limit Exceeded - Number of Memory Limit Exceeded - Number of Wrong Answer - Number of Presentation Error - Number of Accepted - Problem Run-Time Limit (milliseconds) - Problem Status (0 = unavailable, 1 = normal, 2 = special judge) ## how ## why - this will be used in api endpoint `/api/problems` when fetching from uhunt api - this would add some structure when fetching from uhunt api ## where - ./src/types/raw.ts ## usage --- src/types/raw.ts | 127 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 124 insertions(+), 3 deletions(-) diff --git a/src/types/raw.ts b/src/types/raw.ts index 4fd22ab..6d2611f 100644 --- a/src/types/raw.ts +++ b/src/types/raw.ts @@ -1,3 +1,124 @@ +/** + * Raw Problem data return from uhunt apo + * + * https://uhunt.onlinejudge.org/api/p/id/[problemNum] + * + * Ex: https://uhunt.onlinejudge.org/api/p/num/100 + * + * Also used in uhunt api. NOTE: it returns an array of `RawProblem` + * https://uhunt.onlinejudge.org/api/p + * + * contains the data in order + * - problem ID + * - problem number + * - problem title + * - Number of Distinct Accepted User (DACU) + * - Best Runtime of an Accepted Submission + * - Best Memory used of an Accepted Submission + * - Number of No Verdict Given (can be ignored) + * - Number of Submission Error + * - Number of Can't be Judged + * - Number of In Queue + * - Number of Compilation Error + * - Number of Restricted Function + * - Number of Runtime Error + * - Number of Output Limit Exceeded + * - Number of Time Limit Exceeded + * - Number of Memory Limit Exceeded + * - Number of Wrong Answer + * - Number of Presentation Error + * - Number of Accepted + * - Problem Run-Time Limit (milliseconds) + * - Problem Status (0 = unavailable, 1 = normal, 2 = special judge) + */ +export type RawProblem = [ + /** + * Problem ID + */ + number, + /** + * Problem number + */ + number, + /** + * Problem title + */ + string, + /** + * Number of Distinct Accepted User (DACU) + */ + number, + /** + * Best Runtime of an Accepted Submission + */ + number, + /** + * Best Memory used of an Accepted Submission + */ + number, + /** + * Number of No Verdict Given (can be ignored) + */ + number, + /** + * Number of Submission Error + */ + number, + /** + * Number of Can't be Judged + */ + number, + /** + * Number of In Queue + */ + number, + /** + * Number of Compilation Error + */ + number, + /** + * Number of Restricted Function + */ + number, + /** + * Number of Runtime Error + */ + number, + /** + * Number of Output Limit Exceeded + */ + number, + /** + * Number of Time Limit Exceeded + */ + number, + /** + * Number of Memory Limit Exceeded + */ + number, + /** + * Number of Wrong Answer + */ + number, + /** + * Number of Presentation Error + */ + number, + /** + * Number of Accepted + */ + number, + /** + * Problem Run-Time Limit (milliseconds) + */ + number, + /** + * Problem Status (0 = unavailable, 1 = normal, 2 = special judge) + */ + number, + number, +]; + ////////////////////////////////////////////////////////////////////////////////////////////////// /** * Raw User sub @@ -46,7 +167,7 @@ export type RawUserSubs = [ * Submission rank */ number, -] +]; /** * Raw data returned when fetching from uhunt api @@ -58,7 +179,7 @@ export type RawUserSubs = [ export type RawUserSubmission = { name: string; uname: string; - subs: RawUserSubs[] -} + subs: RawUserSubs[]; +}; ////////////////////////////////////////////////////////////////////////////////////////////////// From 6b3c7904f73762b73961331d5395d08b90a0a7e0 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 10:00:29 -0700 Subject: [PATCH 279/315] refactor(api:users:submissions): fetch all problems from uhunt api instead of nextjs api endpoint `/api/problems` ## what - fetch all problems from uhunt api instead of nextjs api endpoint `/api/problems` ## how ## why - fetching all problems from `http://localhost:3000/api/problems` fails when published on vercel - so the alternative is to fetch from uhunt api - add type `RawProblem` to the data ## where - ./src/app/api/users/[username]/submissions/route.ts ## usage --- .../api/users/[username]/submissions/route.ts | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/app/api/users/[username]/submissions/route.ts b/src/app/api/users/[username]/submissions/route.ts index 58fab44..9c33693 100644 --- a/src/app/api/users/[username]/submissions/route.ts +++ b/src/app/api/users/[username]/submissions/route.ts @@ -3,17 +3,12 @@ import { z } from "zod"; import { userSchema as schema } from "@/schema"; import { + uhuntAllProblemsUrl, uhuntUserSubmissionsUrl, uhuntUsername2UidUrl, } from "@/utils/constants"; -import { - Language, - Problem, - ProblemVerdictMap, - UserSub, - UserSubmission, -} from "@/types"; -import { RawUserSubmission } from "@/types/raw"; +import { Language, ProblemVerdictMap, UserSub, UserSubmission } from "@/types"; +import { RawProblem, RawUserSubmission } from "@/types/raw"; type getParamsType = { params: z.infer; @@ -56,9 +51,9 @@ export const GET = async (_request: Request, { params }: getParamsType) => { // fetch all problems // this is needed because later each submission will need problem number and problem title. // if repeatedly fetching from upstream api server, it will slow down. - const allProblemsUrl = `http://localhost:${process.env.PORT}/api/problems`; + const allProblemsUrl = uhuntAllProblemsUrl(); const allProblemsResponse = await fetch(allProblemsUrl); - const allProblemsData: Problem[] = await allProblemsResponse.json(); + const allProblemsData: RawProblem[] = await allProblemsResponse.json(); // fetch submissions of the user const userSubmissionsUrl = uhuntUserSubmissionsUrl(usernameData); @@ -66,7 +61,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { cache: "no-cache", }); const userSubmissionData = - (await userSubmissionResponse.json()) as RawUserSubmission + (await userSubmissionResponse.json()) as RawUserSubmission; // change userSubmissionData.sub[] into UserSub[] // originally the upstream api would return `userSubmissionData.sub` as an array of array @@ -96,11 +91,11 @@ export const GET = async (_request: Request, { params }: getParamsType) => { converted.rank = submission[6]; const problemData = allProblemsData.find( - (problem) => problem.pid === converted.pid, + (problem) => problem[0] === converted.pid, ); - converted.pnum = (problemData as Problem).num; - converted.pTitle = (problemData as Problem).title; + converted.pnum = (problemData as RawProblem)[1]; + converted.pTitle = (problemData as RawProblem)[2]; converted.verdict = ProblemVerdictMap[converted.ver as number] || { fgColor: "text-primary-foreground dark:text-secondary-foreground", bgColor: "bg-gray-500", @@ -116,8 +111,8 @@ export const GET = async (_request: Request, { params }: getParamsType) => { const resultData: UserSubmission = { name: userSubmissionData.name, uname: userSubmissionData.uname, - subs: converted as UserSub[] - } + subs: converted as UserSub[], + }; return Response.json(resultData); }; From 2646a44db4be38be72c704456435ac3748fa114e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 10:19:55 -0700 Subject: [PATCH 280/315] chore(types): add type for submissions overtime ## what - add type for submissions overtime - SubmissionsOvertimeLineChartType - name: name of the entry - time: submission year. Denoted as YYYY - submissions: submission count for the year - fill: color used for the chart ## how ## why - used for generating code Rechart area/line chart - will be used for api endpoint `/api/users/[username]/submissions/overtime` ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index f684899..f6786e3 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -494,3 +494,31 @@ export type VerdictBarChartType = { fill: string; }; +////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Data type used by Rechart area chart. + * + * Specifically used for `Problem submissions overtime` and `User submissions overtime` + * + * This is used to display submissions overtime + */ +export type SubmissionsOvertimeLineChartType = { + /** + * name of the entry + */ + name: string; + /** + * Submission year. Denoted as YYYY + */ + time: string; // time formatted to year + /** + * Submission count for the year + */ + submissions: number; + /** + * Color used for the chart + */ + fill: string; +} + From 8f306ed48cacf186f1791ac6599ee0be12fbede8 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 14:59:21 -0700 Subject: [PATCH 281/315] refactor(components:charts): use `SubmissionsOvertimeLineChartType` as proptype ## what - use `SubmissionsOvertimeLineChartType` as proptype - replace proptype `SubmissionOvertimeType` with `SubmissionsOvertimeLineChartType` type ## how ## why - to use a type coming from one source - having the prop type coming from multiple sources is confusing ## where - ./src/components/charts/SubmissionsOvertimeChart.tsx ## usage --- src/components/charts/SubmissionsOvertimeChart.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/charts/SubmissionsOvertimeChart.tsx b/src/components/charts/SubmissionsOvertimeChart.tsx index e1c0777..e6abb7f 100644 --- a/src/components/charts/SubmissionsOvertimeChart.tsx +++ b/src/components/charts/SubmissionsOvertimeChart.tsx @@ -7,11 +7,11 @@ import { XAxis, } from "recharts"; -import { getResponseType as SubmissionOvertimeType } from "@/app/api/submissions/overtime/[problemNum]/route"; import ChartTooltip from "@/components/charts/Tooltip"; +import { SubmissionsOvertimeLineChartType } from "@/types"; type Props = { - data: SubmissionOvertimeType[]; + data: SubmissionsOvertimeLineChartType[]; }; const SubmissionsOvertimeChart = ({ data }: Props) => { From 59a5dae75f72d49f52eaea6e0a5c811c3bc7b214 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:02:40 -0700 Subject: [PATCH 282/315] refactor(api:submission): use `SubmissionsOvertimeLineChartType` as api endpoint response ## what - use `SubmissionsOvertimeLineChartType` as api endpoint response - replace type `getResponseType` with `SubmissionsOvertimeLineChartType` ## how ## why - to use a type coming from one source - having the type coming from multiple sources is confusing ## where - ./src/app/api/submissions/overtime/[problemNum]/route.ts ## usage --- .../api/submissions/overtime/[problemNum]/route.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/app/api/submissions/overtime/[problemNum]/route.ts b/src/app/api/submissions/overtime/[problemNum]/route.ts index 0fd1cd1..de01da4 100644 --- a/src/app/api/submissions/overtime/[problemNum]/route.ts +++ b/src/app/api/submissions/overtime/[problemNum]/route.ts @@ -3,20 +3,13 @@ import { z } from "zod"; import { submissionOvertimeSchema as schema } from "@/schema"; import { NextResponse } from "next/server"; import { uhuntProblemNumUrl, uhuntSubmissionCountUrl } from "@/utils/constants"; -import { Problem } from "@/types"; +import { Problem, SubmissionsOvertimeLineChartType } from "@/types"; import moment, { Moment } from "moment"; type getParamsType = { params: z.infer; }; -export type getResponseType = { - name: string; - time: string; // time formatted to year - submissions: number; - fill: string; -} - /** * Get the submission count of a problem using `problem number` * The submission count will be a cumulative submission count @@ -75,7 +68,7 @@ export const GET = async (_request: Request, { params }: getParamsType) => { // 12 : Number of months each array element will represent const submissionUrlSplit = submssionCountUrl.split("/"); const thirtyDaysInSeconds = 60 * 60 * 24 * 30; - const responseData:getResponseType[] = data.map((cur, i) => { + const responseData:SubmissionsOvertimeLineChartType[] = data.map((cur, i) => { const submissionTime = +submissionUrlSplit[7]; const back = +submissionUrlSplit[8]; const jump = +submissionUrlSplit[9]; From 01232a7ca78c1f9a648a3ada5b74b9664b2d1642 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:06:46 -0700 Subject: [PATCH 283/315] feat(api:users:submissions): add endpoint `/api/users/[username]/submissions/overtime` ## what - add endpoint `/api/users/[username]/submissions/overtime` ## how - check if username if valid (using zod schema) - if username doesn't exist, return 404 - fetch user submissions - count submissions by year - add missing years - add missing year as key, and value as 0 (because there was no submissions that year) - calculate cumulative sum - construct data structure for Rechart area/lint chart ## why - used for displaying submissions overtime ## where - ./src/app/api/users/[username]/submissions/overtime/route.ts ## usage --- .../[username]/submissions/overtime/route.ts | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/app/api/users/[username]/submissions/overtime/route.ts diff --git a/src/app/api/users/[username]/submissions/overtime/route.ts b/src/app/api/users/[username]/submissions/overtime/route.ts new file mode 100644 index 0000000..c7f1428 --- /dev/null +++ b/src/app/api/users/[username]/submissions/overtime/route.ts @@ -0,0 +1,117 @@ +import { z } from "zod"; + +import { NextResponse } from "next/server"; + +import { userSchema as schema } from "@/schema"; +import { + Language, + SubmissionLangType, + SubmissionsOvertimeLineChartType, +} from "@/types"; +import { RawUserSubmission } from "@/types/raw"; +import { + uhuntUserSubmissionsUrl, + uhuntUsername2UidUrl, +} from "@/utils/constants"; +import moment from "moment"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, { params }: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch username ID + const { username } = params; + + const usernameUrl = uhuntUsername2UidUrl(username); + const usernameResponse = await fetch(usernameUrl); + const usernameData: number = await usernameResponse.json(); + + // return 404 if problem doesn't exist + if (usernameData === 0) { + const message = { + message: `Username ${username} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + // fetch submissions of the user + const userSubmissionsUrl = uhuntUserSubmissionsUrl(usernameData); + const userSubmissionResponse = await fetch(userSubmissionsUrl, { + cache: "no-cache", + }); + const userSubmissionData = + (await userSubmissionResponse.json()) as RawUserSubmission; + + // count submissions by year + const initData: Record = {}; + let reducedData = userSubmissionData.subs.reduce((obj, cur, index) => { + const year = moment.unix(cur[4]).format("YYYY"); + obj[year] = obj[year] + 1 || 1; + + return obj; + }, initData); + + // add missing years + // - loop through the array starting from index 1 going upto last array element + // - convert processedData into an array using Object.entries + // - sort the array + // - get the current element and previous element + // - loop through the difference between curYear and prevYear + // - add entry to `processedData` + for (let i = 1; i < Object.entries(reducedData).length; i++) { + const sorted = Object.entries(reducedData).sort((a, b) => +a[0] - +b[0]); + const curYear = +sorted[i][0]; + const prevYear = +sorted[i - 1][0]; + + // if (curYear - prevYear > 1) { + for (let k = prevYear + 1; k < curYear; k++) { + reducedData[k] = 0; + } + // } + } + + // calculate cumulative sum + for (let i = 1; i < Object.entries(reducedData).length; i++) { + const sorted = Object.entries(reducedData).sort((a, b) => +a[0] - +b[0]); + const [curYear, curYearCount] = sorted[i]; + const [prevYear, prevYearCount] = sorted[i - 1]; + + reducedData[curYear] = curYearCount + prevYearCount; + } + + // construct data structure for Rechart area/line chart + const initProcessedData: SubmissionsOvertimeLineChartType[] = []; + const processedData: SubmissionsOvertimeLineChartType[] = Object.entries( + reducedData, + ).reduce((obj, cur, index) => { + const [year, count] = cur; + obj.push({ + name: "submissions", + time: year, + submissions: count, + fill: "#8884d8", + }); + + return obj; + }, initProcessedData); + + return Response.json(processedData); +}; From b3f8ae3d6c9c8c050b4cc101c9f3cd2d9ff445b4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:11:56 -0700 Subject: [PATCH 284/315] chore(hooks): add react-query hook to fetch user submissions overtime ## what - add react-query hook to fetch user submissions overtime ## how - fetch from endpoint `/api/users/[username]/submissions/overtime` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index a281b3b..d8af0fe 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,7 +1,7 @@ import axios from "axios"; import { useQuery } from "@tanstack/react-query"; -import { Problem, Submission, SubmissionLangType, UserSubmission, UserSubmissionBarChartType } from "@/types"; +import { Problem, Submission, SubmissionLangType, SubmissionsOvertimeLineChartType, UserSubmission, UserSubmissionBarChartType } from "@/types"; /** * Enum for React Query Keys when using React-query @@ -45,6 +45,10 @@ export enum queryKey { * React-query key for fetching user submissions language */ userSubmissionLanguage = "user-submissions-language", + /** + * React-query key for fetching user submissions overtime + */ + userSubmissionOvertime = "user-submissions-overtime", } /** @@ -190,3 +194,19 @@ export const useFetchUserSubmissionLanguage = (username: string) => { refetchOnWindowFocus: false, }); }; + +/** + * Fetch user submissions by language + * Used for displaying data using Rechart radar chart + */ +export const useFetchUserSubmissionOvertime = (username: string) => { + return useQuery({ + queryKey: [queryKey.userSubmissionOvertime], + queryFn: async () => + await axios + .get(`/api/users/${username}/submissions/overtime`) + .then((res) => res.data), + refetchOnWindowFocus: false, + }); +}; + From cd97e81c21d9ad163996adc8d8b823177f36a638 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:13:48 -0700 Subject: [PATCH 285/315] style(hooks): format code ## what - format code ## how ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index d8af0fe..9251999 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,7 +1,14 @@ import axios from "axios"; import { useQuery } from "@tanstack/react-query"; -import { Problem, Submission, SubmissionLangType, SubmissionsOvertimeLineChartType, UserSubmission, UserSubmissionBarChartType } from "@/types"; +import { + Problem, + Submission, + SubmissionLangType, + SubmissionsOvertimeLineChartType, + UserSubmission, + UserSubmissionBarChartType, +} from "@/types"; /** * Enum for React Query Keys when using React-query @@ -76,7 +83,8 @@ export const useFetchLiveSubmission = (pollId = 0, fetchInterval = 5000) => { export const useFetchProblems = () => { return useQuery({ queryKey: [queryKey.allProblems], - queryFn: async () => axios.get("/api/problems").then((res) => res.data), + queryFn: async () => + axios.get("/api/problems").then((res) => res.data), refetchOnWindowFocus: false, }); }; @@ -88,7 +96,9 @@ export const useFetchProblemNum = (problemNum: number) => { return useQuery({ queryKey: [queryKey.problemNum], queryFn: async () => - await axios.get(`/api/problems/${problemNum}`).then((res) => res.data), + await axios + .get(`/api/problems/${problemNum}`) + .then((res) => res.data), refetchOnWindowFocus: false, }); }; @@ -129,7 +139,7 @@ export const useFetchProblemRanklist = (problemNum: number) => { queryKey: [queryKey.problemRanklist], queryFn: async () => await axios - .get(`/api/problems/ranklist/${problemNum}`) + .get(`/api/problems/ranklist/${problemNum}`) .then((res) => res.data), refetchOnWindowFocus: false, }); @@ -143,7 +153,7 @@ export const useFetchProblemSubmission = (problemNum: number) => { queryKey: [queryKey.problemSubmission], queryFn: async () => await axios - .get(`/api/submissions/${problemNum}`) + .get(`/api/submissions/${problemNum}`) .then((res) => res.data), refetchOnWindowFocus: false, }); @@ -174,7 +184,9 @@ export const useFetchUserSubmissionVerdict = (username: string) => { queryKey: [queryKey.userSubmissionVerdict], queryFn: async () => await axios - .get(`/api/users/${username}/submissions/verdict`) + .get( + `/api/users/${username}/submissions/verdict`, + ) .then((res) => res.data), refetchOnWindowFocus: false, }); @@ -189,7 +201,9 @@ export const useFetchUserSubmissionLanguage = (username: string) => { queryKey: [queryKey.userSubmissionLanguage], queryFn: async () => await axios - .get(`/api/users/${username}/submissions/language`) + .get( + `/api/users/${username}/submissions/language`, + ) .then((res) => res.data), refetchOnWindowFocus: false, }); @@ -204,9 +218,10 @@ export const useFetchUserSubmissionOvertime = (username: string) => { queryKey: [queryKey.userSubmissionOvertime], queryFn: async () => await axios - .get(`/api/users/${username}/submissions/overtime`) + .get( + `/api/users/${username}/submissions/overtime`, + ) .then((res) => res.data), refetchOnWindowFocus: false, }); }; - From 21ea5f150e7c62bb82844b550350454fc812c130 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:14:12 -0700 Subject: [PATCH 286/315] feat(page:user): display user submissions overtime with area chart ## what - display user submissions overtime with area chart ## how - fetch the data using react-query hook `useFetchUserSubmissionOvertime` - display the data using Rechart area chart ## why - to display submissions overtime ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index f0f7623..6745ad3 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -9,17 +9,20 @@ import { userSchema } from "@/schema"; import SubmissionVerdictChart from "@/components/charts/ProblemVerdictChart"; import { useFetchUserSubmissionLanguage, + useFetchUserSubmissionOvertime, useFetchUserSubmissions, useFetchUserSubmissionVerdict, } from "@/hooks"; import { SubmissionLangType, + SubmissionsOvertimeLineChartType, UserSubmission, UserSubmissionBarChartType, } from "@/types"; import { DataTable } from "@/components/ui/data-table"; import { columns } from "@/app/users/[username]/components/data-table/submissionColumns"; import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; +import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; type Props = { params: z.infer; @@ -47,11 +50,20 @@ const UserPage = ({ params }: Props) => { data: userSubmissionLanguageData, error: userSubmissionLanguageError, } = useFetchUserSubmissionLanguage(params.username); + const { + isLoading: userSubmissionOvertimeIsLoading, + isSuccess: userSubmissionOvertimeIsSuccess, + isError: userSubmissionOvertimeIsError, + data: userSubmissionOvertimeData, + error: userSubmissionOvertimeError, + } = useFetchUserSubmissionOvertime(params.username); + if ( userSubmissionIsLoading || userSubmissionVerdictIsLoading || - userSubmissionLanguageIsLoading + userSubmissionLanguageIsLoading || + userSubmissionOvertimeIsLoading ) { return
Loading {params.username}
; } @@ -96,6 +108,19 @@ const UserPage = ({ params }: Props) => {
+ {/* Submissions overtime line chart */} +
+ + + Submissions overtime + + + + + +
{/* Submissions language using radar chart */}
From f73fb4c12649b0379c9c3223f575d626cd03c3c2 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:50:46 -0700 Subject: [PATCH 287/315] chore(types): add proper color hexcode for `ProblemVerdictMap` object ## what - add proper color hexcode for `ProblemVerdictMap` object ## how ## why - some of the `bgHex` were missing `#` to denote hexcode ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/types/index.ts b/src/types/index.ts index f6786e3..46a4685 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -145,7 +145,7 @@ const ProblemVerdictMap: Record = { title: "Submission Error", bgColor: "bg-gray-500", fgColor: "text-primary-foreground dark:text-secondary-foreground", - bgHex: "6b7280", + bgHex: "#6b7280", fgHex: "", verdictShort: "sube" }, @@ -156,7 +156,7 @@ const ProblemVerdictMap: Record = { title: "Can't be judged", bgColor: "bg-gray-500", fgColor: "text-primary-foreground dark:text-secondary-foreground", - bgHex: "6b7280", + bgHex: "#6b7280", fgHex: "", verdictShort: "noj" }, @@ -167,7 +167,7 @@ const ProblemVerdictMap: Record = { title: "- In Queue -", bgColor: "bg-gray-500", fgColor: "text-primary-foreground dark:text-secondary-foreground", - bgHex: "6b7280", + bgHex: "#6b7280", fgHex: "", verdictShort: "inq" }, @@ -178,7 +178,7 @@ const ProblemVerdictMap: Record = { title: "Restricted function", bgColor: "bg-gray-500", fgColor: "text-primary-foreground dark:text-secondary-foreground", - bgHex: "6b7280", + bgHex: "#6b7280", fgHex: "", verdictShort: "rf" } @@ -522,3 +522,29 @@ export type SubmissionsOvertimeLineChartType = { fill: string; } +////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Data type used by Rechart dounut chart. + * + * This is used to display submissions solved vs attempted + */ +export type SubmissionSovledVsAttempted = { + /** + * Name of segment + */ + name: string; + /** + * Value of segment + */ + count: number; + /** + * Tooltip title to display. + * Usually would be the full string of a verdict + */ + tooltipTitle: string; + /** + * Color used for the chart + */ + fill: string; +} From f3ea62c89d2804b5c8dcdcd2a602434d1bcccd35 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:53:22 -0700 Subject: [PATCH 288/315] feat(api:users:attempted): add endpoint `/api/users/[username]/submissions/attempted` ## what - add endpoint `/api/users/[username]/submissions/attempted` ## how - check if the username is valid (using zod schema) - if username doesn't exist, return 404 - fetch user submissions - count unique solved submissions using a set - record problem ID - construct data structure for Rechart donut chart - solved submissions (get the size of the set) - attempted submissions (number of user submissions) ## why ## where - ./src/app/api/users/[username]/submissions/attempted/route.ts ## usage --- .../[username]/submissions/attempted/route.ts | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/app/api/users/[username]/submissions/attempted/route.ts diff --git a/src/app/api/users/[username]/submissions/attempted/route.ts b/src/app/api/users/[username]/submissions/attempted/route.ts new file mode 100644 index 0000000..0af57d8 --- /dev/null +++ b/src/app/api/users/[username]/submissions/attempted/route.ts @@ -0,0 +1,94 @@ + +import { z } from "zod"; + +import { NextResponse } from "next/server"; + +import { userSchema as schema } from "@/schema"; +import { + Language, + ProblemVerdictMap, + SubmissionLangType, + SubmissionsOvertimeLineChartType, + SubmissionSovledVsAttempted +} from "@/types"; +import { RawUserSubmission } from "@/types/raw"; +import { + uhuntUserSubmissionsUrl, + uhuntUsername2UidUrl, +} from "@/utils/constants"; +import moment from "moment"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async (_request: Request, {params}: getParamsType) => { + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch username ID + const { username } = params; + + const usernameUrl = uhuntUsername2UidUrl(username); + const usernameResponse = await fetch(usernameUrl); + const usernameData: number = await usernameResponse.json(); + + // return 404 if problem doesn't exist + if (usernameData === 0) { + const message = { + message: `Username ${username} not found`, + }; + return NextResponse.json(message, { + status: 404, + }); + } + + //----------------------------------------------------------------------------------------------// + // fetch submissions of the user + const userSubmissionsUrl = uhuntUserSubmissionsUrl(usernameData); + const userSubmissionResponse = await fetch(userSubmissionsUrl, { + cache: "no-cache", + }); + const userSubmissionData = + (await userSubmissionResponse.json()) as RawUserSubmission; + + // count solved submissions + // use a set to keep track of problems solved + const set = new Set(); + + const verdictSolvedId = 90 + userSubmissionData.subs.forEach(cur => { + // cur[2] : verdict ID + if(cur[2] === verdictSolvedId) { + set.add(cur[1]) // add problem ID + } + }) + + const processedData: SubmissionSovledVsAttempted[] = [ + { + name: "Solved", + count: set.size, + tooltipTitle: "Solved unique problems", + fill: ProblemVerdictMap.ac.bgHex + }, + { + name: "Attempts", + count: userSubmissionData.subs.length, + tooltipTitle: "Submission attempts", + fill: ProblemVerdictMap.inq.bgHex + } + ] + + return Response.json(processedData) +} From 6608766e7aee34556e2a4e9ee4436c68350a37cf Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 20:24:09 -0700 Subject: [PATCH 289/315] chore(hooks): add react-query hook to fetch user submission attempted ## what - add react-query hook to fetch user submission attempted ## how - fetch from api endpoint `/api/users/[username]/submissions/attempted` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 9251999..423fae4 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -5,6 +5,7 @@ import { Problem, Submission, SubmissionLangType, + SubmissionSovledVsAttempted, SubmissionsOvertimeLineChartType, UserSubmission, UserSubmissionBarChartType, @@ -56,6 +57,10 @@ export enum queryKey { * React-query key for fetching user submissions overtime */ userSubmissionOvertime = "user-submissions-overtime", + /** + * React-query key for fetching user solved problems vs attempted submisssions + */ + userSubmissionAttempted = "user-submissions-attempted", } /** @@ -225,3 +230,21 @@ export const useFetchUserSubmissionOvertime = (username: string) => { refetchOnWindowFocus: false, }); }; + +/** + * Fetch user solved problems vs attempted submissions + * Used for displaying data using Rechart donut chart + */ +export const useFetchUserSubmissionAttempted = (username: string) => { + return useQuery({ + queryKey: [queryKey.userSubmissionAttempted], + queryFn: async () => + await axios + .get( + `/api/users/${username}/submissions/attempted`, + ) + .then((res) => res.data), + refetchOnWindowFocus: false, + }); +}; + From 25bda0ebbd5cb59b31f4c258d6dd31f5f6263fc4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 20:28:41 -0700 Subject: [PATCH 290/315] feat(components:charts): add `SolvedVsAttemptedDonutChart` component ## what - add `SolvedVsAttemptedDonutChart` component ## how - take a prop - data of type `SubmissionSolvedVsAttempted` array - use Rechart pie chart - use custom tooltip from `./src/components/charts/Tooltip` - use styles from Tremor charts - https://github.com/tremorlabs/tremor/blob/main/src/components/chart-elements/DonutChart/DonutChart.tsx ## why - this will display user solved problems vs user submissions using `donut` chart ## where - ./src/components/charts/SolvedVsAttemptedDonutChart.tsx ## usage --- .../charts/SolvedVsAttemptedDonutChart.tsx | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/components/charts/SolvedVsAttemptedDonutChart.tsx diff --git a/src/components/charts/SolvedVsAttemptedDonutChart.tsx b/src/components/charts/SolvedVsAttemptedDonutChart.tsx new file mode 100644 index 0000000..f383d55 --- /dev/null +++ b/src/components/charts/SolvedVsAttemptedDonutChart.tsx @@ -0,0 +1,49 @@ +import { Pie, PieChart, ResponsiveContainer, Tooltip } from "recharts"; + +import { SubmissionSovledVsAttempted } from "@/types"; +import { cn } from "@/lib/utils"; +import ChartTooltip from "@/components/charts/Tooltip"; + +type Props = { + data: SubmissionSovledVsAttempted[]; +}; + +const SolvedVsAttemptedDonutChart = ({ data }: Props) => { + return ( + + + + ( + `${new Intl.NumberFormat("us").format(number).toString()}`} + labelFormatter={(payload) => payload[0].payload.tooltipTitle} + /> + )} + /> + + + ); +}; + +export default SolvedVsAttemptedDonutChart; From e2689d5f8ab121f86a7f894ae2dd5717d074b769 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 20:32:39 -0700 Subject: [PATCH 291/315] feat(page:user): display problem solved VS user submissions with donut chart ## what - display problem solved VS user submissions with donut chart ## how - fetch the data using react-query hook `useFetchUserSubmissionAttempted` - display the data using Rechart donut chart ## why - to display user solved problems VS user submissions ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index 6745ad3..a5b92bd 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -8,6 +8,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { userSchema } from "@/schema"; import SubmissionVerdictChart from "@/components/charts/ProblemVerdictChart"; import { + useFetchUserSubmissionAttempted, useFetchUserSubmissionLanguage, useFetchUserSubmissionOvertime, useFetchUserSubmissions, @@ -15,6 +16,7 @@ import { } from "@/hooks"; import { SubmissionLangType, + SubmissionSovledVsAttempted, SubmissionsOvertimeLineChartType, UserSubmission, UserSubmissionBarChartType, @@ -23,6 +25,7 @@ import { DataTable } from "@/components/ui/data-table"; import { columns } from "@/app/users/[username]/components/data-table/submissionColumns"; import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; +import SolvedVsAttemptedDonutChart from "@/components/charts/SolvedVsAttemptedDonutChart"; type Props = { params: z.infer; @@ -57,13 +60,20 @@ const UserPage = ({ params }: Props) => { data: userSubmissionOvertimeData, error: userSubmissionOvertimeError, } = useFetchUserSubmissionOvertime(params.username); - + const { + isLoading: userSubmissionAttemptedIsLoading, + isSuccess: userSubmissionAttemptedIsSuccess, + isError: userSubmissionAttemptedIsError, + data: userSubmissionAttemptedData, + error: userSubmissionAttemptedError, + } = useFetchUserSubmissionAttempted(params.username); if ( userSubmissionIsLoading || userSubmissionVerdictIsLoading || userSubmissionLanguageIsLoading || - userSubmissionOvertimeIsLoading + userSubmissionOvertimeIsLoading || + userSubmissionAttemptedIsLoading ) { return
Loading {params.username}
; } @@ -134,6 +144,19 @@ const UserPage = ({ params }: Props) => {
+ {/* Problem solved vs attempted with donut chart */} +
+ + + Solved problems vs Problem submissions + + + + + +
From d5a438c614492ff473bcf2dfc4541ecbfcb2382b Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Sun, 14 Jan 2024 20:34:50 -0700 Subject: [PATCH 292/315] chore(components:charts): add style to display tooltip color ## what - add style to display tooltip color ## how - use `style` property - use `backgroundColor` ## why - sometimes the background color is not applied when using tailwindcss - this method will make sure to apply the background color ## where - ./src/components/charts/Tooltip.tsx ## usage --- src/components/charts/Tooltip.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/charts/Tooltip.tsx b/src/components/charts/Tooltip.tsx index e360e7d..66f5d29 100644 --- a/src/components/charts/Tooltip.tsx +++ b/src/components/charts/Tooltip.tsx @@ -49,6 +49,7 @@ export const ChartTooltipRow = ({ value, name, color }: ChartTooltipRowProps) => "w-3", "rounded-md", )} + style={{backgroundColor: color}} />

Date: Mon, 15 Jan 2024 07:20:52 -0700 Subject: [PATCH 293/315] chore(page:user): add `Loading` component for `/users/[username]` page ## what - add `Loading` component for `/users/[username]` page ## how ## why - this will be displayed when fetching data on the `/users/[username]` page ## where - ./src/app/users/[username]/loading.tsx ## usage --- src/app/users/[username]/loading.tsx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/app/users/[username]/loading.tsx diff --git a/src/app/users/[username]/loading.tsx b/src/app/users/[username]/loading.tsx new file mode 100644 index 0000000..53147ae --- /dev/null +++ b/src/app/users/[username]/loading.tsx @@ -0,0 +1,27 @@ +import Loading from "@/components/ui/data-table/loading"; +import { Skeleton } from "@/components/ui/skeleton"; +import React from "react"; + +const UsernameLoading = () => { + return ( +

+ +
+ {[...Array(4)].map((cur, index) => ( +
+ {" "} + {" "} +
+ ))} +
+
+
+ + +
+
+
+ ); +}; + +export default UsernameLoading; From fdccefb177f8087f527b1e80211ce2d93da70d3a Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 07:23:02 -0700 Subject: [PATCH 294/315] chore(page:user): display `Loading` component when fetching data on `/users/[username]` page ## what - display `Loading` component when fetching data on `/users/[username]` page ## how ## why ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index a5b92bd..548d6bb 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -26,6 +26,7 @@ import { columns } from "@/app/users/[username]/components/data-table/submission import SubmissionLanguageRadarChart from "@/components/charts/SubmissionLanguageRadarChart"; import SubmissionsOvertimeChart from "@/components/charts/SubmissionsOvertimeChart"; import SolvedVsAttemptedDonutChart from "@/components/charts/SolvedVsAttemptedDonutChart"; +import Loading from "./loading"; type Props = { params: z.infer; @@ -75,7 +76,7 @@ const UserPage = ({ params }: Props) => { userSubmissionOvertimeIsLoading || userSubmissionAttemptedIsLoading ) { - return
Loading {params.username}
; + return } if (userSubmissionIsError) { From 1d04b44145e43da3eb406d9b991fca476abc5f85 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 07:24:12 -0700 Subject: [PATCH 295/315] refactor(page:user): get `isFetching` from react-query hooks ## what - replace `isLoading` with `isFetching` from react-query hooks ## how ## why - scenario - currently in user page - navigate to `/` page - click on a user link - loading component is not being displayed - `isFetching` will be true when fetching data even if the page has been mounted ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index 548d6bb..698d5cb 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -34,35 +34,35 @@ type Props = { const UserPage = ({ params }: Props) => { const { - isLoading: userSubmissionIsLoading, + isFetching: userSubmissionIsFetching, isSuccess: userSubmissionIsSuccess, isError: userSubmissionIsError, data: userSubmissionData, error: userSubmissionError, } = useFetchUserSubmissions(params.username); const { - isLoading: userSubmissionVerdictIsLoading, + isFetching: userSubmissionVerdictIsFetching, isSuccess: userSubmissionVerdictIsSuccess, isError: userSubmissionVerdictIsError, data: userSubmissionVerdictData, error: userSubmissionVerdictError, } = useFetchUserSubmissionVerdict(params.username); const { - isLoading: userSubmissionLanguageIsLoading, + isFetching: userSubmissionLanguageIsFetching, isSuccess: userSubmissionLanguageIsSuccess, isError: userSubmissionLanguageIsError, data: userSubmissionLanguageData, error: userSubmissionLanguageError, } = useFetchUserSubmissionLanguage(params.username); const { - isLoading: userSubmissionOvertimeIsLoading, + isFetching: userSubmissionOvertimeIsFetching, isSuccess: userSubmissionOvertimeIsSuccess, isError: userSubmissionOvertimeIsError, data: userSubmissionOvertimeData, error: userSubmissionOvertimeError, } = useFetchUserSubmissionOvertime(params.username); const { - isLoading: userSubmissionAttemptedIsLoading, + isFetching: userSubmissionAttemptedIsFetching, isSuccess: userSubmissionAttemptedIsSuccess, isError: userSubmissionAttemptedIsError, data: userSubmissionAttemptedData, @@ -70,11 +70,11 @@ const UserPage = ({ params }: Props) => { } = useFetchUserSubmissionAttempted(params.username); if ( - userSubmissionIsLoading || - userSubmissionVerdictIsLoading || - userSubmissionLanguageIsLoading || - userSubmissionOvertimeIsLoading || - userSubmissionAttemptedIsLoading + userSubmissionIsFetching || + userSubmissionVerdictIsFetching || + userSubmissionLanguageIsFetching || + userSubmissionOvertimeIsFetching || + userSubmissionAttemptedIsFetching ) { return } From 48f2aaac142281c125cb5ed65c0f2dcb61217434 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 07:33:31 -0700 Subject: [PATCH 296/315] style(page:user): format code ## what - format code ## how ## why ## where - ./src/app/users/[username]/page.tsx ## usage --- src/app/users/[username]/page.tsx | 33 ++++++++----------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/src/app/users/[username]/page.tsx b/src/app/users/[username]/page.tsx index 698d5cb..f4e04ff 100644 --- a/src/app/users/[username]/page.tsx +++ b/src/app/users/[username]/page.tsx @@ -35,38 +35,25 @@ type Props = { const UserPage = ({ params }: Props) => { const { isFetching: userSubmissionIsFetching, - isSuccess: userSubmissionIsSuccess, - isError: userSubmissionIsError, - data: userSubmissionData, - error: userSubmissionError, + isError: userSubmissionIsError, + data: userSubmissionData, + error: userSubmissionError, } = useFetchUserSubmissions(params.username); const { isFetching: userSubmissionVerdictIsFetching, - isSuccess: userSubmissionVerdictIsSuccess, - isError: userSubmissionVerdictIsError, - data: userSubmissionVerdictData, - error: userSubmissionVerdictError, + data: userSubmissionVerdictData, } = useFetchUserSubmissionVerdict(params.username); const { isFetching: userSubmissionLanguageIsFetching, - isSuccess: userSubmissionLanguageIsSuccess, - isError: userSubmissionLanguageIsError, - data: userSubmissionLanguageData, - error: userSubmissionLanguageError, + data: userSubmissionLanguageData, } = useFetchUserSubmissionLanguage(params.username); const { isFetching: userSubmissionOvertimeIsFetching, - isSuccess: userSubmissionOvertimeIsSuccess, - isError: userSubmissionOvertimeIsError, - data: userSubmissionOvertimeData, - error: userSubmissionOvertimeError, + data: userSubmissionOvertimeData, } = useFetchUserSubmissionOvertime(params.username); const { isFetching: userSubmissionAttemptedIsFetching, - isSuccess: userSubmissionAttemptedIsSuccess, - isError: userSubmissionAttemptedIsError, - data: userSubmissionAttemptedData, - error: userSubmissionAttemptedError, + data: userSubmissionAttemptedData, } = useFetchUserSubmissionAttempted(params.username); if ( @@ -76,7 +63,7 @@ const UserPage = ({ params }: Props) => { userSubmissionOvertimeIsFetching || userSubmissionAttemptedIsFetching ) { - return + return ; } if (userSubmissionIsError) { @@ -95,10 +82,6 @@ const UserPage = ({ params }: Props) => { ); } - // process data - // const userSubmissionVerdicts = processUserSubmissionsVerdictBarChart((userSubmissionData as UserSubmission).subs) - // console.log(userSubmissionVerdicts) - return (
From 2cbc92c23a1358a96bac5cb8b2d4791d59587229 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 07:48:27 -0700 Subject: [PATCH 297/315] docs(docs:images): add screenshot of `/users/[username]` page ## what - add screenshot of `/users/[username]` page - loading - data loaded ## how ## why ## where - ./docs/images/page-users-username-loading.png - ./docs/images/page-users-username.png ## usage --- docs/images/page-users-username-loading.png | Bin 0 -> 67882 bytes docs/images/page-users-username.png | Bin 0 -> 239085 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/page-users-username-loading.png create mode 100644 docs/images/page-users-username.png diff --git a/docs/images/page-users-username-loading.png b/docs/images/page-users-username-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..08c5ab37a19752a923b88aeecf8c3b13394b1f05 GIT binary patch literal 67882 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 L+f8XdxSsug9}RHH literal 0 HcmV?d00001 diff --git a/docs/images/page-users-username.png b/docs/images/page-users-username.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3a12341e5114b4551c1886e55d65278264914b GIT binary patch literal 239085 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%0AZ(M2 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
A>~*9 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
  • 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 MRa*sf&NAqK08nYIaR2}S literal 0 HcmV?d00001 From 4b652054b1ef11aee017c9fbdc1ddcd0e162ce6d Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 07:50:04 -0700 Subject: [PATCH 298/315] docs(readme): display screenshots for `/users/[username]` page ## what - display screenshots for `/users/[username]` page ## how ## why ## where - ./README.md ## usage --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 53fd868..c3a8c6c 100644 --- a/README.md +++ b/README.md @@ -55,4 +55,10 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym ![Problems num page 2](docs/images/page-problems-num.png) +### Username page (`/users/[username]`) +![Username page 1](docs/images/page-users-username-loading.png) + +![Username page 2](docs/images/page-users-username.png) + + From d8cdcc10f682fdf8dca9ffa562e1d7cad34a06b8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 15 Jan 2024 15:04:51 +0000 Subject: [PATCH 299/315] chore(release): 1.0.0-development.6 [skip ci] ## [1.0.0-development.6](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.5...1.0.0-development.6) (2024-1-15) ### :sparkles: Features * **api:user:submissions:verdict:** add endpoint `/api/users/[username]/submissions/verdict` ([33101e6](https://github.com/Clumsy-Coder/uva-uhunt/commit/33101e61c3c9e9b44bb9a0f76bc6b30f2fd670f2)) * **api:user:submissions:** add endpoint `/api/users/[username]/submissions` ([023d886](https://github.com/Clumsy-Coder/uva-uhunt/commit/023d8865d3603325c11185d2ee7e4896f4a7c211)) * **api:users:attempted:** add endpoint `/api/users/[username]/submissions/attempted` ([f3ea62c](https://github.com/Clumsy-Coder/uva-uhunt/commit/f3ea62c89d2804b5c8dcdcd2a602434d1bcccd35)) * **api:users:submissions:** add endpoint `/api/users/[username]/submissions/language` ([d773671](https://github.com/Clumsy-Coder/uva-uhunt/commit/d773671ab833be365a0e368c4ad3ffc43b030084)) * **api:users:submissions:** add endpoint `/api/users/[username]/submissions/overtime` ([01232a7](https://github.com/Clumsy-Coder/uva-uhunt/commit/01232a7ca78c1f9a648a3ada5b74b9664b2d1642)) * **components:charts:** add `SolvedVsAttemptedDonutChart` component ([25bda0e](https://github.com/Clumsy-Coder/uva-uhunt/commit/25bda0ebbd5cb59b31f4c258d6dd31f5f6263fc4)) * **page:user:** display problem solved VS user submissions with donut chart ([e2689d5](https://github.com/Clumsy-Coder/uva-uhunt/commit/e2689d5f8ab121f86a7f894ae2dd5717d074b769)) * **page:user:** display user submissions by language with radar chart ([54639ab](https://github.com/Clumsy-Coder/uva-uhunt/commit/54639abedcb68f405f6cd314547b6cffe9586934)) * **page:user:** display user submissions by verdict with bar chart ([2d8a058](https://github.com/Clumsy-Coder/uva-uhunt/commit/2d8a058e5e1af1dc0c3bdb97b0d0bed74408cd47)) * **page:user:** display user submissions on `/users/[username]` page ([c937b78](https://github.com/Clumsy-Coder/uva-uhunt/commit/c937b7871af9c72c784dcf80197252eaf72ca318)) * **page:user:** display user submissions overtime with area chart ([21ea5f1](https://github.com/Clumsy-Coder/uva-uhunt/commit/21ea5f150e7c62bb82844b550350454fc812c130)) --- CHANGELOG.md | 17 +++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e9d4fa..3c76090 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +## [1.0.0-development.6](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.5...1.0.0-development.6) (2024-1-15) + + +### :sparkles: Features + +* **api:user:submissions:verdict:** add endpoint `/api/users/[username]/submissions/verdict` ([33101e6](https://github.com/Clumsy-Coder/uva-uhunt/commit/33101e61c3c9e9b44bb9a0f76bc6b30f2fd670f2)) +* **api:user:submissions:** add endpoint `/api/users/[username]/submissions` ([023d886](https://github.com/Clumsy-Coder/uva-uhunt/commit/023d8865d3603325c11185d2ee7e4896f4a7c211)) +* **api:users:attempted:** add endpoint `/api/users/[username]/submissions/attempted` ([f3ea62c](https://github.com/Clumsy-Coder/uva-uhunt/commit/f3ea62c89d2804b5c8dcdcd2a602434d1bcccd35)) +* **api:users:submissions:** add endpoint `/api/users/[username]/submissions/language` ([d773671](https://github.com/Clumsy-Coder/uva-uhunt/commit/d773671ab833be365a0e368c4ad3ffc43b030084)) +* **api:users:submissions:** add endpoint `/api/users/[username]/submissions/overtime` ([01232a7](https://github.com/Clumsy-Coder/uva-uhunt/commit/01232a7ca78c1f9a648a3ada5b74b9664b2d1642)) +* **components:charts:** add `SolvedVsAttemptedDonutChart` component ([25bda0e](https://github.com/Clumsy-Coder/uva-uhunt/commit/25bda0ebbd5cb59b31f4c258d6dd31f5f6263fc4)) +* **page:user:** display problem solved VS user submissions with donut chart ([e2689d5](https://github.com/Clumsy-Coder/uva-uhunt/commit/e2689d5f8ab121f86a7f894ae2dd5717d074b769)) +* **page:user:** display user submissions by language with radar chart ([54639ab](https://github.com/Clumsy-Coder/uva-uhunt/commit/54639abedcb68f405f6cd314547b6cffe9586934)) +* **page:user:** display user submissions by verdict with bar chart ([2d8a058](https://github.com/Clumsy-Coder/uva-uhunt/commit/2d8a058e5e1af1dc0c3bdb97b0d0bed74408cd47)) +* **page:user:** display user submissions on `/users/[username]` page ([c937b78](https://github.com/Clumsy-Coder/uva-uhunt/commit/c937b7871af9c72c784dcf80197252eaf72ca318)) +* **page:user:** display user submissions overtime with area chart ([21ea5f1](https://github.com/Clumsy-Coder/uva-uhunt/commit/21ea5f150e7c62bb82844b550350454fc812c130)) + ## [1.0.0-development.5](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.4...1.0.0-development.5) (2024-1-12) diff --git a/package-lock.json b/package-lock.json index 702a20c..2b5c636 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.5", + "version": "1.0.0-development.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uva-uhunt", - "version": "1.0.0-development.5", + "version": "1.0.0-development.6", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", diff --git a/package.json b/package.json index 49234b6..246b78b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.5", + "version": "1.0.0-development.6", "private": true, "scripts": { "dev": "next dev", From 73ac19cab5b11201e6dcee2c3cf3ad9e9087f37c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:48:05 +0000 Subject: [PATCH 300/315] build(devDep): bump @types/react from 18.2.47 to 18.2.48 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.47 to 18.2.48. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2b5c636..3f8d331 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2094,9 +2094,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.47", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", - "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", "devOptional": true, "dependencies": { "@types/prop-types": "*", From e3711edfe58624f262d4b61a2411ab0e02fe8839 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:50:09 +0000 Subject: [PATCH 301/315] build(deps): bump recharts from 2.10.3 to 2.10.4 Bumps [recharts](https://github.com/recharts/recharts) from 2.10.3 to 2.10.4. - [Release notes](https://github.com/recharts/recharts/releases) - [Changelog](https://github.com/recharts/recharts/blob/master/CHANGELOG.md) - [Commits](https://github.com/recharts/recharts/compare/v2.10.3...v2.10.4) --- updated-dependencies: - dependency-name: recharts dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f8d331..214482e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", - "recharts": "^2.10.3", + "recharts": "^2.10.4", "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" @@ -10205,9 +10205,9 @@ } }, "node_modules/recharts": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.10.3.tgz", - "integrity": "sha512-G4J96fKTZdfFQd6aQnZjo2nVNdXhp+uuLb00+cBTGLo85pChvm1+E67K3wBOHDE/77spcYb2Cy9gYWVqiZvQCg==", + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.10.4.tgz", + "integrity": "sha512-/Q7/wdf8bW91lN3NEeCjL9RWfaiXQViJFgdnas4Eix/I8B9HAI3tHHK/CW/zDfgRMh4fzW1zlfjoz1IAapLO1Q==", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", diff --git a/package.json b/package.json index 246b78b..a835da6 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "next-themes": "^0.2.1", "react": "^18", "react-dom": "^18", - "recharts": "^2.10.3", + "recharts": "^2.10.4", "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" From bac4a57f515bcbbe599014f5e9fb46cee84b1f4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:53:13 +0000 Subject: [PATCH 302/315] build(deps): bump @tanstack/react-query-devtools from 5.17.9 to 5.17.12 Bumps [@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools) from 5.17.9 to 5.17.12. - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.17.12/packages/react-query-devtools) --- updated-dependencies: - dependency-name: "@tanstack/react-query-devtools" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 24 ++++++++++++------------ package.json | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 214482e..1833f99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", - "@tanstack/react-query-devtools": "^5.17.9", + "@tanstack/react-query-devtools": "^5.17.12", "@tanstack/react-table": "^8.11.6", "@tanstack/react-virtual": "^3.0.1", "axios": "^1.6.5", @@ -1908,9 +1908,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.17.9", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.9.tgz", - "integrity": "sha512-8xcvpWIPaRMDNLMvG9ugcUJMgFK316ZsqkPPbsI+TMZsb10N9jk0B6XgPk4/kgWC2ziHyWR7n7wUhxmD0pChQw==", + "version": "5.17.10", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.10.tgz", + "integrity": "sha512-bJ2oQUDBftvHcEkLS3gyzzShSeZpJyzNNRu8oHK13iNdsofyaDXtNO/c1Zy/PZYVX+PhqOXwoT42gMiEMRSSfQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -1926,11 +1926,11 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.17.9", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.9.tgz", - "integrity": "sha512-M5E9gwUq1Stby/pdlYjBlL24euIVuGbWKIFCbtnQxSdXI4PgzjTSdXdV3QE6fc+itF+TUvX/JPTKIwq8yuBXcg==", + "version": "5.17.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.12.tgz", + "integrity": "sha512-mJQ+3da1ug4t9b+GycUuNzMs5hd6t+F4tJ1hqyaN/dlETP+bWwYwrv2GXFIbZIfI1K1Hu+XWZ6HUhRPbNtZ4QQ==", "dependencies": { - "@tanstack/query-core": "5.17.9" + "@tanstack/query-core": "5.17.10" }, "funding": { "type": "github", @@ -1941,9 +1941,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.17.9", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.9.tgz", - "integrity": "sha512-1viWP/jlO0LaeCdtTFqtF1k2RfM3KVpvwVffWv+PMNkS2u4s8YGUM17r3p82udbF9BY1mE7aHqQ3MM1errF5lQ==", + "version": "5.17.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.12.tgz", + "integrity": "sha512-5n2oqe9GUD7+QNJqfFm8RqQVVFOeaLQDujBnhyyILDq8XPB6wymTEaS6OJ/CdrhCYKoQe3Uh8E6u9ChABEMuhA==", "dependencies": { "@tanstack/query-devtools": "5.17.7" }, @@ -1952,7 +1952,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.17.9", + "@tanstack/react-query": "^5.17.12", "react": "^18.0.0" } }, diff --git a/package.json b/package.json index a835da6..b7775fc 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "^5.17.1", - "@tanstack/react-query-devtools": "^5.17.9", + "@tanstack/react-query-devtools": "^5.17.12", "@tanstack/react-table": "^8.11.6", "@tanstack/react-virtual": "^3.0.1", "axios": "^1.6.5", From 748b9cfc65a32aa88b679e574a52668470f7a680 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:56:28 +0000 Subject: [PATCH 303/315] build(devDep): bump @types/node from 20.11.0 to 20.11.2 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.11.0 to 20.11.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1833f99..9cc4f16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2073,9 +2073,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.2.tgz", + "integrity": "sha512-cZShBaVa+UO1LjWWBPmWRR4+/eY/JR/UIEcDlVsw3okjWEu+rB7/mH6X3B/L+qJVHDLjk9QW/y2upp9wp1yDXA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" From 6b70d038788451e2aab5dd5c3a81c160e95c1729 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 08:36:53 -0700 Subject: [PATCH 304/315] chore(hooks): disable refetch on mount for `all problems` ## what - disable refetch on mount for `all problems` ## how ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 423fae4..3bed30a 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -91,6 +91,7 @@ export const useFetchProblems = () => { queryFn: async () => axios.get("/api/problems").then((res) => res.data), refetchOnWindowFocus: false, + refetchOnMount: false, }); }; From b2e1d9e8c075acc4eda83f90bfc393448a022c8e Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:44:39 -0700 Subject: [PATCH 305/315] chore(types): add type for search results ## what - add type for search results - title: string to show in search results - href: link path for the search result ## how ## why - this will be used for defining a data structure for search results from the api - this will be used by api endpoint `/api/search/[searchStr]` ## where - ./src/types/index.ts ## usage --- src/types/index.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/types/index.ts b/src/types/index.ts index 46a4685..d55187b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -548,3 +548,25 @@ export type SubmissionSovledVsAttempted = { */ fill: string; } + +////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Search result data structure returned when searching in the navbar + */ +export type SearchResultType = { + /** + * Name of the search result + * + * - Could be a problem number + * - Could be a user + */ + title: string; + /** + * href of the search result + * + * - If the result is a problem number, then navigate to `/problems/[problemNum]` + * - If the result is a user, then navigate to `/users/[username]` + */ + href: string; +} From 3b38b93383ca5634eb6f2e3515832d554027dad4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:47:19 -0700 Subject: [PATCH 306/315] chore(schema:search): add schema for search ## what - add schema for endpoint `/api/search/[searchStr]` ## how ## why - this will be used to validate the data on client side and server side ## where - ./src/schema/index.ts ## usage --- src/schema/index.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/schema/index.ts b/src/schema/index.ts index 6762ce4..9947ca5 100644 --- a/src/schema/index.ts +++ b/src/schema/index.ts @@ -41,3 +41,13 @@ export const problemNumSubmissionSchema = z.object({ export const userSchema = z.object({ username: z.coerce.string().min(1, "Username must have at least on character") }) + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Schema validation for endpoint `/api/search[searchStr] + */ +export const searchSchema = z.object({ + searchStr: z.coerce.string().min(1, "Search text must have at least on character") +}) + From bf15e83c1e2b6ef378b728c2d62ed5f7f2ed6d31 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:49:36 -0700 Subject: [PATCH 307/315] feat(api:search): add endpoint `/api/search/[searchStr]` ## what - add endpoint `/api/search/[searchStr]` ## how - check if the `searchStr` is valid (using zod schema) - must be a string length of 1 - if `searchStr` is not valid, return 400 - if username exists, add SearchResult to an array - title: `User: [username]` - href: `/users/[username]` - if problem number exists, add SearchResult to an array - title: `Problem: [problem number] [problem title]` - href: `/problems/[problem number]` - return response using the SearchResult array ## why - this endpoint will be used to search for a problem number or a username ## where - ./src/app/api/search/[searchStr]/route.ts ## usage --- src/app/api/search/[searchStr]/route.ts | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/app/api/search/[searchStr]/route.ts diff --git a/src/app/api/search/[searchStr]/route.ts b/src/app/api/search/[searchStr]/route.ts new file mode 100644 index 0000000..9196682 --- /dev/null +++ b/src/app/api/search/[searchStr]/route.ts @@ -0,0 +1,63 @@ +import { NextResponse } from "next/server"; +import { z } from "zod"; + +import { searchSchema as schema } from "@/schema"; +import { + uhuntProblemNumUrl, + uhuntUsername2UidUrl, +} from "@/utils/constants"; +import { Problem, SearchResultType } from "@/types"; + +type getParamsType = { + params: z.infer; +}; + +export const GET = async(_request: Request, {params}: getParamsType) => { + const { searchStr } = params; + const responseData: SearchResultType[] = [] + + // validate params + const schemaResponse = await schema.safeParseAsync(params); + if (!schemaResponse.success) { + const message = { + message: schemaResponse.error.issues[0].message, + }; + + return NextResponse.json(message, { + status: 400, + }); + } + + //----------------------------------------------------------------------------------------------// + + // fetch username ID + const usernameUrl = uhuntUsername2UidUrl(searchStr); + const usernameResponse = await fetch(usernameUrl); + const usernameData: number = await usernameResponse.json(); + + // add search result to array if user exists + if (usernameData !== 0) { + responseData.push({ + title: `User: '${searchStr}'`, + href: `/users/${searchStr}` + }) + } + + //----------------------------------------------------------------------------------------------// + + // fetch problem number + const problemNumUrl = uhuntProblemNumUrl(searchStr) + const problemNumResponse = await fetch(problemNumUrl) + const problemNumData: Problem = await problemNumResponse.json() + + if(Object.entries(problemNumData).length !== 0) { + const {num, title} = problemNumData + responseData.push({ + title: `Problem: ${num} '${title}'`, + href: `/problems/${num}` + }) + } + + return Response.json(responseData) + +} From 8b69ffa982d53fce71804ccd10d2aada9a8acfa4 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:59:15 -0700 Subject: [PATCH 308/315] fix(api:users:submissions:overtime): submission with one year ## problem - user submissions overtime chart doesn't render correctly if the user has only one year of submissions ## solution - check if the submissions contain the current year - if it doesn't add an entry in the object - `[current year]: 0` ## why - this will fix the issue if there was one year in the user submissions - ex: - user submissions only has year 2015 - checks if current year is included in the submissions, - adds current year - fill in the years missing - chart renders correctly ## where - ./src/app/api/users/[username]/submissions/overtime/route.ts ## usage --- src/app/api/users/[username]/submissions/overtime/route.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/app/api/users/[username]/submissions/overtime/route.ts b/src/app/api/users/[username]/submissions/overtime/route.ts index c7f1428..c1e73c4 100644 --- a/src/app/api/users/[username]/submissions/overtime/route.ts +++ b/src/app/api/users/[username]/submissions/overtime/route.ts @@ -69,6 +69,13 @@ export const GET = async (_request: Request, { params }: getParamsType) => { return obj; }, initData); + // add current year if it doesn't exist + // this to make sure the chart draws a lint upto the current year + const curYear = new Date().getFullYear() + if(reducedData[curYear] === undefined) { + reducedData[curYear] = 0 + } + // add missing years // - loop through the array starting from index 1 going upto last array element // - convert processedData into an array using Object.entries From f6696ca3d88bf680277d23739d04ff64821e6772 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:07:24 -0700 Subject: [PATCH 309/315] chore(hooks): add react-query hook for searching users or problems ## what - add react-query hook for searching users or problems ## how - fetch from api endpoint `/api/search/[searchStr]` ## why ## where - ./src/hooks/index.ts ## usage --- src/hooks/index.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 3bed30a..d6dc9f1 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -3,6 +3,7 @@ import { useQuery } from "@tanstack/react-query"; import { Problem, + SearchResultType, Submission, SubmissionLangType, SubmissionSovledVsAttempted, @@ -61,6 +62,8 @@ export enum queryKey { * React-query key for fetching user solved problems vs attempted submisssions */ userSubmissionAttempted = "user-submissions-attempted", + //////////////////////////////////////////////////////////////////////////////////////////////// + search = "search", } /** @@ -249,3 +252,22 @@ export const useFetchUserSubmissionAttempted = (username: string) => { }); }; +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Fetch search results + */ +export const useFetchSearch = (searchStr: string) => { + return useQuery({ + queryKey: [queryKey.search, searchStr], + queryFn: async (context) => + await axios + .get(`/api/search/${context.queryKey[1]}`) + .then((res) => res.data), + refetchOnWindowFocus: false, + refetchOnMount: false, + refetchOnReconnect: false, + enabled: !!searchStr, + retry: false, + }); +}; From d8acdd9a980a5a978993dbbf58430f0aa59fb138 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:20:13 -0700 Subject: [PATCH 310/315] feat(components:search): add `searchbar` component ## what - add `searchbar` component ## how - use react `useState` to keep track of search string - also using useState because the component will rerender when the state value changes, causing react-query hook to send request to api - use react-query hook `useFetchSearch` to send a GET request to api for searching username or problem number - use a form to render the search input - use a div to display the search results - if there's search results, display a link ## why ## where - ./src/components/searchbar.tsx ## usage --- src/components/searchbar.tsx | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/components/searchbar.tsx diff --git a/src/components/searchbar.tsx b/src/components/searchbar.tsx new file mode 100644 index 0000000..4972a09 --- /dev/null +++ b/src/components/searchbar.tsx @@ -0,0 +1,61 @@ +"use client"; + +import Link from "next/link"; +import { Search } from "lucide-react"; +import { useState } from "react"; + +import { Card, CardDescription, CardHeader } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { useFetchSearch } from "@/hooks"; +import { cn } from "@/lib/utils"; + +const placeholderText = ["Search problem number", "Search username"]; + +const SearchBar = () => { + const [searchStr, setSearchStr] = useState(""); + const { data: searchData } = useFetchSearch(searchStr); + + return ( +
    +
    +
    + + setSearchStr(event.target.value)} + value={searchStr} + className="pl-8" + placeholder={placeholderText[Math.floor(Math.random() * 2)]} + /> +
    + +
    + setSearchStr("")} + className={cn( + "flex flex-col divide-y", + searchData && "ring-2 ring-ring", + )} + > + {searchData && + searchData.length > 0 && + searchData.map((cur, index) => ( + + + + {cur.title} + + + + ))} + +
    +
    + ); +}; + +export default SearchBar; From e41a0a953904fa047ca0275abdaba2d5d6ec8164 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:39:31 -0700 Subject: [PATCH 311/315] chore(components:navbar): display `searchbar` component ## what - display `searchbar` component ## how ## why ## where - ./src/components/navbar.tsx ## usage --- src/components/navbar.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index e84ea74..7360cde 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -5,6 +5,7 @@ import { usePathname } from "next/navigation"; import { cn } from "@/lib/utils"; import { ModeToggle } from "@/components/darkmode-toggle"; +import SearchBar from "./searchbar"; const links = [ { label: "Uva uHunt", href: "/" }, @@ -23,7 +24,7 @@ const Navbar = ({ className, ...props }: React.HTMLAttributes) => { )} {...props} > -
    +
    {links.map((link) => ( ) => { className={cn( "nav-link", pathname === link.href && "active-nav-link", - "first:text-lg first:font-bold first:mr-8", + "first:text-lg first:font-bold ", )} > {link.label} ))} +
    From 78d52d69ea231845118ffcb433a6c717ae17c620 Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:44:37 -0700 Subject: [PATCH 312/315] docs(docs:images): add screenshot of `navbar` component ## what - add screenshot of `navbar` component ## how ## why ## where - ./docs/images/navbar.png ## usage --- docs/images/navbar.png | Bin 0 -> 9971 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/navbar.png diff --git a/docs/images/navbar.png b/docs/images/navbar.png new file mode 100644 index 0000000000000000000000000000000000000000..f40256fb0b93ddb0b17d9f308f3cee70257fa73a GIT binary patch literal 9971 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 Date: Mon, 15 Jan 2024 17:45:25 -0700 Subject: [PATCH 313/315] docs(readme): display screenshot for `navbar` component ## what - display screenshot for `navbar` component ## how ## why ## where - ./README.md ## usage --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index c3a8c6c..8d90fe7 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,9 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym
    Show screenshots +### Navbar +![Navbar 1](docs/images/navbar.png) + ### Home page (live submissions) ![Home page 1](docs/images/page-home-loading.png) From 7ec9f739997a3d0b59e1263a3349bd057a7ba658 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 16 Jan 2024 00:54:26 +0000 Subject: [PATCH 314/315] chore(release): 1.0.0-development.7 [skip ci] ## [1.0.0-development.7](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.6...1.0.0-development.7) (2024-1-16) ### :sparkles: Features * **api:search:** add endpoint `/api/search/[searchStr]` ([bf15e83](https://github.com/Clumsy-Coder/uva-uhunt/commit/bf15e83c1e2b6ef378b728c2d62ed5f7f2ed6d31)) * **components:search:** add `searchbar` component ([d8acdd9](https://github.com/Clumsy-Coder/uva-uhunt/commit/d8acdd9a980a5a978993dbbf58430f0aa59fb138)) ### :bug: Bug Fixes * **api:users:submissions:overtime:** submission with one year ([8b69ffa](https://github.com/Clumsy-Coder/uva-uhunt/commit/8b69ffa982d53fce71804ccd10d2aada9a8acfa4)) --- CHANGELOG.md | 13 +++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c76090..2e7f2e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## [1.0.0-development.7](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.6...1.0.0-development.7) (2024-1-16) + + +### :sparkles: Features + +* **api:search:** add endpoint `/api/search/[searchStr]` ([bf15e83](https://github.com/Clumsy-Coder/uva-uhunt/commit/bf15e83c1e2b6ef378b728c2d62ed5f7f2ed6d31)) +* **components:search:** add `searchbar` component ([d8acdd9](https://github.com/Clumsy-Coder/uva-uhunt/commit/d8acdd9a980a5a978993dbbf58430f0aa59fb138)) + + +### :bug: Bug Fixes + +* **api:users:submissions:overtime:** submission with one year ([8b69ffa](https://github.com/Clumsy-Coder/uva-uhunt/commit/8b69ffa982d53fce71804ccd10d2aada9a8acfa4)) + ## [1.0.0-development.6](https://github.com/Clumsy-Coder/uva-uhunt/compare/1.0.0-development.5...1.0.0-development.6) (2024-1-15) diff --git a/package-lock.json b/package-lock.json index 9cc4f16..18374ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.6", + "version": "1.0.0-development.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uva-uhunt", - "version": "1.0.0-development.6", + "version": "1.0.0-development.7", "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", diff --git a/package.json b/package.json index b7775fc..989f4be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uva-uhunt", - "version": "1.0.0-development.6", + "version": "1.0.0-development.7", "private": true, "scripts": { "dev": "next dev", From 9abf6a5cdb82d63650836771d3b50e47c21f39ce Mon Sep 17 00:00:00 2001 From: Clumsy-Coder <19594044+Clumsy-Coder@users.noreply.github.com> Date: Mon, 15 Jan 2024 18:01:00 -0700 Subject: [PATCH 315/315] docs(readme): add resource links ## what - add resource links ## how ## why ## where - ./README.md ## usage --- README.md | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 8d90fe7..be8e827 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,17 @@ +# uva-uhunt + +visual redesign of [uva-uhunt](https://uhunt.onlinejudge.org/) + +Using + +- [Shadcn-ui](https://ui.shadcn.com/) +- [Talwindcss](https://tailwindcss.com/) +- [uva uhunt API](https://uhunt.onlinejudge.org/api) +- [Recharts](https://recharts.org/en-US/) +- [zod](https://zod.dev/) + +--- + This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). ## Getting Started @@ -16,25 +30,6 @@ bun dev Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. - ## Screenshots