From e4289ee1ac75b751307db73c97667a77df273138 Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Fri, 21 Nov 2025 16:47:50 +0100 Subject: [PATCH 01/19] first commit to move to svelte --- .gitignore | 6 +- .vscode/launch.json | 2 +- .vscode/settings.json | 3 +- README.md | 22 +- frontend/.gitignore | 23 + frontend/.npmrc | 1 + frontend/README.md | 38 + frontend/package-lock.json | 1587 ++++++++++++++++++++ frontend/package.json | 24 + frontend/src/app.d.ts | 13 + frontend/src/app.html | 11 + frontend/src/lib/ShadowrunCharacter.svelte | 99 ++ frontend/src/lib/assets/favicon.svg | 1 + frontend/src/lib/config.ts | 1 + frontend/src/lib/index.ts | 1 + frontend/src/routes/+layout.js | 2 + frontend/src/routes/+layout.svelte | 12 + frontend/src/routes/+page.svelte | 2 + frontend/src/routes/shadowrun/+page.svelte | 80 + frontend/static/robots.txt | 3 + frontend/svelte.config.js | 8 + frontend/tsconfig.json | 20 + frontend/vite.config.ts | 6 + src/database/database.cpp | 8 - src/database/database.hpp | 21 +- src/main.cpp | 61 +- src/shadowrun/ShadowrunApi.cpp | 40 +- src/shadowrun/ShadowrunDb.cpp | 62 +- src/shadowrun/ShadowrunDb.hpp | 23 +- src/utils.cpp | 9 + src/utils.hpp | 12 + 31 files changed, 2155 insertions(+), 46 deletions(-) create mode 100644 frontend/.gitignore create mode 100644 frontend/.npmrc create mode 100644 frontend/README.md create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/src/app.d.ts create mode 100644 frontend/src/app.html create mode 100644 frontend/src/lib/ShadowrunCharacter.svelte create mode 100644 frontend/src/lib/assets/favicon.svg create mode 100644 frontend/src/lib/config.ts create mode 100644 frontend/src/lib/index.ts create mode 100644 frontend/src/routes/+layout.js create mode 100644 frontend/src/routes/+layout.svelte create mode 100644 frontend/src/routes/+page.svelte create mode 100644 frontend/src/routes/shadowrun/+page.svelte create mode 100644 frontend/static/robots.txt create mode 100644 frontend/svelte.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/vite.config.ts diff --git a/.gitignore b/.gitignore index c18856a..07ba12f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,8 @@ pkg !.idea/codeStyles/ !.idea/runConfigurations/ !.idea/inspectionProfiles/ -*.iml \ No newline at end of file +*.iml + +.cache/ +compile_commands.json +*.db \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index ab59233..cb0bcb3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,7 +3,7 @@ "configurations": [ { "name": "Debug Server Admin Panel", - "type": "cppdbg", + "type": "lldb", "request": "launch", "program": "${workspaceFolder}/build/lf-server-admin-panel", "args": [], diff --git a/.vscode/settings.json b/.vscode/settings.json index bc67769..30f2371 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -99,5 +99,6 @@ "typeinfo": "cpp", "valarray": "cpp", "variant": "cpp" - } + }, + "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/README.md b/README.md index 35bacd5..e15b326 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,19 @@ run : F5 or Run → Start Debugging cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ``` +## Svelte +Inside the fronend directory + +### Install +``` +npm install -D @sveltejs/adapter-static +``` + +### Build +``` +npm run build +``` + ## Make Package 1. tar the source files to make it cleaner @@ -26,4 +39,11 @@ tar czf pkg/lf-server-admin-panel-0.1.1.tar.gz src/ static/ templates/ lf-server ``` makepkg -f -``` \ No newline at end of file +``` + +## Database + +### Attributes +| Character Id | Attribute | Value | + +### \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..75842c4 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,38 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```sh +# create a new project in the current directory +npx sv create + +# create a new project in my-app +npx sv create my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```sh +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```sh +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..afce819 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,1587 @@ +{ + "name": "frontend", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.1", + "devDependencies": { + "@sveltejs/adapter-auto": "^7.0.0", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.47.1", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "svelte": "^5.41.0", + "svelte-check": "^4.3.3", + "typescript": "^5.9.3", + "vite": "^7.1.10" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", + "integrity": "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", + "integrity": "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", + "integrity": "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", + "integrity": "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", + "integrity": "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", + "integrity": "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", + "integrity": "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", + "integrity": "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", + "integrity": "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", + "integrity": "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", + "integrity": "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", + "integrity": "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", + "integrity": "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", + "integrity": "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", + "integrity": "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", + "integrity": "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", + "integrity": "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", + "integrity": "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", + "integrity": "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", + "integrity": "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", + "integrity": "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", + "integrity": "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.7.tgz", + "integrity": "sha512-znp1A/Y1Jj4l/Zy7PX5DZKBE0ZNY+5QBngiE21NJkfSTyzzC5iKNWOtwFXKtIrn7MXEFBck4jD95iBNkGjK92Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/adapter-auto": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-7.0.0.tgz", + "integrity": "sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.48.5", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.48.5.tgz", + "integrity": "sha512-/rnwfSWS3qwUSzvHynUTORF9xSJi7PCR9yXkxUOnRrNqyKmCmh3FPHH+E9BbgqxXfTevGXBqgnlh9kMb+9T5XA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/cookie": "^0.6.0", + "acorn": "^8.14.1", + "cookie": "^0.6.0", + "devalue": "^5.3.2", + "esm-env": "^1.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^3.0.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", + "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", + "debug": "^4.4.1", + "deepmerge": "^4.3.1", + "magic-string": "^0.30.17", + "vitefu": "^1.1.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz", + "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/devalue": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz", + "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esrap": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.3.tgz", + "integrity": "sha512-T/Dhhv/QH+yYmiaLz9SA3PW+YyenlnRKDNdtlYJrSOBmNsH4nvPux+mTwx7p+wAedlJrGoZtXNI0a0MjQ2QkVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rollup": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz", + "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.2", + "@rollup/rollup-android-arm64": "4.53.2", + "@rollup/rollup-darwin-arm64": "4.53.2", + "@rollup/rollup-darwin-x64": "4.53.2", + "@rollup/rollup-freebsd-arm64": "4.53.2", + "@rollup/rollup-freebsd-x64": "4.53.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", + "@rollup/rollup-linux-arm-musleabihf": "4.53.2", + "@rollup/rollup-linux-arm64-gnu": "4.53.2", + "@rollup/rollup-linux-arm64-musl": "4.53.2", + "@rollup/rollup-linux-loong64-gnu": "4.53.2", + "@rollup/rollup-linux-ppc64-gnu": "4.53.2", + "@rollup/rollup-linux-riscv64-gnu": "4.53.2", + "@rollup/rollup-linux-riscv64-musl": "4.53.2", + "@rollup/rollup-linux-s390x-gnu": "4.53.2", + "@rollup/rollup-linux-x64-gnu": "4.53.2", + "@rollup/rollup-linux-x64-musl": "4.53.2", + "@rollup/rollup-openharmony-arm64": "4.53.2", + "@rollup/rollup-win32-arm64-msvc": "4.53.2", + "@rollup/rollup-win32-ia32-msvc": "4.53.2", + "@rollup/rollup-win32-x64-gnu": "4.53.2", + "@rollup/rollup-win32-x64-msvc": "4.53.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "dev": true, + "license": "MIT" + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svelte": { + "version": "5.43.7", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.43.7.tgz", + "integrity": "sha512-S0NyuEEq5r205XqaWOMESHkqk1uQOo/e4qCKoaTCdELRFzUb+XVzuLQ4a7ushr7y/S3M5hjOBHlUq+xzi5Sy7g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "esm-env": "^1.2.1", + "esrap": "^2.1.0", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.4.tgz", + "integrity": "sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", + "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..7a94961 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,24 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^7.0.0", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.47.1", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "svelte": "^5.41.0", + "svelte-check": "^4.3.3", + "typescript": "^5.9.3", + "vite": "^7.1.10" + } +} diff --git a/frontend/src/app.d.ts b/frontend/src/app.d.ts new file mode 100644 index 0000000..da08e6d --- /dev/null +++ b/frontend/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/frontend/src/app.html b/frontend/src/app.html new file mode 100644 index 0000000..f273cc5 --- /dev/null +++ b/frontend/src/app.html @@ -0,0 +1,11 @@ + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/frontend/src/lib/ShadowrunCharacter.svelte b/frontend/src/lib/ShadowrunCharacter.svelte new file mode 100644 index 0000000..61ce0f0 --- /dev/null +++ b/frontend/src/lib/ShadowrunCharacter.svelte @@ -0,0 +1,99 @@ + + +

Character Info

+{#each Object.entries(characterInfo) as [key, value], i} +
+ + +
+{/each} + +

Attributes

+{#each attributes as field, i} + +{/each} + +

Skills

+{#each skills as skill, i} +
+ + + + Dice Pool: {skill.rating + attributes[skill.linked]} +
+{/each} \ No newline at end of file diff --git a/frontend/src/lib/assets/favicon.svg b/frontend/src/lib/assets/favicon.svg new file mode 100644 index 0000000..cc5dc66 --- /dev/null +++ b/frontend/src/lib/assets/favicon.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/frontend/src/lib/config.ts b/frontend/src/lib/config.ts new file mode 100644 index 0000000..d420860 --- /dev/null +++ b/frontend/src/lib/config.ts @@ -0,0 +1 @@ +export const API_BASE = "http://127.0.0.1:3010"; diff --git a/frontend/src/lib/index.ts b/frontend/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/frontend/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/frontend/src/routes/+layout.js b/frontend/src/routes/+layout.js new file mode 100644 index 0000000..91727a0 --- /dev/null +++ b/frontend/src/routes/+layout.js @@ -0,0 +1,2 @@ + export const ssr = false; + export const prerender = true; \ No newline at end of file diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte new file mode 100644 index 0000000..b9d6093 --- /dev/null +++ b/frontend/src/routes/+layout.svelte @@ -0,0 +1,12 @@ + + + + + + + +{@render children()} diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte new file mode 100644 index 0000000..cc88df0 --- /dev/null +++ b/frontend/src/routes/+page.svelte @@ -0,0 +1,2 @@ +

Welcome to SvelteKit

+

Visit svelte.dev/docs/kit to read the documentation

diff --git a/frontend/src/routes/shadowrun/+page.svelte b/frontend/src/routes/shadowrun/+page.svelte new file mode 100644 index 0000000..4ed86dd --- /dev/null +++ b/frontend/src/routes/shadowrun/+page.svelte @@ -0,0 +1,80 @@ + + +{#if !currentCharacter} +

Shadowrun Character Manager

+ +
+

Load Existing Character

+ {#if characters.length === 0} +

No characters found.

+ {:else} + + + {/if} +
+ +
+

Create New Character

+ + +
+{:else} + +{/if} diff --git a/frontend/static/robots.txt b/frontend/static/robots.txt new file mode 100644 index 0000000..b6dd667 --- /dev/null +++ b/frontend/static/robots.txt @@ -0,0 +1,3 @@ +# allow crawling everything by default +User-agent: * +Disallow: diff --git a/frontend/svelte.config.js b/frontend/svelte.config.js new file mode 100644 index 0000000..ee7fb27 --- /dev/null +++ b/frontend/svelte.config.js @@ -0,0 +1,8 @@ +import adapter from '@sveltejs/adapter-static'; + +export default { + kit: { + adapter: adapter(), + paths: { base: '', assets: '' } + } +}; \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..5a3b413 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowImportingTsExtensions": true, + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // To make changes to top-level options such as include and exclude, we recommend extending + // the generated config; see https://svelte.dev/docs/kit/configuration#typescript +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..bbf8c7d --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,6 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [sveltekit()] +}); diff --git a/src/database/database.cpp b/src/database/database.cpp index 7bd3a28..6feba3b 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -12,14 +12,6 @@ Database::~Database() { sqlite3_close(m_db); } -string Database::currentTime(){ - auto now = std::chrono::system_clock::now(); - std::time_t t = std::chrono::system_clock::to_time_t(now); - std::stringstream ss; - ss << std::put_time(std::gmtime(&t), "%Y-%m-%d %H:%M:%S"); - return ss.str(); -} - sqlite3_stmt* Database::prepareStmt(const string& sql){ sqlite3_stmt* stmt = nullptr; if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, nullptr) != SQLITE_OK) { diff --git a/src/database/database.hpp b/src/database/database.hpp index fc48708..eebcb9c 100644 --- a/src/database/database.hpp +++ b/src/database/database.hpp @@ -30,8 +30,6 @@ public: std::set getStrSet(const std::string& sql); - static std::string currentTime(); - template std::optional getSqlData(sqlite3_stmt* stmt, int i) { @@ -85,21 +83,22 @@ private: inline auto make_database() { - return sqlite_orm::make_storage(Database::dbFile, + auto storage = sqlite_orm::make_storage(Database::dbFile, sqlite_orm::make_table("shadowrun_characters", sqlite_orm::make_column("id", &shadowrun::ShadowrunCharacter::id, sqlite_orm::primary_key()), sqlite_orm::make_column("name", &shadowrun::ShadowrunCharacter::name, sqlite_orm::not_null()), sqlite_orm::make_column("created_at", &shadowrun::ShadowrunCharacter::created_at, sqlite_orm::default_value("CURRENT_TIMESTAMP")) ), - sqlite_orm::make_table("shadowrun_data", - sqlite_orm::make_column("id", &shadowrun::ShadowrunData::id, sqlite_orm::primary_key()), - sqlite_orm::make_column("character_id", &shadowrun::ShadowrunData::character_id, sqlite_orm::not_null()), - sqlite_orm::make_column("name", &shadowrun::ShadowrunData::name, sqlite_orm::not_null()), - sqlite_orm::make_column("value", &shadowrun::ShadowrunData::value), - sqlite_orm::make_column("created_at", &shadowrun::ShadowrunData::created_at, sqlite_orm::default_value("CURRENT_TIMESTAMP")), - sqlite_orm::make_column("updated_at", &shadowrun::ShadowrunData::updated_at, sqlite_orm::default_value("CURRENT_TIMESTAMP")), - sqlite_orm::foreign_key(&shadowrun::ShadowrunData::character_id).references(&shadowrun::ShadowrunCharacter::id).on_delete.cascade() + sqlite_orm::make_table("shadowrun_characters_data", + sqlite_orm::make_column("id", &shadowrun::ShadowrunCharacterData::id, sqlite_orm::primary_key()), + sqlite_orm::make_column("character_id", &shadowrun::ShadowrunCharacterData::character_id, sqlite_orm::not_null()), + sqlite_orm::make_column("type", &shadowrun::ShadowrunCharacterData::type, sqlite_orm::not_null()), + sqlite_orm::make_column("json", &shadowrun::ShadowrunCharacterData::json), + sqlite_orm::make_column("created_at", &shadowrun::ShadowrunCharacterData::created_at, sqlite_orm::default_value("CURRENT_TIMESTAMP")), + sqlite_orm::make_column("updated_at", &shadowrun::ShadowrunCharacterData::updated_at, sqlite_orm::default_value("CURRENT_TIMESTAMP")), + sqlite_orm::foreign_key(&shadowrun::ShadowrunCharacterData::character_id).references(&shadowrun::ShadowrunCharacter::id).on_delete.cascade() )); + return storage; } #endif // __DATABASE_H__ \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index cf5e9b0..acf4bcf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,9 +10,33 @@ using namespace std; +std::string read_file(const std::string& path) { + std::ifstream file(path, std::ios::binary); + if (!file) { + throw std::runtime_error("Cannot open file: " + path); + } + std::ostringstream ss; + ss << file.rdbuf(); + return ss.str(); +} + +// Simple MIME type detection +std::string get_mime_type(const std::string& path) { + if (path.ends_with(".html")) return "text/html"; + if (path.ends_with(".js")) return "text/javascript"; + if (path.ends_with(".css")) return "text/css"; + if (path.ends_with(".json")) return "application/json"; + if (path.ends_with(".svg")) return "image/svg+xml"; + if (path.ends_with(".png")) return "image/png"; + if (path.ends_with(".jpg") || path.ends_with(".jpeg")) return "image/jpeg"; + if (path.ends_with(".woff")) return "font/woff"; + if (path.ends_with(".woff2")) return "font/woff2"; + return "application/octet-stream"; +} + int main() { crow::SimpleApp app; - +/* CROW_ROUTE(app, "/")([] { auto data = utils::loadFile("templates/index.html"); if (data.empty()) @@ -79,6 +103,14 @@ int main() { } return crow::response{row.htmx()}; })); +*/ + const filesystem::path build_dir = "frontend/build/"; // <-- set your build folder + + // Root route + CROW_ROUTE(app, "/")([&]() { + auto data = read_file(build_dir / "index.html"); + return crow::response(200, "text/html", data); + }); const uint16_t defaultPort = 3010; uint16_t httpPort = defaultPort; @@ -103,11 +135,34 @@ int main() { } shadowrun::initApi(app); - if(!login::initLogin(app)) + + // Catch-all route for static files and SPA fallback + CROW_ROUTE(app, "/") + ([&](const std::string& p) { + filesystem::path file_path = build_dir / p; + + // If path is a directory, serve index.html inside it + if (filesystem::is_directory(file_path)) + file_path /= "index.html"; + + // If file exists, serve it + if (filesystem::exists(file_path)) { + auto data = read_file(file_path); + auto mime = get_mime_type(file_path.string()); + return crow::response(200, mime.c_str(), data); + } + + // SPA fallback: serve root index.html for unknown routes + filesystem::path fallback = build_dir / "index.html"; + auto data = read_file(fallback); + return crow::response(404, "text/html", data); + }); + +/* if(!login::initLogin(app)) { CROW_LOG_ERROR << "Failed to init Login API"; } - +*/ app.loglevel(crow::LogLevel::INFO); app.port(httpPort).multithreaded().run(); } diff --git a/src/shadowrun/ShadowrunApi.cpp b/src/shadowrun/ShadowrunApi.cpp index fa0e39e..ca2e786 100644 --- a/src/shadowrun/ShadowrunApi.cpp +++ b/src/shadowrun/ShadowrunApi.cpp @@ -25,7 +25,6 @@ static std::unordered_map parse_query_string(const std params[key] = value; // You may want to URL-decode here } } - return params; } @@ -37,6 +36,7 @@ static crow::response rsp(const std::string& msg){ void initApi(crow::SimpleApp& app) { +/* CROW_ROUTE(app, "/api/shadowrun/submit-character").methods("POST"_method) (login::login_required([](const crow::request& req) { auto params = parse_query_string(req.body); @@ -88,7 +88,7 @@ void initApi(crow::SimpleApp& app) return crow::response{ShadowrunCharacterForm(data).htmx()}; })); - +*/ CROW_ROUTE(app, "/api/shadowrun/character-list") (login::login_required([](const crow::request& req) { std::ostringstream html; @@ -110,6 +110,42 @@ void initApi(crow::SimpleApp& app) return crow::response{html.str()}; })); + CROW_ROUTE(app, "/api/shadowrun/characters") + ([&]() { + auto characters = getCharacters(); + return utils::toJsonArray(characters); + }); + + CROW_ROUTE(app, "/api/shadowrun/characters").methods("POST"_method) + ([](const crow::request& req) { + nlohmann::json data = nlohmann::json::parse(req.body); // parse JSON from HTTP body + auto name = data["name"]; + int id = createCharacter(name); + if(id > 0){ + auto character = getChracter(id); + if (character.has_value()){ + return crow::response(200, nlohmann::json(character.value()).dump()); + } + } + return crow::response(405, "Failed to create character"); + }); + + CROW_ROUTE(app, "/api/shadowrun/characters/") + ([&](int id) { + auto optCharacter = getChracter(id); + if (!optCharacter.has_value()) + return crow::response(404, "Character not found"); + return crow::response(200, nlohmann::json(optCharacter.value()).dump()); + }); + + CROW_ROUTE(app, "/api/shadowrun/characters_data/") + ([&](int id) { + auto character_data = getChracterData(id); + if (!character_data.empty()) + return crow::response(405, "No character data found"); + return crow::response(200, utils::toJsonArray(character_data)); + }); + } } \ No newline at end of file diff --git a/src/shadowrun/ShadowrunDb.cpp b/src/shadowrun/ShadowrunDb.cpp index 1a3270b..b341b81 100644 --- a/src/shadowrun/ShadowrunDb.cpp +++ b/src/shadowrun/ShadowrunDb.cpp @@ -2,9 +2,11 @@ #include #include #include +#include #include "database.hpp" #include "databasepool.h" #include "crow.h" +#include "utils.hpp" #include "sqlite_orm.h" using namespace std; @@ -12,7 +14,10 @@ using namespace sqlite_orm; namespace shadowrun { -int64_t getKeyOfCharacter(const string& name){ +int64_t createCharacter(const string& name){ + if (name.empty()) + return -1; + auto db = dbpool.acquire(); auto character = db->get_all( @@ -23,13 +28,15 @@ int64_t getKeyOfCharacter(const string& name){ if (!character.empty()) { return character[0].id; } else { - return db->insert(ShadowrunCharacter{-1, name, Database::currentTime()}); + auto c = createShadowrunCharacter(name); + return db->insert(c); } } +/* bool storeCharacterData(int64_t characterKey, vector>& idValues){ auto characterData = getCharacterData(characterKey); - std::map dataMap; + std::map dataMap; for(auto& data : characterData) { dataMap[data.name] = &data; } @@ -45,7 +52,7 @@ bool storeCharacterData(int64_t characterKey, vectorupdate_all( sqlite_orm::set( assign(&ShadowrunData::value, idValue.second), - assign(&ShadowrunData::updated_at, Database::currentTime()) + assign(&ShadowrunData::updated_at, utils::currentTime()) ), where( c(&ShadowrunData::name) == name and @@ -58,7 +65,7 @@ bool storeCharacterData(int64_t characterKey, vector(characterKey), .name = name, .value = value, - .created_at = Database::currentTime(), + .created_at = utils::currentTime(), .updated_at = "", }; db->insert(entry); @@ -66,26 +73,59 @@ bool storeCharacterData(int64_t characterKey, vector getCharacters(){ auto db = dbpool.acquire(); return db->get_all(); } -std::map getCharacterDataMap(int64_t characterKey){ - auto characterData = getCharacterData(characterKey); - std::map dataMap; - for(auto& data : characterData) { - dataMap[data.name] = data.value; +optional getChracter(int id) +{ + auto db = dbpool.acquire(); + auto character = db->get_all( + where(c(&ShadowrunCharacter::id) == id), + limit(1) + ); + if (character.empty()) + { + return {}; + } + else { + return character[0]; } - return dataMap; } +vector getChracterData(int character_id) +{ + auto db = dbpool.acquire(); + auto characterData = db->get_all( + where(c(&ShadowrunCharacterData::character_id) == character_id) + ); + return characterData; +} + +int storeCharacterData(const ShadowrunCharacterData& data) +{ + auto db = dbpool.acquire(); + auto characterData = db->get_optional(data.id); + + if(!characterData.has_value()){ + return db->insert(data); + } + else { + db->update(data); + return data.id; + } +} + +/* vector getCharacterData(int64_t characterKey) { auto db = dbpool.acquire(); return db->get_all( where(c(&ShadowrunData::character_id) == characterKey) ); } +*/ } \ No newline at end of file diff --git a/src/shadowrun/ShadowrunDb.hpp b/src/shadowrun/ShadowrunDb.hpp index 9bf0382..92aa1cb 100644 --- a/src/shadowrun/ShadowrunDb.hpp +++ b/src/shadowrun/ShadowrunDb.hpp @@ -4,8 +4,10 @@ #include #include #include -#include #include +#include "json.hpp" +#include "utils.hpp" + namespace shadowrun { struct ShadowrunCharacter { int id; @@ -13,21 +15,28 @@ namespace shadowrun { std::string created_at; // SQLite stores DATETIME as TEXT }; - struct ShadowrunData { + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ShadowrunCharacter, id, name, created_at) + + inline ShadowrunCharacter createShadowrunCharacter(const std::string& name){ + return ShadowrunCharacter {-1, name, utils::currentTime()}; + } + struct ShadowrunCharacterData { int id; int character_id; - std::string name; - std::string value; + std::string type; + std::string json; std::string created_at; std::string updated_at; }; + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ShadowrunCharacterData, id, character_id, type, json, created_at, updated_at); - int64_t getKeyOfCharacter(const std::string& name); + int64_t createCharacter(const std::string& name); bool storeCharacterData(int64_t characterKey, std::vector>& idValues); std::vector getCharacters(); + std::optional getChracter(int id); - std::vector getCharacterData(int64_t characterKey); - std::map getCharacterDataMap(int64_t characterKey); + std::vector getChracterData(int character_id); + int storeCharacterData(const ShadowrunCharacterData& data); } #endif // __SHADOWRUNDB_H__ \ No newline at end of file diff --git a/src/utils.cpp b/src/utils.cpp index a831426..dd753e2 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -134,4 +134,13 @@ std::string urlDecode(const std::string& str) { return decoded.str(); } + +string currentTime(){ + auto now = std::chrono::system_clock::now(); + std::time_t t = std::chrono::system_clock::to_time_t(now); + std::stringstream ss; + ss << std::put_time(std::gmtime(&t), "%Y-%m-%d %H:%M:%S"); + return ss.str(); +} + } \ No newline at end of file diff --git a/src/utils.hpp b/src/utils.hpp index da86fbb..dd1f8cb 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -6,6 +6,7 @@ #include #include #include +#include "json.hpp" namespace utils { std::map parseBody(const std::string& body); @@ -21,6 +22,17 @@ namespace utils { std::filesystem::path getDataDir(); std::string urlDecode(const std::string& str); + + std::string currentTime(); + + template + std::string toJsonArray(const std::vector& data){ + nlohmann::json arr = nlohmann::json::array(); + for (auto& c : data) { + arr.push_back(nlohmann::json(c)); + } + return arr.dump(); + } } #endif From b3c4395fac24070fff1bfd61191e31794ad1c683 Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Sat, 22 Nov 2025 19:41:46 +0100 Subject: [PATCH 02/19] first draft is working --- .vscode/tasks.json | 8 + CMakeLists.txt | 14 +- frontend/src/lib/ShadowrunCharacter.svelte | 90 +- frontend/src/routes/shadowrun/+page.svelte | 12 +- {src => include/libs}/json.hpp | 0 include/libs/magic_enum.hpp | 1564 +++++++++++++++++++ {src/database => include/libs}/sqlite_orm.h | 0 src/shadowrun/ShadowrunApi.cpp | 59 +- src/shadowrun/ShadowrunDb.cpp | 86 +- src/shadowrun/ShadowrunDb.hpp | 29 +- src/utils.cpp | 8 + src/utils.hpp | 16 +- 12 files changed, 1767 insertions(+), 119 deletions(-) rename {src => include/libs}/json.hpp (100%) create mode 100644 include/libs/magic_enum.hpp rename {src/database => include/libs}/sqlite_orm.h (100%) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b6b51cc..0bbd935 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -9,6 +9,14 @@ "problemMatcher": [ "$gcc" ] + }, + { + "label": "build Frontend", + "type": "shell", + "command": "npm run build", + "options": { + "cwd": "frontend" + } } ] } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b5b63f..221f926 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,11 +33,20 @@ foreach(file IN LISTS TEMPLATE_FILES) configure_file("${file}" "${CMAKE_BINARY_DIR}/${rel_path}" COPYONLY) endforeach() +# warnings to ignore add_compile_options(-Wno-deprecated-declarations) add_compile_options(-Wno-deprecated-literal-operator) # Use Crow from system include (installed via yay -S crow + asio) -include_directories(/usr/include src src/htmx src/shadowrun src/database src/login) +include_directories( + /usr/include + include/libs + src + src/htmx + src/shadowrun + src/database + src/login +) add_executable(${TARGET_NAME} src/main.cpp @@ -47,7 +56,6 @@ add_executable(${TARGET_NAME} src/htmx/HtmxTable.h src/systemd.cpp src/systemd.h - src/json.hpp src/htmx/HtmxTableRow.cpp src/htmx/HtmxTableRow.h src/htmx/HtmxObject.cpp @@ -56,11 +64,9 @@ add_executable(${TARGET_NAME} src/htmx_helper.h src/json_settings.cpp src/json_settings.h - src/json.hpp src/database/database.cpp src/database/database.hpp - src/database/sqlite_orm.h # Shadowrun src/shadowrun/HtmxShItemList.cpp diff --git a/frontend/src/lib/ShadowrunCharacter.svelte b/frontend/src/lib/ShadowrunCharacter.svelte index 61ce0f0..84cdd81 100644 --- a/frontend/src/lib/ShadowrunCharacter.svelte +++ b/frontend/src/lib/ShadowrunCharacter.svelte @@ -1,21 +1,37 @@ + +

Name: {currentCharacter.name}

+

Character Info

-{#each Object.entries(characterInfo) as [key, value], i} +{#each Object.entries(characterData["Info"]) as [key, value], i}
{/each}

Attributes

-{#each attributes as field, i} - +{#each Object.entries(characterData["Attributes"]) as [key, value], i} +
+ + +
{/each} - + + diff --git a/frontend/src/routes/shadowrun/+page.svelte b/frontend/src/routes/shadowrun/+page.svelte index 4ed86dd..db6e19a 100644 --- a/frontend/src/routes/shadowrun/+page.svelte +++ b/frontend/src/routes/shadowrun/+page.svelte @@ -9,6 +9,8 @@ }; let characters: Character[] = []; + let currentCharacter: any = null; + let currentCharacterData : any = null let selectedCharId: number | null = null; let creatingNew = false; let newCharName = ''; @@ -20,6 +22,12 @@ characters = await res.json(); } + async function loadCharacterData(characterId : number) { + const res = await fetch(`${API_BASE}/api/shadowrun/characters_data/${characterId}`); + if (res.ok) + currentCharacterData = await res.json(); + } + onMount(loadCharacters); async function loadCharacter() { @@ -28,6 +36,7 @@ const res = await fetch(`${API_BASE}/api/shadowrun/characters/${selectedCharId}`); if (res.ok) { const data = await res.json(); + await loadCharacterData(data.id) currentCharacter = data; creatingNew = false; } @@ -49,7 +58,6 @@ } } - let currentCharacter: any = null; {#if !currentCharacter} @@ -76,5 +84,5 @@ {:else} - + {/if} diff --git a/src/json.hpp b/include/libs/json.hpp similarity index 100% rename from src/json.hpp rename to include/libs/json.hpp diff --git a/include/libs/magic_enum.hpp b/include/libs/magic_enum.hpp new file mode 100644 index 0000000..29ad7a0 --- /dev/null +++ b/include/libs/magic_enum.hpp @@ -0,0 +1,1564 @@ +// __ __ _ ______ _____ +// | \/ | (_) | ____| / ____|_ _ +// | \ / | __ _ __ _ _ ___ | |__ _ __ _ _ _ __ ___ | | _| |_ _| |_ +// | |\/| |/ _` |/ _` | |/ __| | __| | '_ \| | | | '_ ` _ \ | | |_ _|_ _| +// | | | | (_| | (_| | | (__ | |____| | | | |_| | | | | | | | |____|_| |_| +// |_| |_|\__,_|\__, |_|\___| |______|_| |_|\__,_|_| |_| |_| \_____| +// __/ | https://github.com/Neargye/magic_enum +// |___/ version 0.9.7 +// +// Licensed under the MIT License . +// SPDX-License-Identifier: MIT +// Copyright (c) 2019 - 2024 Daniil Goncharov . +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#ifndef NEARGYE_MAGIC_ENUM_HPP +#define NEARGYE_MAGIC_ENUM_HPP + +#define MAGIC_ENUM_VERSION_MAJOR 0 +#define MAGIC_ENUM_VERSION_MINOR 9 +#define MAGIC_ENUM_VERSION_PATCH 7 + +#ifndef MAGIC_ENUM_USE_STD_MODULE +#include +#include +#include +#include +#include +#include +#include +#endif + +#if defined(MAGIC_ENUM_CONFIG_FILE) +# include MAGIC_ENUM_CONFIG_FILE +#endif + +#ifndef MAGIC_ENUM_USE_STD_MODULE +#if !defined(MAGIC_ENUM_USING_ALIAS_OPTIONAL) +# include +#endif +#if !defined(MAGIC_ENUM_USING_ALIAS_STRING) +# include +#endif +#if !defined(MAGIC_ENUM_USING_ALIAS_STRING_VIEW) +# include +#endif +#endif + +#if defined(MAGIC_ENUM_NO_ASSERT) +# define MAGIC_ENUM_ASSERT(...) static_cast(0) +#elif !defined(MAGIC_ENUM_ASSERT) +# include +# define MAGIC_ENUM_ASSERT(...) assert((__VA_ARGS__)) +#endif + +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# pragma clang diagnostic ignored "-Wenum-constexpr-conversion" +# pragma clang diagnostic ignored "-Wuseless-cast" // suppresses 'static_cast('\0')' for char_type = char (common on Linux). +#elif defined(__GNUC__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" // May be used uninitialized 'return {};'. +# pragma GCC diagnostic ignored "-Wuseless-cast" // suppresses 'static_cast('\0')' for char_type = char (common on Linux). +#elif defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 26495) // Variable 'static_str::chars_' is uninitialized. +# pragma warning(disable : 28020) // Arithmetic overflow: Using operator '-' on a 4 byte value and then casting the result to a 8 byte value. +# pragma warning(disable : 26451) // The expression '0<=_Param_(1)&&_Param_(1)<=1-1' is not true at this call. +# pragma warning(disable : 4514) // Unreferenced inline function has been removed. +#endif + +// Checks magic_enum compiler compatibility. +#if defined(__clang__) && __clang_major__ >= 5 || defined(__GNUC__) && __GNUC__ >= 9 || defined(_MSC_VER) && _MSC_VER >= 1910 || defined(__RESHARPER__) +# undef MAGIC_ENUM_SUPPORTED +# define MAGIC_ENUM_SUPPORTED 1 +#endif + +// Checks magic_enum compiler aliases compatibility. +#if defined(__clang__) && __clang_major__ >= 5 || defined(__GNUC__) && __GNUC__ >= 9 || defined(_MSC_VER) && _MSC_VER >= 1920 +# undef MAGIC_ENUM_SUPPORTED_ALIASES +# define MAGIC_ENUM_SUPPORTED_ALIASES 1 +#endif + +// Specify the calling convention for compilers that need it in order to get reliable mangled names under different +// compiler flags. In particular, MSVC allows changing the default calling convention on x86. +#if defined(__clang__) || defined(__GNUC__) +#define MAGIC_ENUM_CALLING_CONVENTION +#elif defined(_MSC_VER) +#define MAGIC_ENUM_CALLING_CONVENTION __cdecl +#endif + +// Enum value must be greater or equals than MAGIC_ENUM_RANGE_MIN. By default MAGIC_ENUM_RANGE_MIN = -128. +// If need another min range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MIN. +#if !defined(MAGIC_ENUM_RANGE_MIN) +# define MAGIC_ENUM_RANGE_MIN -128 +#endif + +// Enum value must be less or equals than MAGIC_ENUM_RANGE_MAX. By default MAGIC_ENUM_RANGE_MAX = 127. +// If need another max range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MAX. +#if !defined(MAGIC_ENUM_RANGE_MAX) +# define MAGIC_ENUM_RANGE_MAX 127 +#endif + +// Improve ReSharper C++ intellisense performance with builtins, avoiding unnecessary template instantiations. +#if defined(__RESHARPER__) +# undef MAGIC_ENUM_GET_ENUM_NAME_BUILTIN +# undef MAGIC_ENUM_GET_TYPE_NAME_BUILTIN +# if __RESHARPER__ >= 20230100 +# define MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V) __rscpp_enumerator_name(V) +# define MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(T) __rscpp_type_name() +# else +# define MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V) nullptr +# define MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(T) nullptr +# endif +#endif + +namespace magic_enum { + +// If need another optional type, define the macro MAGIC_ENUM_USING_ALIAS_OPTIONAL. +#if defined(MAGIC_ENUM_USING_ALIAS_OPTIONAL) +MAGIC_ENUM_USING_ALIAS_OPTIONAL +#else +using std::optional; +#endif + +// If need another string_view type, define the macro MAGIC_ENUM_USING_ALIAS_STRING_VIEW. +#if defined(MAGIC_ENUM_USING_ALIAS_STRING_VIEW) +MAGIC_ENUM_USING_ALIAS_STRING_VIEW +#else +using std::string_view; +#endif + +// If need another string type, define the macro MAGIC_ENUM_USING_ALIAS_STRING. +#if defined(MAGIC_ENUM_USING_ALIAS_STRING) +MAGIC_ENUM_USING_ALIAS_STRING +#else +using std::string; +#endif + +using char_type = string_view::value_type; +static_assert(std::is_same_v, "magic_enum::customize requires same string_view::value_type and string::value_type"); +static_assert([] { + if constexpr (std::is_same_v) { + constexpr const char c[] = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789|"; + constexpr const wchar_t wc[] = L"abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789|"; + static_assert(std::size(c) == std::size(wc), "magic_enum::customize identifier characters are multichars in wchar_t."); + + for (std::size_t i = 0; i < std::size(c); ++i) { + if (c[i] != wc[i]) { + return false; + } + } + } + return true; +} (), "magic_enum::customize wchar_t is not compatible with ASCII."); + +namespace customize { + template + struct enum_range; +} + +namespace detail { + template + constexpr inline std::size_t prefix_length_or_zero = 0; + + template + constexpr inline auto prefix_length_or_zero::prefix_length)>> = std::size_t{customize::enum_range::prefix_length}; +} + +namespace customize { + +template +struct adl_info_holder { + constexpr static int max = Max; + constexpr static int min = Min; + constexpr static bool is_flags =IsFlags; + constexpr static std::size_t prefix_length = PrefixLength; + + template + constexpr static adl_info_holder minmax() { return {}; } + + template + constexpr static adl_info_holder flag() { return {}; } + + template + constexpr static adl_info_holder prefix() { return {}; } +}; + +constexpr adl_info_holder<> adl_info() { return {}; } + +// Enum value must be in range [MAGIC_ENUM_RANGE_MIN, MAGIC_ENUM_RANGE_MAX]. By default MAGIC_ENUM_RANGE_MIN = -128, MAGIC_ENUM_RANGE_MAX = 127. +// If need another range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MIN and MAGIC_ENUM_RANGE_MAX. +// If need another range for specific enum type, add specialization enum_range for necessary enum type. +template +struct enum_range { + static constexpr int min = MAGIC_ENUM_RANGE_MIN; + static constexpr int max = MAGIC_ENUM_RANGE_MAX; +}; + +template +struct enum_range : decltype(magic_enum_define_range_adl(E{})) {}; + +static_assert(MAGIC_ENUM_RANGE_MAX > MAGIC_ENUM_RANGE_MIN, "MAGIC_ENUM_RANGE_MAX must be greater than MAGIC_ENUM_RANGE_MIN."); + +namespace detail { + +enum class customize_tag { + default_tag, + invalid_tag, + custom_tag +}; + +} // namespace magic_enum::customize::detail + +class customize_t : public std::pair { + public: + constexpr customize_t(string_view srt) : std::pair{detail::customize_tag::custom_tag, srt} {} + constexpr customize_t(const char_type* srt) : customize_t{string_view{srt}} {} + constexpr customize_t(detail::customize_tag tag) : std::pair{tag, string_view{}} { + MAGIC_ENUM_ASSERT(tag != detail::customize_tag::custom_tag); + } +}; + +// Default customize. +inline constexpr auto default_tag = customize_t{detail::customize_tag::default_tag}; +// Invalid customize. +inline constexpr auto invalid_tag = customize_t{detail::customize_tag::invalid_tag}; + +// If need custom names for enum, add specialization enum_name for necessary enum type. +template +constexpr customize_t enum_name(E) noexcept { + return default_tag; +} + +// If need custom type name for enum, add specialization enum_type_name for necessary enum type. +template +constexpr customize_t enum_type_name() noexcept { + return default_tag; +} + +} // namespace magic_enum::customize + +namespace detail { + +template +struct supported +#if defined(MAGIC_ENUM_SUPPORTED) && MAGIC_ENUM_SUPPORTED || defined(MAGIC_ENUM_NO_CHECK_SUPPORT) + : std::true_type {}; +#else + : std::false_type {}; +#endif + +template , std::enable_if_t, int> = 0> +using enum_constant = std::integral_constant; + +template +inline constexpr bool always_false_v = false; + +template +struct has_is_flags : std::false_type {}; + +template +struct has_is_flags::is_flags)>> : std::bool_constant::is_flags)>>> {}; + +template +struct range_min : std::integral_constant {}; + +template +struct range_min::min)>> : std::integral_constant::min), customize::enum_range::min> {}; + +template +struct range_max : std::integral_constant {}; + +template +struct range_max::max)>> : std::integral_constant::max), customize::enum_range::max> {}; + +struct str_view { + const char* str_ = nullptr; + std::size_t size_ = 0; +}; + +template +class static_str { + public: + constexpr explicit static_str(str_view str) noexcept : static_str{str.str_, std::make_integer_sequence{}} { + MAGIC_ENUM_ASSERT(str.size_ == N); + } + + constexpr explicit static_str(const char* const str) noexcept : static_str{ str, std::make_integer_sequence{} } { + } + + constexpr explicit static_str(string_view str) noexcept : static_str{str.data(), std::make_integer_sequence{}} { + MAGIC_ENUM_ASSERT(str.size() == N); + } + + constexpr const char_type* data() const noexcept { return chars_; } + + constexpr std::uint16_t size() const noexcept { return N; } + + constexpr string_view str() const noexcept { return string_view(data(), size()); } + + private: + template + constexpr static_str(const char* str, std::integer_sequence) noexcept : chars_{static_cast(str[I])..., static_cast('\0')} {} + + template + constexpr static_str(string_view str, std::integer_sequence) noexcept : chars_{str[I]..., static_cast('\0')} {} + + char_type chars_[static_cast(N) + 1]; +}; + +template <> +class static_str<0> { + public: + constexpr static_str() noexcept = default; + + constexpr static_str(str_view) noexcept {} + + constexpr static_str(string_view) noexcept {} + + constexpr const char_type* data() const noexcept { return chars_; } + + constexpr std::uint16_t size() const noexcept { return 0; } + + constexpr string_view str() const noexcept { return string_view(data(), size()); } + +private: + static constexpr char_type chars_[1] = {}; +}; + +template > +class case_insensitive { + static constexpr char_type to_lower(char_type c) noexcept { + return (c >= static_cast('A') && c <= static_cast('Z')) ? static_cast(c + (static_cast('a') - static_cast('A'))) : c; + } + + public: + template + constexpr auto operator()(L lhs, R rhs) const noexcept -> std::enable_if_t, char_type> && std::is_same_v, char_type>, bool> { + return Op{}(to_lower(lhs), to_lower(rhs)); + } +}; + +constexpr std::size_t find(string_view str, char_type c) noexcept { +#if defined(__clang__) && __clang_major__ < 9 && defined(__GLIBCXX__) || defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__) +// https://stackoverflow.com/questions/56484834/constexpr-stdstring-viewfind-last-of-doesnt-work-on-clang-8-with-libstdc +// https://developercommunity.visualstudio.com/content/problem/360432/vs20178-regression-c-failed-in-test.html + constexpr bool workaround = true; +#else + constexpr bool workaround = false; +#endif + + if constexpr (workaround) { + for (std::size_t i = 0; i < str.size(); ++i) { + if (str[i] == c) { + return i; + } + } + + return string_view::npos; + } else { + return str.find(c); + } +} + +template +inline constexpr bool is_default_predicate_v = std::is_same_v, std::equal_to> || std::is_same_v, std::equal_to<>>; + + +template +inline constexpr bool is_nothrow_invocable_v = is_default_predicate_v || std::is_nothrow_invocable_r_v; + + +template +constexpr bool cmp_equal(string_view lhs, string_view rhs, [[maybe_unused]] BinaryPredicate&& p) noexcept(is_nothrow_invocable_v) { +#if defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__) + // https://developercommunity.visualstudio.com/content/problem/360432/vs20178-regression-c-failed-in-test.html + // https://developercommunity.visualstudio.com/content/problem/232218/c-constexpr-string-view.html + constexpr bool workaround = true; +#else + constexpr bool workaround = false; +#endif + + if constexpr (!is_default_predicate_v || workaround) { + if (lhs.size() != rhs.size()) { + return false; + } + + const auto size = lhs.size(); + for (std::size_t i = 0; i < size; ++i) { + if (!p(lhs[i], rhs[i])) { + return false; + } + } + + return true; + } else { + return lhs == rhs; + } +} + +template +constexpr bool cmp_less(L lhs, R rhs) noexcept { + static_assert(std::is_integral_v && std::is_integral_v, "magic_enum::detail::cmp_less requires integral type."); + + if constexpr (std::is_signed_v == std::is_signed_v) { + // If same signedness (both signed or both unsigned). + return lhs < rhs; + } else if constexpr (std::is_same_v) { // bool special case + return static_cast(lhs) < rhs; + } else if constexpr (std::is_same_v) { // bool special case + return lhs < static_cast(rhs); + } else if constexpr (std::is_signed_v) { + // If 'right' is negative, then result is 'false', otherwise cast & compare. + return rhs > 0 && lhs < static_cast>(rhs); + } else { + // If 'left' is negative, then result is 'true', otherwise cast & compare. + return lhs < 0 || static_cast>(lhs) < rhs; + } +} + +template +constexpr I log2(I value) noexcept { + static_assert(std::is_integral_v, "magic_enum::detail::log2 requires integral type."); + + if constexpr (std::is_same_v) { // bool special case + return MAGIC_ENUM_ASSERT(false), value; + } else { + auto ret = I{0}; + for (; value > I{1}; value >>= I{1}, ++ret) {} + + return ret; + } +} + +#if defined(__cpp_lib_array_constexpr) && __cpp_lib_array_constexpr >= 201603L +# define MAGIC_ENUM_ARRAY_CONSTEXPR 1 +#else +template +constexpr std::array, N> to_array(T (&a)[N], std::index_sequence) noexcept { + return {{a[I]...}}; +} +#endif + +template +inline constexpr bool is_enum_v = std::is_enum_v && std::is_same_v>; + +template +constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept { + static_assert(is_enum_v, "magic_enum::detail::n requires enum type."); + + if constexpr (supported::value) { +#if defined(MAGIC_ENUM_GET_TYPE_NAME_BUILTIN) + constexpr auto name_ptr = MAGIC_ENUM_GET_TYPE_NAME_BUILTIN(E); + constexpr auto name = name_ptr ? str_view{name_ptr, std::char_traits::length(name_ptr)} : str_view{}; +#elif defined(__clang__) + str_view name; + if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) { + static_assert(always_false_v, "magic_enum::detail::n requires __PRETTY_FUNCTION__."); + return str_view{}; + } else { + name.size_ = sizeof(__PRETTY_FUNCTION__) - 36; + name.str_ = __PRETTY_FUNCTION__ + 34; + } +#elif defined(__GNUC__) + auto name = str_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1}; + if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) { + static_assert(always_false_v, "magic_enum::detail::n requires __PRETTY_FUNCTION__."); + return str_view{}; + } else if (name.str_[name.size_ - 1] == ']') { + name.size_ -= 50; + name.str_ += 49; + } else { + name.size_ -= 40; + name.str_ += 37; + } +#elif defined(_MSC_VER) + // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284). + str_view name; + name.str_ = __FUNCSIG__; + name.str_ += 40; + name.size_ += sizeof(__FUNCSIG__) - 57; +#else + auto name = str_view{}; +#endif + std::size_t p = 0; + for (std::size_t i = name.size_; i > 0; --i) { + if (name.str_[i] == ':') { + p = i + 1; + break; + } + } + if (p > 0) { + name.size_ -= p; + name.str_ += p; + } + return name; + } else { + return str_view{}; // Unsupported compiler or Invalid customize. + } +} + +template +constexpr auto type_name() noexcept { + [[maybe_unused]] constexpr auto custom = customize::enum_type_name(); + static_assert(std::is_same_v, customize::customize_t>, "magic_enum::customize requires customize_t type."); + if constexpr (custom.first == customize::detail::customize_tag::custom_tag) { + constexpr auto name = custom.second; + static_assert(!name.empty(), "magic_enum::customize requires not empty string."); + return static_str{name}; + } else if constexpr (custom.first == customize::detail::customize_tag::invalid_tag) { + return static_str<0>{}; + } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) { + constexpr auto name = n(); + return static_str{name}; + } else { + static_assert(always_false_v, "magic_enum::customize invalid."); + } +} + +template +inline constexpr auto type_name_v = type_name(); + +template +constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept { + static_assert(is_enum_v, "magic_enum::detail::n requires enum type."); + + if constexpr (supported::value) { +#if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN) + constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V); + auto name = name_ptr ? str_view{name_ptr, std::char_traits::length(name_ptr)} : str_view{}; +#elif defined(__clang__) + str_view name; + if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) { + static_assert(always_false_v, "magic_enum::detail::n requires __PRETTY_FUNCTION__."); + return str_view{}; + } else { + name.size_ = sizeof(__PRETTY_FUNCTION__) - 36; + name.str_ = __PRETTY_FUNCTION__ + 34; + } + if (name.size_ > 22 && name.str_[0] == '(' && name.str_[1] == 'a' && name.str_[10] == ' ' && name.str_[22] == ':') { + name.size_ -= 23; + name.str_ += 23; + } + if (name.str_[0] == '(' || name.str_[0] == '-' || (name.str_[0] >= '0' && name.str_[0] <= '9')) { + name = str_view{}; + } +#elif defined(__GNUC__) + auto name = str_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1}; + if constexpr (sizeof(__PRETTY_FUNCTION__) == sizeof(__FUNCTION__)) { + static_assert(always_false_v, "magic_enum::detail::n requires __PRETTY_FUNCTION__."); + return str_view{}; + } else if (name.str_[name.size_ - 1] == ']') { + name.size_ -= 55; + name.str_ += 54; + } else { + name.size_ -= 40; + name.str_ += 37; + } + if (name.str_[0] == '(') { + name = str_view{}; + } +#elif defined(_MSC_VER) + str_view name; + if ((__FUNCSIG__[5] == '_' && __FUNCSIG__[35] != '(') || (__FUNCSIG__[5] == 'c' && __FUNCSIG__[41] != '(')) { + // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284). + name.str_ = __FUNCSIG__; + name.str_ += 35; + name.size_ = sizeof(__FUNCSIG__) - 52; + } +#else + auto name = str_view{}; +#endif + std::size_t p = 0; + for (std::size_t i = name.size_; i > 0; --i) { + if (name.str_[i] == ':') { + p = i + 1; + break; + } + } + if (p > 0) { + name.size_ -= p; + name.str_ += p; + } + return name; + } else { + return str_view{}; // Unsupported compiler or Invalid customize. + } +} + +#if defined(_MSC_VER) && !defined(__clang__) && _MSC_VER < 1920 +# define MAGIC_ENUM_VS_2017_WORKAROUND 1 +#endif + +#if defined(MAGIC_ENUM_VS_2017_WORKAROUND) +template +constexpr auto MAGIC_ENUM_CALLING_CONVENTION n() noexcept { + static_assert(is_enum_v, "magic_enum::detail::n requires enum type."); + +# if defined(MAGIC_ENUM_GET_ENUM_NAME_BUILTIN) + constexpr auto name_ptr = MAGIC_ENUM_GET_ENUM_NAME_BUILTIN(V); + auto name = name_ptr ? str_view{name_ptr, std::char_traits::length(name_ptr)} : str_view{}; +# else + // CLI/C++ workaround (see https://github.com/Neargye/magic_enum/issues/284). + str_view name; + name.str_ = __FUNCSIG__; + name.size_ = sizeof(__FUNCSIG__) - 17; + std::size_t p = 0; + for (std::size_t i = name.size_; i > 0; --i) { + if (name.str_[i] == ',' || name.str_[i] == ':') { + p = i + 1; + break; + } + } + if (p > 0) { + name.size_ -= p; + name.str_ += p; + } + if (name.str_[0] == '(' || name.str_[0] == '-' || (name.str_[0] >= '0' && name.str_[0] <= '9')) { + name = str_view{}; + } + return name; +# endif +} +#endif + +template +constexpr auto enum_name() noexcept { + [[maybe_unused]] constexpr auto custom = customize::enum_name(V); + static_assert(std::is_same_v, customize::customize_t>, "magic_enum::customize requires customize_t type."); + if constexpr (custom.first == customize::detail::customize_tag::custom_tag) { + constexpr auto name = custom.second; + static_assert(!name.empty(), "magic_enum::customize requires not empty string."); + return static_str{name}; + } else if constexpr (custom.first == customize::detail::customize_tag::invalid_tag) { + return static_str<0>{}; + } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) { +#if defined(MAGIC_ENUM_VS_2017_WORKAROUND) + constexpr auto name = n(); +#else + constexpr auto name = n(); +#endif + return static_str>{name.str_ + prefix_length_or_zero}; + } else { + static_assert(always_false_v, "magic_enum::customize invalid."); + } +} + +template +inline constexpr auto enum_name_v = enum_name(); + +// CWG1766: Values outside the range of the values of an enumeration +// https://reviews.llvm.org/D130058, https://reviews.llvm.org/D131307 +#if defined(__clang__) && __clang_major__ >= 16 +template +inline constexpr bool is_enum_constexpr_static_cast_valid = false; +template +inline constexpr bool is_enum_constexpr_static_cast_valid(V)>>> = true; +#else +template +inline constexpr bool is_enum_constexpr_static_cast_valid = true; +#endif + +template +constexpr bool is_valid() noexcept { + if constexpr (is_enum_constexpr_static_cast_valid) { + constexpr E v = static_cast(V); + [[maybe_unused]] constexpr auto custom = customize::enum_name(v); + static_assert(std::is_same_v, customize::customize_t>, "magic_enum::customize requires customize_t type."); + if constexpr (custom.first == customize::detail::customize_tag::custom_tag) { + constexpr auto name = custom.second; + static_assert(!name.empty(), "magic_enum::customize requires not empty string."); + return name.size() != 0; + } else if constexpr (custom.first == customize::detail::customize_tag::default_tag) { +#if defined(MAGIC_ENUM_VS_2017_WORKAROUND) + return n().size_ != 0; +#else + return n().size_ != 0; +#endif + } else { + return false; + } + } else { + return false; + } +} + +enum class enum_subtype { + common, + flags +}; + +template > +constexpr U ualue(std::size_t i) noexcept { + if constexpr (std::is_same_v) { // bool special case + static_assert(O == 0, "magic_enum::detail::ualue requires valid offset."); + + return static_cast(i); + } else if constexpr (S == enum_subtype::flags) { + return static_cast(U{1} << static_cast(static_cast(i) + O)); + } else { + return static_cast(static_cast(i) + O); + } +} + +template > +constexpr E value(std::size_t i) noexcept { + return static_cast(ualue(i)); +} + +template > +constexpr int reflected_min() noexcept { + if constexpr (S == enum_subtype::flags) { + return 0; + } else { + constexpr auto lhs = range_min::value; + constexpr auto rhs = (std::numeric_limits::min)(); + + if constexpr (cmp_less(rhs, lhs)) { + return lhs; + } else { + return rhs; + } + } +} + +template > +constexpr int reflected_max() noexcept { + if constexpr (S == enum_subtype::flags) { + return std::numeric_limits::digits - 1; + } else { + constexpr auto lhs = range_max::value; + constexpr auto rhs = (std::numeric_limits::max)(); + + if constexpr (cmp_less(lhs, rhs)) { + return lhs; + } else { + return rhs; + } + } +} + +#define MAGIC_ENUM_FOR_EACH_256(T) \ + T( 0)T( 1)T( 2)T( 3)T( 4)T( 5)T( 6)T( 7)T( 8)T( 9)T( 10)T( 11)T( 12)T( 13)T( 14)T( 15)T( 16)T( 17)T( 18)T( 19)T( 20)T( 21)T( 22)T( 23)T( 24)T( 25)T( 26)T( 27)T( 28)T( 29)T( 30)T( 31) \ + T( 32)T( 33)T( 34)T( 35)T( 36)T( 37)T( 38)T( 39)T( 40)T( 41)T( 42)T( 43)T( 44)T( 45)T( 46)T( 47)T( 48)T( 49)T( 50)T( 51)T( 52)T( 53)T( 54)T( 55)T( 56)T( 57)T( 58)T( 59)T( 60)T( 61)T( 62)T( 63) \ + T( 64)T( 65)T( 66)T( 67)T( 68)T( 69)T( 70)T( 71)T( 72)T( 73)T( 74)T( 75)T( 76)T( 77)T( 78)T( 79)T( 80)T( 81)T( 82)T( 83)T( 84)T( 85)T( 86)T( 87)T( 88)T( 89)T( 90)T( 91)T( 92)T( 93)T( 94)T( 95) \ + T( 96)T( 97)T( 98)T( 99)T(100)T(101)T(102)T(103)T(104)T(105)T(106)T(107)T(108)T(109)T(110)T(111)T(112)T(113)T(114)T(115)T(116)T(117)T(118)T(119)T(120)T(121)T(122)T(123)T(124)T(125)T(126)T(127) \ + T(128)T(129)T(130)T(131)T(132)T(133)T(134)T(135)T(136)T(137)T(138)T(139)T(140)T(141)T(142)T(143)T(144)T(145)T(146)T(147)T(148)T(149)T(150)T(151)T(152)T(153)T(154)T(155)T(156)T(157)T(158)T(159) \ + T(160)T(161)T(162)T(163)T(164)T(165)T(166)T(167)T(168)T(169)T(170)T(171)T(172)T(173)T(174)T(175)T(176)T(177)T(178)T(179)T(180)T(181)T(182)T(183)T(184)T(185)T(186)T(187)T(188)T(189)T(190)T(191) \ + T(192)T(193)T(194)T(195)T(196)T(197)T(198)T(199)T(200)T(201)T(202)T(203)T(204)T(205)T(206)T(207)T(208)T(209)T(210)T(211)T(212)T(213)T(214)T(215)T(216)T(217)T(218)T(219)T(220)T(221)T(222)T(223) \ + T(224)T(225)T(226)T(227)T(228)T(229)T(230)T(231)T(232)T(233)T(234)T(235)T(236)T(237)T(238)T(239)T(240)T(241)T(242)T(243)T(244)T(245)T(246)T(247)T(248)T(249)T(250)T(251)T(252)T(253)T(254)T(255) + +template +constexpr void valid_count(bool* valid, std::size_t& count) noexcept { +#define MAGIC_ENUM_V(O) \ + if constexpr ((I + O) < Size) { \ + if constexpr (is_valid(I + O)>()) { \ + valid[I + O] = true; \ + ++count; \ + } \ + } + + MAGIC_ENUM_FOR_EACH_256(MAGIC_ENUM_V) + + if constexpr ((I + 256) < Size) { + valid_count(valid, count); + } +#undef MAGIC_ENUM_V +} + +template +struct valid_count_t { + std::size_t count = 0; + bool valid[N] = {}; +}; + +template +constexpr auto valid_count() noexcept { + valid_count_t vc; + valid_count(vc.valid, vc.count); + return vc; +} + +template +constexpr auto values() noexcept { + constexpr auto vc = valid_count(); + + if constexpr (vc.count > 0) { +#if defined(MAGIC_ENUM_ARRAY_CONSTEXPR) + std::array values = {}; +#else + E values[vc.count] = {}; +#endif + for (std::size_t i = 0, v = 0; v < vc.count; ++i) { + if (vc.valid[i]) { + values[v++] = value(i); + } + } +#if defined(MAGIC_ENUM_ARRAY_CONSTEXPR) + return values; +#else + return to_array(values, std::make_index_sequence{}); +#endif + } else { + return std::array{}; + } +} + +template > +constexpr auto values() noexcept { + constexpr auto min = reflected_min(); + constexpr auto max = reflected_max(); + constexpr auto range_size = max - min + 1; + static_assert(range_size > 0, "magic_enum::enum_range requires valid size."); + + return values(); +} + +template > +constexpr enum_subtype subtype(std::true_type) noexcept { + if constexpr (std::is_same_v) { // bool special case + return enum_subtype::common; + } else if constexpr (has_is_flags::value) { + return customize::enum_range::is_flags ? enum_subtype::flags : enum_subtype::common; + } else { +#if defined(MAGIC_ENUM_AUTO_IS_FLAGS) + constexpr auto flags_values = values(); + constexpr auto default_values = values(); + if (flags_values.size() == 0 || default_values.size() > flags_values.size()) { + return enum_subtype::common; + } + for (std::size_t i = 0; i < default_values.size(); ++i) { + const auto v = static_cast(default_values[i]); + if (v != 0 && (v & (v - 1)) != 0) { + return enum_subtype::common; + } + } + return enum_subtype::flags; +#else + return enum_subtype::common; +#endif + } +} + +template +constexpr enum_subtype subtype(std::false_type) noexcept { + // For non-enum type return default common subtype. + return enum_subtype::common; +} + +template > +inline constexpr auto subtype_v = subtype(std::is_enum{}); + +template +inline constexpr auto values_v = values(); + +template > +using values_t = decltype((values_v)); + +template +inline constexpr auto count_v = values_v.size(); + +template > +inline constexpr auto min_v = (count_v > 0) ? static_cast(values_v.front()) : U{0}; + +template > +inline constexpr auto max_v = (count_v > 0) ? static_cast(values_v.back()) : U{0}; + +template +constexpr auto names(std::index_sequence) noexcept { + constexpr auto names = std::array{{enum_name_v[I]>.str()...}}; + return names; +} + +template +inline constexpr auto names_v = names(std::make_index_sequence>{}); + +template > +using names_t = decltype((names_v)); + +template +constexpr auto entries(std::index_sequence) noexcept { + constexpr auto entries = std::array, sizeof...(I)>{{{values_v[I], enum_name_v[I]>.str()}...}}; + return entries; +} + +template +inline constexpr auto entries_v = entries(std::make_index_sequence>{}); + +template > +using entries_t = decltype((entries_v)); + +template > +constexpr bool is_sparse() noexcept { + if constexpr (count_v == 0) { + return false; + } else if constexpr (std::is_same_v) { // bool special case + return false; + } else { + constexpr auto max = (S == enum_subtype::flags) ? log2(max_v) : max_v; + constexpr auto min = (S == enum_subtype::flags) ? log2(min_v) : min_v; + constexpr auto range_size = max - min + 1; + + return range_size != count_v; + } +} + +template > +inline constexpr bool is_sparse_v = is_sparse(); + +template +struct is_reflected +#if defined(MAGIC_ENUM_NO_CHECK_REFLECTED_ENUM) + : std::true_type {}; +#else + : std::bool_constant && (count_v != 0)> {}; +#endif + +template +inline constexpr bool is_reflected_v = is_reflected, S>{}; + +template +struct enable_if_enum {}; + +template +struct enable_if_enum { + using type = R; + static_assert(supported::value, "magic_enum unsupported compiler (https://github.com/Neargye/magic_enum#compiler-compatibility)."); +}; + +template , typename D = std::decay_t> +using enable_if_t = typename enable_if_enum && std::is_invocable_r_v, R>::type; + +template >, int> = 0> +using enum_concept = T; + +template > +struct is_scoped_enum : std::false_type {}; + +template +struct is_scoped_enum : std::bool_constant>> {}; + +template > +struct is_unscoped_enum : std::false_type {}; + +template +struct is_unscoped_enum : std::bool_constant>> {}; + +template >> +struct underlying_type {}; + +template +struct underlying_type : std::underlying_type> {}; + +#if defined(MAGIC_ENUM_ENABLE_HASH) || defined(MAGIC_ENUM_ENABLE_HASH_SWITCH) + +template +struct constexpr_hash_t; + +template +struct constexpr_hash_t>> { + constexpr auto operator()(Value value) const noexcept { + using U = typename underlying_type::type; + if constexpr (std::is_same_v) { // bool special case + return static_cast(value); + } else { + return static_cast(value); + } + } + using secondary_hash = constexpr_hash_t; +}; + +template +struct constexpr_hash_t>> { + static constexpr std::uint32_t crc_table[256] { + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, + 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, + 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, + 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, + 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, + 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, + 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, + 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, + 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, + 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, + 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, + 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, + 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, + 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, + 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, + 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, + 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, + 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, + 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, + 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, + 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, + 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, + 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, + 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, + 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, + 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL + }; + constexpr std::uint32_t operator()(string_view value) const noexcept { + auto crc = static_cast(0xffffffffL); + for (const auto c : value) { + crc = (crc >> 8) ^ crc_table[(crc ^ static_cast(c)) & 0xff]; + } + return crc ^ 0xffffffffL; + } + + struct secondary_hash { + constexpr std::uint32_t operator()(string_view value) const noexcept { + auto acc = static_cast(2166136261ULL); + for (const auto c : value) { + acc = ((acc ^ static_cast(c)) * static_cast(16777619ULL)) & (std::numeric_limits::max)(); + } + return static_cast(acc); + } + }; +}; + +template +inline constexpr Hash hash_v{}; + +template +constexpr auto calculate_cases(std::size_t Page) noexcept { + constexpr std::array values = *GlobValues; + constexpr std::size_t size = values.size(); + + using switch_t = std::invoke_result_t; + static_assert(std::is_integral_v && !std::is_same_v); + const std::size_t values_to = (std::min)(static_cast(256), size - Page); + + std::array result{}; + auto fill = result.begin(); + { + auto first = values.begin() + static_cast(Page); + auto last = values.begin() + static_cast(Page + values_to); + while (first != last) { + *fill++ = hash_v(*first++); + } + } + + // dead cases, try to avoid case collisions + for (switch_t last_value = result[values_to - 1]; fill != result.end() && last_value != (std::numeric_limits::max)(); *fill++ = ++last_value) { + } + + { + auto it = result.begin(); + auto last_value = (std::numeric_limits::min)(); + for (; fill != result.end(); *fill++ = last_value++) { + while (last_value == *it) { + ++last_value, ++it; + } + } + } + + return result; +} + +template +constexpr R invoke_r(F&& f, Args&&... args) noexcept(std::is_nothrow_invocable_r_v) { + if constexpr (std::is_void_v) { + std::forward(f)(std::forward(args)...); + } else { + return static_cast(std::forward(f)(std::forward(args)...)); + } +} + +enum class case_call_t { + index, + value +}; + +template +inline constexpr auto default_result_type_lambda = []() noexcept(std::is_nothrow_default_constructible_v) { return T{}; }; + +template <> +inline constexpr auto default_result_type_lambda = []() noexcept {}; + +template +constexpr bool has_duplicate() noexcept { + using value_t = std::decay_t; + using hash_value_t = std::invoke_result_t; + std::arraysize()> hashes{}; + std::size_t size = 0; + for (auto elem : *Arr) { + hashes[size] = hash_v(elem); + for (auto i = size++; i > 0; --i) { + if (hashes[i] < hashes[i - 1]) { + auto tmp = hashes[i]; + hashes[i] = hashes[i - 1]; + hashes[i - 1] = tmp; + } else if (hashes[i] == hashes[i - 1]) { + return false; + } else { + break; + } + } + } + return true; +} + +#define MAGIC_ENUM_CASE(val) \ + case cases[val]: \ + if constexpr ((val) + Page < size) { \ + if (!pred(values[val + Page], searched)) { \ + break; \ + } \ + if constexpr (CallValue == case_call_t::index) { \ + if constexpr (std::is_invocable_r_v>) { \ + return detail::invoke_r(std::forward(lambda), std::integral_constant{}); \ + } else if constexpr (std::is_invocable_v>) { \ + MAGIC_ENUM_ASSERT(false && "magic_enum::detail::constexpr_switch wrong result type."); \ + } \ + } else if constexpr (CallValue == case_call_t::value) { \ + if constexpr (std::is_invocable_r_v>) { \ + return detail::invoke_r(std::forward(lambda), enum_constant{}); \ + } else if constexpr (std::is_invocable_r_v>) { \ + MAGIC_ENUM_ASSERT(false && "magic_enum::detail::constexpr_switch wrong result type."); \ + } \ + } \ + break; \ + } else [[fallthrough]]; + +template ::value_type>, + typename BinaryPredicate = std::equal_to<>, + typename Lambda, + typename ResultGetterType> +constexpr decltype(auto) constexpr_switch( + Lambda&& lambda, + typename std::decay_t::value_type searched, + ResultGetterType&& def, + BinaryPredicate&& pred = {}) { + using result_t = std::invoke_result_t; + using hash_t = std::conditional_t(), Hash, typename Hash::secondary_hash>; + static_assert(has_duplicate(), "magic_enum::detail::constexpr_switch duplicated hash found, please report it: https://github.com/Neargye/magic_enum/issues."); + constexpr std::array values = *GlobValues; + constexpr std::size_t size = values.size(); + constexpr std::array cases = calculate_cases(Page); + + switch (hash_v(searched)) { + MAGIC_ENUM_FOR_EACH_256(MAGIC_ENUM_CASE) + default: + if constexpr (size > 256 + Page) { + return constexpr_switch(std::forward(lambda), searched, std::forward(def)); + } + break; + } + return def(); +} + +#undef MAGIC_ENUM_CASE + +#endif + +} // namespace magic_enum::detail + +// Checks is magic_enum supported compiler. +inline constexpr bool is_magic_enum_supported = detail::supported::value; + +template +using Enum = detail::enum_concept; + +// Checks whether T is an Unscoped enumeration type. +// Provides the member constant value which is equal to true, if T is an [Unscoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Unscoped_enumeration) type. Otherwise, value is equal to false. +template +struct is_unscoped_enum : detail::is_unscoped_enum {}; + +template +inline constexpr bool is_unscoped_enum_v = is_unscoped_enum::value; + +// Checks whether T is an Scoped enumeration type. +// Provides the member constant value which is equal to true, if T is an [Scoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Scoped_enumerations) type. Otherwise, value is equal to false. +template +struct is_scoped_enum : detail::is_scoped_enum {}; + +template +inline constexpr bool is_scoped_enum_v = is_scoped_enum::value; + +// If T is a complete enumeration type, provides a member typedef type that names the underlying type of T. +// Otherwise, if T is not an enumeration type, there is no member type. Otherwise (T is an incomplete enumeration type), the program is ill-formed. +template +struct underlying_type : detail::underlying_type {}; + +template +using underlying_type_t = typename underlying_type::type; + +template +using enum_constant = detail::enum_constant; + +// Returns type name of enum. +template +[[nodiscard]] constexpr auto enum_type_name() noexcept -> detail::enable_if_t { + constexpr string_view name = detail::type_name_v>.str(); + static_assert(!name.empty(), "magic_enum::enum_type_name enum type does not have a name."); + + return name; +} + +// Returns number of enum values. +template > +[[nodiscard]] constexpr auto enum_count() noexcept -> detail::enable_if_t { + return detail::count_v, S>; +} + +// Returns enum value at specified index. +// No bounds checking is performed: the behavior is undefined if index >= number of enum values. +template > +[[nodiscard]] constexpr auto enum_value(std::size_t index) noexcept -> detail::enable_if_t> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + if constexpr (detail::is_sparse_v) { + return MAGIC_ENUM_ASSERT(index < detail::count_v), detail::values_v[index]; + } else { + constexpr auto min = (S == detail::enum_subtype::flags) ? detail::log2(detail::min_v) : detail::min_v; + + return MAGIC_ENUM_ASSERT(index < detail::count_v), detail::value(index); + } +} + +// Returns enum value at specified index. +template > +[[nodiscard]] constexpr auto enum_value() noexcept -> detail::enable_if_t> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + static_assert(I < detail::count_v, "magic_enum::enum_value out of range."); + + return enum_value(I); +} + +// Returns std::array with enum values, sorted by enum value. +template > +[[nodiscard]] constexpr auto enum_values() noexcept -> detail::enable_if_t> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + return detail::values_v; +} + +// Returns integer value from enum value. +template +[[nodiscard]] constexpr auto enum_integer(E value) noexcept -> detail::enable_if_t> { + return static_cast>(value); +} + +// Returns underlying value from enum value. +template +[[nodiscard]] constexpr auto enum_underlying(E value) noexcept -> detail::enable_if_t> { + return static_cast>(value); +} + +// Obtains index in enum values from enum value. +// Returns optional with index. +template > +[[nodiscard]] constexpr auto enum_index(E value) noexcept -> detail::enable_if_t> { + using D = std::decay_t; + using U = underlying_type_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + if constexpr (detail::is_sparse_v || (S == detail::enum_subtype::flags)) { +#if defined(MAGIC_ENUM_ENABLE_HASH) + return detail::constexpr_switch<&detail::values_v, detail::case_call_t::index>( + [](std::size_t i) { return optional{i}; }, + value, + detail::default_result_type_lambda>); +#else + for (std::size_t i = 0; i < detail::count_v; ++i) { + if (enum_value(i) == value) { + return i; + } + } + return {}; // Invalid value or out of range. +#endif + } else { + const auto v = static_cast(value); + if (v >= detail::min_v && v <= detail::max_v) { + return static_cast(v - detail::min_v); + } + return {}; // Invalid value or out of range. + } +} + +// Obtains index in enum values from enum value. +// Returns optional with index. +template +[[nodiscard]] constexpr auto enum_index(E value) noexcept -> detail::enable_if_t> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + return enum_index(value); +} + +// Obtains index in enum values from static storage enum variable. +template >> +[[nodiscard]] constexpr auto enum_index() noexcept -> detail::enable_if_t {\ + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + constexpr auto index = enum_index(V); + static_assert(index, "magic_enum::enum_index enum value does not have a index."); + + return *index; +} + +// Returns name from static storage enum variable. +// This version is much lighter on the compile times and is not restricted to the enum_range limitation. +template +[[nodiscard]] constexpr auto enum_name() noexcept -> detail::enable_if_t { + constexpr string_view name = detail::enum_name_v, V>.str(); + static_assert(!name.empty(), "magic_enum::enum_name enum value does not have a name."); + + return name; +} + +// Returns name from enum value. +// If enum value does not have name or value out of range, returns empty string. +template > +[[nodiscard]] constexpr auto enum_name(E value) noexcept -> detail::enable_if_t { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + if (const auto i = enum_index(value)) { + return detail::names_v[*i]; + } + return detail::static_str<0>{}.str(); +} + +// Returns name from enum value. +// If enum value does not have name or value out of range, returns empty string. +template +[[nodiscard]] constexpr auto enum_name(E value) -> detail::enable_if_t { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + return enum_name(value); +} + +// Returns std::array with names, sorted by enum value. +template > +[[nodiscard]] constexpr auto enum_names() noexcept -> detail::enable_if_t> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + return detail::names_v; +} + +// Returns std::array with pairs (value, name), sorted by enum value. +template > +[[nodiscard]] constexpr auto enum_entries() noexcept -> detail::enable_if_t> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + return detail::entries_v; +} + +// Allows you to write magic_enum::enum_cast("bar", magic_enum::case_insensitive); +inline constexpr auto case_insensitive = detail::case_insensitive<>{}; + +// Obtains enum value from integer value. +// Returns optional with enum value. +template > +[[nodiscard]] constexpr auto enum_cast(underlying_type_t value) noexcept -> detail::enable_if_t>> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + + if constexpr (detail::is_sparse_v || (S == detail::enum_subtype::flags)) { +#if defined(MAGIC_ENUM_ENABLE_HASH) + return detail::constexpr_switch<&detail::values_v, detail::case_call_t::value>( + [](D v) { return optional{v}; }, + static_cast(value), + detail::default_result_type_lambda>); +#else + for (std::size_t i = 0; i < detail::count_v; ++i) { + if (value == static_cast>(enum_value(i))) { + return static_cast(value); + } + } + return {}; // Invalid value or out of range. +#endif + } else { + if (value >= detail::min_v && value <= detail::max_v) { + return static_cast(value); + } + return {}; // Invalid value or out of range. + } +} + +// Obtains enum value from name. +// Returns optional with enum value. +template , typename BinaryPredicate = std::equal_to<>> +[[nodiscard]] constexpr auto enum_cast(string_view value, [[maybe_unused]] BinaryPredicate p = {}) noexcept(detail::is_nothrow_invocable_v) -> detail::enable_if_t>, BinaryPredicate> { + using D = std::decay_t; + static_assert(detail::is_reflected_v, "magic_enum requires enum implementation and valid max and min."); + +#if defined(MAGIC_ENUM_ENABLE_HASH) + if constexpr (detail::is_default_predicate_v) { + return detail::constexpr_switch<&detail::names_v, detail::case_call_t::index>( + [](std::size_t i) { return optional{detail::values_v[i]}; }, + value, + detail::default_result_type_lambda>, + [&p](string_view lhs, string_view rhs) { return detail::cmp_equal(lhs, rhs, p); }); + } +#endif + for (std::size_t i = 0; i < detail::count_v; ++i) { + if (detail::cmp_equal(value, detail::names_v[i], p)) { + return enum_value(i); + } + } + return {}; // Invalid value or out of range. +} + +// Checks whether enum contains value with such value. +template > +[[nodiscard]] constexpr auto enum_contains(E value) noexcept -> detail::enable_if_t { + using D = std::decay_t; + using U = underlying_type_t; + + return static_cast(enum_cast(static_cast(value))); +} + +// Checks whether enum contains value with such value. +template +[[nodiscard]] constexpr auto enum_contains(E value) noexcept -> detail::enable_if_t { + using D = std::decay_t; + using U = underlying_type_t; + + return static_cast(enum_cast(static_cast(value))); +} + +// Checks whether enum contains value with such integer value. +template > +[[nodiscard]] constexpr auto enum_contains(underlying_type_t value) noexcept -> detail::enable_if_t { + using D = std::decay_t; + + return static_cast(enum_cast(value)); +} + +// Checks whether enum contains enumerator with such name. +template , typename BinaryPredicate = std::equal_to<>> +[[nodiscard]] constexpr auto enum_contains(string_view value, BinaryPredicate p = {}) noexcept(detail::is_nothrow_invocable_v) -> detail::enable_if_t { + using D = std::decay_t; + + return static_cast(enum_cast(value, std::move(p))); +} + +// Returns true if the enum integer value is in the range of values that can be reflected. +template > +[[nodiscard]] constexpr auto enum_reflected(underlying_type_t value) noexcept -> detail::enable_if_t { + using D = std::decay_t; + + if constexpr (detail::is_reflected_v) { + constexpr auto min = detail::reflected_min(); + constexpr auto max = detail::reflected_max(); + return value >= min && value <= max; + } else { + return false; + } +} + +// Returns true if the enum value is in the range of values that can be reflected. +template > +[[nodiscard]] constexpr auto enum_reflected(E value) noexcept -> detail::enable_if_t { + using D = std::decay_t; + + return enum_reflected(static_cast>(value)); +} + +// Returns true if the enum value is in the range of values that can be reflected. +template +[[nodiscard]] constexpr auto enum_reflected(E value) noexcept -> detail::enable_if_t { + using D = std::decay_t; + + return enum_reflected(value); +} + +template +inline constexpr auto as_flags = AsFlags ? detail::enum_subtype::flags : detail::enum_subtype::common; + +template +inline constexpr auto as_common = AsFlags ? detail::enum_subtype::common : detail::enum_subtype::flags; + +namespace bitwise_operators { + +template = 0> +constexpr E operator~(E rhs) noexcept { + return static_cast(~static_cast>(rhs)); +} + +template = 0> +constexpr E operator|(E lhs, E rhs) noexcept { + return static_cast(static_cast>(lhs) | static_cast>(rhs)); +} + +template = 0> +constexpr E operator&(E lhs, E rhs) noexcept { + return static_cast(static_cast>(lhs) & static_cast>(rhs)); +} + +template = 0> +constexpr E operator^(E lhs, E rhs) noexcept { + return static_cast(static_cast>(lhs) ^ static_cast>(rhs)); +} + +template = 0> +constexpr E& operator|=(E& lhs, E rhs) noexcept { + return lhs = (lhs | rhs); +} + +template = 0> +constexpr E& operator&=(E& lhs, E rhs) noexcept { + return lhs = (lhs & rhs); +} + +template = 0> +constexpr E& operator^=(E& lhs, E rhs) noexcept { + return lhs = (lhs ^ rhs); +} + +} // namespace magic_enum::bitwise_operators + +} // namespace magic_enum + +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(__GNUC__) +# pragma GCC diagnostic pop +#elif defined(_MSC_VER) +# pragma warning(pop) +#endif + +#undef MAGIC_ENUM_GET_ENUM_NAME_BUILTIN +#undef MAGIC_ENUM_GET_TYPE_NAME_BUILTIN +#undef MAGIC_ENUM_VS_2017_WORKAROUND +#undef MAGIC_ENUM_ARRAY_CONSTEXPR +#undef MAGIC_ENUM_FOR_EACH_256 + +#endif // NEARGYE_MAGIC_ENUM_HPP diff --git a/src/database/sqlite_orm.h b/include/libs/sqlite_orm.h similarity index 100% rename from src/database/sqlite_orm.h rename to include/libs/sqlite_orm.h diff --git a/src/shadowrun/ShadowrunApi.cpp b/src/shadowrun/ShadowrunApi.cpp index ca2e786..fa53e03 100644 --- a/src/shadowrun/ShadowrunApi.cpp +++ b/src/shadowrun/ShadowrunApi.cpp @@ -1,11 +1,9 @@ #include "ShadowrunApi.hpp" -#include "ShadowrunCharacterForm.hpp" #include "ShadowrunDb.hpp" #include "login.hpp" #include -#include #include using namespace std; @@ -113,7 +111,10 @@ void initApi(crow::SimpleApp& app) CROW_ROUTE(app, "/api/shadowrun/characters") ([&]() { auto characters = getCharacters(); - return utils::toJsonArray(characters); + auto res = + crow::response(200, utils::toJsonArray(characters)); + res.set_header("Content-Type", "application/json"); + return res; }); CROW_ROUTE(app, "/api/shadowrun/characters").methods("POST"_method) @@ -124,7 +125,9 @@ void initApi(crow::SimpleApp& app) if(id > 0){ auto character = getChracter(id); if (character.has_value()){ - return crow::response(200, nlohmann::json(character.value()).dump()); + auto res = crow::response(200, nlohmann::json(character.value()).dump()); + res.set_header("Content-Type", "application/json"); + return res; } } return crow::response(405, "Failed to create character"); @@ -135,15 +138,53 @@ void initApi(crow::SimpleApp& app) auto optCharacter = getChracter(id); if (!optCharacter.has_value()) return crow::response(404, "Character not found"); - return crow::response(200, nlohmann::json(optCharacter.value()).dump()); + + auto res = crow::response(200, nlohmann::json(optCharacter.value()).dump()); + res.set_header("Content-Type", "application/json"); + return res; }); CROW_ROUTE(app, "/api/shadowrun/characters_data/") ([&](int id) { - auto character_data = getChracterData(id); - if (!character_data.empty()) - return crow::response(405, "No character data found"); - return crow::response(200, utils::toJsonArray(character_data)); + nlohmann::json j; + const auto characterData = getChracterData(id); + + if(characterData.empty()) + return crow::response(405, "Character not found"); + + for(const auto& data : characterData ){ + const auto& key = magic_enum::enum_cast(data.type); + if(key.has_value()){ + auto res = utils::parseJson(data.json); + if(res){ + j[magic_enum::enum_name(key.value())] = res.value(); + } else { + CROW_LOG_ERROR << "Failed to parse json: " << res.error(); + } + } else { + CROW_LOG_ERROR << "Read invalid type from database: " << data.type; + } + } + + auto res = crow::response(200, j.dump()); + res.set_header("Content-Type", "application/json"); + return res; + }); + + CROW_ROUTE(app, "/api/shadowrun/characters_data/").methods("POST"_method) + ([&](const crow::request& req, int id) { + nlohmann::json j = nlohmann::json::parse(req.body); + + for (auto type : magic_enum::enum_values()) { + const auto& key = magic_enum::enum_name(type); + if (j.contains(key)){ + storeCharacterData(id, type, j[key].dump()); + } + } + + auto res = crow::response(200, "Saved Character data"); + return res; + //return crow::response(405, ret.error()); }); } diff --git a/src/shadowrun/ShadowrunDb.cpp b/src/shadowrun/ShadowrunDb.cpp index b341b81..8f5f15c 100644 --- a/src/shadowrun/ShadowrunDb.cpp +++ b/src/shadowrun/ShadowrunDb.cpp @@ -1,13 +1,7 @@ #include "ShadowrunDb.hpp" -#include -#include -#include #include -#include "database.hpp" #include "databasepool.h" -#include "crow.h" #include "utils.hpp" -#include "sqlite_orm.h" using namespace std; using namespace sqlite_orm; @@ -28,53 +22,11 @@ int64_t createCharacter(const string& name){ if (!character.empty()) { return character[0].id; } else { - auto c = createShadowrunCharacter(name); + auto c = newShadowrunCharacter(name); return db->insert(c); } } -/* -bool storeCharacterData(int64_t characterKey, vector>& idValues){ - auto characterData = getCharacterData(characterKey); - std::map dataMap; - for(auto& data : characterData) { - dataMap[data.name] = &data; - } - - auto db = dbpool.acquire(); - for (auto& idValue : idValues) { - const string& name = idValue.first; - const string& value = idValue.second; - - // update if already exist - auto it = dataMap.find(name); - if(it != dataMap.end()){ - db->update_all( - sqlite_orm::set( - assign(&ShadowrunData::value, idValue.second), - assign(&ShadowrunData::updated_at, utils::currentTime()) - ), - where( - c(&ShadowrunData::name) == name and - c(&ShadowrunData::character_id) == characterKey - ) - ); - } else { - ShadowrunData entry { - .id = -1, - .character_id = static_cast(characterKey), - .name = name, - .value = value, - .created_at = utils::currentTime(), - .updated_at = "", - }; - db->insert(entry); - } - } - return true; -} -*/ - std::vector getCharacters(){ auto db = dbpool.acquire(); return db->get_all(); @@ -105,8 +57,31 @@ vector getChracterData(int character_id) return characterData; } -int storeCharacterData(const ShadowrunCharacterData& data) -{ +int storeCharacterData(int characterId, const Type type, const string& json){ + auto db = dbpool.acquire(); + auto characterData = db->get_all( + where( + (c(&ShadowrunCharacterData::character_id) == characterId) and + (c(&ShadowrunCharacterData::type) == static_cast(type))) + ); + + if(characterData.empty()){ + ShadowrunCharacterData character = newShadowrunCharacterData(characterId, type, json); + return db->insert(character); + } + else { + if (characterData.size() > 1){ + CROW_LOG_ERROR << "Character ID: " << characterId << "has mote than 1 type: " << magic_enum::enum_name(type); + } + auto& character = characterData[0]; + character.json = json; + character.updated_at = utils::currentTime(); + db->update(character); + return character.id; + } +} + +int storeCharacterData(const ShadowrunCharacterData& data){ auto db = dbpool.acquire(); auto characterData = db->get_optional(data.id); @@ -119,13 +94,4 @@ int storeCharacterData(const ShadowrunCharacterData& data) } } -/* -vector getCharacterData(int64_t characterKey) { - auto db = dbpool.acquire(); - return db->get_all( - where(c(&ShadowrunData::character_id) == characterKey) - ); -} -*/ - } \ No newline at end of file diff --git a/src/shadowrun/ShadowrunDb.hpp b/src/shadowrun/ShadowrunDb.hpp index 92aa1cb..47244db 100644 --- a/src/shadowrun/ShadowrunDb.hpp +++ b/src/shadowrun/ShadowrunDb.hpp @@ -7,8 +7,17 @@ #include #include "json.hpp" #include "utils.hpp" +#include "sqlite_orm.h" +#include "magic_enum.hpp" namespace shadowrun { + enum class Type { + Unknown = 0, + Info = 1, + Attributes = 2, + Skills = 3, + }; + struct ShadowrunCharacter { int id; std::string name; @@ -17,26 +26,40 @@ namespace shadowrun { NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ShadowrunCharacter, id, name, created_at) - inline ShadowrunCharacter createShadowrunCharacter(const std::string& name){ + inline ShadowrunCharacter newShadowrunCharacter(const std::string& name){ return ShadowrunCharacter {-1, name, utils::currentTime()}; } + struct ShadowrunCharacterData { int id; int character_id; - std::string type; + int type; std::string json; std::string created_at; std::string updated_at; }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ShadowrunCharacterData, id, character_id, type, json, created_at, updated_at); + inline ShadowrunCharacterData newShadowrunCharacterData(int character_id, Type type, const std::string json){ + std::string time = utils::currentTime(); + return ShadowrunCharacterData { + .id = -1, + .character_id = character_id, + .type = static_cast(type), + .json = json, + .created_at = time, + .updated_at = time, + }; + } + int64_t createCharacter(const std::string& name); - bool storeCharacterData(int64_t characterKey, std::vector>& idValues); std::vector getCharacters(); std::optional getChracter(int id); std::vector getChracterData(int character_id); int storeCharacterData(const ShadowrunCharacterData& data); + int storeCharacterData(int characterId, const Type type, const std::string& json); } + #endif // __SHADOWRUNDB_H__ \ No newline at end of file diff --git a/src/utils.cpp b/src/utils.cpp index dd753e2..aa4146c 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -143,4 +143,12 @@ string currentTime(){ return ss.str(); } +std::expected parseJson(const std::string& input) { + try { + return nlohmann::json::parse(input); + } + catch (const nlohmann::json::exception& e) { + return std::unexpected(e.what()); + } +} } \ No newline at end of file diff --git a/src/utils.hpp b/src/utils.hpp index dd1f8cb..3fc9a4b 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -6,8 +6,8 @@ #include #include #include +#include #include "json.hpp" - namespace utils { std::map parseBody(const std::string& body); @@ -33,6 +33,20 @@ namespace utils { } return arr.dump(); } + + std::expected parseJson(const std::string& input); + + + template + std::expected fromJson(const std::string& input) { + try { + return nlohmann::json::parse(input).get(); + } + catch (const nlohmann::json::exception& e) { + return std::unexpected(e.what()); + } + +} } #endif From 76dff51c6f82a03ca8a23f3f43dd07c681aa25f0 Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Sun, 23 Nov 2025 21:10:05 +0100 Subject: [PATCH 03/19] push --- .gitattributes | 1 + {static => assets}/htmx.min.js | 0 {static => assets}/server-settings.json | 0 {static => assets}/settings.json | 0 .../shadowrun/Shadowrun-4E-Corebook-full.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p1.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p10.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p100.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p101.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p102.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p103.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p104.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p105.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p106.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p107.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p108.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p109.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p11.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p110.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p111.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p112.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p113.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p114.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p115.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p116.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p117.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p118.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p119.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p12.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p120.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p121.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p122.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p123.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p124.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p125.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p126.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p127.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p128.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p129.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p13.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p130.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p131.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p132.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p133.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p134.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p135.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p136.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p137.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p138.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p139.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p14.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p140.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p141.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p142.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p143.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p144.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p145.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p146.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p147.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p148.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p149.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p15.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p150.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p151.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p152.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p153.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p154.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p155.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p156.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p157.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p158.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p159.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p16.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p160.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p161.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p162.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p163.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p164.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p165.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p166.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p167.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p168.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p169.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p17.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p170.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p171.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p172.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p173.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p174.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p175.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p176.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p177.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p178.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p179.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p18.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p180.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p181.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p182.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p183.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p184.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p185.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p186.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p187.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p188.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p189.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p19.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p190.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p191.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p192.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p193.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p194.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p195.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p196.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p197.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p198.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p199.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p2.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p20.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p200.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p201.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p202.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p203.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p204.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p205.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p206.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p207.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p208.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p209.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p21.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p210.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p211.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p212.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p213.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p214.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p215.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p216.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p217.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p218.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p219.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p22.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p220.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p221.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p222.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p223.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p224.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p225.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p226.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p227.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p228.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p229.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p23.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p230.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p231.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p232.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p233.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p234.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p235.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p236.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p237.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p238.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p239.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p24.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p240.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p241.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p242.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p243.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p244.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p245.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p246.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p247.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p248.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p249.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p25.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p250.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p251.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p252.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p253.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p254.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p255.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p256.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p257.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p258.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p259.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p26.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p260.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p261.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p262.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p263.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p264.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p265.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p266.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p267.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p268.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p269.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p27.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p270.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p271.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p272.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p273.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p274.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p275.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p276.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p277.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p278.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p279.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p28.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p280.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p281.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p282.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p283.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p284.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p285.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p286.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p287.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p288.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p289.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p29.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p290.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p291.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p292.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p293.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p294.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p295.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p296.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p297.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p298.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p299.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p3.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p30.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p300.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p301.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p302.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p303.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p304.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p305.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p306.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p307.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p308.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p309.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p31.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p310.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p311.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p312.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p313.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p314.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p315.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p316.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p317.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p318.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p319.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p32.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p320.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p321.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p322.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p323.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p324.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p325.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p326.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p327.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p328.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p329.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p33.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p330.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p331.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p332.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p333.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p334.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p335.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p336.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p337.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p338.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p339.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p34.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p340.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p341.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p342.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p343.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p344.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p345.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p346.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p347.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p348.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p349.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p35.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p350.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p351.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p352.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p353.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p354.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p36.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p37.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p38.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p39.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p4.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p40.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p41.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p42.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p43.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p44.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p45.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p46.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p47.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p48.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p49.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p5.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p50.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p51.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p52.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p53.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p54.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p55.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p56.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p57.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p58.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p59.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p6.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p60.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p61.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p62.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p63.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p64.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p65.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p66.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p67.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p68.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p69.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p7.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p70.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p71.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p72.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p73.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p74.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p75.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p76.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p77.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p78.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p79.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p8.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p80.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p81.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p82.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p83.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p84.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p85.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p86.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p87.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p88.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p89.pdf | 3 + assets/shadowrun/Shadowrun-4E-Corebook-p9.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p90.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p91.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p92.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p93.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p94.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p95.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p96.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p97.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p98.pdf | 3 + .../shadowrun/Shadowrun-4E-Corebook-p99.pdf | 3 + frontend/src/lib/ShadowrunCharacter.svelte | 109 ------- frontend/src/lib/shadorwun/character.svelte | 269 ++++++++++++++++++ frontend/src/lib/shadorwun/defaults.svelte | 81 ++++++ frontend/src/lib/shadorwun/types.svelte | 42 +++ frontend/src/routes/shadowrun/+page.svelte | 2 +- src/main.cpp | 22 +- src/shadowrun/ShadowrunCharacterForm.cpp | 4 +- src/shadowrun/ShadowrunDb.hpp | 5 + 367 files changed, 1488 insertions(+), 112 deletions(-) create mode 100644 .gitattributes rename {static => assets}/htmx.min.js (100%) rename {static => assets}/server-settings.json (100%) rename {static => assets}/settings.json (100%) create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-full.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p1.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p10.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p100.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p101.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p102.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p103.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p104.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p105.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p106.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p107.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p108.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p109.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p11.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p110.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p111.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p112.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p113.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p114.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p115.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p116.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p117.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p118.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p119.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p12.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p120.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p121.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p122.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p123.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p124.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p125.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p126.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p127.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p128.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p129.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p13.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p130.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p131.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p132.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p133.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p134.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p135.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p136.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p137.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p138.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p139.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p14.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p140.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p141.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p142.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p143.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p144.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p145.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p146.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p147.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p148.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p149.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p15.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p150.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p151.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p152.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p153.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p154.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p155.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p156.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p157.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p158.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p159.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p16.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p160.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p161.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p162.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p163.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p164.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p165.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p166.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p167.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p168.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p169.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p17.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p170.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p171.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p172.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p173.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p174.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p175.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p176.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p177.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p178.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p179.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p18.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p180.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p181.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p182.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p183.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p184.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p185.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p186.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p187.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p188.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p189.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p19.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p190.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p191.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p192.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p193.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p194.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p195.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p196.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p197.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p198.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p199.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p2.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p20.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p200.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p201.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p202.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p203.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p204.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p205.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p206.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p207.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p208.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p209.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p21.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p210.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p211.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p212.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p213.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p214.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p215.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p216.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p217.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p218.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p219.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p22.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p220.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p221.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p222.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p223.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p224.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p225.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p226.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p227.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p228.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p229.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p23.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p230.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p231.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p232.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p233.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p234.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p235.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p236.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p237.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p238.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p239.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p24.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p240.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p241.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p242.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p243.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p244.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p245.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p246.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p247.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p248.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p249.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p25.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p250.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p251.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p252.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p253.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p254.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p255.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p256.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p257.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p258.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p259.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p26.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p260.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p261.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p262.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p263.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p264.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p265.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p266.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p267.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p268.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p269.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p27.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p270.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p271.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p272.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p273.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p274.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p275.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p276.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p277.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p278.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p279.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p28.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p280.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p281.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p282.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p283.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p284.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p285.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p286.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p287.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p288.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p289.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p29.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p290.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p291.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p292.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p293.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p294.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p295.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p296.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p297.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p298.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p299.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p3.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p30.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p300.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p301.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p302.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p303.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p304.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p305.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p306.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p307.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p308.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p309.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p31.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p310.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p311.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p312.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p313.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p314.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p315.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p316.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p317.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p318.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p319.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p32.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p320.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p321.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p322.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p323.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p324.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p325.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p326.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p327.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p328.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p329.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p33.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p330.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p331.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p332.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p333.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p334.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p335.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p336.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p337.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p338.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p339.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p34.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p340.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p341.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p342.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p343.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p344.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p345.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p346.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p347.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p348.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p349.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p35.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p350.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p351.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p352.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p353.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p354.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p36.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p37.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p38.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p39.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p4.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p40.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p41.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p42.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p43.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p44.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p45.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p46.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p47.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p48.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p49.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p5.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p50.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p51.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p52.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p53.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p54.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p55.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p56.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p57.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p58.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p59.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p6.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p60.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p61.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p62.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p63.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p64.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p65.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p66.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p67.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p68.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p69.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p7.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p70.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p71.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p72.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p73.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p74.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p75.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p76.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p77.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p78.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p79.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p8.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p80.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p81.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p82.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p83.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p84.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p85.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p86.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p87.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p88.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p89.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p9.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p90.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p91.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p92.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p93.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p94.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p95.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p96.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p97.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p98.pdf create mode 100644 assets/shadowrun/Shadowrun-4E-Corebook-p99.pdf delete mode 100644 frontend/src/lib/ShadowrunCharacter.svelte create mode 100644 frontend/src/lib/shadorwun/character.svelte create mode 100644 frontend/src/lib/shadorwun/defaults.svelte create mode 100644 frontend/src/lib/shadorwun/types.svelte diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b634d85 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pdf filter=lfs diff=lfs merge=lfs -text diff --git a/static/htmx.min.js b/assets/htmx.min.js similarity index 100% rename from static/htmx.min.js rename to assets/htmx.min.js diff --git a/static/server-settings.json b/assets/server-settings.json similarity index 100% rename from static/server-settings.json rename to assets/server-settings.json diff --git a/static/settings.json b/assets/settings.json similarity index 100% rename from static/settings.json rename to assets/settings.json diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-full.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-full.pdf new file mode 100644 index 0000000..f88c8b9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-full.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ab98fa86ff0cd70c1935ad6adf8c1de2c70ebe7152ee5310f17612e00cba533 +size 205125803 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p1.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p1.pdf new file mode 100644 index 0000000..fd58d91 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p1.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a63a179b3a10bdae68326b430c2281c7a4b06f6bd3bc085e367f8ef669df3cee +size 4571342 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p10.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p10.pdf new file mode 100644 index 0000000..415fd29 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p10.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ea90805cde97aa979818e4620481f12cfbb5596d38fd4bda16137fd960df67e +size 505721 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p100.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p100.pdf new file mode 100644 index 0000000..ea69e66 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p100.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e1f606e6b95dc28a99957f262b2de829143ef4902c0621853e6fa101d78e25b +size 3498702 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p101.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p101.pdf new file mode 100644 index 0000000..0354bbc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p101.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:430c9d4f601cd86b6e0ab677fbfa45d2a83df9b7c17db25a7a5dda49eae34ba8 +size 3852846 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p102.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p102.pdf new file mode 100644 index 0000000..eff25a5 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p102.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe5784c9250f416c5745d0c713cbe9dc2d3c125f8145884458ade8868eb0560d +size 4316611 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p103.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p103.pdf new file mode 100644 index 0000000..2897f15 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p103.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:383aac1245323e21fd622e4e1d4b93917e2632919240e8c62bde87c33230753f +size 3668137 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p104.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p104.pdf new file mode 100644 index 0000000..19843dd --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p104.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecf1435eef7df2b99d6ea1ece80185204e87d222a87f35c136fcc62fd4ac2944 +size 3685575 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p105.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p105.pdf new file mode 100644 index 0000000..4df4a35 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p105.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:907db31bb6918a1dea8d32ec68c2c914ce7e3101231bab8597cdc3d8dfe77000 +size 3727671 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p106.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p106.pdf new file mode 100644 index 0000000..badd126 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p106.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cdb6a93a39f89f0375e1e931064d9cab8ddb76decfdfbe1c5e363c9eb06ac76 +size 3825420 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p107.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p107.pdf new file mode 100644 index 0000000..4f24148 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p107.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a9e2d76b090f65ad7f0fd3f26320b6aefd9478cee1620743b0d0b62a6f0a86a +size 1204552 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p108.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p108.pdf new file mode 100644 index 0000000..6f20c96 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p108.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7d95ec1006198e417480d0b5012f861a0cbe0721f90d231372c477a1ccbda5b +size 251958 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p109.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p109.pdf new file mode 100644 index 0000000..1f6c7a4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p109.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1c6f6758bbe92d52adb6518b0c0e3c013e5eeeb28b874cca7cbf02702e48015 +size 1789776 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p11.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p11.pdf new file mode 100644 index 0000000..2b94d24 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p11.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe6be919a0508261ffa20dc615f4f0e4e731d839bc242752517a7bc88306c975 +size 274391 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p110.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p110.pdf new file mode 100644 index 0000000..73f2c8d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p110.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38531643abbdc7cf9a0b2b80ea5024d2faa34cce7caf243fed42d0b475b6c2f1 +size 529746 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p111.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p111.pdf new file mode 100644 index 0000000..4ad4f25 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p111.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57e8a103431e87c0c72ffaf6b257428d1ecdd86effade2a44614b6d3323c52af +size 635613 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p112.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p112.pdf new file mode 100644 index 0000000..90a5d30 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p112.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1aaf3c633c680b48ff49df7aa6e00724da414670941a5c4025901be6976c28fc +size 474938 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p113.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p113.pdf new file mode 100644 index 0000000..25fa669 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p113.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0747372ab76aa89c7e3de69d28ddfa4f05a88db66533b378e6d98de2abae7969 +size 531493 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p114.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p114.pdf new file mode 100644 index 0000000..ae8b6fc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p114.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1018e696176ef59ec505cf56895357af2f40c134e8b8b684421e794cf6d34caa +size 500725 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p115.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p115.pdf new file mode 100644 index 0000000..4eca7b0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p115.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cc824ea1d29c4a27938429dd021321e286110307e515f14425db457799fde4f +size 247696 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p116.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p116.pdf new file mode 100644 index 0000000..6dcd7f3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p116.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36464825ed88f4d03537aa7d17771956ad0d3d8950c7b5cd5f8c03c81815dd38 +size 245856 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p117.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p117.pdf new file mode 100644 index 0000000..40bae7a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p117.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9254195b0e22f8145c62255459b9a1d6d8bc36da1c04b4c27ab940b8f74a1de8 +size 719632 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p118.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p118.pdf new file mode 100644 index 0000000..2c1b59b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p118.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d5b415ddae71d839bbd998fab8a65c0ae093709124ccf5fdc86d8941b258ffb +size 531734 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p119.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p119.pdf new file mode 100644 index 0000000..83d16ad --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p119.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8a826bc168ccaaab9f79b49a580579d5f468caaa9782ff32a5f35abd31e9495 +size 784537 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p12.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p12.pdf new file mode 100644 index 0000000..4acabb6 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p12.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c7c4556b8dad656ec20dc3488649a06db5489c2ad18a2bce1a456c53213ef84 +size 450103 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p120.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p120.pdf new file mode 100644 index 0000000..48f8b27 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p120.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fe2f4a1a6e72e6edca84b6a6f85a62061ec4aaf4b239774d12221306e39c3d9 +size 703163 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p121.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p121.pdf new file mode 100644 index 0000000..db9be91 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p121.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30a3c746f11fce37b3e1b8c69aa6ef17a1c4e345165370addccb1a2ff3f62113 +size 514073 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p122.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p122.pdf new file mode 100644 index 0000000..ee4c487 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p122.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92c45ed6b1e32c7fd2bbe185935bedb18e377e2f0fd1eb3f23add7617e1a30d4 +size 248689 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p123.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p123.pdf new file mode 100644 index 0000000..7eca24a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p123.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a50a4e085fefea483ddfb7d1b11e8eaa20e5c1f1285500a19afc36fd0186c3b9 +size 962068 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p124.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p124.pdf new file mode 100644 index 0000000..1d3257b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p124.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9298d1d6852170ac24946e771dfec8b1806b29143aad26314809f2d694347761 +size 564447 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p125.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p125.pdf new file mode 100644 index 0000000..c44d200 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p125.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:accd1d3ea1615d6a1c00d950b2c81abd4b20f83cb4c6e209ffdd4e7bb88900c7 +size 244703 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p126.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p126.pdf new file mode 100644 index 0000000..663e5a2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p126.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610dd766ea2166317fdf4a5fd1b54d05299d11dddf196c88dad8903cc6bc2ddd +size 244903 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p127.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p127.pdf new file mode 100644 index 0000000..d14d9b4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p127.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3734d2fec2f961cd1d47c5ef15ec50a1c299219c385193a4fe97983f63f8c5d +size 459703 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p128.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p128.pdf new file mode 100644 index 0000000..68e43e3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p128.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7489984c1f9c788a11db0ebe3825b0b141dc05fb53d6af1a9805f379535b0ffb +size 467841 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p129.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p129.pdf new file mode 100644 index 0000000..637e6f2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p129.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67ec8882dee05e9d9771f94ebd32d3475d8b35b1f40bc1ebf88b65854eb3ff57 +size 769888 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p13.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p13.pdf new file mode 100644 index 0000000..1e14002 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p13.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f0ec2ccdcafe93080d868349341e0a50915dbf3503f9db6bde03163fae66836 +size 233699 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p130.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p130.pdf new file mode 100644 index 0000000..1756225 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p130.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e44379b143ffd8470e526cf0219895f4b9121daad8a76bf7618d0c55a33d9d6a +size 538647 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p131.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p131.pdf new file mode 100644 index 0000000..a6a1a5d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p131.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1a13d1e0a925e36afbbb292e1380622d1d6ddc16afaf0cd18d7a6ce45d7a9ed +size 844356 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p132.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p132.pdf new file mode 100644 index 0000000..6a85b90 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p132.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf8a73c105eb1d02c74a2f1112d925e59a0b8d4e63244c01dd541b6c1d2fa609 +size 238410 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p133.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p133.pdf new file mode 100644 index 0000000..d50dabf --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p133.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c78748e011a8b37f107621009e68031e33b61c73009d726b5e134c3de5191cf5 +size 840145 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p134.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p134.pdf new file mode 100644 index 0000000..2e360cf --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p134.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d6ae69693e8772a6e02d60ad68e1e5376b2b0fdb75df0c3fc453acd7a79f673 +size 249913 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p135.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p135.pdf new file mode 100644 index 0000000..2dc2154 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p135.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a23cc13761c54f9870a09be36eb710e746a0033b8d19f00d0cd1240cc9c61717 +size 1718361 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p136.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p136.pdf new file mode 100644 index 0000000..bd51bc5 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p136.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:419c1260c860d38bb14b0b6cfd9c5cf782297920557ea7b2fe6acfed1b2889aa +size 238047 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p137.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p137.pdf new file mode 100644 index 0000000..984e721 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p137.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb884c91b9b1d63ed742fd36307688fe94b0ce6ba0ec816f99e412b9f192ecc0 +size 249106 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p138.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p138.pdf new file mode 100644 index 0000000..5745947 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p138.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fe3150dd67341ecf89b3117a9dec7dbd67fc055c431bc1086c00b8ee62408a6 +size 502245 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p139.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p139.pdf new file mode 100644 index 0000000..2687d82 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p139.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8430a79b7ffbecbfadd838ad22722d0d30e4f3b526bd2c39f9c297ee83c779e +size 470078 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p14.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p14.pdf new file mode 100644 index 0000000..bcf32d1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p14.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce375f0aaf5baaf84451cd32ab2387885a7f373a4b328ca40753c9e47d3a349b +size 231760 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p140.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p140.pdf new file mode 100644 index 0000000..663619a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p140.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:921823102186218f7b737688fd97c056ac62e9b523cf99a9778cb36f15875da5 +size 541627 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p141.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p141.pdf new file mode 100644 index 0000000..f9e66c1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p141.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c50d3f83d8872a57f3ff6afe76a0005f08078dc627ac5c7907d8dbda031d9fb9 +size 945054 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p142.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p142.pdf new file mode 100644 index 0000000..6f52d06 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p142.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac56794dcbca0438c9d768f6d25d0cc7ff52657c2e7855ccc7c1d4e823bb16a6 +size 532282 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p143.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p143.pdf new file mode 100644 index 0000000..b479299 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p143.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5934d90a8251904d5785f3a4bb1ee2a3afbf6b9582b00401e54d42b0acb4d17 +size 290310 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p144.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p144.pdf new file mode 100644 index 0000000..d11ba30 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p144.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c36ee55f2a268cd73f266e9366af4f755bbb49e54596a363f5f7398df563a210 +size 246123 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p145.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p145.pdf new file mode 100644 index 0000000..a051f31 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p145.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97ee893a7717f89870fc0421c1241d06d97d01e7f6908277910f19c0cd41ce35 +size 475493 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p146.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p146.pdf new file mode 100644 index 0000000..735e44d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p146.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9473ca15bd15419a1dad569eff35b0fad8ba71efbd77b148ab119b3c0d8bbb6d +size 249670 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p147.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p147.pdf new file mode 100644 index 0000000..abedf78 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p147.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04039bfb7044a7ba70de4c8070b241bfae2a0ceabc9cd65af5352399914c5188 +size 555033 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p148.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p148.pdf new file mode 100644 index 0000000..acb43bf --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p148.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:271e96f2af40955a339f56d215315543dc9801f020f407b4f34de45da353a2a8 +size 725437 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p149.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p149.pdf new file mode 100644 index 0000000..8328800 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p149.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f6f89918238f2675dafb8ec696ae2fe80bf1544f25bcac66c1ca2e17162a6b8 +size 349970 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p15.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p15.pdf new file mode 100644 index 0000000..9d8fa9f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p15.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9147df72982a527be429f7eca9ef37f2bced5a0284f77020db8fa80711d91afe +size 243079 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p150.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p150.pdf new file mode 100644 index 0000000..f86dd72 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p150.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce3a1f2c8cd0fefce16f2add4bd3574c9b7b1a4ba4fafa29fcd57ae3fd80b079 +size 482858 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p151.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p151.pdf new file mode 100644 index 0000000..940ed44 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p151.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7412fe0b3333ad698b5df69fc40d80b89d392ef9db3a51827ebf0951be90c5ed +size 460835 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p152.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p152.pdf new file mode 100644 index 0000000..d68d8e3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p152.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a06d74585e1e494c4e86037847cf3359e985f343cf18a83a29b5003a277c07ec +size 449499 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p153.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p153.pdf new file mode 100644 index 0000000..e4ca84c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p153.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9a9dfb08d8364c9395c8cecc9c6116a8099439b410bd60ba4dea9866294d83b +size 472262 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p154.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p154.pdf new file mode 100644 index 0000000..9f79ace --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p154.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad4e83b68cb83db193dce565598c074473fec9558a0c66f86ea29f2ccc82208d +size 230183 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p155.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p155.pdf new file mode 100644 index 0000000..6af1ffc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p155.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1039e6c8502ad2e7b2f76fc2f36f14e4d1c9f657e8a762b77332ce5246675384 +size 233810 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p156.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p156.pdf new file mode 100644 index 0000000..0db6caf --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p156.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca5c82f0a1d5f11a8e7021733eb4b1fc7fed6802dfd7ce98f47402c504a21db3 +size 478341 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p157.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p157.pdf new file mode 100644 index 0000000..6083d03 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p157.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:753ec5d8ce0b71c0083ba934e89484124454512912f9e469bad016cf51d7003e +size 231201 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p158.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p158.pdf new file mode 100644 index 0000000..603f428 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p158.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12005e93704f9cbdc2ceb34c4d1be117fb828244a07f8c4c1b683d176fb94e2a +size 439410 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p159.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p159.pdf new file mode 100644 index 0000000..e71af85 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p159.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b682ece48463fda23b431db252e2362a89b7b4e2beada6b09fa1e5e524fd49b2 +size 513233 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p16.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p16.pdf new file mode 100644 index 0000000..7ef0983 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p16.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5de4132806ade197b060a74bed74eea53437b63eec20997e16f109d9285fa34 +size 2207418 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p160.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p160.pdf new file mode 100644 index 0000000..d96eb84 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p160.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9c9422a42986c474f04325d4b55a1474d0b0f0b6c8849a9a46554e1926ba0a1 +size 489178 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p161.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p161.pdf new file mode 100644 index 0000000..84af4dd --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p161.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efeeb47770b120e2448d57c8acaf0adbc17e392b158506ca6e62c2c941167759 +size 787618 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p162.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p162.pdf new file mode 100644 index 0000000..8f1b9c5 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p162.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:512a1dbdad5f801acf02fe3d82c9b3a6555835476ad42783ee97dcf4a2b892ba +size 838895 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p163.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p163.pdf new file mode 100644 index 0000000..1d5aed4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p163.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faebfd7d4de251aa772d71bf7abfbbfe5059873db2901a781bd6c6131a3970d5 +size 243208 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p164.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p164.pdf new file mode 100644 index 0000000..8aace24 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p164.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:995c612ccbe9708bc4b55ec88285632b43b3f9ec65459d3fca4c78221b0bca8a +size 439969 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p165.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p165.pdf new file mode 100644 index 0000000..7a5b317 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p165.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfb1989b6425a6380b88a7d69eefd26c0048f0d0b5ab8fda462af3fd0efff994 +size 910616 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p166.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p166.pdf new file mode 100644 index 0000000..be16d8a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p166.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c7dde504678471b7cc008fb0459fe37d725e3ffd28e91d1bda04786de3eb01e +size 298181 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p167.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p167.pdf new file mode 100644 index 0000000..7ab3679 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p167.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a407a66593ae6f8c329e2c85c08bcb649567b17f2d7e02a60f7e3e1ff3132a0 +size 1850221 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p168.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p168.pdf new file mode 100644 index 0000000..c79a583 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p168.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bec9adaf5ff73630e8c84db2779a829e794724955958a13198be23f1f001061 +size 843765 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p169.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p169.pdf new file mode 100644 index 0000000..ac26e33 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p169.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46a090a6347860d9e59fb0e00487e984faa12d89fa23d5a7dd7af1a118f04eff +size 247431 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p17.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p17.pdf new file mode 100644 index 0000000..e442ea9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p17.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c701f31edd866f9b47a7cf4c847877828cec5afc7f58f057ca2c9b877046179 +size 1774429 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p170.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p170.pdf new file mode 100644 index 0000000..8386995 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p170.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86f87b369c9989fc71f29ea7e0c764bf189f32d07d7a0d0046faaed234e65bab +size 217641 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p171.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p171.pdf new file mode 100644 index 0000000..ca1f9b0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p171.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a83c91f25f063c936b295a05cc8de7f3a25e04af9c73e63837e98654fe088b28 +size 434870 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p172.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p172.pdf new file mode 100644 index 0000000..54c8a1b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p172.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3eadc41e7ccaa1ac3eaaf63250050288ca8c7abb04bced02aaef30ad19b78abc +size 211112 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p173.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p173.pdf new file mode 100644 index 0000000..db79021 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p173.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7741be8cd3d2173157f7e4a695df39cb4d6d547d65cafedf5117ec688f24de72 +size 545762 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p174.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p174.pdf new file mode 100644 index 0000000..4dd7c7b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p174.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:134f832d3c477880c102105c2f75064d6ab28ca1d4dddcb7b3141085cbb0b874 +size 536172 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p175.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p175.pdf new file mode 100644 index 0000000..04b9bc3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p175.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d863323d7542023c3d9bbca1ca997190084d3e0e4ca4f44b92e30dfeaf1f588 +size 214887 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p176.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p176.pdf new file mode 100644 index 0000000..a327dea --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p176.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bdf96adb6a8376d59a77bb955c469f5110812ec0fbad9a1d2c3ab29357dfa80 +size 456333 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p177.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p177.pdf new file mode 100644 index 0000000..763ecd0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p177.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9b52586c2ee400d27c860227a523b486a0147cbc2088c46f7bbb7364e8b02ae +size 272884 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p178.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p178.pdf new file mode 100644 index 0000000..8a88d9f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p178.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c8e571c2d4c894eaa5d7fdec6f0f34a1a7b9d697ee73d0df50de7308a5d6325 +size 213667 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p179.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p179.pdf new file mode 100644 index 0000000..66bc32d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p179.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac791ff24a484c97220c3d3dacba4d6ea85c1887e33d06fec8bb46bf5400f184 +size 473533 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p18.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p18.pdf new file mode 100644 index 0000000..bcb9aa2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p18.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d67f111544a35c474b5b62133785d2f2015c091032b9c6f4e8090a255daed2a7 +size 231169 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p180.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p180.pdf new file mode 100644 index 0000000..d43cbb9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p180.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e58d1d61bf968d45b93f219111b43f9015d4c011cbc8d4f67dba74a45e7de421 +size 266516 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p181.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p181.pdf new file mode 100644 index 0000000..2997272 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p181.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71cf7ccd15e6cf005fb10348d321cabf8ff065d97fc20be537d2f1ffa38a55f2 +size 418607 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p182.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p182.pdf new file mode 100644 index 0000000..ccfbeca --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p182.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:155ebb7c45ac595728cbcea31d1d36913deea4580d518a71c394e7dc8649e417 +size 267037 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p183.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p183.pdf new file mode 100644 index 0000000..7f732af --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p183.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea97b677697347ab3abf83f026f4d4783185d693162011d5d09fb4e93b2e0723 +size 211843 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p184.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p184.pdf new file mode 100644 index 0000000..c003c85 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p184.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:268df72427d33516b4012b8ec04ef88d94909da1dee25e0ff738873fa01a81fd +size 351248 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p185.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p185.pdf new file mode 100644 index 0000000..38e89d1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p185.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7332ee255a85726c1f6f263abd3ea257bb5a53fbbfbca89d45e1891cfdab3a6 +size 533405 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p186.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p186.pdf new file mode 100644 index 0000000..33c1828 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p186.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3ddfc394d5c81a6f27e926a71e42d27e9e8885e22814adb0beb1c1b5126f589 +size 499130 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p187.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p187.pdf new file mode 100644 index 0000000..4e17c13 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p187.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fb45724c198e9349622145f40ecce92675f27d49d6ed6dd4583fd55b11949cd +size 201354 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p188.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p188.pdf new file mode 100644 index 0000000..a6597be --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p188.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e46308e4617233ac335c6b70cc8edcdd6a66d579bc5df1157c2202265021b6dd +size 522434 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p189.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p189.pdf new file mode 100644 index 0000000..670e667 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p189.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47df73282ba3337a4afee272d87314fd065e515c24d932ca78c386ebdd3aa22c +size 210044 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p19.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p19.pdf new file mode 100644 index 0000000..22641e4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p19.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aff3bdd27cc093b3d5195082cad435f1039e1f4ae9a5b5a9c72e9f1d215bc87 +size 231369 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p190.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p190.pdf new file mode 100644 index 0000000..817ddf1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p190.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:904c605b8874b67ebe1236262411c2f0b466ee924b7fefa4bdafac2522f8467b +size 387370 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p191.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p191.pdf new file mode 100644 index 0000000..a156e9c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p191.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4919ad711d7c3dd5d187861ecf6ae20653630ec8e42228ba3bee92841d6345b7 +size 215160 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p192.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p192.pdf new file mode 100644 index 0000000..45e243c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p192.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02890cec362155a1b50e66ad827f55ffedc3ebb3b1841098087d38fd9784300d +size 532285 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p193.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p193.pdf new file mode 100644 index 0000000..f739a9c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p193.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baa633a513029311e3f1d0580977a62e6ed13e8f6d26507f3a282c532cbf59a8 +size 466631 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p194.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p194.pdf new file mode 100644 index 0000000..5805840 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p194.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03b1bb48650a1ccb5b0bf68402619cf374e5f5e47c2bef326237b5f0e1ee656c +size 446591 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p195.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p195.pdf new file mode 100644 index 0000000..53e1eec --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p195.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d94dbd17184ffd16af371dc1da270ed8e28364180c005d75c28c48075d63700 +size 197318 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p196.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p196.pdf new file mode 100644 index 0000000..455b196 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p196.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3ed3ef04ca1495681b7499198977558742fc7b36157bcb466bed91e82996f71 +size 196245 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p197.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p197.pdf new file mode 100644 index 0000000..438fc2e --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p197.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96d05d92243220864183e11710a3437fb028b19a141de4c066c611bb3ee194ff +size 262450 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p198.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p198.pdf new file mode 100644 index 0000000..66d367a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p198.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:246d0c0b6137309cf17eae8e6dc6743975b42c13174178f6f80e1213131fa440 +size 501646 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p199.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p199.pdf new file mode 100644 index 0000000..71eaf1b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p199.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1d5ead9f3bf8b4b2055e234a32fe109d74bf801103f21374ae39e019a9930f4 +size 485855 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p2.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p2.pdf new file mode 100644 index 0000000..878ab47 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p2.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3206274bbe200c2cbbf996e795251723e00e2f35f2c233f48172cf4ee1283ce7 +size 4571384 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p20.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p20.pdf new file mode 100644 index 0000000..58da159 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p20.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eba81a71c173618cee58d44f676b09d10b7177f651432065367c37c5fb3d46c +size 500143 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p200.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p200.pdf new file mode 100644 index 0000000..5cb8adc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p200.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23dc11a21424f7e67a5c33695568f3b8f97ecd9fffc3738fa2140c035a327b04 +size 465479 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p201.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p201.pdf new file mode 100644 index 0000000..e2d5cdf --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p201.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e7a7007405bde08e0c6eb4836b2af1cde1440efb94d81205af332be7f28495b +size 409661 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p202.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p202.pdf new file mode 100644 index 0000000..8b86bd2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p202.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72a0c2e1f5a3c6e76348661890e95aff244581e7142f2defead68b91d9424218 +size 201535 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p203.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p203.pdf new file mode 100644 index 0000000..ffd7626 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p203.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b0ddc3b0af56dbf54fd3abf5358a732e021331944092734ac65fdef9f468c05 +size 622907 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p204.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p204.pdf new file mode 100644 index 0000000..f0a6eea --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p204.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20b53c318c481046d8abeb27b01f7c938e9b9267dd8b5052e63ec65294c7f1ad +size 211520 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p205.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p205.pdf new file mode 100644 index 0000000..ed42920 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p205.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:541ad56e6f8f2e78bebc808e6db86e99ba206d9c20f9b076c7f0d46293141fc8 +size 199618 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p206.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p206.pdf new file mode 100644 index 0000000..79c1cd9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p206.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28c1ef77d58e3617d4e21cb8864a108efc7d7d5eab6ae1a49ac70730bed62ae2 +size 200058 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p207.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p207.pdf new file mode 100644 index 0000000..491576d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p207.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e4c1607ed50d3395f28a14c34ec376887a51846886d432cc221b1f3d9cced9b +size 480846 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p208.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p208.pdf new file mode 100644 index 0000000..9bf6dea --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p208.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb60f733f503cdc36c8b5002491cd04ad4af266dcd6da8811ced5df02a1ae1ba +size 235001 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p209.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p209.pdf new file mode 100644 index 0000000..7bcbfc1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p209.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ac38238b305c89ce3a2f8aa7369ee47da41f5bb2335e52be04502e6951e14a0 +size 1641650 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p21.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p21.pdf new file mode 100644 index 0000000..994b5e0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p21.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96bb31a7286627f7163aa7ae5f0dcb018a81d6bc79994d555d371833fb25ac34 +size 241077 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p210.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p210.pdf new file mode 100644 index 0000000..e15d8bb --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p210.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ce4559d26bf7a7632bcbda6c314842a024efa52edd813211989735096c0eda2 +size 277818 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p211.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p211.pdf new file mode 100644 index 0000000..78edab9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p211.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3dc98ff183ce1534dec6f0406d1163b41cfccfbb943527f2dc310d08916dfe1 +size 289450 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p212.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p212.pdf new file mode 100644 index 0000000..824efe9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p212.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fd5054816ffada4a654cd28565f4f4fde7fa08cbf45733ed319a88e40c2d4e +size 279522 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p213.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p213.pdf new file mode 100644 index 0000000..0217776 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p213.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12ad8c649ba5d3c333b3860a7ef3ee4a12a63e9b41da55c315b4985bbd7340d3 +size 461968 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p214.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p214.pdf new file mode 100644 index 0000000..4d82f3c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p214.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33968d4ad08920cbc23c85ad68524e197b987b538705b27fc3a9489243b5f684 +size 653306 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p215.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p215.pdf new file mode 100644 index 0000000..b221fe0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p215.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f668e9a2535b241e857fcb6b35be61698c5a496ef39afd53192524fc987354e +size 512559 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p216.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p216.pdf new file mode 100644 index 0000000..5e3030d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p216.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df3f40e226e0d334f0fd46d6e07f49594115bd4dd4486b46620bc22077a4622b +size 619448 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p217.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p217.pdf new file mode 100644 index 0000000..126cf31 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p217.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58e18cb41bae23722f46853a697410a8ffb2028b412d95bbba393a3231061eb1 +size 490244 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p218.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p218.pdf new file mode 100644 index 0000000..e29e7bb --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p218.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a6e6dc27f41f4cacdebe8a25030b385943419051b4f2e2951fefad3e29645cb +size 304229 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p219.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p219.pdf new file mode 100644 index 0000000..4260a57 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p219.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a44c62c1f9bae917e26ca9788119f6863b8112ff273c2b3f77594482c116066e +size 441431 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p22.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p22.pdf new file mode 100644 index 0000000..32c934f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p22.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ebd5abbd2a6b3abe2eaf1aeabe565a02a4b57a7c9e1fb3ba6e0f41f66027d09 +size 348080 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p220.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p220.pdf new file mode 100644 index 0000000..6800599 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p220.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78ce4d11a0f47793c703b7c22afd07e845ba704d932ce7b6e8f60742cbfa268d +size 312050 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p221.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p221.pdf new file mode 100644 index 0000000..f64c3dc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p221.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dea079736f3047972f79199cf966c0a457a6d6886475abdcb26458a3dabaae46 +size 289752 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p222.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p222.pdf new file mode 100644 index 0000000..b5fd012 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p222.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d092a1bdc8a5a6832f303d5343bd9661822193da87bddba7c550d29c834bab8 +size 665772 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p223.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p223.pdf new file mode 100644 index 0000000..b3276f6 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p223.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7831d1c7ba48e53a81a4a3922eb154cbf63a97a1d2a9ad4e20a82360ae71063 +size 243465 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p224.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p224.pdf new file mode 100644 index 0000000..b94d7d4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p224.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8de03142eb31cdbf1603c899f4ee1aca664d073d305d3a95cd68287e212071d7 +size 457622 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p225.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p225.pdf new file mode 100644 index 0000000..805dd1a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p225.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1543884089432c2937c1c35ff7057be1a6d6d4076b0d2eeb18f35b7f6f2b8dfc +size 561179 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p226.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p226.pdf new file mode 100644 index 0000000..ce4abee --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p226.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5044ded5063133846a41f64345885ffbea38dddc82f9a8ead3e521f39b4565ba +size 277725 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p227.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p227.pdf new file mode 100644 index 0000000..ef0b524 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p227.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83f7e9e1cb8f30cee6e08c174b308d41966111976088d355718019b5254ceec5 +size 233691 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p228.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p228.pdf new file mode 100644 index 0000000..a119eb9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p228.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8cc75f684539b54e31739dba3fe63c143f0bd9d2d8a08ac05faec7b63c1d7b6 +size 233816 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p229.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p229.pdf new file mode 100644 index 0000000..6a45a6f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p229.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f08f0e37402a12d7d69f4f353384d3d3a64e5a70404a30fe85621cfec04f210 +size 246675 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p23.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p23.pdf new file mode 100644 index 0000000..392ff32 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p23.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83a7f652dae82e0653f304706781a78136cddf419c7ba325ddc98b9aeb92e464 +size 238762 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p230.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p230.pdf new file mode 100644 index 0000000..c7da101 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p230.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3843f50a1814f36ae40a7815d6ffda4085c632f8f827f8a2da6e3901ae048dd +size 482718 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p231.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p231.pdf new file mode 100644 index 0000000..5283c00 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p231.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3615c1562fb976eaf79e0a9aa63daba32e577fa89cc89378b1ae75567e789b5 +size 234219 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p232.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p232.pdf new file mode 100644 index 0000000..c5fac3a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p232.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39262f88af9f7221d4bc24b8ebc4e1456ed14898d46dc6a5152fbafca75748c2 +size 447526 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p233.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p233.pdf new file mode 100644 index 0000000..4708227 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p233.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82d70cd5447e0ec8cde86cd5a30d8ae05af08c0de8521e0b70cb773218f76793 +size 287401 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p234.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p234.pdf new file mode 100644 index 0000000..53e5466 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p234.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:183a8f0f7ed994b705c8a7abb7ce997198ff76a7d0f1f334a266992feb4978b1 +size 437310 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p235.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p235.pdf new file mode 100644 index 0000000..fc00d87 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p235.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b78c740cd3efec3f385340ddf5047a832cb69d9128846788b40fb0ca64d787ec +size 555537 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p236.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p236.pdf new file mode 100644 index 0000000..df29c54 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p236.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:191fcb08223780f15bfad862f3ff535bc4bf0a249669876a1d8f32e404334dd1 +size 489376 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p237.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p237.pdf new file mode 100644 index 0000000..4b8987f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p237.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02fbaca4b6010abc52afd2a31e4e8c59468189ff974c0d82ad7114e5594e15ac +size 243471 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p238.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p238.pdf new file mode 100644 index 0000000..9d9c8fb --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p238.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc02eed2324cffbe8ff33f7c4eba61ac67f8e35e28ac3fc7ea4f5dfb8011784e +size 266109 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p239.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p239.pdf new file mode 100644 index 0000000..3d46ccc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p239.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbaab20af0929f1541f26f43f55580f033df060e04173047a1f967f01fed7fdd +size 219422 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p24.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p24.pdf new file mode 100644 index 0000000..22f3869 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p24.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6416a43c36e1042a336e4447fa450f188a994c2628d3487b1019def2a08832cd +size 1050316 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p240.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p240.pdf new file mode 100644 index 0000000..782faab --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p240.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:068c73b17b420a2c24df8a7fc6c73b20604e1aa9f7735f608b56fcb0bcc5a881 +size 247737 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p241.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p241.pdf new file mode 100644 index 0000000..3d8c1e2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p241.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a5078456194ee5d3069b4f7fc77efde83d727203c23c1e99778444779a3f221 +size 556097 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p242.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p242.pdf new file mode 100644 index 0000000..e300d29 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p242.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b1fad60d58b459d4339423069b29792c178f63cf4441796cce54417527fa9e6 +size 633368 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p243.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p243.pdf new file mode 100644 index 0000000..2bcdc6b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p243.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:181845dfe731804d6d0bd5d6b52f2eeac70e5ffe0e30bbcf8287cadfb3a32d3d +size 559887 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p244.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p244.pdf new file mode 100644 index 0000000..1ff74c2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p244.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4d8ae414a5f1256fcaf84faafd31b6540841095163b5b4aa07f9a3801d715fa +size 238200 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p245.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p245.pdf new file mode 100644 index 0000000..0ab774e --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p245.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c250f501a528c27e4e0917f81db463df4551e5b3a9c2307e826ddad91c69e8d0 +size 1760905 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p246.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p246.pdf new file mode 100644 index 0000000..cc2ab94 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p246.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a96c5c404170dc72a8216488be882a466c065796be51244398dde6af34ebd96 +size 456827 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p247.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p247.pdf new file mode 100644 index 0000000..c94b3b3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p247.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a1c603af44e67c4568b993d652d065b3b2831979e561cede646882346b6becf +size 497471 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p248.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p248.pdf new file mode 100644 index 0000000..a74d8f4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p248.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da4650533bdd9c1d77bab210f2b6746ca03fdf94647fc0a7833de4894a6e15c8 +size 248096 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p249.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p249.pdf new file mode 100644 index 0000000..667ed32 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p249.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c62a359dd9d589d2692d34092cdfd5346db3ea230f054b9fde17d6e1d9c739b8 +size 465206 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p25.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p25.pdf new file mode 100644 index 0000000..5b86f34 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p25.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df488efaac6447a87916b93b02077fd612d6c5565d7a17dd6f5f49aac18ba5a5 +size 1616519 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p250.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p250.pdf new file mode 100644 index 0000000..b63ded3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p250.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:084774658cf02421d54366452059727676483644943b2afd8bd87c9790c832fc +size 470395 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p251.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p251.pdf new file mode 100644 index 0000000..e02900d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p251.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daa9e961baf03580726064c360775140eed68bcb80892c5332d87847ff9f7c79 +size 235763 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p252.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p252.pdf new file mode 100644 index 0000000..41b31b8 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p252.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a35b660c70b31ea58e3353b5079524963e2a01c60ac1021f5742c0b163b3df4d +size 238247 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p253.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p253.pdf new file mode 100644 index 0000000..f79da54 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p253.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96e2fa34f2a124ff7a85168f81ad53a6184d52d4a055d3e9d45600a2c4950dbf +size 333710 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p254.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p254.pdf new file mode 100644 index 0000000..0fed923 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p254.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a5894e5d33fd11b48834e739cc1442075bb607cac54cee756dc6b2b343a61cc +size 540183 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p255.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p255.pdf new file mode 100644 index 0000000..dce89c5 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p255.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca50e68b5c254afdc43c83f54cf6ea2fd8d1194e376dab4f8acddf986c7262b9 +size 252036 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p256.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p256.pdf new file mode 100644 index 0000000..9f7dddb --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p256.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd231aaa8e3c57f7700cc19073b38ecdd5c5ab1d440ccbca8992b1b665f4b455 +size 1011000 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p257.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p257.pdf new file mode 100644 index 0000000..792b76a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p257.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:050076eddac7d8f9b5657104c67403c611ea265de91a0a69a6268603a5f1fc46 +size 235626 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p258.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p258.pdf new file mode 100644 index 0000000..5147158 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p258.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:971c56ead46bf9bca1b67e09ca83a67b3acaa376b883695f42cf5b3579174a3a +size 237366 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p259.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p259.pdf new file mode 100644 index 0000000..cceb980 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p259.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9025f2e1eb0235a38354a1dd1c7c32490b057197766e6bddd466e4dcb8788ca +size 474089 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p26.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p26.pdf new file mode 100644 index 0000000..a962506 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p26.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:990d9befe1b55a3d2bd50e633dc78ffadd3d58e4edbc105b6c7900ab5f33bcda +size 220679 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p260.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p260.pdf new file mode 100644 index 0000000..07db396 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p260.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf8d8b6fc0b591e6588b865358329efc3b64973a1eaa4f91e128dc0b6fcc5e3a +size 234434 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p261.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p261.pdf new file mode 100644 index 0000000..2aae493 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p261.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:315d6615775aa6e39808c2c1d313cf5ccfd6c3be4f2e7ad665f4b3e0b6487129 +size 222382 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p262.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p262.pdf new file mode 100644 index 0000000..0a0c2c1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p262.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cdeb9f93d58200205964052c08f847d2c163a7b30102df18b38f5baf4df4152 +size 732498 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p263.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p263.pdf new file mode 100644 index 0000000..de9b331 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p263.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58a8dc50dc0cda06782091bc369b539366fb0047f7297532e358a7ccf0bce450 +size 248167 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p264.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p264.pdf new file mode 100644 index 0000000..5214391 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p264.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cada9c793231b8d14e2b3fb71d30b6280160a935bf69fa2509f67ad8e64fddcf +size 433487 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p265.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p265.pdf new file mode 100644 index 0000000..837e239 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p265.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bb147eaa0fedf87bfe6864dc27f7e5394daa39b081cf68611d915783f41fe47 +size 422840 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p266.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p266.pdf new file mode 100644 index 0000000..008d5a3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p266.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:911bc1ad1b9c5d4906cdcee9ccad31569a555bee8057605d5e94d2c085c8898a +size 468959 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p267.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p267.pdf new file mode 100644 index 0000000..3c91b6c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p267.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f208c86376764e5e48b7bb32ffc45a61ba6f2f525353aa9125765135430cf06e +size 233567 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p268.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p268.pdf new file mode 100644 index 0000000..361bb71 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p268.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f618e937efce13c7a116a906dee6203e68ae4dd39d3011078dc78584146af97 +size 235290 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p269.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p269.pdf new file mode 100644 index 0000000..dc83527 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p269.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f4fb5b6a3b8aa3cdc33c11efd8d1939ed6bfc1585b5de5524067dbbf4b7ae21 +size 248501 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p27.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p27.pdf new file mode 100644 index 0000000..5c51454 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p27.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cd6d7d9ef3a48976cc577047ed1fbda170f5fca520c787d0a2fd0ca529fd849 +size 219484 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p270.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p270.pdf new file mode 100644 index 0000000..8b9c990 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p270.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ef376c303df6fa495e538a40aa1d48fcd29b0143ec69c28862f293f83f54138 +size 245581 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p271.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p271.pdf new file mode 100644 index 0000000..8a0e952 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p271.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba2a72fd51704d78fc7b91549fcba3efcb2a29b4dea61902d328e78c9cb42c87 +size 235344 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p272.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p272.pdf new file mode 100644 index 0000000..56bc998 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p272.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1874983cea7f3f1796970597d5b0b14dc5cb8523df406dab88ed3f523459f90 +size 399958 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p273.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p273.pdf new file mode 100644 index 0000000..fc4ce12 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p273.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f25a26184f46b0afdddd67a34c689987b2b10bf2c45cf297499bd486b006b1c0 +size 606415 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p274.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p274.pdf new file mode 100644 index 0000000..9f20366 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p274.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d651cc823b80460d8d0769e351f3791fea543d818d31c8bfa8e7bd7d8132d66 +size 460871 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p275.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p275.pdf new file mode 100644 index 0000000..72565ec --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p275.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa1f72111accf41c5ee9a09de79dcbb57b6e4a0624087751ada859dad0f9143c +size 1769339 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p276.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p276.pdf new file mode 100644 index 0000000..5803629 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p276.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f8a37cf32a2cb8f208381d5f584df3fe3a3efdc7ce8a25340a4187d3991a31 +size 465467 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p277.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p277.pdf new file mode 100644 index 0000000..db9ce08 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p277.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9e7ae55e337e903b1b643c7a579ebe8f84353fca30f77f611848b07e2c9db4b +size 246145 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p278.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p278.pdf new file mode 100644 index 0000000..a844011 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p278.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9bf24926e90fa0b69531a8b6f8e4655a8ea54285ed6171546966fb5cdfa7de5 +size 246927 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p279.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p279.pdf new file mode 100644 index 0000000..127f4af --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p279.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e20d651e964abdebf95038a26918703970124b2209c8c40f38a3bb130c1944c +size 519661 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p28.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p28.pdf new file mode 100644 index 0000000..c364ce6 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p28.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9779bd4c7616ae712dc5b59a749d411d587da5044068d06401d39b2921217d21 +size 438306 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p280.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p280.pdf new file mode 100644 index 0000000..4f41cf7 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p280.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dfa1e4833dae81962ab9ef20701b7157f669c69ac32a071583bbdbe15e3b958 +size 538331 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p281.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p281.pdf new file mode 100644 index 0000000..97c41d3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p281.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22fa68c463741ed51a0b459f75314ccb9d6a964ee8bde182b80b80e6ee0df155 +size 480685 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p282.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p282.pdf new file mode 100644 index 0000000..5d0b87f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p282.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86e6075015fb7d7a70b6ac6b97671e0e7e80525a82964c08020febacdaeea18d +size 237590 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p283.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p283.pdf new file mode 100644 index 0000000..97789fd --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p283.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6284179f7634a05a568ff0bc7f22cb8b88d78e6281220903036fa172bdd82ac2 +size 489334 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p284.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p284.pdf new file mode 100644 index 0000000..656c22d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p284.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76dbf2fe68bff953b70b10779adb47ca3ba782d9d6ec027a618cf0a963870cba +size 270833 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p285.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p285.pdf new file mode 100644 index 0000000..66a35d8 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p285.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08d4a2f078006f66b0d7435e152d6e0ef2649d66276b8009fb266bedaa05d476 +size 273515 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p286.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p286.pdf new file mode 100644 index 0000000..fddada2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p286.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:594898e3f81d17df3dc53a9d19a23bed2ad89d5279f9d3e573a532fad152269d +size 269176 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p287.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p287.pdf new file mode 100644 index 0000000..89e68ce --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p287.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:559ef2d0baa37523f4d1199327a4ebc1c568cee2d48cf119f7269ad8b5d76fe7 +size 239189 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p288.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p288.pdf new file mode 100644 index 0000000..fa63259 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p288.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0576e97b6834d7d047eb80b254e74dd50ff7af2eb1733a7c9c774d39baa9d6f6 +size 249237 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p289.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p289.pdf new file mode 100644 index 0000000..76c6b9c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p289.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdc1688f6733cd1875a65d97987a5cd563995d9c698bcdf9c297eb64b68b7488 +size 233230 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p29.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p29.pdf new file mode 100644 index 0000000..010aef9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p29.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be90daa0a8c6ac7494890fed242ce65af69f355c1fe2685cf725b8769ab017e4 +size 220127 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p290.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p290.pdf new file mode 100644 index 0000000..4428c15 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p290.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:295c9cfb5182f94d69337903b30a6c0db944232ba17c4e34b67af453dc4ec304 +size 248922 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p291.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p291.pdf new file mode 100644 index 0000000..b43814b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p291.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9153ac8efa8d762f71054e54c3eafc6921e6a5df8523eb37445a701e672a7569 +size 235044 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p292.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p292.pdf new file mode 100644 index 0000000..5fa8e85 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p292.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb9367085d2166cc7d14d8dc40fe6356407ae58cf88269001ba273d1c1d87d3 +size 533576 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p293.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p293.pdf new file mode 100644 index 0000000..94f5030 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p293.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d4f558628ddbdfc466d040a7d06f759a4508b9c1b69d26430038a618bb753c0 +size 231955 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p294.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p294.pdf new file mode 100644 index 0000000..eb3093b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p294.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05e814e15976e697580665fd2375e25b34202c69afd93ef87224b9eb46eee4cf +size 262960 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p295.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p295.pdf new file mode 100644 index 0000000..837f045 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p295.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9de6435ed22edae84cff0038b593f77905da5442b658c18ea7f81265c4199c2c +size 270967 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p296.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p296.pdf new file mode 100644 index 0000000..03ba52d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p296.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa7de41650d847ec3fef61fe8f57d396c875f5ee9fd2184755c77802dc633106 +size 262342 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p297.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p297.pdf new file mode 100644 index 0000000..96cd8c1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p297.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51be0207153385642450d5643a93cf84f6763a13476e44a1699199d729358c69 +size 280132 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p298.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p298.pdf new file mode 100644 index 0000000..54d3e4c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p298.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:395de080278be4167b0d90867fc6495d9c38bb5ed240c14495c818e90c3776d0 +size 273390 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p299.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p299.pdf new file mode 100644 index 0000000..7f64700 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p299.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6be89aa38321edd871e586b35dec6d52733301c776bcdfc585d370a1f1c070f6 +size 276323 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p3.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p3.pdf new file mode 100644 index 0000000..6aa63db --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p3.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aad89403b1153fed6b14408f0de5fa3b13ebaab3f9cd33be6bfba65d7e15b52d +size 448669 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p30.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p30.pdf new file mode 100644 index 0000000..307953d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p30.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:163623bef7898cf00dbd9b8622d0b0e41acf1909065b25560f38492137074de7 +size 454113 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p300.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p300.pdf new file mode 100644 index 0000000..20ef52f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p300.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:723349db2237fa936395cf4b8d33e24e719fc721a8d4913d78242eb9f505d977 +size 1004191 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p301.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p301.pdf new file mode 100644 index 0000000..74bf3b6 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p301.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3c34745f5983489c312147c0c23a328b5c9b5376468b41e1f9be32926ac8249 +size 1797065 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p302.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p302.pdf new file mode 100644 index 0000000..6ee99d9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p302.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb0f17c00943e5d93e2de533d87c4d45882eeb89c0a7229f28f50457c9880929 +size 301772 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p303.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p303.pdf new file mode 100644 index 0000000..1ccd5fc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p303.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:053637cecf90c45bd19f9bec9b94f6466dcb336e8d8c1356da77e1e9585688db +size 282113 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p304.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p304.pdf new file mode 100644 index 0000000..9e6b97f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p304.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32d7e8cbc55789e187b13dfa7397e81449f4e8676f5266e5f13db1250da67693 +size 1114589 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p305.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p305.pdf new file mode 100644 index 0000000..989c950 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p305.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7583fa312306bee4fbd8eb668590ae906117e3c2e80d67b59d6b04c7f3dfb50 +size 733330 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p306.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p306.pdf new file mode 100644 index 0000000..4e74fa0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p306.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7039e6542b6a1e24a112cc714863de8f9883ef3d1727cd5024499833f0cfff3c +size 282517 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p307.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p307.pdf new file mode 100644 index 0000000..db58094 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p307.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cad86d34d5bc63f4e694fdf6b53b09c0ddd40ba7a27860b46df868474a574440 +size 293639 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p308.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p308.pdf new file mode 100644 index 0000000..b88399a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p308.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d61c1bf1652471dd3d258de383df524763292dd1a2ab3404caf03cdc5e5110c7 +size 251370 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p309.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p309.pdf new file mode 100644 index 0000000..701034f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p309.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8aeb174e7d5699f93c6d60081505b490fe9a8f25478062eaea011df71556993 +size 342767 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p31.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p31.pdf new file mode 100644 index 0000000..96ef211 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p31.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89a371abd592845c879b251a96bf822287264b23d44629b3382e27ea7c842cbc +size 219687 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p310.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p310.pdf new file mode 100644 index 0000000..c51a5aa --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p310.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bd4201e2c5b677079ac233b28250982ff8e6493755f6dd86858a9ececc604fd +size 336424 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p311.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p311.pdf new file mode 100644 index 0000000..2b56009 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p311.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3d1e51550c9e81702333e2a8db66b790286de2e118559878bf18986a166e191 +size 323017 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p312.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p312.pdf new file mode 100644 index 0000000..49b91bf --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p312.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5afd4e3884efb34577515d29ee5b1324dd8a31334d2fed8fa073f92a9df1e9c +size 271141 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p313.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p313.pdf new file mode 100644 index 0000000..b91f945 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p313.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81d7bc960d73ea5f149a430a768183b0108e583a42f76f8f22d5458bfb31f084 +size 250165 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p314.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p314.pdf new file mode 100644 index 0000000..a86fe39 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p314.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49f919af49119036f4b6b489eccb33713540fd448b5acb333f6d2d847478028d +size 532561 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p315.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p315.pdf new file mode 100644 index 0000000..e745ecb --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p315.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef8157f04f9ad4111e38aa32ad8358e7af2f9c29cf396f537346010a0ec80023 +size 318513 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p316.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p316.pdf new file mode 100644 index 0000000..e7db07d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p316.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a1c181e603536b883ebca7000e600b6fdf435667823905ec4ea645dbe51d4f6 +size 253347 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p317.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p317.pdf new file mode 100644 index 0000000..dc3f5a0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p317.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b607f40050bd9f9a3ebd44de9c37bb8f9568fdf965016d87e78f8f2076dd1065 +size 273513 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p318.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p318.pdf new file mode 100644 index 0000000..b4120d3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p318.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97e9806ffaf86016801fb6e4b81c7c2cf0bca1200a0bf84c7987208cfe2de63d +size 237348 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p319.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p319.pdf new file mode 100644 index 0000000..b77f64d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p319.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afa505d38835b123a97daa70e263d1e9a385dc939e541de96bb476549b25199e +size 280450 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p32.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p32.pdf new file mode 100644 index 0000000..f370936 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p32.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0ca47eebfd09e12437196ae381b5b15e372caebb068f035b13a23c1c42b8fa7 +size 220734 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p320.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p320.pdf new file mode 100644 index 0000000..529ca86 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p320.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11d222f0a7a083f0fac899d97295997f4cc07a50c16f55c05cd32b494c92f526 +size 273802 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p321.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p321.pdf new file mode 100644 index 0000000..2c9bac2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p321.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:633144ee6ed2487d869655b53f71f2b224370c1cafbf206a22d03d94d06bf423 +size 249072 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p322.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p322.pdf new file mode 100644 index 0000000..4517046 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p322.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ec90ed6c612128b914a16723368ebc06c9c38da723548daeed0e8704986f7ec +size 248653 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p323.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p323.pdf new file mode 100644 index 0000000..6ad5408 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p323.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26a7283ef0c1e3d2add6ed6a2675ad41af5352897a9808ac4938252f0399c475 +size 235330 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p324.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p324.pdf new file mode 100644 index 0000000..3fe737a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p324.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a6ec9837302461fb9813d33938ed0bcb93ca0ef3fbc675b9c9032c99b241462 +size 264190 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p325.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p325.pdf new file mode 100644 index 0000000..83ef57f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p325.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:512a194eb1405d869e3d37bf58b303b8144db35d86a2bd9bc55367248c0e3fee +size 319692 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p326.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p326.pdf new file mode 100644 index 0000000..a720c98 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p326.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f23c7d7f21ee5b1c332f6ca51b5d6ae577ba3397048b7331a01e22468f07ec92 +size 236884 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p327.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p327.pdf new file mode 100644 index 0000000..ccc9dd4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p327.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62081b56ce119d376230a20a6e80b3c851b23d127462c4c400778e3d7148dd6e +size 235364 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p328.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p328.pdf new file mode 100644 index 0000000..de100ec --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p328.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11cf4f2eade6249e2411522f5759d1522ca2f84e623e254a6ce654ce07127c06 +size 272325 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p329.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p329.pdf new file mode 100644 index 0000000..189d776 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p329.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecc6b118bffb15d385ca61dc0feec984b1907b0930bc445c9e12c1ee7ba1e9e4 +size 272907 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p33.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p33.pdf new file mode 100644 index 0000000..b376de6 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p33.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27c397c566c65471a8d1b771dc25e1ed041dc7867f35923eebb7e04894e581bb +size 221848 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p330.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p330.pdf new file mode 100644 index 0000000..a25c5a9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p330.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7615a67ea0969f21088a0483a9ca165be07f66438ab9c2044cc47e172ad6fed4 +size 269415 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p331.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p331.pdf new file mode 100644 index 0000000..a725139 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p331.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd4bd0edd68cb5590a7d34165b4d38f1793d516e836becccfdd43dfe061eb2e2 +size 332834 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p332.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p332.pdf new file mode 100644 index 0000000..e54d1a8 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p332.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1415518fa48a359b6938fa434177f5ad5353bd32e6073dd03d25070130c42df +size 250735 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p333.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p333.pdf new file mode 100644 index 0000000..1ded297 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p333.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a83559d84d8c49d696f947daa2addf0b3cea44686c8f750c05fa703c99e7ae51 +size 251544 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p334.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p334.pdf new file mode 100644 index 0000000..8a4b58f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p334.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ad54e07eb09f3684c1b1f0ba0f5364e392ededce4dea58cce319d3c68012104 +size 264742 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p335.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p335.pdf new file mode 100644 index 0000000..0c4c8e4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p335.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da6747e31def08b6db230a1c099e0bd73fecc604ee7244a73b43424b710e02ec +size 254207 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p336.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p336.pdf new file mode 100644 index 0000000..07c03fc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p336.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88d6b6af073cd8a174c13138a9e279567d54fb8ad0e710af6a6fcaf340ad6434 +size 254059 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p337.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p337.pdf new file mode 100644 index 0000000..3c06f67 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p337.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b622ad05355a3f1db373a4549f825d8dd4eee7a941d916dc7422a73b1861b673 +size 253535 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p338.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p338.pdf new file mode 100644 index 0000000..02b4f79 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p338.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d83807fb962dc705068e4e3cb01f0b4e0bb7f040500c1a99ddd1f5ca8730ce8e +size 279751 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p339.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p339.pdf new file mode 100644 index 0000000..afd6ae6 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p339.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8348df9d265cd206770b98c5dfd3c36008acee836624e79859b924d90c9437c1 +size 265784 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p34.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p34.pdf new file mode 100644 index 0000000..3f69b9b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p34.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea3d3994bd3ae448213c824fbd8a752d194a7cb275e5d9a7a218b51de6c890c9 +size 220901 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p340.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p340.pdf new file mode 100644 index 0000000..d486163 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p340.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2cb442535329d67be6c10d3aeedd26477e3b64a85e45017c9570dcc73bcc48f +size 247583 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p341.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p341.pdf new file mode 100644 index 0000000..d44172b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p341.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e28a726a22d57f149b029d96f9cd5bbcd6f5abee4ef85480c310d2233959cb8b +size 260227 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p342.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p342.pdf new file mode 100644 index 0000000..8cf2e09 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p342.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cc862a277d00c5ef38bba6b07363adef8b9dc332a40eb6503df3f9fc21d9ac7 +size 250004 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p343.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p343.pdf new file mode 100644 index 0000000..d780188 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p343.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c45d88923fe29c4c067867f532695dbd0a26d2a166409e784a9806d6b8bf101f +size 257181 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p344.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p344.pdf new file mode 100644 index 0000000..57c78d0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p344.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a23c04b8f892824b3b061b2c388439e74a64900491cffadd2e44d3d2d24704f +size 240879 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p345.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p345.pdf new file mode 100644 index 0000000..e271eaa --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p345.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:054ac5b701dc316a65cb79a8e6874f52e564a5c21cd7fc8be97e68170d923e3a +size 1181020 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p346.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p346.pdf new file mode 100644 index 0000000..e385f0a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p346.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11c6739fa47e82d2e481fb0d6e88117fbfc16696891f26b7bac44cb66d464f66 +size 223414 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p347.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p347.pdf new file mode 100644 index 0000000..b71cca4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p347.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a17d269ff9a1874e757b3167b28dcc2527a2fe41c2ec08375ba069ca7059db1e +size 223096 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p348.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p348.pdf new file mode 100644 index 0000000..d4262be --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p348.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:716af9d56af4cbb6d7f08d9e275e34616f97037b9e5500d6327162ebb1a89e83 +size 223952 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p349.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p349.pdf new file mode 100644 index 0000000..0d60788 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p349.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:827559bc0559837c74a36f98da681593b65f081597c40a17a107d195f5a5f49f +size 222831 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p35.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p35.pdf new file mode 100644 index 0000000..0213adc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p35.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48719f253cdb133a1511a2cfe1434ce708b304b815c79969eebf987d8e99c804 +size 556915 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p350.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p350.pdf new file mode 100644 index 0000000..d0d3421 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p350.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30db4a8071e362f75916522b3f35e6422b17a8f07b30030ba4f7b981b5e55b24 +size 651097 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p351.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p351.pdf new file mode 100644 index 0000000..7215557 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p351.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92eb87a6be8271c8f256822ff0053ae543511fea9c98287ec2e6dc75b2bf54e5 +size 696005 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p352.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p352.pdf new file mode 100644 index 0000000..25729f3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p352.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e458c70fb7822f203204c9f48b3963264297304f6774edd31f969caecd44924a +size 152107 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p353.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p353.pdf new file mode 100644 index 0000000..31ac87e --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p353.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ed4098f23febabf44b2e8c52df33433c22d8fb71d6c508bff89a53f8c745cfd +size 148296 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p354.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p354.pdf new file mode 100644 index 0000000..ab1ed9d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p354.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfcd10bfc9663eada4c04ee9c05308534400e6df430a467263725f667f3285ec +size 384278 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p36.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p36.pdf new file mode 100644 index 0000000..9f3306a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p36.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e98e76fced6ed4705d606330cb01303fcef8ee7248106d3de545aa2c5f0131ff +size 219442 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p37.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p37.pdf new file mode 100644 index 0000000..b49a5c8 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p37.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bca7f8293640bc16f8266a67a341a43734455d97b478fe30a7fe35c8dfe576e +size 798971 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p38.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p38.pdf new file mode 100644 index 0000000..3db3b44 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p38.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a776cfb163c179ac278737bd5e2731b1307fc24717143d06e87119dfdd786f7e +size 228769 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p39.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p39.pdf new file mode 100644 index 0000000..46276f0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p39.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bba84e1e83aa690858c3e3dd2b2927f7f5b89f3727113dc85b8a9dcbef133dc7 +size 1719192 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p4.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p4.pdf new file mode 100644 index 0000000..069678f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p4.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24cdb4f312d56e7e6a883b23a2521a12660a51743fbd393b61e548a251d593ad +size 553365 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p40.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p40.pdf new file mode 100644 index 0000000..c8baf46 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p40.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2189c828d4dbe483d0f4467496f8cd75fdb9db5e0fca8ab44e0349c6f12ba877 +size 228654 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p41.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p41.pdf new file mode 100644 index 0000000..9282295 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p41.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edb30eb256aa42662a18ad033cd9a5b7c414f828b2ed8cb0467bb5515ca94e5a +size 227879 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p42.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p42.pdf new file mode 100644 index 0000000..eae953b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p42.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73d37ae45f60c561f2e69958b277150ca12e2679b221b793abab39887b5f4427 +size 228210 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p43.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p43.pdf new file mode 100644 index 0000000..b75ced7 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p43.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47ffd2d6071c5359aab4ed97da2003cff4cac4e6ae0bc751108c94cff4bc7039 +size 450123 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p44.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p44.pdf new file mode 100644 index 0000000..72c18fc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p44.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee7ea0bf2403a0495b93d4a90f23b81679ca7dc1b10edf42d8b9b71b80b66e9c +size 274348 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p45.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p45.pdf new file mode 100644 index 0000000..2d44715 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p45.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ffd79a9293a12087fd6c9ecd51c75bf98084e63a34c275ad6a779b7ddb03fb3 +size 267935 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p46.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p46.pdf new file mode 100644 index 0000000..8b2862a --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p46.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a60a399829d06709172d309739a767aef7244c037e8f3f77f037ea64aa7bbb6 +size 453325 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p47.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p47.pdf new file mode 100644 index 0000000..692e6e3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p47.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b1028625878e99c8a1ad258215d800c42c47e12015d91587d193b9647ea2259 +size 221523 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p48.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p48.pdf new file mode 100644 index 0000000..7be4fda --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p48.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c02a7cf5018c7cc2159300bcac994ddaca2f3dfac518dc4db4eae33a957e10af +size 1131645 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p49.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p49.pdf new file mode 100644 index 0000000..013ba48 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p49.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e80f63c2aebcb71dea64d6769020a7462d7a75bf4fabc0872f1cd56fd15c4cb4 +size 278589 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p5.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p5.pdf new file mode 100644 index 0000000..4f23cc0 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p5.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b5a1f20b4cbec2af85105043b6c2dddae98ab0c1d1bc7aa72710af950e9c4d5 +size 522489 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p50.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p50.pdf new file mode 100644 index 0000000..1816bc5 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p50.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abc1c972eadfa882defbed149c578d4ab7d7227c8289e9260e921873cc0a732b +size 457254 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p51.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p51.pdf new file mode 100644 index 0000000..64ed730 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p51.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c3f730959557ae6c6f6da350f637761d03ebe251c66005e2ffd38c02f921b35 +size 242863 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p52.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p52.pdf new file mode 100644 index 0000000..e7c7df8 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p52.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9450c745d9a29dfa251fd2d23a06cf5dbc5ee206d3fb83bdd5a3b8438e14a7c0 +size 228291 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p53.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p53.pdf new file mode 100644 index 0000000..ea0d6f3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p53.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44cc886d31d3989e3d8b925a9c920fb89dd9def22dcdcd1e6785e88a901adce6 +size 619121 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p54.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p54.pdf new file mode 100644 index 0000000..1cb2bd1 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p54.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:535e16b162fc24b85972ff3b85a6ffa4fcf90c6612e7b7e3f2854319c3c4d3a1 +size 294872 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p55.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p55.pdf new file mode 100644 index 0000000..9e944f2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p55.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98387a69b33cf8b38037cdc6ed9b948f0b4ae0d0e5b052b8f792ddc651aee03b +size 1641039 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p56.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p56.pdf new file mode 100644 index 0000000..f3412b9 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p56.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:675a9db50bc2840cdf819aff05c2ac305de93a9787fce31abb78ed04d956075d +size 255922 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p57.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p57.pdf new file mode 100644 index 0000000..5663a1d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p57.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:967fae453ca7910546478fb1c663e1acd4726dcdd18222f985e6b6413e74c390 +size 306111 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p58.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p58.pdf new file mode 100644 index 0000000..ec72f7d --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p58.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1476515c47d04181d8cfa391d80a4f84bc3c74dc8fc933d26ba5fd71a11c18a +size 688811 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p59.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p59.pdf new file mode 100644 index 0000000..ddfff42 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p59.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:170147296af0e8274d89b3080926f7e235f21352a429b122b1e48502fa779a79 +size 352039 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p6.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p6.pdf new file mode 100644 index 0000000..9318be4 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p6.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c80c3cd2148dd58782801609553a4bc794498980f556aebf6531f45c9539507 +size 284933 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p60.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p60.pdf new file mode 100644 index 0000000..298d720 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p60.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f495546c57385f7052b5bcab14025c6d9d721524c6eac6f3f49dea574ba583b2 +size 297156 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p61.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p61.pdf new file mode 100644 index 0000000..30a5c84 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p61.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:480a8fe606abb554ad563821cc48ad6b3f0d8ed1e866202bf792e6e58cdb91da +size 252669 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p62.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p62.pdf new file mode 100644 index 0000000..9e8b012 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p62.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd6649c8cfce1d60b03bd4fc75da7c29464aca1e7f322583ad3d5abb131f31f0 +size 249525 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p63.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p63.pdf new file mode 100644 index 0000000..3fdc2e7 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p63.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28aa89ddc4559ba2bf692e02e0f84c0bd32a65ce8aa753d59d8e7fbb375f3987 +size 1269115 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p64.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p64.pdf new file mode 100644 index 0000000..3986958 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p64.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad9f2ce780cfe98d7acefda5bf27a57049252637bd689d02d8c0530790ed8067 +size 538520 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p65.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p65.pdf new file mode 100644 index 0000000..62a8fbd --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p65.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ea34f4fc113054cc71ec8652e2e1205ee30b81345a2c103c04a44d3bbbccb14 +size 254451 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p66.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p66.pdf new file mode 100644 index 0000000..9edbc4e --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p66.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c224e62652abca0fa1390102fac2a0ee4d62737f1d272f02a815d45ad03a2e59 +size 250728 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p67.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p67.pdf new file mode 100644 index 0000000..8605573 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p67.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c981458c007fcf8606778e1b1629b8c53a7884df4a2c047f67d9c14ce93928a +size 547273 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p68.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p68.pdf new file mode 100644 index 0000000..566fbb8 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p68.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fa9cb4fffc81ef74cbb2db1c0a3c11e189548bd1ea0e79db30c6b7192fbe28c +size 606983 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p69.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p69.pdf new file mode 100644 index 0000000..9ad4891 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p69.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5863a1f96b99cd0f85d12a2c57752487e3f865cc21bfe73ccc4be4bd7707db4 +size 389560 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p7.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p7.pdf new file mode 100644 index 0000000..937f681 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p7.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fb23acb81182507e93d833c567e45d9e82efd5eaa0bcde4bfd0d6240333803e +size 1638792 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p70.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p70.pdf new file mode 100644 index 0000000..f684a96 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p70.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:308a0910925d7f782184a376df1af1d433451148c460795c90f9b8aab3ccfa79 +size 470434 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p71.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p71.pdf new file mode 100644 index 0000000..3a6279e --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p71.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51ecdaf73cad70c3075bed00570788a72367b1d34afa39573f1a35522e1a3368 +size 261846 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p72.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p72.pdf new file mode 100644 index 0000000..1d3ead3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p72.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c957a84478133020261e60da51c0590f6f961f4b398a1a5d6807207a74966e9d +size 1012526 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p73.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p73.pdf new file mode 100644 index 0000000..fa7ea86 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p73.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32a1c73615bf40ba83fadeb986eb9b906429d27bfb37ea4ff99addc7cffcb6d4 +size 1652472 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p74.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p74.pdf new file mode 100644 index 0000000..257174b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p74.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:385c4415cebd3b475cb80b5c567d4d6ddc53a1477410c4ee3a50e0cd00b946d0 +size 260770 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p75.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p75.pdf new file mode 100644 index 0000000..ef907c2 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p75.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e59af74319a9e64f7a9a22d475f8f73526d2ab16a2b7414c007b74fa3d9c1687 +size 437872 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p76.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p76.pdf new file mode 100644 index 0000000..44e40ed --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p76.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54354b6892f4d9525e9f7657210cfa86819e9dd04323a8e40c4ad466a47d24f0 +size 257342 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p77.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p77.pdf new file mode 100644 index 0000000..58097db --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p77.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d21b73bb2d3a716b1182f51a1e57256810799a9b9fe61121e9589655353ca17c +size 642074 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p78.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p78.pdf new file mode 100644 index 0000000..78a9de3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p78.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9ef74083022608779052c800493453e1e0d40c9e031b278042232419e816054 +size 301968 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p79.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p79.pdf new file mode 100644 index 0000000..8f73b85 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p79.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efceca74710d91a08964ed5fbaa30854618cf048ff0e2ad7b0ff47bb83205bee +size 322782 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p8.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p8.pdf new file mode 100644 index 0000000..ad6b286 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p8.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e8becb9330d4ac01c63f2d87e295b9750563e315224d92d788a633d896f5615 +size 563590 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p80.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p80.pdf new file mode 100644 index 0000000..44ca794 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p80.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:284ffcb3f9ad2386066c43e078b088b12570bba3178ec9cde4f0926d8a070401 +size 253892 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p81.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p81.pdf new file mode 100644 index 0000000..ad19bc7 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p81.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8288c8c024014654c7a841b62e6ff049e3d46b48e5a3d7b868aa712f13c47643 +size 252698 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p82.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p82.pdf new file mode 100644 index 0000000..0a5abe8 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p82.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21e7f434f3ecafa5b590ed2e51b930af891b354adb5992e6bb80721a013c7341 +size 251901 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p83.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p83.pdf new file mode 100644 index 0000000..ac0b518 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p83.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:504896e75c31200f30a2adc1bd258501e7fdaa562047c61b765504b3dfbc45b1 +size 1604436 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p84.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p84.pdf new file mode 100644 index 0000000..edd2bbc --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p84.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7cc957c67b995c9c1efe5e3b9996e6f2f1b6b6f14c9000358f34bc07718169c5 +size 449746 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p85.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p85.pdf new file mode 100644 index 0000000..9cfa4fd --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p85.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24f673d815294b03f9924a431522fc57a8dc6098bf1d421f4ff1361cf25edbf7 +size 253347 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p86.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p86.pdf new file mode 100644 index 0000000..9cbcb9e --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p86.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:108a67ce1f31136e4ed076c71b924f42877237c5f3c93f33f94254df9afdde1b +size 255378 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p87.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p87.pdf new file mode 100644 index 0000000..d3dc819 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p87.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08114085cb85ab95ee5b804ae89aaa09672bb09fb9bcc57e339f48b3a6704e59 +size 420190 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p88.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p88.pdf new file mode 100644 index 0000000..b84ea7b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p88.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d000409021932aa49c37ddd52dc6f25960772d3ba885fdfdd569069a9c8daf67 +size 577101 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p89.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p89.pdf new file mode 100644 index 0000000..4893ca6 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p89.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f214ff07051ba134a4b17d3edcb03cd65f10f0ac4809a711d4c67ab60c016e8 +size 465997 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p9.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p9.pdf new file mode 100644 index 0000000..1c6a595 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p9.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:749508564e300ebbee0eaa8b3ffc7e07459887ee4e5f70a36acce5b403c553fb +size 274521 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p90.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p90.pdf new file mode 100644 index 0000000..5a33a83 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p90.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:334924bece55bd7ca2be43e6a712e7b29396d7ddcf8b28ab0310613a390a730c +size 645948 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p91.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p91.pdf new file mode 100644 index 0000000..c5b09ed --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p91.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c79fa9af928948e35d117a24d8e56eda79c6ef6ea63b4c60eb7ae75fefe898e3 +size 4144910 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p92.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p92.pdf new file mode 100644 index 0000000..3ae2778 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p92.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5ee10f0d520b65c5c5c39371466394d4932513cfd511a37fc95e1bfb2efc14f +size 4104152 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p93.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p93.pdf new file mode 100644 index 0000000..18fec02 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p93.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe5abe71c858544d8a8da55df9ad9fd99bb936c65b1ec6ae015f3bc76eaf3fbd +size 3449839 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p94.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p94.pdf new file mode 100644 index 0000000..537c85b --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p94.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5f86eb2749ebebe4c965b0bbf5043117856644c75f08a12be38a1385e8355c +size 3497545 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p95.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p95.pdf new file mode 100644 index 0000000..04305c3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p95.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f275d09ef09409bdfb6522af6bbd80b027ae34258332d8aef90b7a0d8c13e57 +size 3414825 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p96.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p96.pdf new file mode 100644 index 0000000..b6a9976 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p96.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ddb1d6a12fba79860d5ea949241522196804e50584a140e90b2f77d8cb5ec2c +size 3681129 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p97.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p97.pdf new file mode 100644 index 0000000..4247d6f --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p97.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf3b81e8c302fc7b1c461a10803cbcb23b132feef7d59fe24f0aa5f48982a5d8 +size 3964319 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p98.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p98.pdf new file mode 100644 index 0000000..d88f60c --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p98.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdd1e4ad191eb8693416318fe7ee3044f1ac81faac0d1da18047f2504c45f4cf +size 3784510 diff --git a/assets/shadowrun/Shadowrun-4E-Corebook-p99.pdf b/assets/shadowrun/Shadowrun-4E-Corebook-p99.pdf new file mode 100644 index 0000000..3a1c5f3 --- /dev/null +++ b/assets/shadowrun/Shadowrun-4E-Corebook-p99.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2ce98cabb809cb109d5ad06b285e0a9d50c497c5421caa4f6e477abf0422731 +size 3376848 diff --git a/frontend/src/lib/ShadowrunCharacter.svelte b/frontend/src/lib/ShadowrunCharacter.svelte deleted file mode 100644 index 84cdd81..0000000 --- a/frontend/src/lib/ShadowrunCharacter.svelte +++ /dev/null @@ -1,109 +0,0 @@ - - - -

Name: {currentCharacter.name}

- -

Character Info

-{#each Object.entries(characterData["Info"]) as [key, value], i} -
- - -
-{/each} - -

Attributes

-{#each Object.entries(characterData["Attributes"]) as [key, value], i} -
- - -
-{/each} - - diff --git a/frontend/src/lib/shadorwun/character.svelte b/frontend/src/lib/shadorwun/character.svelte new file mode 100644 index 0000000..8649857 --- /dev/null +++ b/frontend/src/lib/shadorwun/character.svelte @@ -0,0 +1,269 @@ + + + +

Name: {currentCharacter.name}

+ +

Character Info

+{#each Object.entries(characterData.Info) as [key, value], i} +
+ + +
+{/each} + +

Attributes

+{#each Object.entries(characterData.Attributes) as [key, value], i} +
+ + +
+{/each} + +
+

Skills

+
+ Name + Rating + Attribute + Dice Pool + +
+{#each characterData.Skills as skill, i} +
+ + + + {skill.Rating + characterData.Attributes[skill.Attribute]} + + + +
+{/each} + + +

Connections

+
+ Name + Loyalty + Connection +
+{#each characterData.Connections as connection, i} +
+ + + + +
+{/each} + + +

Ranged Weapons

+
+ Weapon + Damage + Type + AP + Mode + RC + Ammo + Availabiliy +
+{#each characterData.RangedWeapons as weapon, i} +
+ + + + + + + + + +
+{/each} + + +

Melee Weapons

+
+ Weapon + Reach + Damage + Type + Strength Multiplier + Calculated Damage + AP + +
+{#each characterData.MeleeWeapons as weapon, i} +
+ + + + + + {(weapon["Strength Multiplier"] * characterData.Attributes.Strength) + weapon.Damage } + + +
+{/each} + + + +

Cyberware

+
+ Cyberware + Rating + Essence + Notes + +
+{#each characterData.Cyberware as Cyberware, i} +
+ + + + + +
+{/each} + + + +

Bioware

+
+ Bioware + Rating + Essence + Notes + +
+{#each characterData.Bioware as Bioware, i} +
+ + + + + +
+{/each} + + +
+ + + + \ No newline at end of file diff --git a/frontend/src/lib/shadorwun/defaults.svelte b/frontend/src/lib/shadorwun/defaults.svelte new file mode 100644 index 0000000..5f9aae5 --- /dev/null +++ b/frontend/src/lib/shadorwun/defaults.svelte @@ -0,0 +1,81 @@ + diff --git a/frontend/src/lib/shadorwun/types.svelte b/frontend/src/lib/shadorwun/types.svelte new file mode 100644 index 0000000..44496c7 --- /dev/null +++ b/frontend/src/lib/shadorwun/types.svelte @@ -0,0 +1,42 @@ + diff --git a/frontend/src/routes/shadowrun/+page.svelte b/frontend/src/routes/shadowrun/+page.svelte index db6e19a..99451fd 100644 --- a/frontend/src/routes/shadowrun/+page.svelte +++ b/frontend/src/routes/shadowrun/+page.svelte @@ -1,7 +1,7 @@ -

Name: {currentCharacter.name}

Character Info

+
{#each Object.entries(characterData.Info) as [key, value], i}
@@ -71,11 +77,14 @@ id={"field-" + i} type={characterInfoTypes[key]} bind:value={characterData.Info[key]} - min={characterInfoTypes[key] === "number" ? 0 : null} /> + min={characterInfoTypes[key] === "number" ? 0 : null} + max={characterInfoTypes[key] === "number" ? 100 : null} />
{/each} +

Attributes

+
{#each Object.entries(characterData.Attributes) as [key, value], i}
@@ -83,11 +92,12 @@ id={"field-" + i} type="number" bind:value={characterData["Attributes"][key]} - min=0 /> + min=0 + max=100 />
{/each} +
-

Skills

@@ -122,7 +132,6 @@
-

Contacts

@@ -218,93 +227,203 @@
-

Cyberware

-
- Cyberware - Rating - Essence - Notes - -
-{#each characterData.Cyberware as Cyberware, i} -
- - - - - -
-{/each} - +

Armor

+ + + + + + + + + + + + + {#each characterData.Armor as armor, i} + + + + + + + + + {/each} + +
ArmorBallisticImpactPage
+ +

Cyberware

+ + + + + + + + + + + + + + {#each characterData.Cyberware as Cyberware, i} + + + + + + + + + + {/each} + +
CyberwareRatingEssenceNotesPage
+

Bioware

-
- Bioware - Rating - Essence - Notes - -
-{#each characterData.Bioware as Bioware, i} -
- - - - - -
-{/each} - + + + + + + + + + + + + + + {#each characterData.Bioware as Bioware, i} + + + + + + + + + + {/each} + +
BiowareRatingEssenceNotesPage
+ +

Qualities

+ +

Positive

+ + + + + + + + + + + {#each characterData.PositiveQualities as qualitiy, i} + + + + + + + {/each} + +
QualityPage
+ + +

Negative

+ + + + + + + + + + + {#each characterData.NegativeQualities as qualitiy, i} + + + + + + + {/each} + +
QualityPage
+ + +

Pysical Condition

+ + + {#each characterData.PysicalCondition as row, rowIndex} + + {#each row as cell, colIndex} + + {/each} + + {/each} + +
+ +
+ +

Stun Condition

+ + + {#each characterData.StunCondition as row, rowIndex} + + {#each row as cell, colIndex} + + {/each} + + {/each} + +
+ +
+ +

Notes

+
+
\ No newline at end of file diff --git a/frontend/src/lib/shadorwun/defaults.svelte b/frontend/src/lib/shadorwun/defaults.svelte index 5f9aae5..38c98c1 100644 --- a/frontend/src/lib/shadorwun/defaults.svelte +++ b/frontend/src/lib/shadorwun/defaults.svelte @@ -65,6 +65,22 @@ const Implant = { Notes: "", } +const Qualitiy = { + Qualitiy : "" +} + +const PysicalCondition = Array.from({ length: 6 }, () => + Array.from({ length: 3 }, () => false)) + +const StunCondition = Array.from({ length: 4 }, () => + Array.from({ length: 3 }, () => false)) + +const Armor = { + Armor: "", + Ballistic: 0, + Impact: 0 +} + export const Defaults = { Info: Info, Attributes: Attributes, @@ -74,6 +90,11 @@ export const Defaults = { MeleeWeapons : MeleeWeapon, Cyberware : Implant, Bioware : Implant, + PositiveQualities : Qualitiy, + NegativeQualities : Qualitiy, + PysicalCondition : PysicalCondition, + StunCondition : StunCondition, + Armor : Armor, } diff --git a/src/shadowrun/ShadowrunDb.hpp b/src/shadowrun/ShadowrunDb.hpp index 7f3406c..d99576e 100644 --- a/src/shadowrun/ShadowrunDb.hpp +++ b/src/shadowrun/ShadowrunDb.hpp @@ -21,6 +21,8 @@ namespace shadowrun { MeleeWeapons = 6, Cyberware = 7, Bioware = 8, + PositiveQualities = 9, + NegativeQualities = 10, }; struct ShadowrunCharacter { From 1ee16327e945269f9f650ff49599cef8d60c209d Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Wed, 10 Dec 2025 22:54:41 +0100 Subject: [PATCH 06/19] better gui --- frontend/src/lib/common/autogrow.js | 18 ++++ frontend/src/lib/shadorwun/character.svelte | 104 ++++++++++++++------ 2 files changed, 92 insertions(+), 30 deletions(-) create mode 100644 frontend/src/lib/common/autogrow.js diff --git a/frontend/src/lib/common/autogrow.js b/frontend/src/lib/common/autogrow.js new file mode 100644 index 0000000..0dff45f --- /dev/null +++ b/frontend/src/lib/common/autogrow.js @@ -0,0 +1,18 @@ +import { tick } from "svelte"; + +export function autoGrow(node) { + function resize() { + node.style.height = "auto"; + node.style.height = node.scrollHeight + "px"; + } + + // wait until DOM updates to apply initial value + tick().then(resize); + node.addEventListener("input", resize); + + return { + destroy() { + node.removeEventListener("input", resize); + } + }; +} \ No newline at end of file diff --git a/frontend/src/lib/shadorwun/character.svelte b/frontend/src/lib/shadorwun/character.svelte index 0a07871..3f3ed42 100644 --- a/frontend/src/lib/shadorwun/character.svelte +++ b/frontend/src/lib/shadorwun/character.svelte @@ -3,7 +3,8 @@ import { API_BASE } from '$lib/config'; import { Defaults } from './defaults.svelte'; import type { Skill, Connection} from './types.svelte'; - + import { autoGrow } from '$lib/common/autogrow'; + export let currentCharacter: any; export let currentCharacterData: any; @@ -85,17 +86,46 @@

Attributes

-{#each Object.entries(characterData.Attributes) as [key, value], i} -
- - -
-{/each} + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + +

Skills

@@ -105,7 +135,7 @@ Name Rating Attribute - Dice Pool + Dice Page @@ -115,7 +145,7 @@ {#each characterData.Skills as skill, i} - + - + {/each} @@ -145,10 +175,10 @@ {#each characterData.Connections as connection, i} - + - + {/each} @@ -175,17 +205,17 @@ {#each characterData.RangedWeapons as weapon, i} - + - + - + - + - + {/each} @@ -200,8 +230,8 @@ Reach Damage Type - Strength Multiplier - Calculated Damage + Multiplier + Cal.Dmg AP Page @@ -220,7 +250,7 @@ - + {/each} @@ -247,7 +277,7 @@ - + {/each} @@ -276,7 +306,7 @@ - + {/each} @@ -305,7 +335,7 @@ - + {/each} @@ -330,7 +360,7 @@ - + {/each} @@ -353,7 +383,7 @@ - + {/each} @@ -416,6 +446,20 @@ gap: 0.5em; /* space between each input-row */ } + .red-button { + border: none; /* optional: remove default border */ + cursor: pointer; /* optional: pointer cursor */ + } + + .input-height { + border: none; /* optional: remove default border */ + font: inherit; /* copies all font-related properties from the parent/input styling */ + height: auto; /* allows autoGrow action to work */ + min-height: 0; + /* resize: none; */ + overflow: hidden; /* Allow autoGrow to work clean */ + width: 10em; /* 15 × current font size */ + } .input-row { display: flex; align-items: center; From bad1260e0616939dc497128e505082500215406a Mon Sep 17 00:00:00 2001 From: Lukas Forsberg Date: Sun, 14 Dec 2025 21:22:28 +0100 Subject: [PATCH 07/19] moved common sources to submoudle --- .gitmodules | 3 + CMakeLists.txt | 23 +- include/libs/json.hpp | 25580 ---------------------------------- include/libs/magic_enum.hpp | 1564 --- include/libs/sqlite_orm.h | 24841 --------------------------------- modules/cpp-libraries | 1 + 6 files changed, 21 insertions(+), 51991 deletions(-) create mode 100644 .gitmodules delete mode 100644 include/libs/json.hpp delete mode 100644 include/libs/magic_enum.hpp delete mode 100644 include/libs/sqlite_orm.h create mode 160000 modules/cpp-libraries diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..fd8e2ba --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "modules/cpp-libraries"] + path = modules/cpp-libraries + url = ssh://git@192.168.1.101:2222/lukas/cpp-libraries.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 221f926..20916a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,14 +33,10 @@ foreach(file IN LISTS TEMPLATE_FILES) configure_file("${file}" "${CMAKE_BINARY_DIR}/${rel_path}" COPYONLY) endforeach() -# warnings to ignore -add_compile_options(-Wno-deprecated-declarations) -add_compile_options(-Wno-deprecated-literal-operator) - # Use Crow from system include (installed via yay -S crow + asio) include_directories( /usr/include - include/libs + modules/cpp-libraries/src/ src src/htmx src/shadowrun @@ -49,6 +45,13 @@ include_directories( ) add_executable(${TARGET_NAME} + # sqlite3 + modules/cpp-libraries/src/sqlite3.c + modules/cpp-libraries/src/sqlite3.h + modules/cpp-libraries/src/json.hpp + modules/cpp-libraries/src/magic_enum.hpp + modules/cpp-libraries/src/sqlite_orm.h + src/main.cpp src/utils.hpp src/utils.cpp @@ -88,9 +91,17 @@ add_executable(${TARGET_NAME} ) +# warnings to ignore +target_compile_options(${TARGET_NAME} PRIVATE + $<$: + -Wno-deprecated-literal-operator + -Wno-deprecated-declarations + > +) + target_compile_definitions(${TARGET_NAME} PRIVATE APPLICATION_NAME="${TARGET_NAME}") -target_link_libraries(${TARGET_NAME} pthread sqlite3 sodium) +target_link_libraries(${TARGET_NAME} pthread sodium) # Optional: Print build type at configuration time message(STATUS "Configuring build type: ${CMAKE_BUILD_TYPE}") \ No newline at end of file diff --git a/include/libs/json.hpp b/include/libs/json.hpp deleted file mode 100644 index 31590ff..0000000 --- a/include/libs/json.hpp +++ /dev/null @@ -1,25580 +0,0 @@ -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - -/****************************************************************************\ - * Note on documentation: The source files contain links to the online * - * documentation of the public API at https://json.nlohmann.me. This URL * - * contains the most recent documentation and should also be applicable to * - * previous versions; documentation for deprecated functions is not * - * removed, but marked deprecated. See "Generate documentation" section in * - * file docs/README.md. * -\****************************************************************************/ - -#ifndef INCLUDE_NLOHMANN_JSON_HPP_ -#define INCLUDE_NLOHMANN_JSON_HPP_ - -#include // all_of, find, for_each -#include // nullptr_t, ptrdiff_t, size_t -#include // hash, less -#include // initializer_list -#ifndef JSON_NO_IO - #include // istream, ostream -#endif // JSON_NO_IO -#include // random_access_iterator_tag -#include // unique_ptr -#include // string, stoi, to_string -#include // declval, forward, move, pair, swap -#include // vector - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// This file contains all macro definitions affecting or depending on the ABI - -#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK - #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) - #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 - #warning "Already included a different version of the library!" - #endif - #endif -#endif - -#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) -#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) -#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) - -#ifndef JSON_DIAGNOSTICS - #define JSON_DIAGNOSTICS 0 -#endif - -#ifndef JSON_DIAGNOSTIC_POSITIONS - #define JSON_DIAGNOSTIC_POSITIONS 0 -#endif - -#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 -#endif - -#if JSON_DIAGNOSTICS - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag -#else - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS -#endif - -#if JSON_DIAGNOSTIC_POSITIONS - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp -#else - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS -#endif - -#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp -#else - #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON -#endif - -#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION - #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 -#endif - -// Construct the namespace ABI tags component -#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c -#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ - NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) - -#define NLOHMANN_JSON_ABI_TAGS \ - NLOHMANN_JSON_ABI_TAGS_CONCAT( \ - NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ - NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ - NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) - -// Construct the namespace version component -#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ - _v ## major ## _ ## minor ## _ ## patch -#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ - NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) - -#if NLOHMANN_JSON_NAMESPACE_NO_VERSION -#define NLOHMANN_JSON_NAMESPACE_VERSION -#else -#define NLOHMANN_JSON_NAMESPACE_VERSION \ - NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ - NLOHMANN_JSON_VERSION_MINOR, \ - NLOHMANN_JSON_VERSION_PATCH) -#endif - -// Combine namespace components -#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b -#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ - NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) - -#ifndef NLOHMANN_JSON_NAMESPACE -#define NLOHMANN_JSON_NAMESPACE \ - nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ - NLOHMANN_JSON_ABI_TAGS, \ - NLOHMANN_JSON_NAMESPACE_VERSION) -#endif - -#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN -#define NLOHMANN_JSON_NAMESPACE_BEGIN \ - namespace nlohmann \ - { \ - inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ - NLOHMANN_JSON_ABI_TAGS, \ - NLOHMANN_JSON_NAMESPACE_VERSION) \ - { -#endif - -#ifndef NLOHMANN_JSON_NAMESPACE_END -#define NLOHMANN_JSON_NAMESPACE_END \ - } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ - } // namespace nlohmann -#endif - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // transform -#include // array -#include // forward_list -#include // inserter, front_inserter, end -#include // map -#include // string -#include // tuple, make_tuple -#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible -#include // unordered_map -#include // pair, declval -#include // valarray - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // nullptr_t -#include // exception -#if JSON_DIAGNOSTICS - #include // accumulate -#endif -#include // runtime_error -#include // to_string -#include // vector - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // array -#include // size_t -#include // uint8_t -#include // string - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // declval, pair -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -template struct make_void -{ - using type = void; -}; -template using void_t = typename make_void::type; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -// https://en.cppreference.com/w/cpp/experimental/is_detected -struct nonesuch -{ - nonesuch() = delete; - ~nonesuch() = delete; - nonesuch(nonesuch const&) = delete; - nonesuch(nonesuch const&&) = delete; - void operator=(nonesuch const&) = delete; - void operator=(nonesuch&&) = delete; -}; - -template class Op, - class... Args> -struct detector -{ - using value_t = std::false_type; - using type = Default; -}; - -template class Op, class... Args> -struct detector>, Op, Args...> -{ - using value_t = std::true_type; - using type = Op; -}; - -template class Op, class... Args> -using is_detected = typename detector::value_t; - -template class Op, class... Args> -struct is_detected_lazy : is_detected { }; - -template class Op, class... Args> -using detected_t = typename detector::type; - -template class Op, class... Args> -using detected_or = detector; - -template class Op, class... Args> -using detected_or_t = typename detected_or::type; - -template class Op, class... Args> -using is_detected_exact = std::is_same>; - -template class Op, class... Args> -using is_detected_convertible = - std::is_convertible, To>; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include - - -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-FileCopyrightText: 2016 - 2021 Evan Nemerson -// SPDX-License-Identifier: MIT - -/* Hedley - https://nemequ.github.io/hedley - * Created by Evan Nemerson - */ - -#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) -#if defined(JSON_HEDLEY_VERSION) - #undef JSON_HEDLEY_VERSION -#endif -#define JSON_HEDLEY_VERSION 15 - -#if defined(JSON_HEDLEY_STRINGIFY_EX) - #undef JSON_HEDLEY_STRINGIFY_EX -#endif -#define JSON_HEDLEY_STRINGIFY_EX(x) #x - -#if defined(JSON_HEDLEY_STRINGIFY) - #undef JSON_HEDLEY_STRINGIFY -#endif -#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) - -#if defined(JSON_HEDLEY_CONCAT_EX) - #undef JSON_HEDLEY_CONCAT_EX -#endif -#define JSON_HEDLEY_CONCAT_EX(a,b) a##b - -#if defined(JSON_HEDLEY_CONCAT) - #undef JSON_HEDLEY_CONCAT -#endif -#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) - -#if defined(JSON_HEDLEY_CONCAT3_EX) - #undef JSON_HEDLEY_CONCAT3_EX -#endif -#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c - -#if defined(JSON_HEDLEY_CONCAT3) - #undef JSON_HEDLEY_CONCAT3 -#endif -#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) - -#if defined(JSON_HEDLEY_VERSION_ENCODE) - #undef JSON_HEDLEY_VERSION_ENCODE -#endif -#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) - -#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) - #undef JSON_HEDLEY_VERSION_DECODE_MAJOR -#endif -#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) - -#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) - #undef JSON_HEDLEY_VERSION_DECODE_MINOR -#endif -#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) - -#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) - #undef JSON_HEDLEY_VERSION_DECODE_REVISION -#endif -#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) - -#if defined(JSON_HEDLEY_GNUC_VERSION) - #undef JSON_HEDLEY_GNUC_VERSION -#endif -#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) - #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) -#elif defined(__GNUC__) - #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) -#endif - -#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) - #undef JSON_HEDLEY_GNUC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_GNUC_VERSION) - #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_MSVC_VERSION) - #undef JSON_HEDLEY_MSVC_VERSION -#endif -#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) -#elif defined(_MSC_FULL_VER) && !defined(__ICL) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) -#elif defined(_MSC_VER) && !defined(__ICL) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) -#endif - -#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) - #undef JSON_HEDLEY_MSVC_VERSION_CHECK -#endif -#if !defined(JSON_HEDLEY_MSVC_VERSION) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) -#elif defined(_MSC_VER) && (_MSC_VER >= 1200) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) -#else - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) -#endif - -#if defined(JSON_HEDLEY_INTEL_VERSION) - #undef JSON_HEDLEY_INTEL_VERSION -#endif -#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) - #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) -#elif defined(__INTEL_COMPILER) && !defined(__ICL) - #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) -#endif - -#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) - #undef JSON_HEDLEY_INTEL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_INTEL_VERSION) - #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_INTEL_CL_VERSION) - #undef JSON_HEDLEY_INTEL_CL_VERSION -#endif -#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) - #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) -#endif - -#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) - #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_INTEL_CL_VERSION) - #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_PGI_VERSION) - #undef JSON_HEDLEY_PGI_VERSION -#endif -#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) - #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) -#endif - -#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) - #undef JSON_HEDLEY_PGI_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_PGI_VERSION) - #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_SUNPRO_VERSION) - #undef JSON_HEDLEY_SUNPRO_VERSION -#endif -#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) -#elif defined(__SUNPRO_C) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) -#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) -#elif defined(__SUNPRO_CC) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) -#endif - -#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) - #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_SUNPRO_VERSION) - #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION -#endif -#if defined(__EMSCRIPTEN__) - #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) -#endif - -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) - #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_ARM_VERSION) - #undef JSON_HEDLEY_ARM_VERSION -#endif -#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) - #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) -#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) - #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) -#endif - -#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) - #undef JSON_HEDLEY_ARM_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_ARM_VERSION) - #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_IBM_VERSION) - #undef JSON_HEDLEY_IBM_VERSION -#endif -#if defined(__ibmxl__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) -#elif defined(__xlC__) && defined(__xlC_ver__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) -#elif defined(__xlC__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) -#endif - -#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) - #undef JSON_HEDLEY_IBM_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_IBM_VERSION) - #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_VERSION) - #undef JSON_HEDLEY_TI_VERSION -#endif -#if \ - defined(__TI_COMPILER_VERSION__) && \ - ( \ - defined(__TMS470__) || defined(__TI_ARM__) || \ - defined(__MSP430__) || \ - defined(__TMS320C2000__) \ - ) -#if (__TI_COMPILER_VERSION__ >= 16000000) - #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif -#endif - -#if defined(JSON_HEDLEY_TI_VERSION_CHECK) - #undef JSON_HEDLEY_TI_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_VERSION) - #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL2000_VERSION) - #undef JSON_HEDLEY_TI_CL2000_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) - #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL2000_VERSION) - #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL430_VERSION) - #undef JSON_HEDLEY_TI_CL430_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) - #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL430_VERSION) - #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) - #undef JSON_HEDLEY_TI_ARMCL_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) - #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) - #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) - #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL6X_VERSION) - #undef JSON_HEDLEY_TI_CL6X_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) - #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL6X_VERSION) - #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL7X_VERSION) - #undef JSON_HEDLEY_TI_CL7X_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) - #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL7X_VERSION) - #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) - #undef JSON_HEDLEY_TI_CLPRU_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) - #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) - #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_CRAY_VERSION) - #undef JSON_HEDLEY_CRAY_VERSION -#endif -#if defined(_CRAYC) - #if defined(_RELEASE_PATCHLEVEL) - #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) - #else - #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) - #endif -#endif - -#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) - #undef JSON_HEDLEY_CRAY_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_CRAY_VERSION) - #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_IAR_VERSION) - #undef JSON_HEDLEY_IAR_VERSION -#endif -#if defined(__IAR_SYSTEMS_ICC__) - #if __VER__ > 1000 - #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) - #else - #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) - #endif -#endif - -#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) - #undef JSON_HEDLEY_IAR_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_IAR_VERSION) - #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TINYC_VERSION) - #undef JSON_HEDLEY_TINYC_VERSION -#endif -#if defined(__TINYC__) - #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) -#endif - -#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) - #undef JSON_HEDLEY_TINYC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TINYC_VERSION) - #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_DMC_VERSION) - #undef JSON_HEDLEY_DMC_VERSION -#endif -#if defined(__DMC__) - #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) -#endif - -#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) - #undef JSON_HEDLEY_DMC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_DMC_VERSION) - #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_COMPCERT_VERSION) - #undef JSON_HEDLEY_COMPCERT_VERSION -#endif -#if defined(__COMPCERT_VERSION__) - #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) -#endif - -#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) - #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_COMPCERT_VERSION) - #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_PELLES_VERSION) - #undef JSON_HEDLEY_PELLES_VERSION -#endif -#if defined(__POCC__) - #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) -#endif - -#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) - #undef JSON_HEDLEY_PELLES_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_PELLES_VERSION) - #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_MCST_LCC_VERSION) - #undef JSON_HEDLEY_MCST_LCC_VERSION -#endif -#if defined(__LCC__) && defined(__LCC_MINOR__) - #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) -#endif - -#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) - #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_MCST_LCC_VERSION) - #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_GCC_VERSION) - #undef JSON_HEDLEY_GCC_VERSION -#endif -#if \ - defined(JSON_HEDLEY_GNUC_VERSION) && \ - !defined(__clang__) && \ - !defined(JSON_HEDLEY_INTEL_VERSION) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_ARM_VERSION) && \ - !defined(JSON_HEDLEY_CRAY_VERSION) && \ - !defined(JSON_HEDLEY_TI_VERSION) && \ - !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ - !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ - !defined(__COMPCERT__) && \ - !defined(JSON_HEDLEY_MCST_LCC_VERSION) - #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION -#endif - -#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) - #undef JSON_HEDLEY_GCC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_GCC_VERSION) - #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_ATTRIBUTE -#endif -#if \ - defined(__has_attribute) && \ - ( \ - (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ - ) -# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) -#else -# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE -#endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE -#endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE -#endif -#if \ - defined(__has_cpp_attribute) && \ - defined(__cplusplus) && \ - (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS -#endif -#if !defined(__cplusplus) || !defined(__has_cpp_attribute) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) -#elif \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_IAR_VERSION) && \ - (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ - (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) -#else - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE -#endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE -#endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_BUILTIN) - #undef JSON_HEDLEY_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) -#else - #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) - #undef JSON_HEDLEY_GNUC_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) -#else - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) - #undef JSON_HEDLEY_GCC_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) -#else - #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_FEATURE) - #undef JSON_HEDLEY_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) -#else - #define JSON_HEDLEY_HAS_FEATURE(feature) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) - #undef JSON_HEDLEY_GNUC_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) -#else - #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) - #undef JSON_HEDLEY_GCC_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) -#else - #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_EXTENSION) - #undef JSON_HEDLEY_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) -#else - #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) - #undef JSON_HEDLEY_GNUC_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) -#else - #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) - #undef JSON_HEDLEY_GCC_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) -#else - #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_WARNING) - #undef JSON_HEDLEY_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) -#else - #define JSON_HEDLEY_HAS_WARNING(warning) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) - #undef JSON_HEDLEY_GNUC_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) -#else - #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_WARNING) - #undef JSON_HEDLEY_GCC_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) -#else - #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ - defined(__clang__) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ - (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) - #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_PRAGMA(value) __pragma(value) -#else - #define JSON_HEDLEY_PRAGMA(value) -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) - #undef JSON_HEDLEY_DIAGNOSTIC_PUSH -#endif -#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) - #undef JSON_HEDLEY_DIAGNOSTIC_POP -#endif -#if defined(__clang__) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) - #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) -#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") -#else - #define JSON_HEDLEY_DIAGNOSTIC_PUSH - #define JSON_HEDLEY_DIAGNOSTIC_POP -#endif - -/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for - HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ -#endif -#if defined(__cplusplus) -# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") -# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") -# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ - _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# endif -# else -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# endif -# endif -#endif -#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x -#endif - -#if defined(JSON_HEDLEY_CONST_CAST) - #undef JSON_HEDLEY_CONST_CAST -#endif -#if defined(__cplusplus) -# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) -#elif \ - JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ - ((T) (expr)); \ - JSON_HEDLEY_DIAGNOSTIC_POP \ - })) -#else -# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_REINTERPRET_CAST) - #undef JSON_HEDLEY_REINTERPRET_CAST -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) -#else - #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_STATIC_CAST) - #undef JSON_HEDLEY_STATIC_CAST -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) -#else - #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_CPP_CAST) - #undef JSON_HEDLEY_CPP_CAST -#endif -#if defined(__cplusplus) -# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") -# define JSON_HEDLEY_CPP_CAST(T, expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ - ((T) (expr)) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) -# define JSON_HEDLEY_CPP_CAST(T, expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("diag_suppress=Pe137") \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) -# endif -#else -# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") -#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") -#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") -#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION -#endif - -#if defined(JSON_HEDLEY_DEPRECATED) - #undef JSON_HEDLEY_DEPRECATED -#endif -#if defined(JSON_HEDLEY_DEPRECATED_FOR) - #undef JSON_HEDLEY_DEPRECATED_FOR -#endif -#if \ - JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) -#elif \ - (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) -#elif defined(__cplusplus) && (__cplusplus >= 201402L) - #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) - #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") -#else - #define JSON_HEDLEY_DEPRECATED(since) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) -#endif - -#if defined(JSON_HEDLEY_UNAVAILABLE) - #undef JSON_HEDLEY_UNAVAILABLE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) -#else - #define JSON_HEDLEY_UNAVAILABLE(available_since) -#endif - -#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) - #undef JSON_HEDLEY_WARN_UNUSED_RESULT -#endif -#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) - #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) -#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) - #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) - #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) -#elif defined(_Check_return_) /* SAL */ - #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ -#else - #define JSON_HEDLEY_WARN_UNUSED_RESULT - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) -#endif - -#if defined(JSON_HEDLEY_SENTINEL) - #undef JSON_HEDLEY_SENTINEL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) -#else - #define JSON_HEDLEY_SENTINEL(position) -#endif - -#if defined(JSON_HEDLEY_NO_RETURN) - #undef JSON_HEDLEY_NO_RETURN -#endif -#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_NO_RETURN __noreturn -#elif \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) -#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L - #define JSON_HEDLEY_NO_RETURN _Noreturn -#elif defined(__cplusplus) && (__cplusplus >= 201103L) - #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) - #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) - #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") -#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) - #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) - #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) -#else - #define JSON_HEDLEY_NO_RETURN -#endif - -#if defined(JSON_HEDLEY_NO_ESCAPE) - #undef JSON_HEDLEY_NO_ESCAPE -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) - #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) -#else - #define JSON_HEDLEY_NO_ESCAPE -#endif - -#if defined(JSON_HEDLEY_UNREACHABLE) - #undef JSON_HEDLEY_UNREACHABLE -#endif -#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) - #undef JSON_HEDLEY_UNREACHABLE_RETURN -#endif -#if defined(JSON_HEDLEY_ASSUME) - #undef JSON_HEDLEY_ASSUME -#endif -#if \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_ASSUME(expr) __assume(expr) -#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) - #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) -#elif \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) - #if defined(__cplusplus) - #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) - #else - #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) - #endif -#endif -#if \ - (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() -#elif defined(JSON_HEDLEY_ASSUME) - #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) -#endif -#if !defined(JSON_HEDLEY_ASSUME) - #if defined(JSON_HEDLEY_UNREACHABLE) - #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) - #else - #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) - #endif -#endif -#if defined(JSON_HEDLEY_UNREACHABLE) - #if \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) - #else - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() - #endif -#else - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) -#endif -#if !defined(JSON_HEDLEY_UNREACHABLE) - #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) -#endif - -JSON_HEDLEY_DIAGNOSTIC_PUSH -#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") - #pragma clang diagnostic ignored "-Wpedantic" -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) - #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" -#endif -#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) - #if defined(__clang__) - #pragma clang diagnostic ignored "-Wvariadic-macros" - #elif defined(JSON_HEDLEY_GCC_VERSION) - #pragma GCC diagnostic ignored "-Wvariadic-macros" - #endif -#endif -#if defined(JSON_HEDLEY_NON_NULL) - #undef JSON_HEDLEY_NON_NULL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) - #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) -#else - #define JSON_HEDLEY_NON_NULL(...) -#endif -JSON_HEDLEY_DIAGNOSTIC_POP - -#if defined(JSON_HEDLEY_PRINTF_FORMAT) - #undef JSON_HEDLEY_PRINTF_FORMAT -#endif -#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) -#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) -#else - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) -#endif - -#if defined(JSON_HEDLEY_CONSTEXPR) - #undef JSON_HEDLEY_CONSTEXPR -#endif -#if defined(__cplusplus) - #if __cplusplus >= 201103L - #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) - #endif -#endif -#if !defined(JSON_HEDLEY_CONSTEXPR) - #define JSON_HEDLEY_CONSTEXPR -#endif - -#if defined(JSON_HEDLEY_PREDICT) - #undef JSON_HEDLEY_PREDICT -#endif -#if defined(JSON_HEDLEY_LIKELY) - #undef JSON_HEDLEY_LIKELY -#endif -#if defined(JSON_HEDLEY_UNLIKELY) - #undef JSON_HEDLEY_UNLIKELY -#endif -#if defined(JSON_HEDLEY_UNPREDICTABLE) - #undef JSON_HEDLEY_UNPREDICTABLE -#endif -#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) - #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) -#endif -#if \ - (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) -# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) -# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) -#elif \ - (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ - (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ - (__extension__ ({ \ - double hedley_probability_ = (probability); \ - ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ - })) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ - (__extension__ ({ \ - double hedley_probability_ = (probability); \ - ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ - })) -# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) -# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) -#else -# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) -# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) -# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) -#endif -#if !defined(JSON_HEDLEY_UNPREDICTABLE) - #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) -#endif - -#if defined(JSON_HEDLEY_MALLOC) - #undef JSON_HEDLEY_MALLOC -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_MALLOC __declspec(restrict) -#else - #define JSON_HEDLEY_MALLOC -#endif - -#if defined(JSON_HEDLEY_PURE) - #undef JSON_HEDLEY_PURE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PURE __attribute__((__pure__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) -# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") -#elif defined(__cplusplus) && \ - ( \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ - ) -# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") -#else -# define JSON_HEDLEY_PURE -#endif - -#if defined(JSON_HEDLEY_CONST) - #undef JSON_HEDLEY_CONST -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_CONST __attribute__((__const__)) -#elif \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_CONST _Pragma("no_side_effect") -#else - #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE -#endif - -#if defined(JSON_HEDLEY_RESTRICT) - #undef JSON_HEDLEY_RESTRICT -#endif -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) - #define JSON_HEDLEY_RESTRICT restrict -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ - defined(__clang__) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_RESTRICT __restrict -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) - #define JSON_HEDLEY_RESTRICT _Restrict -#else - #define JSON_HEDLEY_RESTRICT -#endif - -#if defined(JSON_HEDLEY_INLINE) - #undef JSON_HEDLEY_INLINE -#endif -#if \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ - (defined(__cplusplus) && (__cplusplus >= 199711L)) - #define JSON_HEDLEY_INLINE inline -#elif \ - defined(JSON_HEDLEY_GCC_VERSION) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) - #define JSON_HEDLEY_INLINE __inline__ -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_INLINE __inline -#else - #define JSON_HEDLEY_INLINE -#endif - -#if defined(JSON_HEDLEY_ALWAYS_INLINE) - #undef JSON_HEDLEY_ALWAYS_INLINE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) -# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) -# define JSON_HEDLEY_ALWAYS_INLINE __forceinline -#elif defined(__cplusplus) && \ - ( \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ - ) -# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) -# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") -#else -# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE -#endif - -#if defined(JSON_HEDLEY_NEVER_INLINE) - #undef JSON_HEDLEY_NEVER_INLINE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) - #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") -#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) - #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) - #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) -#else - #define JSON_HEDLEY_NEVER_INLINE -#endif - -#if defined(JSON_HEDLEY_PRIVATE) - #undef JSON_HEDLEY_PRIVATE -#endif -#if defined(JSON_HEDLEY_PUBLIC) - #undef JSON_HEDLEY_PUBLIC -#endif -#if defined(JSON_HEDLEY_IMPORT) - #undef JSON_HEDLEY_IMPORT -#endif -#if defined(_WIN32) || defined(__CYGWIN__) -# define JSON_HEDLEY_PRIVATE -# define JSON_HEDLEY_PUBLIC __declspec(dllexport) -# define JSON_HEDLEY_IMPORT __declspec(dllimport) -#else -# if \ - JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - ( \ - defined(__TI_EABI__) && \ - ( \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ - ) \ - ) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) -# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) -# else -# define JSON_HEDLEY_PRIVATE -# define JSON_HEDLEY_PUBLIC -# endif -# define JSON_HEDLEY_IMPORT extern -#endif - -#if defined(JSON_HEDLEY_NO_THROW) - #undef JSON_HEDLEY_NO_THROW -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) - #define JSON_HEDLEY_NO_THROW __declspec(nothrow) -#else - #define JSON_HEDLEY_NO_THROW -#endif - -#if defined(JSON_HEDLEY_FALL_THROUGH) - #undef JSON_HEDLEY_FALL_THROUGH -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) - #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) - #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) -#elif defined(__fallthrough) /* SAL */ - #define JSON_HEDLEY_FALL_THROUGH __fallthrough -#else - #define JSON_HEDLEY_FALL_THROUGH -#endif - -#if defined(JSON_HEDLEY_RETURNS_NON_NULL) - #undef JSON_HEDLEY_RETURNS_NON_NULL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) -#elif defined(_Ret_notnull_) /* SAL */ - #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ -#else - #define JSON_HEDLEY_RETURNS_NON_NULL -#endif - -#if defined(JSON_HEDLEY_ARRAY_PARAM) - #undef JSON_HEDLEY_ARRAY_PARAM -#endif -#if \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ - !defined(__STDC_NO_VLA__) && \ - !defined(__cplusplus) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_TINYC_VERSION) - #define JSON_HEDLEY_ARRAY_PARAM(name) (name) -#else - #define JSON_HEDLEY_ARRAY_PARAM(name) -#endif - -#if defined(JSON_HEDLEY_IS_CONSTANT) - #undef JSON_HEDLEY_IS_CONSTANT -#endif -#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) - #undef JSON_HEDLEY_REQUIRE_CONSTEXPR -#endif -/* JSON_HEDLEY_IS_CONSTEXPR_ is for - HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ -#if defined(JSON_HEDLEY_IS_CONSTEXPR_) - #undef JSON_HEDLEY_IS_CONSTEXPR_ -#endif -#if \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) -#endif -#if !defined(__cplusplus) -# if \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) -#if defined(__INTPTR_TYPE__) - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) -#else - #include - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) -#endif -# elif \ - ( \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ - !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_IAR_VERSION)) || \ - (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) -#if defined(__INTPTR_TYPE__) - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) -#else - #include - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) -#endif -# elif \ - defined(JSON_HEDLEY_GCC_VERSION) || \ - defined(JSON_HEDLEY_INTEL_VERSION) || \ - defined(JSON_HEDLEY_TINYC_VERSION) || \ - defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ - defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ - defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ - defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ - defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ - defined(__clang__) -# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ - sizeof(void) != \ - sizeof(*( \ - 1 ? \ - ((void*) ((expr) * 0L) ) : \ -((struct { char v[sizeof(void) * 2]; } *) 1) \ - ) \ - ) \ - ) -# endif -#endif -#if defined(JSON_HEDLEY_IS_CONSTEXPR_) - #if !defined(JSON_HEDLEY_IS_CONSTANT) - #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) - #endif - #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) -#else - #if !defined(JSON_HEDLEY_IS_CONSTANT) - #define JSON_HEDLEY_IS_CONSTANT(expr) (0) - #endif - #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) -#endif - -#if defined(JSON_HEDLEY_BEGIN_C_DECLS) - #undef JSON_HEDLEY_BEGIN_C_DECLS -#endif -#if defined(JSON_HEDLEY_END_C_DECLS) - #undef JSON_HEDLEY_END_C_DECLS -#endif -#if defined(JSON_HEDLEY_C_DECL) - #undef JSON_HEDLEY_C_DECL -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { - #define JSON_HEDLEY_END_C_DECLS } - #define JSON_HEDLEY_C_DECL extern "C" -#else - #define JSON_HEDLEY_BEGIN_C_DECLS - #define JSON_HEDLEY_END_C_DECLS - #define JSON_HEDLEY_C_DECL -#endif - -#if defined(JSON_HEDLEY_STATIC_ASSERT) - #undef JSON_HEDLEY_STATIC_ASSERT -#endif -#if \ - !defined(__cplusplus) && ( \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ - (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - defined(_Static_assert) \ - ) -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) -#elif \ - (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ - JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) -#else -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) -#endif - -#if defined(JSON_HEDLEY_NULL) - #undef JSON_HEDLEY_NULL -#endif -#if defined(__cplusplus) - #if __cplusplus >= 201103L - #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) - #elif defined(NULL) - #define JSON_HEDLEY_NULL NULL - #else - #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) - #endif -#elif defined(NULL) - #define JSON_HEDLEY_NULL NULL -#else - #define JSON_HEDLEY_NULL ((void*) 0) -#endif - -#if defined(JSON_HEDLEY_MESSAGE) - #undef JSON_HEDLEY_MESSAGE -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") -# define JSON_HEDLEY_MESSAGE(msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ - JSON_HEDLEY_PRAGMA(message msg) \ - JSON_HEDLEY_DIAGNOSTIC_POP -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) -#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#else -# define JSON_HEDLEY_MESSAGE(msg) -#endif - -#if defined(JSON_HEDLEY_WARNING) - #undef JSON_HEDLEY_WARNING -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") -# define JSON_HEDLEY_WARNING(msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ - JSON_HEDLEY_PRAGMA(clang warning msg) \ - JSON_HEDLEY_DIAGNOSTIC_POP -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#else -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) -#endif - -#if defined(JSON_HEDLEY_REQUIRE) - #undef JSON_HEDLEY_REQUIRE -#endif -#if defined(JSON_HEDLEY_REQUIRE_MSG) - #undef JSON_HEDLEY_REQUIRE_MSG -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) -# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") -# define JSON_HEDLEY_REQUIRE(expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ - __attribute__((diagnose_if(!(expr), #expr, "error"))) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ - __attribute__((diagnose_if(!(expr), msg, "error"))) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) -# endif -#else -# define JSON_HEDLEY_REQUIRE(expr) -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) -#endif - -#if defined(JSON_HEDLEY_FLAGS) - #undef JSON_HEDLEY_FLAGS -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) - #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) -#else - #define JSON_HEDLEY_FLAGS -#endif - -#if defined(JSON_HEDLEY_FLAGS_CAST) - #undef JSON_HEDLEY_FLAGS_CAST -#endif -#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) -# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("warning(disable:188)") \ - ((T) (expr)); \ - JSON_HEDLEY_DIAGNOSTIC_POP \ - })) -#else -# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) -#endif - -#if defined(JSON_HEDLEY_EMPTY_BASES) - #undef JSON_HEDLEY_EMPTY_BASES -#endif -#if \ - (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) -#else - #define JSON_HEDLEY_EMPTY_BASES -#endif - -/* Remaining macros are deprecated. */ - -#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) - #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK -#endif -#if defined(__clang__) - #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) -#else - #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) - #undef JSON_HEDLEY_CLANG_HAS_BUILTIN -#endif -#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) - -#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) - #undef JSON_HEDLEY_CLANG_HAS_FEATURE -#endif -#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) - -#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) - #undef JSON_HEDLEY_CLANG_HAS_EXTENSION -#endif -#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) - -#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) - #undef JSON_HEDLEY_CLANG_HAS_WARNING -#endif -#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) - -#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ - - -// This file contains all internal macro definitions (except those affecting ABI) -// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them - -// #include - - -// exclude unsupported compilers -#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) - #if defined(__clang__) - #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 - #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) - #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 - #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #endif -#endif - -// C++ language standard detection -// if the user manually specified the used C++ version, this is skipped -#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) - #if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) - #define JSON_HAS_CPP_23 - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) - #define JSON_HAS_CPP_14 - #endif - // the cpp 11 flag is always specified because it is the minimal required version - #define JSON_HAS_CPP_11 -#endif - -#ifdef __has_include - #if __has_include() - #include - #endif -#endif - -#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) - #ifdef JSON_HAS_CPP_17 - #if defined(__cpp_lib_filesystem) - #define JSON_HAS_FILESYSTEM 1 - #elif defined(__cpp_lib_experimental_filesystem) - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 - #elif !defined(__has_include) - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 - #elif __has_include() - #define JSON_HAS_FILESYSTEM 1 - #elif __has_include() - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 - #endif - - // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ - #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support - #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support - #if defined(__clang_major__) && __clang_major__ < 7 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support - #if defined(_MSC_VER) && _MSC_VER < 1914 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before iOS 13 - #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before macOS Catalina - #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - #endif -#endif - -#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 -#endif - -#ifndef JSON_HAS_FILESYSTEM - #define JSON_HAS_FILESYSTEM 0 -#endif - -#ifndef JSON_HAS_THREE_WAY_COMPARISON - #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ - && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L - #define JSON_HAS_THREE_WAY_COMPARISON 1 - #else - #define JSON_HAS_THREE_WAY_COMPARISON 0 - #endif -#endif - -#ifndef JSON_HAS_RANGES - // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has a syntax error - #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 - #define JSON_HAS_RANGES 0 - #elif defined(__cpp_lib_ranges) - #define JSON_HAS_RANGES 1 - #else - #define JSON_HAS_RANGES 0 - #endif -#endif - -#ifndef JSON_HAS_STATIC_RTTI - #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 - #define JSON_HAS_STATIC_RTTI 1 - #else - #define JSON_HAS_STATIC_RTTI 0 - #endif -#endif - -#ifdef JSON_HAS_CPP_17 - #define JSON_INLINE_VARIABLE inline -#else - #define JSON_INLINE_VARIABLE -#endif - -#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) - #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] -#else - #define JSON_NO_UNIQUE_ADDRESS -#endif - -// disable documentation warnings on clang -#if defined(__clang__) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wdocumentation" - #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" -#endif - -// allow disabling exceptions -#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) - #define JSON_THROW(exception) throw exception - #define JSON_TRY try - #define JSON_CATCH(exception) catch(exception) - #define JSON_INTERNAL_CATCH(exception) catch(exception) -#else - #include - #define JSON_THROW(exception) std::abort() - #define JSON_TRY if(true) - #define JSON_CATCH(exception) if(false) - #define JSON_INTERNAL_CATCH(exception) if(false) -#endif - -// override exception macros -#if defined(JSON_THROW_USER) - #undef JSON_THROW - #define JSON_THROW JSON_THROW_USER -#endif -#if defined(JSON_TRY_USER) - #undef JSON_TRY - #define JSON_TRY JSON_TRY_USER -#endif -#if defined(JSON_CATCH_USER) - #undef JSON_CATCH - #define JSON_CATCH JSON_CATCH_USER - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_CATCH_USER -#endif -#if defined(JSON_INTERNAL_CATCH_USER) - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER -#endif - -// allow overriding assert -#if !defined(JSON_ASSERT) - #include // assert - #define JSON_ASSERT(x) assert(x) -#endif - -// allow accessing some private functions (needed by the test suite) -#if defined(JSON_TESTS_PRIVATE) - #define JSON_PRIVATE_UNLESS_TESTED public -#else - #define JSON_PRIVATE_UNLESS_TESTED private -#endif - -/*! -@brief macro to briefly define a mapping between an enum and JSON -@def NLOHMANN_JSON_SERIALIZE_ENUM -@since version 3.4.0 -*/ -#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ - template \ - inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ - { \ - /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [e](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.first == e; \ - }); \ - j = ((it != std::end(m)) ? it : std::begin(m))->second; \ - } \ - template \ - inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ - { \ - /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [&j](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.second == j; \ - }); \ - e = ((it != std::end(m)) ? it : std::begin(m))->first; \ - } - -// Ugly macros to avoid uglier copy-paste when specializing basic_json. They -// may be removed in the future once the class is split. - -#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ - template class ObjectType, \ - template class ArrayType, \ - class StringType, class BooleanType, class NumberIntegerType, \ - class NumberUnsignedType, class NumberFloatType, \ - template class AllocatorType, \ - template class JSONSerializer, \ - class BinaryType, \ - class CustomBaseClass> - -#define NLOHMANN_BASIC_JSON_TPL \ - basic_json - -// Macros to simplify conversion from/to types - -#define NLOHMANN_JSON_EXPAND( x ) x -#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME -#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ - NLOHMANN_JSON_PASTE64, \ - NLOHMANN_JSON_PASTE63, \ - NLOHMANN_JSON_PASTE62, \ - NLOHMANN_JSON_PASTE61, \ - NLOHMANN_JSON_PASTE60, \ - NLOHMANN_JSON_PASTE59, \ - NLOHMANN_JSON_PASTE58, \ - NLOHMANN_JSON_PASTE57, \ - NLOHMANN_JSON_PASTE56, \ - NLOHMANN_JSON_PASTE55, \ - NLOHMANN_JSON_PASTE54, \ - NLOHMANN_JSON_PASTE53, \ - NLOHMANN_JSON_PASTE52, \ - NLOHMANN_JSON_PASTE51, \ - NLOHMANN_JSON_PASTE50, \ - NLOHMANN_JSON_PASTE49, \ - NLOHMANN_JSON_PASTE48, \ - NLOHMANN_JSON_PASTE47, \ - NLOHMANN_JSON_PASTE46, \ - NLOHMANN_JSON_PASTE45, \ - NLOHMANN_JSON_PASTE44, \ - NLOHMANN_JSON_PASTE43, \ - NLOHMANN_JSON_PASTE42, \ - NLOHMANN_JSON_PASTE41, \ - NLOHMANN_JSON_PASTE40, \ - NLOHMANN_JSON_PASTE39, \ - NLOHMANN_JSON_PASTE38, \ - NLOHMANN_JSON_PASTE37, \ - NLOHMANN_JSON_PASTE36, \ - NLOHMANN_JSON_PASTE35, \ - NLOHMANN_JSON_PASTE34, \ - NLOHMANN_JSON_PASTE33, \ - NLOHMANN_JSON_PASTE32, \ - NLOHMANN_JSON_PASTE31, \ - NLOHMANN_JSON_PASTE30, \ - NLOHMANN_JSON_PASTE29, \ - NLOHMANN_JSON_PASTE28, \ - NLOHMANN_JSON_PASTE27, \ - NLOHMANN_JSON_PASTE26, \ - NLOHMANN_JSON_PASTE25, \ - NLOHMANN_JSON_PASTE24, \ - NLOHMANN_JSON_PASTE23, \ - NLOHMANN_JSON_PASTE22, \ - NLOHMANN_JSON_PASTE21, \ - NLOHMANN_JSON_PASTE20, \ - NLOHMANN_JSON_PASTE19, \ - NLOHMANN_JSON_PASTE18, \ - NLOHMANN_JSON_PASTE17, \ - NLOHMANN_JSON_PASTE16, \ - NLOHMANN_JSON_PASTE15, \ - NLOHMANN_JSON_PASTE14, \ - NLOHMANN_JSON_PASTE13, \ - NLOHMANN_JSON_PASTE12, \ - NLOHMANN_JSON_PASTE11, \ - NLOHMANN_JSON_PASTE10, \ - NLOHMANN_JSON_PASTE9, \ - NLOHMANN_JSON_PASTE8, \ - NLOHMANN_JSON_PASTE7, \ - NLOHMANN_JSON_PASTE6, \ - NLOHMANN_JSON_PASTE5, \ - NLOHMANN_JSON_PASTE4, \ - NLOHMANN_JSON_PASTE3, \ - NLOHMANN_JSON_PASTE2, \ - NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) -#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) -#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) -#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) -#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) -#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) -#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) -#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) -#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) -#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) -#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) -#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) -#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) -#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) -#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) -#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) -#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) -#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) -#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) -#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) -#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) -#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) -#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) -#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) -#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) -#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) -#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) -#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) -#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) -#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) -#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) -#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) -#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) -#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) -#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) -#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) -#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) -#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) -#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) -#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) -#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) -#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) -#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) -#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) -#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) -#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) -#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) -#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) -#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) -#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) -#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) -#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) -#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) -#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) -#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) -#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) -#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) -#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) -#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) -#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) -#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) -#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) -#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) -#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) - -#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; -#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); -#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE -@since version 3.9.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT -@since version 3.11.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE -@since version 3.11.3 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE -@since version 3.9.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT -@since version 3.11.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE -@since version 3.11.3 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ - template::value, int> = 0> \ - friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - template::value, int> = 0> \ - void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE -@since version 3.12.0 -@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ -*/ -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ - template::value, int> = 0> \ - void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } - -// inspired from https://stackoverflow.com/a/26745591 -// allows calling any std function as if (e.g., with begin): -// using std::begin; begin(x); -// -// it allows using the detected idiom to retrieve the return type -// of such an expression -#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ - namespace detail { \ - using std::std_name; \ - \ - template \ - using result_of_##std_name = decltype(std_name(std::declval()...)); \ - } \ - \ - namespace detail2 { \ - struct std_name##_tag \ - { \ - }; \ - \ - template \ - std_name##_tag std_name(T&&...); \ - \ - template \ - using result_of_##std_name = decltype(std_name(std::declval()...)); \ - \ - template \ - struct would_call_std_##std_name \ - { \ - static constexpr auto const value = ::nlohmann::detail:: \ - is_detected_exact::value; \ - }; \ - } /* namespace detail2 */ \ - \ - template \ - struct would_call_std_##std_name : detail2::would_call_std_##std_name \ - { \ - } - -#ifndef JSON_USE_IMPLICIT_CONVERSIONS - #define JSON_USE_IMPLICIT_CONVERSIONS 1 -#endif - -#if JSON_USE_IMPLICIT_CONVERSIONS - #define JSON_EXPLICIT -#else - #define JSON_EXPLICIT explicit -#endif - -#ifndef JSON_DISABLE_ENUM_SERIALIZATION - #define JSON_DISABLE_ENUM_SERIALIZATION 0 -#endif - -#ifndef JSON_USE_GLOBAL_UDLS - #define JSON_USE_GLOBAL_UDLS 1 -#endif - -#if JSON_HAS_THREE_WAY_COMPARISON - #include // partial_ordering -#endif - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -/////////////////////////// -// JSON type enumeration // -/////////////////////////// - -/*! -@brief the JSON type enumeration - -This enumeration collects the different JSON types. It is internally used to -distinguish the stored values, and the functions @ref basic_json::is_null(), -@ref basic_json::is_object(), @ref basic_json::is_array(), -@ref basic_json::is_string(), @ref basic_json::is_boolean(), -@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), -@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), -@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and -@ref basic_json::is_structured() rely on it. - -@note There are three enumeration entries (number_integer, number_unsigned, and -number_float), because the library distinguishes these three types for numbers: -@ref basic_json::number_unsigned_t is used for unsigned integers, -@ref basic_json::number_integer_t is used for signed integers, and -@ref basic_json::number_float_t is used for floating-point numbers or to -approximate integers which do not fit in the limits of their respective type. - -@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON -value with the default value for a given type - -@since version 1.0.0 -*/ -enum class value_t : std::uint8_t -{ - null, ///< null value - object, ///< object (unordered set of name/value pairs) - array, ///< array (ordered collection of values) - string, ///< string value - boolean, ///< boolean value - number_integer, ///< number value (signed integer) - number_unsigned, ///< number value (unsigned integer) - number_float, ///< number value (floating-point) - binary, ///< binary array (ordered collection of bytes) - discarded ///< discarded by the parser callback function -}; - -/*! -@brief comparison operator for JSON types - -Returns an ordering that is similar to Python: -- order: null < boolean < number < object < array < string < binary -- furthermore, each type is not smaller than itself -- discarded values are not comparable -- binary is represented as a b"" string in python and directly comparable to a - string; however, making a binary array directly comparable with a string would - be surprising behavior in a JSON file. - -@since version 1.0.0 -*/ -#if JSON_HAS_THREE_WAY_COMPARISON - inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* -#else - inline bool operator<(const value_t lhs, const value_t rhs) noexcept -#endif -{ - static constexpr std::array order = {{ - 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, - 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, - 6 /* binary */ - } - }; - - const auto l_index = static_cast(lhs); - const auto r_index = static_cast(rhs); -#if JSON_HAS_THREE_WAY_COMPARISON - if (l_index < order.size() && r_index < order.size()) - { - return order[l_index] <=> order[r_index]; // *NOPAD* - } - return std::partial_ordering::unordered; -#else - return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; -#endif -} - -// GCC selects the built-in operator< over an operator rewritten from -// a user-defined spaceship operator -// Clang, MSVC, and ICC select the rewritten candidate -// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) -#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) -inline bool operator<(const value_t lhs, const value_t rhs) noexcept -{ - return std::is_lt(lhs <=> rhs); // *NOPAD* -} -#endif - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -/*! -@brief replace all occurrences of a substring by another string - -@param[in,out] s the string to manipulate; changed so that all - occurrences of @a f are replaced with @a t -@param[in] f the substring to replace with @a t -@param[in] t the string to replace @a f - -@pre The search string @a f must not be empty. **This precondition is -enforced with an assertion.** - -@since version 2.0.0 -*/ -template -inline void replace_substring(StringType& s, const StringType& f, - const StringType& t) -{ - JSON_ASSERT(!f.empty()); - for (auto pos = s.find(f); // find the first occurrence of f - pos != StringType::npos; // make sure f was found - s.replace(pos, f.size(), t), // replace with t, and - pos = s.find(f, pos + t.size())) // find the next occurrence of f - {} -} - -/*! - * @brief string escaping as described in RFC 6901 (Sect. 4) - * @param[in] s string to escape - * @return escaped string - * - * Note the order of escaping "~" to "~0" and "/" to "~1" is important. - */ -template -inline StringType escape(StringType s) -{ - replace_substring(s, StringType{"~"}, StringType{"~0"}); - replace_substring(s, StringType{"/"}, StringType{"~1"}); - return s; -} - -/*! - * @brief string unescaping as described in RFC 6901 (Sect. 4) - * @param[in] s string to unescape - * @return unescaped string - * - * Note the order of escaping "~1" to "/" and "~0" to "~" is important. - */ -template -inline void unescape(StringType& s) -{ - replace_substring(s, StringType{"~1"}, StringType{"/"}); - replace_substring(s, StringType{"~0"}, StringType{"~"}); -} - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // size_t - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -/// struct to capture the start position of the current token -struct position_t -{ - /// the total number of characters read - std::size_t chars_read_total = 0; - /// the number of characters read in the current line - std::size_t chars_read_current_line = 0; - /// the number of lines read - std::size_t lines_read = 0; - - /// conversion to size_t to preserve SAX interface - constexpr operator size_t() const - { - return chars_read_total; - } -}; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-FileCopyrightText: 2018 The Abseil Authors -// SPDX-License-Identifier: MIT - - - -#include // array -#include // size_t -#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type -#include // index_sequence, make_index_sequence, index_sequence_for - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -template -using uncvref_t = typename std::remove_cv::type>::type; - -#ifdef JSON_HAS_CPP_14 - -// the following utilities are natively available in C++14 -using std::enable_if_t; -using std::index_sequence; -using std::make_index_sequence; -using std::index_sequence_for; - -#else - -// alias templates to reduce boilerplate -template -using enable_if_t = typename std::enable_if::type; - -// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h -// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. - -//// START OF CODE FROM GOOGLE ABSEIL - -// integer_sequence -// -// Class template representing a compile-time integer sequence. An instantiation -// of `integer_sequence` has a sequence of integers encoded in its -// type through its template arguments (which is a common need when -// working with C++11 variadic templates). `absl::integer_sequence` is designed -// to be a drop-in replacement for C++14's `std::integer_sequence`. -// -// Example: -// -// template< class T, T... Ints > -// void user_function(integer_sequence); -// -// int main() -// { -// // user_function's `T` will be deduced to `int` and `Ints...` -// // will be deduced to `0, 1, 2, 3, 4`. -// user_function(make_integer_sequence()); -// } -template -struct integer_sequence -{ - using value_type = T; - static constexpr std::size_t size() noexcept - { - return sizeof...(Ints); - } -}; - -// index_sequence -// -// A helper template for an `integer_sequence` of `size_t`, -// `absl::index_sequence` is designed to be a drop-in replacement for C++14's -// `std::index_sequence`. -template -using index_sequence = integer_sequence; - -namespace utility_internal -{ - -template -struct Extend; - -// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. -template -struct Extend, SeqSize, 0> -{ - using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; -}; - -template -struct Extend, SeqSize, 1> -{ - using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; -}; - -// Recursion helper for 'make_integer_sequence'. -// 'Gen::type' is an alias for 'integer_sequence'. -template -struct Gen -{ - using type = - typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; -}; - -template -struct Gen -{ - using type = integer_sequence; -}; - -} // namespace utility_internal - -// Compile-time sequences of integers - -// make_integer_sequence -// -// This template alias is equivalent to -// `integer_sequence`, and is designed to be a drop-in -// replacement for C++14's `std::make_integer_sequence`. -template -using make_integer_sequence = typename utility_internal::Gen::type; - -// make_index_sequence -// -// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, -// and is designed to be a drop-in replacement for C++14's -// `std::make_index_sequence`. -template -using make_index_sequence = make_integer_sequence; - -// index_sequence_for -// -// Converts a typename pack into an index sequence of the same length, and -// is designed to be a drop-in replacement for C++14's -// `std::index_sequence_for()` -template -using index_sequence_for = make_index_sequence; - -//// END OF CODE FROM GOOGLE ABSEIL - -#endif - -// dispatch utility (taken from ranges-v3) -template struct priority_tag : priority_tag < N - 1 > {}; -template<> struct priority_tag<0> {}; - -// taken from ranges-v3 -template -struct static_const -{ - static JSON_INLINE_VARIABLE constexpr T value{}; -}; - -#ifndef JSON_HAS_CPP_17 - template - constexpr T static_const::value; -#endif - -template -constexpr std::array make_array(Args&& ... args) -{ - return std::array {{static_cast(std::forward(args))...}}; -} - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // numeric_limits -#include // char_traits -#include // tuple -#include // false_type, is_constructible, is_integral, is_same, true_type -#include // declval -#if defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603L - #include // byte -#endif -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // random_access_iterator_tag - -// #include - -// #include - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -template -struct iterator_types {}; - -template -struct iterator_types < - It, - void_t> -{ - using difference_type = typename It::difference_type; - using value_type = typename It::value_type; - using pointer = typename It::pointer; - using reference = typename It::reference; - using iterator_category = typename It::iterator_category; -}; - -// This is required as some compilers implement std::iterator_traits in a way that -// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. -template -struct iterator_traits -{ -}; - -template -struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> - : iterator_types -{ -}; - -template -struct iterator_traits::value>> -{ - using iterator_category = std::random_access_iterator_tag; - using value_type = T; - using difference_type = ptrdiff_t; - using pointer = T*; - using reference = T&; -}; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN - -NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); - -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN - -NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); - -NLOHMANN_JSON_NAMESPACE_END - -// #include - -// #include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.12.0 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann -// SPDX-License-Identifier: MIT - -#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ - #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ - - #include // int64_t, uint64_t - #include // map - #include // allocator - #include // string - #include // vector - - // #include - - - /*! - @brief namespace for Niels Lohmann - @see https://github.com/nlohmann - @since version 1.0.0 - */ - NLOHMANN_JSON_NAMESPACE_BEGIN - - /*! - @brief default JSONSerializer template argument - - This serializer ignores the template arguments and uses ADL - ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) - for serialization. - */ - template - struct adl_serializer; - - /// a class to store JSON values - /// @sa https://json.nlohmann.me/api/basic_json/ - template class ObjectType = - std::map, - template class ArrayType = std::vector, - class StringType = std::string, class BooleanType = bool, - class NumberIntegerType = std::int64_t, - class NumberUnsignedType = std::uint64_t, - class NumberFloatType = double, - template class AllocatorType = std::allocator, - template class JSONSerializer = - adl_serializer, - class BinaryType = std::vector, // cppcheck-suppress syntaxError - class CustomBaseClass = void> - class basic_json; - - /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document - /// @sa https://json.nlohmann.me/api/json_pointer/ - template - class json_pointer; - - /*! - @brief default specialization - @sa https://json.nlohmann.me/api/json/ - */ - using json = basic_json<>; - - /// @brief a minimal map-like container that preserves insertion order - /// @sa https://json.nlohmann.me/api/ordered_map/ - template - struct ordered_map; - - /// @brief specialization that maintains the insertion order of object keys - /// @sa https://json.nlohmann.me/api/ordered_json/ - using ordered_json = basic_json; - - NLOHMANN_JSON_NAMESPACE_END - -#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ - - -NLOHMANN_JSON_NAMESPACE_BEGIN -/*! -@brief detail namespace with internal helper functions - -This namespace collects functions that should not be exposed, -implementations of some @ref basic_json methods, and meta-programming helpers. - -@since version 2.1.0 -*/ -namespace detail -{ - -///////////// -// helpers // -///////////// - -// Note to maintainers: -// -// Every trait in this file expects a non-CV-qualified type. -// The only exceptions are in the 'aliases for detected' section -// (i.e., those of the form: decltype(T::member_function(std::declval()))) -// -// In this case, T has to be properly CV-qualified to constraint the function arguments -// (e.g., to_json(BasicJsonType&, const T&)) - -template struct is_basic_json : std::false_type {}; - -NLOHMANN_BASIC_JSON_TPL_DECLARATION -struct is_basic_json : std::true_type {}; - -// used by exceptions create() member functions -// true_type for the pointer to possibly cv-qualified basic_json or std::nullptr_t -// false_type otherwise -template -struct is_basic_json_context : - std::integral_constant < bool, - is_basic_json::type>::type>::value - || std::is_same::value > -{}; - -////////////////////// -// json_ref helpers // -////////////////////// - -template -class json_ref; - -template -struct is_json_ref : std::false_type {}; - -template -struct is_json_ref> : std::true_type {}; - -////////////////////////// -// aliases for detected // -////////////////////////// - -template -using mapped_type_t = typename T::mapped_type; - -template -using key_type_t = typename T::key_type; - -template -using value_type_t = typename T::value_type; - -template -using difference_type_t = typename T::difference_type; - -template -using pointer_t = typename T::pointer; - -template -using reference_t = typename T::reference; - -template -using iterator_category_t = typename T::iterator_category; - -template -using to_json_function = decltype(T::to_json(std::declval()...)); - -template -using from_json_function = decltype(T::from_json(std::declval()...)); - -template -using get_template_function = decltype(std::declval().template get()); - -// trait checking if JSONSerializer::from_json(json const&, udt&) exists -template -struct has_from_json : std::false_type {}; - -// trait checking if j.get is valid -// use this trait instead of std::is_constructible or std::is_convertible, -// both rely on, or make use of implicit conversions, and thus fail when T -// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) -template -struct is_getable -{ - static constexpr bool value = is_detected::value; -}; - -template -struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -// This trait checks if JSONSerializer::from_json(json const&) exists -// this overload is used for non-default-constructible user-defined-types -template -struct has_non_default_from_json : std::false_type {}; - -template -struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -// This trait checks if BasicJsonType::json_serializer::to_json exists -// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. -template -struct has_to_json : std::false_type {}; - -template -struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -template -using detect_key_compare = typename T::key_compare; - -template -struct has_key_compare : std::integral_constant::value> {}; - -// obtains the actual object key comparator -template -struct actual_object_comparator -{ - using object_t = typename BasicJsonType::object_t; - using object_comparator_t = typename BasicJsonType::default_object_comparator_t; - using type = typename std::conditional < has_key_compare::value, - typename object_t::key_compare, object_comparator_t>::type; -}; - -template -using actual_object_comparator_t = typename actual_object_comparator::type; - -///////////////// -// char_traits // -///////////////// - -// Primary template of char_traits calls std char_traits -template -struct char_traits : std::char_traits -{}; - -// Explicitly define char traits for unsigned char since it is not standard -template<> -struct char_traits : std::char_traits -{ - using char_type = unsigned char; - using int_type = uint64_t; - - // Redefine to_int_type function - static int_type to_int_type(char_type c) noexcept - { - return static_cast(c); - } - - static char_type to_char_type(int_type i) noexcept - { - return static_cast(i); - } - - static constexpr int_type eof() noexcept - { - return static_cast(std::char_traits::eof()); - } -}; - -// Explicitly define char traits for signed char since it is not standard -template<> -struct char_traits : std::char_traits -{ - using char_type = signed char; - using int_type = uint64_t; - - // Redefine to_int_type function - static int_type to_int_type(char_type c) noexcept - { - return static_cast(c); - } - - static char_type to_char_type(int_type i) noexcept - { - return static_cast(i); - } - - static constexpr int_type eof() noexcept - { - return static_cast(std::char_traits::eof()); - } -}; - -#if defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603L -template<> -struct char_traits : std::char_traits -{ - using char_type = std::byte; - using int_type = uint64_t; - - static int_type to_int_type(char_type c) noexcept - { - return static_cast(std::to_integer(c)); - } - - static char_type to_char_type(int_type i) noexcept - { - return std::byte(static_cast(i)); - } - - static constexpr int_type eof() noexcept - { - return static_cast(std::char_traits::eof()); - } -}; -#endif - -/////////////////// -// is_ functions // -/////////////////// - -// https://en.cppreference.com/w/cpp/types/conjunction -template struct conjunction : std::true_type { }; -template struct conjunction : B { }; -template -struct conjunction -: std::conditional(B::value), conjunction, B>::type {}; - -// https://en.cppreference.com/w/cpp/types/negation -template struct negation : std::integral_constant < bool, !B::value > { }; - -// Reimplementation of is_constructible and is_default_constructible, due to them being broken for -// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). -// This causes compile errors in e.g., Clang 3.5 or GCC 4.9. -template -struct is_default_constructible : std::is_default_constructible {}; - -template -struct is_default_constructible> - : conjunction, is_default_constructible> {}; - -template -struct is_default_constructible> - : conjunction, is_default_constructible> {}; - -template -struct is_default_constructible> - : conjunction...> {}; - -template -struct is_default_constructible> - : conjunction...> {}; - -template -struct is_constructible : std::is_constructible {}; - -template -struct is_constructible> : is_default_constructible> {}; - -template -struct is_constructible> : is_default_constructible> {}; - -template -struct is_constructible> : is_default_constructible> {}; - -template -struct is_constructible> : is_default_constructible> {}; - -template -struct is_iterator_traits : std::false_type {}; - -template -struct is_iterator_traits> -{ - private: - using traits = iterator_traits; - - public: - static constexpr auto value = - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value; -}; - -template -struct is_range -{ - private: - using t_ref = typename std::add_lvalue_reference::type; - - using iterator = detected_t; - using sentinel = detected_t; - - // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator - // and https://en.cppreference.com/w/cpp/iterator/sentinel_for - // but reimplementing these would be too much work, as a lot of other concepts are used underneath - static constexpr auto is_iterator_begin = - is_iterator_traits>::value; - - public: - static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; -}; - -template -using iterator_t = enable_if_t::value, result_of_begin())>>; - -template -using range_value_t = value_type_t>>; - -// The following implementation of is_complete_type is taken from -// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ -// and is written by Xiang Fan who agreed to use it in this library. - -template -struct is_complete_type : std::false_type {}; - -template -struct is_complete_type : std::true_type {}; - -template -struct is_compatible_object_type_impl : std::false_type {}; - -template -struct is_compatible_object_type_impl < - BasicJsonType, CompatibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> -{ - using object_t = typename BasicJsonType::object_t; - - // macOS's is_constructible does not play well with nonesuch... - static constexpr bool value = - is_constructible::value && - is_constructible::value; -}; - -template -struct is_compatible_object_type - : is_compatible_object_type_impl {}; - -template -struct is_constructible_object_type_impl : std::false_type {}; - -template -struct is_constructible_object_type_impl < - BasicJsonType, ConstructibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> -{ - using object_t = typename BasicJsonType::object_t; - - static constexpr bool value = - (is_default_constructible::value && - (std::is_move_assignable::value || - std::is_copy_assignable::value) && - (is_constructible::value && - std::is_same < - typename object_t::mapped_type, - typename ConstructibleObjectType::mapped_type >::value)) || - (has_from_json::value || - has_non_default_from_json < - BasicJsonType, - typename ConstructibleObjectType::mapped_type >::value); -}; - -template -struct is_constructible_object_type - : is_constructible_object_type_impl {}; - -template -struct is_compatible_string_type -{ - static constexpr auto value = - is_constructible::value; -}; - -template -struct is_constructible_string_type -{ - // launder type through decltype() to fix compilation failure on ICPC -#ifdef __INTEL_COMPILER - using laundered_type = decltype(std::declval()); -#else - using laundered_type = ConstructibleStringType; -#endif - - static constexpr auto value = - conjunction < - is_constructible, - is_detected_exact>::value; -}; - -template -struct is_compatible_array_type_impl : std::false_type {}; - -template -struct is_compatible_array_type_impl < - BasicJsonType, CompatibleArrayType, - enable_if_t < - is_detected::value&& - is_iterator_traits>>::value&& -// special case for types like std::filesystem::path whose iterator's value_type are themselves -// c.f. https://github.com/nlohmann/json/pull/3073 - !std::is_same>::value >> -{ - static constexpr bool value = - is_constructible>::value; -}; - -template -struct is_compatible_array_type - : is_compatible_array_type_impl {}; - -template -struct is_constructible_array_type_impl : std::false_type {}; - -template -struct is_constructible_array_type_impl < - BasicJsonType, ConstructibleArrayType, - enable_if_t::value >> - : std::true_type {}; - -template -struct is_constructible_array_type_impl < - BasicJsonType, ConstructibleArrayType, - enable_if_t < !std::is_same::value&& - !is_compatible_string_type::value&& - is_default_constructible::value&& -(std::is_move_assignable::value || - std::is_copy_assignable::value)&& -is_detected::value&& -is_iterator_traits>>::value&& -is_detected::value&& -// special case for types like std::filesystem::path whose iterator's value_type are themselves -// c.f. https://github.com/nlohmann/json/pull/3073 -!std::is_same>::value&& -is_complete_type < -detected_t>::value >> -{ - using value_type = range_value_t; - - static constexpr bool value = - std::is_same::value || - has_from_json::value || - has_non_default_from_json < - BasicJsonType, - value_type >::value; -}; - -template -struct is_constructible_array_type - : is_constructible_array_type_impl {}; - -template -struct is_compatible_integer_type_impl : std::false_type {}; - -template -struct is_compatible_integer_type_impl < - RealIntegerType, CompatibleNumberIntegerType, - enable_if_t < std::is_integral::value&& - std::is_integral::value&& - !std::is_same::value >> -{ - // is there an assert somewhere on overflows? - using RealLimits = std::numeric_limits; - using CompatibleLimits = std::numeric_limits; - - static constexpr auto value = - is_constructible::value && - CompatibleLimits::is_integer && - RealLimits::is_signed == CompatibleLimits::is_signed; -}; - -template -struct is_compatible_integer_type - : is_compatible_integer_type_impl {}; - -template -struct is_compatible_type_impl: std::false_type {}; - -template -struct is_compatible_type_impl < - BasicJsonType, CompatibleType, - enable_if_t::value >> -{ - static constexpr bool value = - has_to_json::value; -}; - -template -struct is_compatible_type - : is_compatible_type_impl {}; - -template -struct is_constructible_tuple : std::false_type {}; - -template -struct is_constructible_tuple> : conjunction...> {}; - -template -struct is_json_iterator_of : std::false_type {}; - -template -struct is_json_iterator_of : std::true_type {}; - -template -struct is_json_iterator_of : std::true_type -{}; - -// checks if a given type T is a template specialization of Primary -template